Subversion Repositories HomeAutomation

Rev

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 != 0b000001))
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
    //rawbitsTemp = rawbitsTemp>>5;
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