*\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
#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
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
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
{ // 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
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
*\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
#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
#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
#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
*\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