]> cloudbase.mooo.com Git - irmp.git/commitdiff
version 2.0.0-pre3: changed handling of double width pulses/pauses in manchester...
authorukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Wed, 20 Apr 2011 09:15:30 +0000 (09:15 +0000)
committerukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Wed, 20 Apr 2011 09:15:30 +0000 (09:15 +0000)
git-svn-id: svn://mikrocontroller.net/irmp@70 aeb2e35e-bfc4-4214-b83c-9e8de998ed28

README.txt
irmp.c
irmpconfig.h
irsnd.c
irsndconfig.h

index fb3a571d3b2af8d7460632bbffa52ad2cde7df51..378fcb4e1d6f85f9ca2f7cdc2620b00465657306 100644 (file)
@@ -1,7 +1,7 @@
 IRMP - Infrared Multi Protocol Decoder\r
 --------------------------------------\r
 \r
-Version IRMP:  2.0.0-pre2 11.04.2010\r
+Version IRMP:  2.0.0-pre3 20.04.2010\r
 Version IRSND: 1.9.2      11.04.2010\r
 \r
 Dokumentation:\r
diff --git a/irmp.c b/irmp.c
index 46e56c539c6149f18bd389a09fbc514e3cf27a56..1016dbc8469d08a6287b6bf3b5a00959b9a8ad20 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.100 2011/04/11 12:54:24 fm Exp $\r
+ * $Id: irmp.c,v 1.101 2011/04/20 09:09:48 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -487,12 +487,9 @@ typedef unsigned int16  uint16_t;
 \r
 #define RC5_START_BIT_LEN_MIN                   ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define RC5_START_BIT_LEN_MAX                   ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define RC5_START_BIT_LEN_MIN_2                 ((uint8_t)(F_INTERRUPTS * 2 * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define RC5_START_BIT_LEN_MAX_2                 ((uint8_t)(F_INTERRUPTS * 2 * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
+\r
 #define RC5_BIT_LEN_MIN                         ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define RC5_BIT_LEN_MAX                         ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define RC5_BIT_LEN_MIN_2                       ((uint8_t)(F_INTERRUPTS * 2 * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define RC5_BIT_LEN_MAX_2                       ((uint8_t)(F_INTERRUPTS * 2 * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 \r
 #define DENON_PULSE_LEN_MIN                     ((uint8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define DENON_PULSE_LEN_MAX                     ((uint8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
@@ -512,14 +509,9 @@ typedef unsigned int16  uint16_t;
 #define RC6_TOGGLE_BIT_LEN_MIN                  ((uint8_t)(F_INTERRUPTS * RC6_TOGGLE_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define RC6_TOGGLE_BIT_LEN_MAX                  ((uint8_t)(F_INTERRUPTS * RC6_TOGGLE_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 #define RC6_BIT_PULSE_LEN_MIN                   ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define RC6_BIT_PULSE_LEN_MAX                   ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_30 + 0.5) + 1)       // pulses: 300 - 700\r
-#define RC6_BIT_PAUSE_LEN_MIN                   ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)       // pauses: 300 - 600\r
-#define RC6_BIT_PAUSE_LEN_MAX                   ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-\r
-#define RC6_BIT_PULSE_LEN_MIN_2                 ((uint8_t)(F_INTERRUPTS * 2 * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define RC6_BIT_PULSE_LEN_MAX_2                 ((uint8_t)(F_INTERRUPTS * 2 * RC6_BIT_TIME * MAX_TOLERANCE_60 + 0.5) + 1)   // pulses: 600 - 1400\r
-#define RC6_BIT_PAUSE_LEN_MIN_2                 ((uint8_t)(F_INTERRUPTS * 2 * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)   // pauses: 600 - 1200\r
-#define RC6_BIT_PAUSE_LEN_MAX_2                 ((uint8_t)(F_INTERRUPTS * 2 * RC6_BIT_TIME * MAX_TOLERANCE_60 + 0.5) + 1)\r
+#define RC6_BIT_PULSE_LEN_MAX                   ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_60 + 0.5) + 1)       // pulses: 300 - 800\r
+#define RC6_BIT_PAUSE_LEN_MIN                   ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define RC6_BIT_PAUSE_LEN_MAX                   ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)       // pauses: 300 - 600\r
 \r
 #define RECS80EXT_START_BIT_PULSE_LEN_MIN       ((uint8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME * MIN_TOLERANCE_00 + 0.5) - 1)\r
 #define RECS80EXT_START_BIT_PULSE_LEN_MAX       ((uint8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME * MAX_TOLERANCE_00 + 0.5) + 1)\r
