Rev 2233 | Rev 2237 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 2233 | Rev 2236 | ||
|---|---|---|---|
| Line 15... | Line 15... | ||
| 15 | //#include <drivers/mcu/gpio.h> |
15 | //#include <drivers/mcu/gpio.h> |
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | int8_t parseProtocol(const uint16_t *buf, uint8_t len, uint8_t index, Ir_Protocol_Data_t *proto) { |
19 | int8_t parseProtocol(const uint16_t *buf, uint8_t len, uint8_t index, Ir_Protocol_Data_t *proto) { |
| - | 20 | uint8_t res; |
|
| 20 | proto->protocol=IR_PROTO_UNKNOWN; |
21 | proto->protocol=IR_PROTO_UNKNOWN; |
| 21 | proto->data=0; |
22 | proto->data=0; |
| 22 | proto->timeout=1; |
23 | proto->timeout=1; |
| 23 | /* Try all protocols in order. */ |
24 | /* Try all protocols in order. */ |
| 24 | #if (IR_PROTOCOLS_USE_SIRC) |
25 | #if (IR_PROTOCOLS_USE_SIRC) |
| Line 56... | Line 57... | ||
| 56 | #endif |
57 | #endif |
| 57 | #if (IR_PROTOCOLS_USE_VIKING) |
58 | #if (IR_PROTOCOLS_USE_VIKING) |
| 58 | if (parseViking(buf, len, index, proto)==IR_OK) return IR_OK; |
59 | if (parseViking(buf, len, index, proto)==IR_OK) return IR_OK; |
| 59 | #endif |
60 | #endif |
| 60 | #if (IR_PROTOCOLS_USE_VIKING_STEAK) |
61 | #if (IR_PROTOCOLS_USE_VIKING_STEAK) |
| 61 |
|
62 | res = parseVikingSteak(buf, len, index, proto); |
| - | 63 | if (res!=IR_NOT_CORRECT_DATA) return res; |
|
| 62 | #endif |
64 | #endif |
| 63 | /* No protocol matched. */ |
65 | /* No protocol matched. */ |
| 64 | proto->protocol = IR_PROTO_UNKNOWN; |
66 | proto->protocol = IR_PROTO_UNKNOWN; |
| 65 | return IR_NOT_CORRECT_DATA; |
67 | return IR_NOT_CORRECT_DATA; |
| 66 | } |
68 | } |
| Line 1347... | Line 1349... | ||
| 1347 | 1349 | ||
| 1348 | int8_t parseVikingSteak(const uint16_t *buf, uint8_t len, uint8_t index, Ir_Protocol_Data_t *proto) |
1350 | int8_t parseVikingSteak(const uint16_t *buf, uint8_t len, uint8_t index, Ir_Protocol_Data_t *proto) |
| 1349 | { |
1351 | { |
| 1350 | #if IR_RX_CONTINUOUS_MODE==1 |
1352 | #if IR_RX_CONTINUOUS_MODE==1 |
| 1351 | /* check if we have correct amount of data */ |
1353 | /* check if we have correct amount of data */ |
| 1352 | if (len < |
1354 | if (len < 74) { |
| 1353 | return IR_NOT_CORRECT_DATA; |
1355 | return IR_NOT_CORRECT_DATA; |
| 1354 | } |
1356 | } |
| 1355 | uint8_t i, i2; |
1357 | uint8_t i, i2; |
| 1356 | uint64_t rawbitsTemp = 0;//0xffffffffffffffff; |
1358 | uint64_t rawbitsTemp = 0;//0xffffffffffffffff; |
| 1357 | 1359 | ||
| 1358 | /* Check start bit condition */ |
1360 | /* Check start bit condition */ |
| 1359 | i2=index- |
1361 | i2=index-74; |
| 1360 | if (i2>index) |
1362 | if (i2>index) |
| 1361 | i2+=MAX_NR_TIMES; |
1363 | i2+=MAX_NR_TIMES; |
| 1362 | 1364 | ||
| 1363 | if ((buf[i2] < IR_VIKING_STEAK_LOW_ZERO - IR_VIKING_STEAK_LOW_ZERO/IR_VIKING_TOL_DIV) || (buf[i2] > IR_VIKING_STEAK_LOW_ZERO + IR_VIKING_STEAK_LOW_ZERO/IR_VIKING_TOL_DIV)) |
- | |
| 1364 | { |
- | |
| 1365 |
|
1365 | proto->data=i2; /*Store startindex for debug output */ |
| 1366 |
|
1366 | |
| 1367 | i2++; |
- | |
| 1368 | if (i2>index) |
- | |
| 1369 | i2+=MAX_NR_TIMES; |
- | |
| 1370 | if ((buf[i2] < IR_VIKING_STEAK_HIGH - IR_VIKING_STEAK_HIGH/IR_VIKING_TOL_DIV) || (buf[i2] > IR_VIKING_STEAK_HIGH + IR_VIKING_STEAK_HIGH/IR_VIKING_TOL_DIV)) |
- | |
| 1371 | { |
- | |
| 1372 | return IR_NOT_CORRECT_DATA; |
- | |
| 1373 | } |
- | |
| 1374 | i2++; |
- | |
| 1375 | if (i2>index) |
- | |
| 1376 | i2+=MAX_NR_TIMES; |
- | |
| 1377 | if ((buf[i2] < IR_VIKING_STEAK_LOW_START - IR_VIKING_STEAK_LOW_START/ |
1367 | if ((buf[i2] < IR_VIKING_STEAK_LOW_START - IR_VIKING_STEAK_LOW_START/IR_VIKING_STEAK_TOL_DIV) || (buf[i2] > IR_VIKING_STEAK_LOW_START + IR_VIKING_STEAK_LOW_START/IR_VIKING_STEAK_TOL_DIV)) |
| 1378 | { |
1368 | { |
| 1379 | return IR_NOT_CORRECT_DATA; |
1369 | return IR_NOT_CORRECT_DATA; |
| 1380 | } |
1370 | } |
| 1381 | 1371 | ||
| 1382 | for (i = 73; i > 0; i--) |
1372 | for (i = 73; i > 0; i--) |
| Line 1389... | Line 1379... | ||
| 1389 | //if ((i == 78) && (rawbitsTemp != 0b00001)) |
1379 | //if ((i == 78) && (rawbitsTemp != 0b00001)) |
| 1390 | // return IR_NOT_CORRECT_DATA; |
1380 | // return IR_NOT_CORRECT_DATA; |
| 1391 | 1381 | ||
| 1392 | if ((i&1) != 0) |
1382 | if ((i&1) != 0) |
| 1393 | { /* if odd, no data */ |
1383 | { /* if odd, no data */ |
| 1394 | if ((buf[i2] < IR_VIKING_STEAK_HIGH - IR_VIKING_STEAK_HIGH/ |
1384 | if ((buf[i2] < IR_VIKING_STEAK_HIGH - IR_VIKING_STEAK_HIGH/IR_VIKING_STEAK_TOL_DIV) || (buf[i2] > IR_VIKING_STEAK_HIGH + IR_VIKING_STEAK_HIGH/IR_VIKING_STEAK_TOL_DIV)) |
| 1395 | { |
1385 | { |
| 1396 | return IR_NOT_CORRECT_DATA; |
1386 | return IR_NOT_CORRECT_DATA; |
| 1397 | } |
1387 | } |
| 1398 | } |
1388 | } |
| 1399 | else |
1389 | else |
| 1400 | { /* if even, data */ |
1390 | { /* if even, data */ |
| 1401 | /* check length of transmit pulse */ |
1391 | /* check length of transmit pulse */ |
| 1402 | if ((buf[i2] > IR_VIKING_STEAK_LOW_ONE - IR_VIKING_STEAK_LOW_ONE/ |
1392 | if ((buf[i2] > IR_VIKING_STEAK_LOW_ONE - IR_VIKING_STEAK_LOW_ONE/IR_VIKING_STEAK_TOL_DIV) && (buf[i2] < IR_VIKING_STEAK_LOW_ONE + IR_VIKING_STEAK_LOW_ONE/IR_VIKING_STEAK_TOL_DIV)) |
| 1403 | { |
1393 | { |
| 1404 | /* write a one */ |
1394 | /* write a one */ |
| 1405 | rawbitsTemp = rawbitsTemp<<1; |
1395 | rawbitsTemp = rawbitsTemp<<1; |
| 1406 | rawbitsTemp |= 1; |
1396 | rawbitsTemp |= 1; |
| 1407 | } |
1397 | } |
| 1408 | else if ((buf[i2] > IR_VIKING_STEAK_LOW_ZERO - IR_VIKING_STEAK_LOW_ZERO/ |
1398 | else if ((buf[i2] > IR_VIKING_STEAK_LOW_ZERO - IR_VIKING_STEAK_LOW_ZERO/IR_VIKING_STEAK_TOL_DIV) && (buf[i2] < IR_VIKING_STEAK_LOW_ZERO + IR_VIKING_STEAK_LOW_ZERO/IR_VIKING_STEAK_TOL_DIV)) |
| 1409 | { |
1399 | { |
| 1410 | /* do nothing, a zero is already in rawbits */ |
1400 | /* do nothing, a zero is already in rawbits */ |
| 1411 | rawbitsTemp = rawbitsTemp<<1; |
1401 | rawbitsTemp = rawbitsTemp<<1; |
| 1412 | } |
1402 | } |
| 1413 | else |
1403 | else |