Rev 2203 | Rev 2223 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 2203 | Rev 2204 | ||
|---|---|---|---|
| Line 1248... | Line 1248... | ||
| 1248 | /* check if we have correct amount of data */ |
1248 | /* check if we have correct amount of data */ |
| 1249 | if (len < 90) { |
1249 | if (len < 90) { |
| 1250 | return IR_NOT_CORRECT_DATA; |
1250 | return IR_NOT_CORRECT_DATA; |
| 1251 | } |
1251 | } |
| 1252 | uint8_t i, i2; |
1252 | uint8_t i, i2; |
| 1253 | uint64_t rawbitsTemp = 0; |
1253 | uint64_t rawbitsTemp = 0;//0xffffffffffffffff; |
| 1254 | uint8_t bitCounter = 0; |
- | |
| 1255 | 1254 | ||
| 1256 | for (i = 90; i > 0; i--) |
1255 | for (i = 90; i > 0; i--) |
| 1257 | { |
1256 | { |
| 1258 | i2=index-i; |
1257 | i2=index-i; |
| 1259 | if (i2>index) |
1258 | if (i2>index) |
| 1260 | i2+=MAX_NR_TIMES; |
1259 | i2+=MAX_NR_TIMES; |
| 1261 | 1260 | ||
| 1262 | /* Check if correct amount of data have been received */ |
1261 | /* Check if correct amount of data have been received */ |
| 1263 | if ((i == 78) && (rawbitsTemp != |
1262 | if ((i == 78) && (rawbitsTemp != 0b00001)) |
| 1264 | return IR_NOT_CORRECT_DATA; |
1263 | return IR_NOT_CORRECT_DATA; |
| 1265 | 1264 | ||
| 1266 | if ((i&1) == 0) |
1265 | if ((i&1) == 0) |
| 1267 | { /* if even, no data */ |
1266 | { /* if even, no data */ |
| 1268 | 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)) |
| Line 1274... | Line 1273... | ||
| 1274 | { /* if odd, data */ |
1273 | { /* if odd, data */ |
| 1275 | /* check length of transmit pulse */ |
1274 | /* check length of transmit pulse */ |
| 1276 | 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)) |
| 1277 | { |
1276 | { |
| 1278 | /* write a one */ |
1277 | /* write a one */ |
| 1279 | //rawbitsTemp |= (1ULL)<<(bitCounter++); |
- | |
| 1280 | rawbitsTemp = rawbitsTemp<<1; |
1278 | rawbitsTemp = rawbitsTemp<<1; |
| 1281 | rawbitsTemp |= 1; |
1279 | rawbitsTemp |= 1; |
| 1282 | } |
1280 | } |
| 1283 | 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)) |
1281 | 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)) |
| 1284 | { |
1282 | { |
| 1285 | /* do nothing, a zero is already in rawbits */ |
1283 | /* do nothing, a zero is already in rawbits */ |
| 1286 | //bitCounter++; |
- | |
| 1287 | rawbitsTemp = rawbitsTemp<<1; |
1284 | rawbitsTemp = rawbitsTemp<<1; |
| 1288 | } |
1285 | } |
| 1289 | else |
1286 | else |
| 1290 | { |
1287 | { |
| 1291 | return IR_NOT_CORRECT_DATA; |
1288 | return IR_NOT_CORRECT_DATA; |
| 1292 | } |
1289 | } |
| 1293 | } |
1290 | } |
| 1294 | } |
1291 | } |
| 1295 | 1292 | ||
| 1296 |
|
1293 | rawbitsTemp = ~rawbitsTemp; |
| - | 1294 | rawbitsTemp = rawbitsTemp&0xFFFFFFFFFF; |
|
| 1297 | 1295 | ||
| 1298 | proto->protocol=IR_PROTO_VIKING; |
1296 | proto->protocol=IR_PROTO_VIKING; |
| 1299 | proto->timeout=0; |
1297 | proto->timeout=0; |
| 1300 | proto->data=rawbitsTemp; |
1298 | proto->data=rawbitsTemp; |
| 1301 | 1299 | ||