Rev 2200 | Rev 2203 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 2200 | Rev 2202 | ||
|---|---|---|---|
| Line 1243... | Line 1243... | ||
| 1243 | */ |
1243 | */ |
| 1244 | 1244 | ||
| 1245 | int8_t parseViking(const uint16_t *buf, uint8_t len, uint8_t index, Ir_Protocol_Data_t *proto) |
1245 | int8_t parseViking(const uint16_t *buf, uint8_t len, uint8_t index, Ir_Protocol_Data_t *proto) |
| 1246 | { |
1246 | { |
| 1247 | /* check if we have correct amount of data */ |
1247 | /* check if we have correct amount of data */ |
| 1248 | if (len < |
1248 | if (len < 90) { |
| 1249 | return IR_NOT_CORRECT_DATA; |
1249 | return IR_NOT_CORRECT_DATA; |
| 1250 | } |
1250 | } |
| 1251 | uint8_t i, i2; |
1251 | uint8_t i, i2; |
| 1252 |
|
1252 | uint64_t rawbitsTemp = 0; |
| 1253 | uint8_t bitCounter = 0; |
1253 | uint8_t bitCounter = 0; |
| - | 1254 | ||
| 1254 | for (i = |
1255 | for (i = 90; i > 0; i--) |
| 1255 | #if IR_RX_CONTINUOUS_MODE==0 |
- | |
| 1256 | i2 = i; |
- | |
| 1257 |
|
1256 | { |
| 1258 | i2=index |
1257 | i2=index-i; |
| 1259 | if (i2>index) |
1258 | if (i2>index) |
| 1260 | i2+=MAX_NR_TIMES; |
1259 | i2+=MAX_NR_TIMES; |
| - | 1260 | ||
| - | 1261 | /* Check if correct amount of data have been received */ |
|
| - | 1262 | if ((i == 78) && (rawbitsTemp != 0b000001)) |
|
| - | 1263 | return IR_NOT_CORRECT_DATA; |
|
| 1261 | #endif |
1264 | |
| 1262 | if ((i&1) == 0) |
1265 | if ((i&1) == 0) |
| 1263 | { /* if even, no data */ |
1266 | { /* if even, no data */ |
| 1264 | if ((buf[i2] < IR_VIKING_LOW - IR_VIKING_LOW/IR_VIKING_TOL_DIV) || (buf[i2] > IR_VIKING_LOW + IR_VIKING_LOW/IR_VIKING_TOL_DIV)) |
1267 | if ((buf[i2] < IR_VIKING_LOW - IR_VIKING_LOW/IR_VIKING_TOL_DIV) || (buf[i2] > IR_VIKING_LOW + IR_VIKING_LOW/IR_VIKING_TOL_DIV)) |
| 1265 | { |
1268 | { |
| 1266 | return IR_NOT_CORRECT_DATA; |
1269 | return IR_NOT_CORRECT_DATA; |
| Line 1270... | Line 1273... | ||
| 1270 | { /* if odd, data */ |
1273 | { /* if odd, data */ |
| 1271 | /* check length of transmit pulse */ |
1274 | /* check length of transmit pulse */ |
| 1272 | if ((buf[i2] > IR_VIKING_HIGH_ONE - IR_VIKING_HIGH_ONE/IR_VIKING_TOL_DIV) && (buf[i2] < IR_VIKING_HIGH_ONE + IR_VIKING_HIGH_ONE/IR_VIKING_TOL_DIV)) |
1275 | if ((buf[i2] > IR_VIKING_HIGH_ONE - IR_VIKING_HIGH_ONE/IR_VIKING_TOL_DIV) && (buf[i2] < IR_VIKING_HIGH_ONE + IR_VIKING_HIGH_ONE/IR_VIKING_TOL_DIV)) |
| 1273 | { |
1276 | { |
| 1274 | /* write a one */ |
1277 | /* write a one */ |
| 1275 | rawbitsTemp |
1278 | //rawbitsTemp |= (1ULL)<<(bitCounter++); |
| - | 1279 | rawbitsTemp = rawbitsTemp<<1; |
|
| - | 1280 | rawbitsTemp |= 1; |
|
| 1276 | } |
1281 | } |
| 1277 | else if ((buf[i2] > IR_VIKING_HIGH_ZERO - IR_VIKING_HIGH_ZERO/IR_VIKING_TOL_DIV) && (buf[i2] < IR_VIKING_HIGH_ZERO + IR_VIKING_HIGH_ZERO/IR_VIKING_TOL_DIV)) |
1282 | else if ((buf[i2] > IR_VIKING_HIGH_ZERO - IR_VIKING_HIGH_ZERO/IR_VIKING_TOL_DIV) && (buf[i2] < IR_VIKING_HIGH_ZERO + IR_VIKING_HIGH_ZERO/IR_VIKING_TOL_DIV)) |
| 1278 | { |
1283 | { |
| 1279 | /* do nothing, a zero is already in rawbits */ |
1284 | /* do nothing, a zero is already in rawbits */ |
| 1280 | bitCounter |
1285 | //bitCounter++; |
| - | 1286 | rawbitsTemp = rawbitsTemp<<1; |
|
| 1281 | } |
1287 | } |
| 1282 | else |
1288 | else |
| 1283 | { |
1289 | { |
| 1284 | return IR_NOT_CORRECT_DATA; |
1290 | return IR_NOT_CORRECT_DATA; |
| 1285 | } |
1291 | } |
| 1286 | } |
1292 | } |
| 1287 | } |
1293 | } |
| - | 1294 | ||
| - | 1295 | //rawbitsTemp = rawbitsTemp>>5; |
|
| 1288 | 1296 | ||
| 1289 | proto->protocol=IR_PROTO_VIKING; |
1297 | proto->protocol=IR_PROTO_VIKING; |
| 1290 | proto->timeout=0; |
1298 | proto->timeout=0; |
| 1291 | proto->data=rawbitsTemp; |
1299 | proto->data=rawbitsTemp; |
| 1292 | 1300 | ||