]> cloudbase.mooo.com Git - irmp.git/blobdiff - irmp.c
Version 2.1.2:
[irmp.git] / irmp.c
diff --git a/irmp.c b/irmp.c
index ea36ed0e907a51b63c383180be810ef117e3ee5a..e31da179ad39eec619e59f6ade2981948a23bc1c 100644 (file)
--- a/irmp.c
+++ b/irmp.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.c,v 1.115 2012/02/21 08:41:46 fm Exp $\r
+ * $Id: irmp.c,v 1.116 2012/02/24 11:40:41 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -375,7 +375,6 @@ typedef unsigned int16  uint16_t;
     IRMP_SUPPORT_RC6_PROTOCOL == 1 ||                   \\r
     IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 ||    \\r
     IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 ||     \\r
-    IRMP_SUPPORT_GRUNDIG2_PROTOCOL == 1 ||              \\r
     IRMP_SUPPORT_IR60_PROTOCOL\r
 #define IRMP_SUPPORT_MANCHESTER                 1\r
 #else\r
@@ -586,10 +585,10 @@ typedef unsigned int16  uint16_t;
 #define BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MAX  ((uint8_t)(F_INTERRUPTS * BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 \r
 #define IR60_TIMEOUT_LEN                        ((uint8_t)(F_INTERRUPTS * IR60_TIMEOUT_TIME * 0.5))\r
-#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MIN    ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
-#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MAX    ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
-#define GRUNDIG_NOKIA_IR60_BIT_LEN_MIN          ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
-#define GRUNDIG_NOKIA_IR60_BIT_LEN_MAX          ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
+#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MIN    ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MAX    ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
+#define GRUNDIG_NOKIA_IR60_BIT_LEN_MIN          ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define GRUNDIG_NOKIA_IR60_BIT_LEN_MAX          ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 #define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MIN    ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_PRE_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) + 1)\r
 #define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MAX    ((uint8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_PRE_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
 \r
@@ -602,15 +601,6 @@ typedef unsigned int16  uint16_t;
 #define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN             ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX             ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 \r
-#define GRUNDIG2_START_BIT_PULSE_LEN_MIN        ((uint8_t)(F_INTERRUPTS * GRUNDIG2_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define GRUNDIG2_START_BIT_PULSE_LEN_MAX        ((uint8_t)(F_INTERRUPTS * GRUNDIG2_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define GRUNDIG2_START_BIT_PAUSE_LEN_MIN        ((uint8_t)(F_INTERRUPTS * GRUNDIG2_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define GRUNDIG2_START_BIT_PAUSE_LEN_MAX        ((uint8_t)(F_INTERRUPTS * GRUNDIG2_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define GRUNDIG2_BIT_PULSE_LEN_MIN              ((uint8_t)(F_INTERRUPTS * GRUNDIG2_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define GRUNDIG2_BIT_PULSE_LEN_MAX              ((uint8_t)(F_INTERRUPTS * GRUNDIG2_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define GRUNDIG2_BIT_PAUSE_LEN_MIN              ((uint8_t)(F_INTERRUPTS * GRUNDIG2_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define GRUNDIG2_BIT_PAUSE_LEN_MAX              ((uint8_t)(F_INTERRUPTS * GRUNDIG2_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-\r
 #define FDC_START_BIT_PULSE_LEN_MIN             ((uint8_t)(F_INTERRUPTS * FDC_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)   // 5%: avoid conflict with NETBOX\r
 #define FDC_START_BIT_PULSE_LEN_MAX             ((uint8_t)(F_INTERRUPTS * FDC_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5))\r
 #define FDC_START_BIT_PAUSE_LEN_MIN             ((uint8_t)(F_INTERRUPTS * FDC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)\r
@@ -1364,31 +1354,6 @@ static const PROGMEM IRMP_PARAMETER ruwido_param =
 \r
 #endif\r
 \r
