]> cloudbase.mooo.com Git - irmp.git/commitdiff
version 1.9.6: corrected RECS80 decoder
authorukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Fri, 25 Feb 2011 08:54:01 +0000 (08:54 +0000)
committerukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Fri, 25 Feb 2011 08:54:01 +0000 (08:54 +0000)
git-svn-id: svn://mikrocontroller.net/irmp@61 aeb2e35e-bfc4-4214-b83c-9e8de998ed28

README.txt
irmp.c
irmp.h
irmpconfig.h

index bf5428ba7f6b3f89bd4ec3b65b8e4882ca13b5d8..c42ba9b3c14f66f056dd827be465a3449f998682 100644 (file)
@@ -1,7 +1,7 @@
 IRMP - Infrared Multi Protocol Decoder\r
 --------------------------------------\r
 \r
-Version IRMP:  1.9.6  23.02.2010\r
+Version IRMP:  1.9.7  25.02.2010\r
 Version IRSND: 1.9.1  22.01.2010\r
 \r
 Dokumentation:\r
diff --git a/irmp.c b/irmp.c
index 79b9c85f1f4faceebb45b3e7f94d3ec40bbcbd7f..19495fe9fcff681a60faefaee0703433f49663d9 100644 (file)
--- a/irmp.c
+++ b/irmp.c
@@ -3,29 +3,35 @@
  *\r
  * Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.c,v 1.95 2011/02/23 15:03:27 fm Exp $\r
+ * $Id: irmp.c,v 1.96 2011/02/25 08:35:32 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
  * Typical manufacturers:\r
  *\r
- * SIRCS      - Sony\r
- * NEC        - NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, and many other Japanese manufacturers\r
- * SAMSUNG    - Samsung\r
- * SAMSUNG32  - Samsung\r
- * MATSUSHITA - Matsushita\r
- * KASEIKYO   - Panasonic, Denon & other Japanese manufacturers (members of "Japan's Association for Electric Home Application")\r
- * RECS80     - Philips, Nokia, Thomson, Nordmende, Telefunken, Saba\r
- * RC5        - Philips and other European manufacturers\r
- * DENON      - Denon, Sharp\r
- * RC6        - Philips and other European manufacturers\r
- * APPLE      - Apple\r
- * NUBERT     - Nubert Subwoofer System\r
- * B&O        - Bang & Olufsen\r
- * PANASONIC  - Panasonic (older, yet not implemented)\r
- * GRUNDIG    - Grundig\r
- * NOKIA      - Nokia\r
- * SIEMENS    - Siemens, e.g. Gigaset M740AV\r
+ * SIRCS        - Sony\r
+ * NEC          - NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, and many other Japanese manufacturers\r
+ * SAMSUNG      - Samsung\r
+ * SAMSUNG32    - Samsung\r
+ * MATSUSHITA   - Matsushita\r
+ * KASEIKYO     - Panasonic, Denon & other Japanese manufacturers (members of "Japan's Association for Electric Home Application")\r
+ * RECS80       - Philips, Nokia, Thomson, Nordmende, Telefunken, Saba\r
+ * RC5          - Philips and other European manufacturers\r
+ * DENON        - Denon, Sharp\r
+ * RC6          - Philips and other European manufacturers\r
+ * APPLE        - Apple\r
+ * NUBERT       - Nubert Subwoofer System\r
+ * B&O          - Bang & Olufsen\r
+ * PANASONIC    - Panasonic (older, yet not implemented)\r
+ * GRUNDIG      - Grundig\r
+ * NOKIA        - Nokia\r
+ * SIEMENS      - Siemens, e.g. Gigaset M740AV\r
+ * FDC          - FDC IR keyboard\r
+ * RCCAR        - IR remote control for RC cars\r
+ * JVC          - JVC\r
+ * NIKON        - Nikon cameras\r
+ * RUWIDO       - T-Home\r
+ * KATHREIN     - Kathrein\r
  *\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
  *\r
@@ -592,10 +598,10 @@ typedef unsigned int16  uint16_t;
 #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_10 + 0.5) + 1)\r
 \r