@@ -577,8 +569,6 @@ typedef unsigned int16  uint16_t;
 #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_BIT_LEN_MIN_2        ((uint8_t)(F_INTERRUPTS * 2 * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
-#define GRUNDIG_NOKIA_IR60_BIT_LEN_MAX_2        ((uint8_t)(F_INTERRUPTS * 2 * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_50 + 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
@@ -586,18 +576,10 @@ typedef unsigned int16  uint16_t;
 #define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX       ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 #define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN       ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX       ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN_2     ((uint8_t)(F_INTERRUPTS * 2 * SIEMENS_OR_RUWIDO_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX_2     ((uint8_t)(F_INTERRUPTS * 2 * SIEMENS_OR_RUWIDO_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN_2     ((uint8_t)(F_INTERRUPTS * 2 * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX_2     ((uint8_t)(F_INTERRUPTS * 2 * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 #define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN             ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX             ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 #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
-#define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN_2           ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PULSE_TIME_2 * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX_2           ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PULSE_TIME_2 * MAX_TOLERANCE_60 + 0.5) + 1)\r
-#define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN_2           ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME_2 * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX_2           ((uint8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME_2 * MAX_TOLERANCE_60 + 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
@@ -1103,10 +1085,10 @@ static PROGMEM IRMP_PARAMETER rc5_param =
     RC5_BIT_LEN_MAX,                                                    // pulse_1_len_max: here: maximum length of short pulse\r
     RC5_BIT_LEN_MIN,                                                    // pause_1_len_min: here: minimum length of short pause\r
     RC5_BIT_LEN_MAX,                                                    // pause_1_len_max: here: maximum length of short pause\r
-    RC5_BIT_LEN_MIN_2,                                                  // pulse_0_len_min: here: minimum length of long pulse\r
-    RC5_BIT_LEN_MAX_2,                                                  // pulse_0_len_max: here: maximum length of long pulse\r
-    RC5_BIT_LEN_MIN_2,                                                  // pause_0_len_min: here: minimum length of long pause\r
-    RC5_BIT_LEN_MAX_2,                                                  // pause_0_len_max: here: maximum length of long 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
     RC5_ADDRESS_OFFSET,                                                 // address_offset:  address offset\r
     RC5_ADDRESS_OFFSET + RC5_ADDRESS_LEN,                               // address_end:     end of address\r
     RC5_COMMAND_OFFSET,                                                 // command_offset:  command offset\r
@@ -1154,10 +1136,10 @@ static PROGMEM IRMP_PARAMETER rc6_param =
     RC6_BIT_PULSE_LEN_MAX,                                              // pulse_1_len_max: here: maximum length of short pulse\r
     RC6_BIT_PAUSE_LEN_MIN,                                              // pause_1_len_min: here: minimum length of short pause\r
     RC6_BIT_PAUSE_LEN_MAX,                                              // pause_1_len_max: here: maximum length of short pause\r
-    RC6_BIT_PULSE_LEN_MIN_2,                                            // pulse_0_len_min: here: minimum length of long pulse\r
-    RC6_BIT_PULSE_LEN_MAX_2,                                            // pulse_0_len_max: here: maximum length of long pulse\r
-    RC6_BIT_PAUSE_LEN_MIN_2,                                            // pause_0_len_min: here: minimum length of long pause\r
-    RC6_BIT_PAUSE_LEN_MAX_2,                                            // pause_0_len_max: here: maximum length of long 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
     RC6_ADDRESS_OFFSET,                                                 // address_offset:  address offset\r
     RC6_ADDRESS_OFFSET + RC6_ADDRESS_LEN,                               // address_end:     end of address\r
     RC6_COMMAND_OFFSET,                                                 // command_offset:  command offset\r
