Subversion Repositories HomeAutomation

Rev

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 < 94) {
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
    uint32_t rawbitsTemp = 0;
1252
    uint64_t rawbitsTemp = 0;
1253
    uint8_t bitCounter = 0;
1253
    uint8_t bitCounter = 0;
-
 
1254
   
1254
    for (i = 0; i < 94; i++) {
1255
    for (i = 90; i > 0; i--)
1255
#if IR_RX_CONTINUOUS_MODE==0
-
 
1256
        i2 = i;
-
 
1257
#else
1256
    {
1258
        i2=index-(94-i);
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 |= (1UL)<<(bitCounter++);
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