-#define FDC_START_BIT_PULSE_LEN_MIN             ((uint8_t)(F_INTERRUPTS * FDC_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define FDC_START_BIT_PULSE_LEN_MAX             ((uint8_t)(F_INTERRUPTS * FDC_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define FDC_START_BIT_PAUSE_LEN_MIN             ((uint8_t)(F_INTERRUPTS * FDC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define FDC_START_BIT_PAUSE_LEN_MAX             ((uint8_t)(F_INTERRUPTS * FDC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\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
+#define FDC_START_BIT_PAUSE_LEN_MAX             ((uint8_t)(F_INTERRUPTS * FDC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5))\r
 #define FDC_PULSE_LEN_MIN                       ((uint8_t)(F_INTERRUPTS * FDC_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
 #define FDC_PULSE_LEN_MAX                       ((uint8_t)(F_INTERRUPTS * FDC_PULSE_TIME * MAX_TOLERANCE_50 + 0.5) + 1)\r
 #define FDC_1_PAUSE_LEN_MIN                     ((uint8_t)(F_INTERRUPTS * FDC_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
@@ -1361,14 +1367,14 @@ static PROGMEM IRMP_PARAMETER kathrein_param =
 static PROGMEM IRMP_PARAMETER netbox_param =\r
 {\r
     IRMP_NETBOX_PROTOCOL,                                               // protocol:        ir protocol\r
-    NETBOX_PULSE_LEN,                                                   // pulse_1_len_min: minimum length of pulse with bit value 1\r
-    NETBOX_PULSE_REST_LEN,                                              // pulse_1_len_max: maximum length of pulse with bit value 1\r
-    NETBOX_PAUSE_LEN,                                                   // pause_1_len_min: minimum length of pause with bit value 1\r
-    NETBOX_PAUSE_REST_LEN,                                              // pause_1_len_max: maximum length of pause with bit value 1\r
-    NETBOX_PULSE_LEN,                                                   // pulse_0_len_min: minimum length of pulse with bit value 0\r
-    NETBOX_PULSE_REST_LEN,                                              // pulse_0_len_max: maximum length of pulse with bit value 0\r
-    NETBOX_PAUSE_LEN,                                                   // pause_0_len_min: minimum length of pause with bit value 0\r
-    NETBOX_PAUSE_REST_LEN,                                              // pause_0_len_max: maximum length of pause with bit value 0\r
+    NETBOX_PULSE_LEN,                                                   // pulse_1_len_min: minimum length of pulse with bit value 1, here: exact value\r
+    NETBOX_PULSE_REST_LEN,                                              // pulse_1_len_max: maximum length of pulse with bit value 1, here: rest value\r
+    NETBOX_PAUSE_LEN,                                                   // pause_1_len_min: minimum length of pause with bit value 1, here: exact value\r
+    NETBOX_PAUSE_REST_LEN,                                              // pause_1_len_max: maximum length of pause with bit value 1, here: rest value\r
+    NETBOX_PULSE_LEN,                                                   // pulse_0_len_min: minimum length of pulse with bit value 0, here: exact value\r
+    NETBOX_PULSE_REST_LEN,                                              // pulse_0_len_max: maximum length of pulse with bit value 0, here: rest value\r
+    NETBOX_PAUSE_LEN,                                                   // pause_0_len_min: minimum length of pause with bit value 0, here: exact value\r
+    NETBOX_PAUSE_REST_LEN,                                              // pause_0_len_max: maximum length of pause with bit value 0, here: rest value\r
     NETBOX_ADDRESS_OFFSET,                                              // address_offset:  address offset\r
     NETBOX_ADDRESS_OFFSET + NETBOX_ADDRESS_LEN,                         // address_end:     end of address\r
     NETBOX_COMMAND_OFFSET,                                              // command_offset:  command offset\r
@@ -1524,7 +1530,7 @@ irmp_get_data (IRMP_DATA * irmp_data_p)
                 rtc = TRUE;                                     // Summe:  V  C1 C0 D7 D6 D5 D4 D3 D2 D1 D0\r
                 break;\r
 #endif\r
-#if 0 // LATER!\r
+#if 1 // squeeze code to 8 bit, upper bit indicates release-key\r
 #if IRMP_SUPPORT_NETBOX_PROTOCOL == 1\r
             case IRMP_NETBOX_PROTOCOL:\r
                 if (irmp_command & 0x1000)                      // last bit set?\r
@@ -2292,8 +2298,13 @@ irmp_ISR (void)
                 {                                                               // yes...\r
                     if (irmp_bit == irmp_param.complete_len && irmp_param.stop_bit == 1)\r
                     {\r
-                        if ((irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER) ||\r
+                        if (\r
+#if IRMP_SUPPORT_MANCHESTER == 1\r
+                            (irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER) ||\r
+#endif\r
+#if IRMP_SUPPORT_SERIAL == 1\r
                             (irmp_param.flags & IRMP_PARAM_FLAG_IS_SERIAL) ||\r
+#endif\r
                             (irmp_pulse_time >= irmp_param.pulse_0_len_min && irmp_pulse_time <= irmp_param.pulse_0_len_max))\r
                         {\r
 #ifdef ANALYZE\r
@@ -2331,8 +2342,9 @@ irmp_ISR (void)
                         else\r
 #endif\r
 #if IRMP_SUPPORT_SERIAL == 1\r
+                        // NETBOX generates no stop bit, here is the timeout condition:\r
                         if ((irmp_param.flags & IRMP_PARAM_FLAG_IS_SERIAL) && irmp_param.protocol == IRMP_NETBOX_PROTOCOL &&\r
-                            irmp_pause_time >= 100)\r
+                            irmp_pause_time >= NETBOX_PULSE_LEN * (NETBOX_COMPLETE_DATA_LEN - irmp_bit))\r
                         {\r
                             got_light = TRUE;                                                       // this is a lie, but helps (generates stop bit)\r
                         }\r
diff --git a/irmp.h b/irmp.h
index e9f06efaa78acc8ccfd4eb93c02ddbafea591c09..55a44c8281f40f7b25de2e11e28561f546053ea0 100644 (file)
--- a/irmp.h
+++ b/irmp.h
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.h,v 1.54 2011/02/23 15:03:27 fm Exp $\r
+ * $Id: irmp.h,v 1.55 2011/02/25 08:35:33 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -177,11 +177,11 @@ typedef uint8_t     PAUSE_LEN;
 #define RECS80_1_PAUSE_TIME                     7432.0e-6                       // 7432 usec pause\r
 #define RECS80_0_PAUSE_TIME                     4902.0e-6                       // 4902 usec pause\r
 #define RECS80_FRAME_REPEAT_PAUSE_TIME            45.0e-3                       // frame repeat after 45ms\r
-#define RECS80_ADDRESS_OFFSET                   2                               // skip 2 bits (2nd start + 1 toggle)\r
+#define RECS80_ADDRESS_OFFSET                   1                               // skip 1 bit (toggle bit)\r
 #define RECS80_ADDRESS_LEN                      3                               // read 3 address bits\r
-#define RECS80_COMMAND_OFFSET                   5                               // skip 5 bits (2nd start + 1 toggle + 3 address)\r
+#define RECS80_COMMAND_OFFSET                   4                               // skip 5 bits (2nd start + 1 toggle + 3 address)\r
 #define RECS80_COMMAND_LEN                      6                               // read 6 command bits\r
-#define RECS80_COMPLETE_DATA_LEN                11                              // complete length\r
+#define RECS80_COMPLETE_DATA_LEN                10                              // complete length\r
 #define RECS80_STOP_BIT                         1                               // has stop bit\r
 #define RECS80_LSB                              0                               // MSB...LSB\r
 #define RECS80_FLAGS                            0                               // flags\r
@@ -416,10 +416,10 @@ typedef uint8_t     PAUSE_LEN;
 #define KATHREIN_LSB                            0                               // MSB\r
 #define KATHREIN_FLAGS                          0                               // flags\r
 \r
-#define NETBOX_START_BIT_PULSE_TIME             2500.0e-6                       // 2500 usec pulse\r
-#define NETBOX_START_BIT_PAUSE_TIME              833.0e-6                       //  833 usec pause\r
-#define NETBOX_PULSE_TIME                        833.0e-6                       //  833 usec pulse\r
-#define NETBOX_PAUSE_TIME                        833.0e-6                       //  833 usec pause\r
+#define NETBOX_START_BIT_PULSE_TIME             2400.0e-6                       // 2400 usec pulse\r
+#define NETBOX_START_BIT_PAUSE_TIME              800.0e-6                       //  800 usec pause\r
+#define NETBOX_PULSE_TIME                        800.0e-6                       //  800 usec pulse\r
+#define NETBOX_PAUSE_TIME                        800.0e-6                       //  800 usec pause\r
 #define NETBOX_FRAMES                           1                               // Netbox sends 1 frame\r
 #define NETBOX_AUTO_REPETITION_PAUSE_TIME       35.0e-3                         // auto repetition after 35ms\r
 #define NETBOX_FRAME_REPEAT_PAUSE_TIME          35.0e-3                         // frame repeat after 35ms\r
@@ -427,7 +427,7 @@ typedef uint8_t     PAUSE_LEN;
 #define NETBOX_ADDRESS_LEN                      3                               // read 3 address bits\r
 #define NETBOX_COMMAND_OFFSET                   3                               // skip 3 bits\r
 #define NETBOX_COMMAND_LEN                      13                              // read 13 bits\r
-#define NETBOX_COMPLETE_DATA_LEN                16                              // complete length, last is stop bit\r
+#define NETBOX_COMPLETE_DATA_LEN                16                              // complete length\r
 #define NETBOX_STOP_BIT                         0                               // has no stop bit\r
 #define NETBOX_LSB                              1                               // LSB\r
 #define NETBOX_FLAGS                            IRMP_PARAM_FLAG_IS_SERIAL       // flags\r
index 6a6ab67b2612e097ab8b7f020b2fb0a2748a1d68..a19b46a653bc87c9c92aed44053e982b3389ce4d 100644 (file)
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmpconfig.h,v 1.56 2011/02/23 15:05:21 fm Exp $\r
+ * $Id: irmpconfig.h,v 1.57 2011/02/25 08:35:33 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\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_NIKON_PROTOCOL             0       // NIKON                >= 10000                 ~250 bytes\r
-#define IRMP_SUPPORT_NETBOX_PROTOCOL            0       // Netbox keyboard      >= 10000                 ~400 bytes (PROTOTYPE!!!)\r
-#define IRMP_SUPPORT_IMON_PROTOCOL              0       // Netbox keyboard      >= 10000                 ~400 bytes (PROTOTYPE!!!)\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_SIEMENS_PROTOCOL           0       // Siemens Gigaset      >= 15000                 ~550 bytes\r
 #define IRMP_SUPPORT_RUWIDO_PROTOCOL            0       // RUWIDO, T-Home       >= 15000                 ~550 bytes\r
-#define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80               >= 20000                  ~50 bytes\r
-#define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT            >= 20000                  ~50 bytes\r
+#define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     >= 15000                  ~50 bytes\r
+#define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT            >= 15000                  ~50 bytes\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * Change hardware pin here:\r
 #define IRMP_SUPPORT_RUWIDO_PROTOCOL            0\r
 #endif\r
 \r
-#if IRMP_SUPPORT_RECS80_PROTOCOL == 1 && F_INTERRUPTS < 20000\r
-#warning F_INTERRUPTS too low, RECS80 protocol disabled (should be at least 20000)\r
+#if IRMP_SUPPORT_RECS80_PROTOCOL == 1 && F_INTERRUPTS < 15000\r
+#warning F_INTERRUPTS too low, RECS80 protocol disabled (should be at least 15000)\r
 #undef IRMP_SUPPORT_RECS80_PROTOCOL\r
 #define IRMP_SUPPORT_RECS80_PROTOCOL            0\r
 #endif\r
 \r
-#if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1 && F_INTERRUPTS < 20000\r
-#warning F_INTERRUPTS too low, RECS80EXT protocol disabled (should be at least 20000)\r
+#if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1 && F_INTERRUPTS < 15000\r
+#warning F_INTERRUPTS too low, RECS80EXT protocol disabled (should be at least 15000)\r
 #undef IRMP_SUPPORT_RECS80EXT_PROTOCOL\r
 #define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0\r
 #endif\r