@@ -1257,11 +1239,10 @@ static PROGMEM IRMP_PARAMETER grundig_param =
     GRUNDIG_NOKIA_IR60_BIT_LEN_MAX,                                     // pulse_1_len_max: here: maximum length of short pulse\r
     GRUNDIG_NOKIA_IR60_BIT_LEN_MIN,                                     // pause_1_len_min: here: minimum length of short pause\r
     GRUNDIG_NOKIA_IR60_BIT_LEN_MAX,                                     // pause_1_len_max: here: maximum length of short pause\r
-    GRUNDIG_NOKIA_IR60_BIT_LEN_MIN_2,                                   // pulse_0_len_min: here: minimum length of long pulse\r
-    GRUNDIG_NOKIA_IR60_BIT_LEN_MAX_2,                                   // pulse_0_len_max: here: maximum length of long pulse\r
-    GRUNDIG_NOKIA_IR60_BIT_LEN_MIN_2,                                   // pause_0_len_min: here: minimum length of long pause\r
-    GRUNDIG_NOKIA_IR60_BIT_LEN_MAX_2,                                   // pause_0_len_max: here: maximum length of long pause\r
-\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
     GRUNDIG_ADDRESS_OFFSET,                                             // address_offset:  address offset\r
     GRUNDIG_ADDRESS_OFFSET + GRUNDIG_ADDRESS_LEN,                       // address_end:     end of address\r
     GRUNDIG_COMMAND_OFFSET,                                             // command_offset:  command offset\r
@@ -1283,10 +1264,10 @@ static PROGMEM IRMP_PARAMETER ruwido_param =
     SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX,                                // pulse_1_len_max: here: maximum length of short pulse\r
     SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN,                                // pause_1_len_min: here: minimum length of short pause\r
     SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX,                                // pause_1_len_max: here: maximum length of short pause\r
-    SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN_2,                              // pulse_0_len_min: here: minimum length of long pulse\r
-    SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX_2,                              // pulse_0_len_max: here: maximum length of long pulse\r
-    SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN_2,                              // pause_0_len_min: here: minimum length of long pause\r
-    SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX_2,                              // pause_0_len_max: here: maximum length of long 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
     RUWIDO_ADDRESS_OFFSET,                                              // address_offset:  address offset\r
     RUWIDO_ADDRESS_OFFSET + RUWIDO_ADDRESS_LEN,                         // address_end:     end of address\r
     RUWIDO_COMMAND_OFFSET,                                              // command_offset:  command offset\r
@@ -2029,10 +2010,10 @@ irmp_ISR (void)
 #endif // IRMP_SUPPORT_RECS80_PROTOCOL == 1\r
 \r
 #if IRMP_SUPPORT_RC5_PROTOCOL == 1\r
-                    if (((irmp_pulse_time >= RC5_START_BIT_LEN_MIN   && irmp_pulse_time <= RC5_START_BIT_LEN_MAX) ||\r
-                         (irmp_pulse_time >= RC5_START_BIT_LEN_MIN_2 && irmp_pulse_time <= RC5_START_BIT_LEN_MAX_2)) &&\r
-                        ((irmp_pause_time >= RC5_START_BIT_LEN_MIN   && irmp_pause_time <= RC5_START_BIT_LEN_MAX) ||\r
-                         (irmp_pause_time >= RC5_START_BIT_LEN_MIN_2 && irmp_pause_time <= RC5_START_BIT_LEN_MAX_2)))\r
+                    if (((irmp_pulse_time >= RC5_START_BIT_LEN_MIN     && irmp_pulse_time <= RC5_START_BIT_LEN_MAX) ||\r
+                         (irmp_pulse_time >= 2 * RC5_START_BIT_LEN_MIN && irmp_pulse_time <= 2 * RC5_START_BIT_LEN_MAX)) &&\r
+                        ((irmp_pause_time >= RC5_START_BIT_LEN_MIN     && irmp_pause_time <= RC5_START_BIT_LEN_MAX) ||\r
+                         (irmp_pause_time >= 2 * RC5_START_BIT_LEN_MIN && irmp_pause_time <= 2 * RC5_START_BIT_LEN_MAX)))\r
                     {                                                           // it's RC5\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
@@ -2068,16 +2049,16 @@ irmp_ISR (void)
                         {\r
                             ANALYZE_PRINTF ("protocol = RC5, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or pulse: %3d - %3d, pause: %3d - %3d\n",\r
                                             RC5_START_BIT_LEN_MIN, RC5_START_BIT_LEN_MAX,\r
-                                            RC5_START_BIT_LEN_MIN_2, RC5_START_BIT_LEN_MAX_2,\r
+                                            2 * RC5_START_BIT_LEN_MIN, 2 * RC5_START_BIT_LEN_MAX,\r
                                             RC5_START_BIT_LEN_MIN, RC5_START_BIT_LEN_MAX,\r
-                                            RC5_START_BIT_LEN_MIN_2, RC5_START_BIT_LEN_MAX_2);\r
+                                            2 * RC5_START_BIT_LEN_MIN, 2 * RC5_START_BIT_LEN_MAX);\r
                         }\r
 \r
                         irmp_param_p = (IRMP_PARAMETER *) &rc5_param;\r
                         last_pause = irmp_pause_time;\r
 \r
