Subversion Repositories HomeAutomation

Rev

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
    if (parseVikingSteak(buf, len, index, proto)==IR_OK) return IR_OK;
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 < 76) {
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-76;
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
        return IR_NOT_CORRECT_DATA;
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/IR_VIKING_TOL_DIV) || (buf[i2] > IR_VIKING_STEAK_LOW_START + IR_VIKING_STEAK_LOW_START/IR_VIKING_TOL_DIV))
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/IR_VIKING_TOL_DIV) || (buf[i2] > IR_VIKING_STEAK_HIGH + IR_VIKING_STEAK_HIGH/IR_VIKING_TOL_DIV))
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/IR_VIKING_TOL_DIV) && (buf[i2] < IR_VIKING_STEAK_LOW_ONE + IR_VIKING_STEAK_LOW_ONE/IR_VIKING_TOL_DIV))
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/IR_VIKING_TOL_DIV) && (buf[i2] < IR_VIKING_STEAK_LOW_ZERO + IR_VIKING_STEAK_LOW_ZERO/IR_VIKING_TOL_DIV))
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