-#if IRMP_SUPPORT_GRUNDIG2_PROTOCOL == 1\r
-\r
-static const PROGMEM IRMP_PARAMETER grundig2_param =\r
-{\r
-    IRMP_GRUNDIG2_PROTOCOL,                                             // protocol:        ir protocol\r
-    GRUNDIG2_BIT_PULSE_LEN_MIN,                                         // pulse_1_len_min: here: minimum length of short pulse\r
-    GRUNDIG2_BIT_PULSE_LEN_MAX,                                         // pulse_1_len_max: here: maximum length of short pulse\r
-    GRUNDIG2_BIT_PAUSE_LEN_MIN,                                         // pause_1_len_min: here: minimum length of short pause\r
-    GRUNDIG2_BIT_PAUSE_LEN_MAX,                                         // pause_1_len_max: here: maximum length of short pause\r
-    0,                                                                  // pulse_0_len_min: here: not used\r
-    0,                                                                  // pulse_0_len_max: here: not used\r
-    0,                                                                  // pause_0_len_min: here: not used\r
-    0,                                                                  // pause_0_len_max: here: not used\r
-    GRUNDIG2_ADDRESS_OFFSET,                                            // address_offset:  address offset\r
-    GRUNDIG2_ADDRESS_OFFSET + GRUNDIG2_ADDRESS_LEN,                     // address_end:     end of address\r
-    GRUNDIG2_COMMAND_OFFSET,                                            // command_offset:  command offset\r
-    GRUNDIG2_COMMAND_OFFSET + GRUNDIG2_COMMAND_LEN,                     // command_end:     end of command\r
-    GRUNDIG2_COMPLETE_DATA_LEN,                                         // complete_len:    complete length of frame\r
-    GRUNDIG2_STOP_BIT,                                                  // stop_bit:        flag: frame has stop bit\r
-    GRUNDIG2_LSB,                                                       // lsb_first:       flag: LSB first\r
-    GRUNDIG2_FLAGS                                                      // flags:           some flags\r
-};\r
-\r
-#endif\r
-\r
 #if IRMP_SUPPORT_FDC_PROTOCOL == 1\r
 \r
 static const PROGMEM IRMP_PARAMETER fdc_param =\r
@@ -1655,15 +1620,6 @@ irmp_get_data (IRMP_DATA * irmp_data_p)
                 }\r
                 break;\r
 #endif\r
-#if IRMP_SUPPORT_GRUNDIG2_PROTOCOL == 1\r
-            case IRMP_GRUNDIG2_PROTOCOL:\r
-                if (irmp_command & 0x0001)\r
-                {\r
-                    irmp_command >>= 1;\r
-                    rtc = TRUE;\r
-                }\r
-                break;\r
-#endif\r
 #if IRMP_SUPPORT_KATHREIN_PROTOCOL == 1\r
             case IRMP_KATHREIN_PROTOCOL:\r
                 if (irmp_command != 0x0000)\r
@@ -1684,6 +1640,10 @@ irmp_get_data (IRMP_DATA * irmp_data_p)
                 {\r
                     rtc = TRUE;\r
                 }\r
+                else\r
+                {\r
+                    ANALYZE_PRINTF("Info IR60: got start instruction frame\n");\r
+                }\r
                 break;\r
 #endif\r
 #if IRMP_SUPPORT_RCCAR_PROTOCOL == 1\r
@@ -1842,21 +1802,23 @@ irmp_store_bit (uint8_t value)
     }\r
 \r
 #if IRMP_SUPPORT_NEC42_PROTOCOL == 1\r
-    else if (irmp_param.protocol == IRMP_NEC42_PROTOCOL && irmp_bit >= 13 && irmp_bit < 26)\r
+    if (irmp_param.protocol == IRMP_NEC42_PROTOCOL && irmp_bit >= 13 && irmp_bit < 26)\r
     {\r
         irmp_tmp_address2 |= (((uint16_t) (value)) << (irmp_bit - 13));                             // CV wants cast\r
     }\r
+    else\r
 #endif\r
 \r
 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1\r
-    else if (irmp_param.protocol == IRMP_SAMSUNG_PROTOCOL && irmp_bit >= SAMSUNG_ID_OFFSET && irmp_bit < SAMSUNG_ID_OFFSET + SAMSUNG_ID_LEN)\r
+    if (irmp_param.protocol == IRMP_SAMSUNG_PROTOCOL && irmp_bit >= SAMSUNG_ID_OFFSET && irmp_bit < SAMSUNG_ID_OFFSET + SAMSUNG_ID_LEN)\r
     {\r
         irmp_tmp_id |= (((uint16_t) (value)) << (irmp_bit - SAMSUNG_ID_OFFSET));                    // store with LSB first\r
     }\r
+    else\r
 #endif\r
 \r
 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1\r