-                        if ((irmp_pulse_time > RC5_START_BIT_LEN_MAX && irmp_pulse_time <= RC5_START_BIT_LEN_MAX_2) ||\r
-                            (irmp_pause_time > RC5_START_BIT_LEN_MAX && irmp_pause_time <= RC5_START_BIT_LEN_MAX_2))\r
+                        if ((irmp_pulse_time > RC5_START_BIT_LEN_MAX && irmp_pulse_time <= 2 * RC5_START_BIT_LEN_MAX) ||\r
+                            (irmp_pause_time > RC5_START_BIT_LEN_MAX && irmp_pause_time <= 2 * RC5_START_BIT_LEN_MAX))\r
                         {\r
                           last_value  = 0;\r
                           rc5_cmd_bit6 = 1<<6;\r
@@ -2181,15 +2162,15 @@ irmp_ISR (void)
 \r
 #if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1\r
                     if (((irmp_pulse_time >= SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX) ||\r
-                         (irmp_pulse_time >= SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN_2 && irmp_pulse_time <= SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX_2)) &&\r
+                         (irmp_pulse_time >= 2 * SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= 2 * SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX)) &&\r
                         ((irmp_pause_time >= SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX) || \r
-                         (irmp_pause_time >= SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN_2 && irmp_pause_time <= SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX_2)))\r
+                         (irmp_pause_time >= 2 * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= 2 * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX)))\r
                     {                                                           // it's RUWIDO or SIEMENS\r
                         ANALYZE_PRINTF ("protocol = RUWIDO, start bit timings: pulse: %3d - %3d or %3d - %3d, pause: %3d - %3d or %3d - %3d\n",\r
                                         SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN,   SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX,\r
-                                        SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN_2, SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX_2,\r
+                                        2 * SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN, 2 * SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX,\r
                                         SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN,   SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX,\r
-                                        SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN_2, SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX_2);\r
+                                        2 * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN, 2 * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX);\r
                         irmp_param_p = (IRMP_PARAMETER *) &ruwido_param;\r
                         last_pause = irmp_pause_time;\r
                         last_value  = 1;\r
@@ -2287,9 +2268,9 @@ irmp_ISR (void)
                         else\r
                         {\r
                             ANALYZE_PRINTF ("pulse: %3d - %3d or %3d - %3d\n", irmp_param.pulse_1_len_min, irmp_param.pulse_1_len_max,\r
-                                            irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);\r
+                                            2 * irmp_param.pulse_1_len_min, 2 * irmp_param.pulse_1_len_max);\r
                             ANALYZE_PRINTF ("pause: %3d - %3d or %3d - %3d\n", irmp_param.pause_1_len_min, irmp_param.pause_1_len_max,\r
-                                            irmp_param.pause_0_len_min, irmp_param.pause_0_len_max);\r
+                                            2 * irmp_param.pause_1_len_min, 2 * irmp_param.pause_1_len_max);\r
                         }\r
 \r
 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)\r
@@ -2312,8 +2293,8 @@ irmp_ISR (void)
 \r
                         if (! (irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER))\r
                         {\r
-                            ANALYZE_PRINTF ("pulse_0: %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);\r
-                            ANALYZE_PRINTF ("pause_0: %3d - %3d\n", irmp_param.pause_0_len_min, irmp_param.pause_0_len_max);\r
+                            ANALYZE_PRINTF ("pulse_0: %3d - %3d\n", 2 * irmp_param.pulse_1_len_min, 2 * irmp_param.pulse_1_len_max);\r
+                            ANALYZE_PRINTF ("pause_0: %3d - %3d\n", 2 * irmp_param.pause_1_len_min, 2 * irmp_param.pause_1_len_max);\r
                         }\r
 \r
 #if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1\r
@@ -2338,7 +2319,7 @@ irmp_ISR (void)
                          irmp_param.protocol != IRMP_RUWIDO_PROTOCOL && // Manchester, but not RUWIDO\r
                          irmp_param.protocol != IRMP_RC6_PROTOCOL)      // Manchester, but not RC6\r
                     {\r
-                        if (irmp_pause_time > irmp_param.pulse_1_len_max && irmp_pause_time <= irmp_param.pulse_0_len_max)      // XXXXXXXX!!!\r
+                        if (irmp_pause_time > irmp_param.pulse_1_len_max && irmp_pause_time <= 2 * irmp_param.pulse_1_len_max)\r
                         {\r
                             ANALYZE_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
                             ANALYZE_PUTCHAR ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? '0' : '1');\r
@@ -2474,7 +2455,7 @@ irmp_ISR (void)
                                 irmp_tmp_command <<= 1;\r
                                 irmp_tmp_command |= first_bit;\r
                             }\r