-    else if (irmp_param.protocol == IRMP_KASEIKYO_PROTOCOL)\r
+    if (irmp_param.protocol == IRMP_KASEIKYO_PROTOCOL)\r
     {\r
         if (irmp_bit >= 20 && irmp_bit < 24)\r
         {\r
@@ -2381,22 +2343,6 @@ irmp_ISR (void)
                     else\r
 #endif // IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1\r
 \r
-#if IRMP_SUPPORT_GRUNDIG2_PROTOCOL == 1\r
-                    if ((irmp_pulse_time >= GRUNDIG2_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= GRUNDIG2_START_BIT_PULSE_LEN_MAX) &&\r
-                        (irmp_pause_time >= GRUNDIG2_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= GRUNDIG2_START_BIT_PAUSE_LEN_MAX))\r
-                    {                                                           // it's GRUNDIG2\r
-                        ANALYZE_PRINTF ("protocol = GRUNDIG2, start bit timings: pulse: %3d - %3d or %3d - %3d, pause: %3d - %3d or %3d - %3d\n",\r
-                                        GRUNDIG2_START_BIT_PULSE_LEN_MIN,   GRUNDIG2_START_BIT_PULSE_LEN_MAX,\r
-                                        2 * GRUNDIG2_START_BIT_PULSE_LEN_MIN, 2 * GRUNDIG2_START_BIT_PULSE_LEN_MAX,\r
-                                        GRUNDIG2_START_BIT_PAUSE_LEN_MIN,   GRUNDIG2_START_BIT_PAUSE_LEN_MAX,\r
-                                        2 * GRUNDIG2_START_BIT_PAUSE_LEN_MIN, 2 * GRUNDIG2_START_BIT_PAUSE_LEN_MAX);\r
-                        irmp_param_p = (IRMP_PARAMETER *) &grundig2_param;\r
-                        last_pause = irmp_pause_time;\r
-                        last_value  = 1;\r
-                    }\r
-                    else\r
-#endif // IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1\r
-\r
 #if IRMP_SUPPORT_FDC_PROTOCOL == 1\r
                     if (irmp_pulse_time >= FDC_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= FDC_START_BIT_PULSE_LEN_MAX &&\r
                         irmp_pause_time >= FDC_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= FDC_START_BIT_PAUSE_LEN_MAX)\r
@@ -2676,7 +2622,7 @@ irmp_ISR (void)
 #if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1\r
                         if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL && !irmp_param.stop_bit)\r
                         {\r
-                            if (irmp_pause_time > IR60_TIMEOUT_LEN && irmp_bit == 6)\r
+                            if (irmp_pause_time > IR60_TIMEOUT_LEN && (irmp_bit == 5 || irmp_bit == 6))\r
                             {\r
                                 ANALYZE_PRINTF ("Switching to IR60 protocol\n");\r
                                 got_light = TRUE;                                       // this is a lie, but generates a stop bit ;-)\r
@@ -3416,7 +3362,7 @@ irmp_ISR (void)
 \r
                             if (xor != xor_check[5])\r
                             {\r
-                                ANALYZE_PRINTF ("error 4: wrong XOR check for data bits: 0x%02x 0x%02x\n", xor, xor_check[5]);\r
+                                ANALYZE_PRINTF ("error 5: wrong XOR check for data bits: 0x%02x 0x%02x\n", xor, xor_check[5]);\r
                                 irmp_ir_detected = FALSE;\r
                             }\r
 \r
@@ -3634,14 +3580,6 @@ print_timings (void)
             2 * SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN, 2 * SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX,\r
             2 * SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN, 2 * SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX);\r
 \r
-    printf ("GRUNDIG2       1  %3d - %3d  %3d - %3d  %3d - %3d  %3d - %3d  %3d - %3d  %3d - %3d\n",\r
-            GRUNDIG2_START_BIT_PULSE_LEN_MIN, GRUNDIG2_START_BIT_PULSE_LEN_MAX,\r
-            GRUNDIG2_START_BIT_PAUSE_LEN_MIN, GRUNDIG2_START_BIT_PAUSE_LEN_MAX,\r
-            GRUNDIG2_BIT_PULSE_LEN_MIN, GRUNDIG2_BIT_PULSE_LEN_MAX,\r
-            GRUNDIG2_BIT_PAUSE_LEN_MIN, GRUNDIG2_BIT_PAUSE_LEN_MAX,\r
-            2 * GRUNDIG2_BIT_PULSE_LEN_MIN, 2 * GRUNDIG2_BIT_PULSE_LEN_MAX,\r
-            2 * GRUNDIG2_BIT_PAUSE_LEN_MIN, 2 * GRUNDIG2_BIT_PAUSE_LEN_MAX);\r
-\r
     printf ("FDC            1  %3d - %3d  %3d - %3d  %3d - %3d  %3d - %3d  %3d - %3d  %3d - %3d\n",\r
             FDC_START_BIT_PULSE_LEN_MIN, FDC_START_BIT_PULSE_LEN_MAX, FDC_START_BIT_PAUSE_LEN_MIN, FDC_START_BIT_PAUSE_LEN_MAX,\r
             FDC_PULSE_LEN_MIN, FDC_PULSE_LEN_MAX, FDC_0_PAUSE_LEN_MIN, FDC_0_PAUSE_LEN_MAX,\r