-                            else if (irmp_pause_time >= irmp_param.pause_0_len_max && irmp_bit >= GRUNDIG_COMPLETE_DATA_LEN - 2)\r
+                            else if (irmp_pause_time >= 2 * irmp_param.pause_1_len_max && irmp_bit >= GRUNDIG_COMPLETE_DATA_LEN - 2)\r
                             {                                                           // special manchester decoder\r
                                 irmp_param.complete_len = GRUNDIG_COMPLETE_DATA_LEN;    // correct complete len\r
                                 got_light = TRUE;                                       // this is a lie, but generates a stop bit ;-)\r
@@ -2501,7 +2482,7 @@ irmp_ISR (void)
 #if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1\r
                         if (irmp_param.protocol == IRMP_RUWIDO_PROTOCOL && !irmp_param.stop_bit)\r
                         {\r
-                            if (irmp_pause_time >= irmp_param.pause_0_len_max && irmp_bit >= RUWIDO_COMPLETE_DATA_LEN - 2)\r
+                            if (irmp_pause_time >= 2 * irmp_param.pause_1_len_max && irmp_bit >= RUWIDO_COMPLETE_DATA_LEN - 2)\r
                             {                                                           // special manchester decoder\r
                                 irmp_param.complete_len = RUWIDO_COMPLETE_DATA_LEN;     // correct complete len\r
                                 got_light = TRUE;                                       // this is a lie, but generates a stop bit ;-)\r
@@ -2530,7 +2511,7 @@ irmp_ISR (void)
 #endif\r
 #if IRMP_SUPPORT_MANCHESTER == 1\r
                         if ((irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER) &&\r
-                            irmp_pause_time >= irmp_param.pause_0_len_max && irmp_bit >= irmp_param.complete_len - 2 && !irmp_param.stop_bit)\r
+                            irmp_pause_time >= 2 * irmp_param.pause_1_len_max && irmp_bit >= irmp_param.complete_len - 2 && !irmp_param.stop_bit)\r
                         {                                                       // special manchester decoder\r
                             got_light = TRUE;                                   // this is a lie, but generates a stop bit ;-)\r
                             irmp_param.stop_bit = TRUE;                         // set flag\r
@@ -2612,11 +2593,11 @@ irmp_ISR (void)
 #if IRMP_SUPPORT_MANCHESTER == 1\r
                     if ((irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER))                                     // Manchester\r
                     {\r
-#if 0\r
-                        if (irmp_pulse_time > irmp_param.pulse_1_len_max /* && irmp_pulse_time <= irmp_param.pulse_0_len_max */)\r
-#else // better:\r
-                        if (irmp_pulse_time > irmp_param.pulse_1_len_max && irmp_pulse_time <= irmp_param.pulse_0_len_max &&\r
-                            irmp_pause_time <= irmp_param.pause_0_len_max)\r
+#if 1\r
+                        if (irmp_pulse_time > irmp_param.pulse_1_len_max /* && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max */)\r
+#else // better, but some IR-RCs use asymmetric timings :-/\r
+                        if (irmp_pulse_time > irmp_param.pulse_1_len_max && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max &&\r
+                            irmp_pause_time <= 2 * irmp_param.pause_1_len_max)\r
 #endif\r
                         {\r
 #if IRMP_SUPPORT_RC6_PROTOCOL == 1\r
@@ -2647,7 +2628,7 @@ irmp_ISR (void)
                                     ANALYZE_PUTCHAR ('T');\r
                                     irmp_store_bit (1);\r
 \r
-                                    if (irmp_pause_time > irmp_param.pause_0_len_max)\r
+                                    if (irmp_pause_time > 2 * irmp_param.pause_1_len_max)\r
                                     {\r
                                         last_value = 0;\r
                                     }\r
@@ -2672,12 +2653,12 @@ irmp_ISR (void)
                                 }\r
                             }\r
                         }\r
-                        else if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max /* &&\r
-                                 irmp_pause_time <= irmp_param.pause_0_len_max */)\r
+                        else if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max\r
+                                 /* && irmp_pause_time <= 2 * irmp_param.pause_1_len_max */)\r
                         {\r
                             uint8_t manchester_value;\r
 \r
-                            if (last_pause > irmp_param.pause_1_len_max && last_pause <= irmp_param.pause_0_len_max)\r
+                            if (last_pause > irmp_param.pause_1_len_max && last_pause <= 2 * irmp_param.pause_1_len_max)\r
                             {\r
                                 manchester_value = last_value ? 0 : 1;\r
                                 last_value  = manchester_value;\r
@@ -2892,6 +2873,7 @@ irmp_ISR (void)
 #endif // IRMP_SUPPORT_NEC42_PROTOCOL == 1\r
                         irmp_bit == 8 && irmp_pause_time >= NEC_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NEC_START_BIT_PAUSE_LEN_MAX)\r
                     {\r
+printf ("! %d %d !\n", irmp_pause_time, NEC_START_BIT_PAUSE_LEN_MAX);\r
                         ANALYZE_PRINTF ("Switching to NEC16 protocol\n");\r
                         irmp_param.protocol = IRMP_NEC16_PROTOCOL;\r
                         irmp_param.address_offset   = NEC16_ADDRESS_OFFSET;\r
@@ -3394,8 +3376,8 @@ print_timings (void)
             SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN, SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX,\r
             SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN, SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX,\r
             SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN, SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX,\r
-            SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN_2, SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX_2,\r
-            SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN_2, SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX_2);\r
+            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 ("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
index 1b5640857920404f6c0ec696f40efb9ecc753b33..43a423f5244d9f78d3c96a608b7597e3839c2b85 100644 (file)
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmpconfig.h,v 1.65 2011/04/11 12:54:25 fm Exp $\r
+ * $Id: irmpconfig.h,v 1.66 2011/04/20 09:09:48 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
 #define IRMP_SUPPORT_KATHREIN_PROTOCOL          0       // Kathrein             >= 10000                 ~200 bytes\r
 #define IRMP_SUPPORT_NUBERT_PROTOCOL            0       // NUBERT               >= 10000                  ~50 bytes\r
 #define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL      0       // Bang & Olufsen       >= 10000                 ~200 bytes\r
+#define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     >= 15000                  ~50 bytes\r
+#define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT (SAA3008)  >= 15000                  ~50 bytes\r
 #define IRMP_SUPPORT_NIKON_PROTOCOL             0       // NIKON camera         >= 10000                 ~250 bytes\r
 #define IRMP_SUPPORT_NETBOX_PROTOCOL            0       // Netbox keyboard      >= 10000                 ~400 bytes (PROTOTYPE!)\r
 #define IRMP_SUPPORT_IMON_PROTOCOL              0       // IMON keyboard        >= 10000                 ~400 bytes (PROTOTYPE!)\r
 #define IRMP_SUPPORT_FDC_PROTOCOL               0       // FDC3402 keyboard     >= 10000 (better 15000)  ~150 bytes (~400 in combination with RC5)\r
 #define IRMP_SUPPORT_RCCAR_PROTOCOL             0       // RC Car               >= 10000 (better 15000)  ~150 bytes (~500 in combination with RC5)\r
 #define IRMP_SUPPORT_RUWIDO_PROTOCOL            0       // RUWIDO, T-Home       >= 15000                 ~550 bytes\r
-#define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     >= 15000                  ~50 bytes\r
-#define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT (SAA3008)  >= 15000                  ~50 bytes\r
 #define IRMP_SUPPORT_LEGO_PROTOCOL              0       // LEGO Power RC        >= 20000                 ~150 bytes\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
diff --git a/irsnd.c b/irsnd.c
index 050031cee754d9450cf78b0250a07a1d17da72fd..fb7e449a93ece0492393acb9811ea4416dd183a7 100644 (file)
--- a/irsnd.c
+++ b/irsnd.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2010-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsnd.c,v 1.35 2011/04/11 13:26:17 fm Exp $\r
+ * $Id: irsnd.c,v 1.36 2011/04/20 09:09:48 fm Exp $\r
  *\r
  * This program is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
@@ -30,8 +30,8 @@
 #include <string.h>\r
 \r
 #define F_CPU 8000000L\r
-typedef unsigned char    uint8_t;\r
-typedef unsigned short    uint16_t;\r
+typedef unsigned char   uint8_t;\r
+typedef unsigned short  uint16_t;\r
 #define DEBUG\r
 \r
 #else\r
index 689baaacbedf90d608a7257524fd32af17e679f0..9f4010182d83848651836ccb37b4df60e6aacfbc 100644 (file)
 #define IRSND_SUPPORT_KATHREIN_PROTOCOL         0       // Kathrein             >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
 #define IRSND_SUPPORT_NUBERT_PROTOCOL           0       // NUBERT               >= 10000                 ~100 bytes\r
 #define IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL     0       // Bang&Olufsen         >= 10000                 ~250 bytes\r
+#define IRSND_SUPPORT_RECS80_PROTOCOL           0       // RECS80               >= 20000                 ~100 bytes\r
+#define IRSND_SUPPORT_RECS80EXT_PROTOCOL        0       // RECS80EXT            >= 20000                 ~100 bytes\r
 #define IRSND_SUPPORT_NIKON_PROTOCOL            0       // NIKON                >= 10000                 ~150 bytes\r
 #define IRSND_SUPPORT_NETBOX_PROTOCOL           0       // Netbox keyboard      >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
 #define IRSND_SUPPORT_IMON_PROTOCOL             0       // IMON keyboard        >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
 #define IRSND_SUPPORT_FDC_PROTOCOL              0       // FDC IR keyboard      >= 10000 (better 15000)  ~150 bytes\r
 #define IRSND_SUPPORT_RCCAR_PROTOCOL            0       // RC CAR               >= 10000 (better 15000)  ~150 bytes\r
 #define IRSND_SUPPORT_RUWIDO_PROTOCOL           0       // RUWIDO, T-Home       >= 15000                 DON'T CHANGE, NOT SUPPORTED YET!\r
-#define IRSND_SUPPORT_RECS80_PROTOCOL           0       // RECS80               >= 20000                 ~100 bytes\r
-#define IRSND_SUPPORT_RECS80EXT_PROTOCOL        0       // RECS80EXT            >= 20000                 ~100 bytes\r
 #define IRSND_SUPPORT_LEGO_PROTOCOL             0       // LEGO Power RC        >= 20000                 ~150 bytes\r
 \r
 \r