*\r
* Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
*\r
- * $Id: irmp.c,v 1.103 2011/05/20 09:31:25 fm Exp $\r
+ * $Id: irmp.c,v 1.110 2011/09/22 10:19:44 fm Exp $\r
*\r
* ATMEGA88 @ 8 MHz\r
*\r
- * Typical manufacturers:\r
+ * Supported mikrocontrollers:\r
+ *\r
+ * ATtiny45, ATtiny85\r
+ * ATtiny84\r
+ * ATmega8, ATmega16, ATmega32\r
+ * ATmega162\r
+ * ATmega164, ATmega324, ATmega644, ATmega644P, ATmega1284\r
+ * ATmega88, ATmega88P, ATmega168, ATmega168P, ATmega328P\r
+ *\r
+ * Typical manufacturers of remote controls:\r
*\r
* SIRCS - Sony\r
* NEC - NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, and many other Japanese manufacturers\r
*---------------------------------------------------------------------------------------------------------------------------------------------------\r
*/\r
\r
+#if defined(__18CXX)\r
+#define PIC_C18 // Microchip C18 Compiler\r
+#endif\r
+\r
#if defined(__PCM__) || defined(__PCB__) || defined(__PCH__) // CCS PIC Compiler instead of AVR\r
#define PIC_CCS_COMPILER\r
#endif\r
\r
#else\r
\r
-#ifndef CODEVISION\r
-\r
-#ifdef PIC_CCS_COMPILER\r
+#if defined (PIC_CCS_COMPILER) || defined(PIC_C18)\r
\r
#include <string.h>\r
-typedef unsigned int8 uint8_t;\r
-typedef unsigned int16 uint16_t;\r
#define PROGMEM\r
#define memcpy_P memcpy\r
\r
+#if defined (PIC_CCS_COMPILER)\r
+typedef unsigned int8 uint8_t;\r
+typedef unsigned int16 uint16_t;\r
+#endif\r
+\r
#else // AVR:\r
\r
#include <inttypes.h>\r
#include <util/delay.h>\r
#include <avr/pgmspace.h>\r
\r
-#endif // PIC_CCS_COMPILER\r
-#endif // CODEVISION\r
+#endif // PIC_CCS_COMPILER or PIC_C18\r
\r
#endif // windows\r
#endif // unix\r
#define IRMP_SUPPORT_MANCHESTER 0\r
#endif\r
\r
-#if IRMP_SUPPORT_NETBOX_PROTOCOL == 1 || \\r
- IRMP_SUPPORT_MERLIN_PROTOCOL == 1 || \\r
- IRMP_SUPPORT_IMON_PROTOCOL == 1 \r
+#if IRMP_SUPPORT_NETBOX_PROTOCOL == 1\r
#define IRMP_SUPPORT_SERIAL 1\r
#else\r
#define IRMP_SUPPORT_SERIAL 0\r
#define SIRCS_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * SIRCS_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
#define SIRCS_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * SIRCS_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
\r
-#define NEC_START_BIT_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
-#define NEC_START_BIT_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)\r
-#define NEC_START_BIT_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
-#define NEC_START_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)\r
-#define NEC_REPEAT_START_BIT_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_REPEAT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
-#define NEC_REPEAT_START_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_REPEAT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)\r
-#define NEC_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
-#define NEC_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)\r
-#define NEC_1_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_1_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
-#define NEC_1_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_1_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)\r
-#define NEC_0_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
-#define NEC_0_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_0_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)\r
+#define NEC_START_BIT_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)\r
+#define NEC_START_BIT_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)\r
+#define NEC_START_BIT_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)\r
+#define NEC_START_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)\r
+#define NEC_REPEAT_START_BIT_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_REPEAT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)\r
+#define NEC_REPEAT_START_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_REPEAT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)\r
+#define NEC_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)\r
+#define NEC_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)\r
+#define NEC_1_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)\r
+#define NEC_1_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)\r
+#define NEC_0_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * NEC_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)\r
+#define NEC_0_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * NEC_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)\r
// autodetect nec repetition frame within 50 msec:\r
// NEC seems to send the first repetition frame after 40ms, further repetition frames after 100 ms\r
#if 0\r
#define LEGO_0_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * LEGO_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
#define LEGO_0_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * LEGO_0_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)\r
\r
-#define MERLIN_START_BIT_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * MERLIN_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define MERLIN_START_BIT_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * MERLIN_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define MERLIN_START_BIT_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * MERLIN_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define MERLIN_START_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * MERLIN_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define MERLIN_PULSE_LEN ((uint8_t)(F_INTERRUPTS * MERLIN_PULSE_TIME))\r
-#define MERLIN_PAUSE_LEN ((uint8_t)(F_INTERRUPTS * MERLIN_PAUSE_TIME))\r
-#define MERLIN_PULSE_REST_LEN ((uint8_t)(F_INTERRUPTS * MERLIN_PULSE_TIME / 4))\r
-#define MERLIN_PAUSE_REST_LEN ((uint8_t)(F_INTERRUPTS * MERLIN_PAUSE_TIME / 4))\r
-\r
-#define IMON_START_BIT_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * IMON_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define IMON_START_BIT_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * IMON_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define IMON_START_BIT_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * IMON_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
-#define IMON_START_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * IMON_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
-#define IMON_PULSE_LEN ((uint8_t)(F_INTERRUPTS * IMON_PULSE_TIME))\r
-#define IMON_PAUSE_LEN ((uint8_t)(F_INTERRUPTS * IMON_PAUSE_TIME))\r
-#define IMON_PULSE_REST_LEN ((uint8_t)(F_INTERRUPTS * IMON_PULSE_TIME / 4))\r
-#define IMON_PAUSE_REST_LEN ((uint8_t)(F_INTERRUPTS * IMON_PAUSE_TIME / 4))\r
-\r
#define AUTO_FRAME_REPETITION_LEN (uint16_t)(F_INTERRUPTS * AUTO_FRAME_REPETITION_TIME + 0.5) // use uint16_t!\r
\r
#ifdef ANALYZE\r
-#define ANALYZE_PUTCHAR(a) { if (! silent) { putchar (a); } }\r
-#define ANALYZE_ONLY_NORMAL_PUTCHAR(a) { if (! silent && !verbose) { putchar (a); } }\r
-#define ANALYZE_PRINTF(...) { if (verbose) { printf (__VA_ARGS__); } }\r
-#define ANALYZE_NEWLINE() { if (verbose) { putchar ('\n'); } }\r
-static int silent;\r
-static int time_counter;\r
-static int verbose;\r
+#define ANALYZE_PUTCHAR(a) { if (! silent) { putchar (a); } }\r
+#define ANALYZE_ONLY_NORMAL_PUTCHAR(a) { if (! silent && !verbose) { putchar (a); } }\r
+#define ANALYZE_PRINTF(...) { if (verbose) { printf (__VA_ARGS__); } }\r
+#define ANALYZE_NEWLINE() { if (verbose) { putchar ('\n'); } }\r
+static int silent;\r
+static int time_counter;\r
+static int verbose;\r
#else\r
#define ANALYZE_PUTCHAR(a)\r
#define ANALYZE_ONLY_NORMAL_PUTCHAR(a)\r
#define ANALYZE_NEWLINE()\r
#endif\r
\r
+#if IRMP_USE_CALLBACK == 1\r
+static void (*irmp_callback_ptr) (uint8_t);\r
+#endif // IRMP_USE_CALLBACK == 1\r
+\r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * Protocol names\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
+#if IRMP_PROTOCOL_NAMES == 1\r
+char *\r
+irmp_protocol_names[IRMP_N_PROTOCOLS + 1] =\r
+{\r
+ "UNKNOWN",\r
+ "SIRCS",\r
+ "NEC",\r
+ "SAMSUNG",\r
+ "MATSUSH",\r
+ "KASEIKYO",\r
+ "RECS80",\r
+ "RC5",\r
+ "DENON",\r
+ "RC6",\r
+ "SAMSG32",\r
+ "APPLE",\r
+ "RECS80EX",\r
+ "NUBERT",\r
+ "BANG OLU",\r
+ "GRUNDIG",\r
+ "NOKIA",\r
+ "SIEMENS",\r
+ "FDC",\r
+ "RCCAR",\r
+ "JVC",\r
+ "RC6A",\r
+ "NIKON",\r
+ "RUWIDO",\r
+ "IR60",\r
+ "KATHREIN",\r
+ "NETBOX",\r
+ "NEC16",\r
+ "NEC42",\r
+ "LEGO",\r
+ "THOMSON"\r
+};\r
+#endif\r
+\r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * Logging\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
#if IRMP_LOGGING == 1\r
#define BAUD 9600L\r
#include <util/setbaud.h>\r
\r
#if IRMP_SUPPORT_SIRCS_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER sircs_param =\r
+static const PROGMEM IRMP_PARAMETER sircs_param =\r
{\r
IRMP_SIRCS_PROTOCOL, // protocol: ir protocol\r
SIRCS_1_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_NEC_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER nec_param =\r
+static const PROGMEM IRMP_PARAMETER nec_param =\r
{\r
IRMP_NEC_PROTOCOL, // protocol: ir protocol\r
NEC_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
NEC_FLAGS // flags: some flags\r
};\r
\r
-static PROGMEM IRMP_PARAMETER nec_rep_param =\r
+static const PROGMEM IRMP_PARAMETER nec_rep_param =\r
{\r
IRMP_NEC_PROTOCOL, // protocol: ir protocol\r
NEC_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_NEC42_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER nec42_param =\r
+static const PROGMEM IRMP_PARAMETER nec42_param =\r
{\r
IRMP_NEC42_PROTOCOL, // protocol: ir protocol\r
NEC_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
NEC_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0\r
NEC_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0\r
NEC42_ADDRESS_OFFSET, // address_offset: address offset\r
- NEC42_ADDRESS_OFFSET + NEC_ADDRESS_LEN, // address_end: end of address\r
+ NEC42_ADDRESS_OFFSET + NEC42_ADDRESS_LEN, // address_end: end of address\r
NEC42_COMMAND_OFFSET, // command_offset: command offset\r
- NEC42_COMMAND_OFFSET + NEC_COMMAND_LEN, // command_end: end of command\r
+ NEC42_COMMAND_OFFSET + NEC42_COMMAND_LEN, // command_end: end of command\r
NEC42_COMPLETE_DATA_LEN, // complete_len: complete length of frame\r
NEC_STOP_BIT, // stop_bit: flag: frame has stop bit\r
NEC_LSB, // lsb_first: flag: LSB first\r
\r
#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER samsung_param =\r
+static const PROGMEM IRMP_PARAMETER samsung_param =\r
{\r
IRMP_SAMSUNG_PROTOCOL, // protocol: ir protocol\r
SAMSUNG_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_MATSUSHITA_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER matsushita_param =\r
+static const PROGMEM IRMP_PARAMETER matsushita_param =\r
{\r
IRMP_MATSUSHITA_PROTOCOL, // protocol: ir protocol\r
MATSUSHITA_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER kaseikyo_param =\r
+static const PROGMEM IRMP_PARAMETER kaseikyo_param =\r
{\r
IRMP_KASEIKYO_PROTOCOL, // protocol: ir protocol\r
KASEIKYO_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_RECS80_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER recs80_param =\r
+static const PROGMEM IRMP_PARAMETER recs80_param =\r
{\r
IRMP_RECS80_PROTOCOL, // protocol: ir protocol\r
RECS80_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_RC5_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER rc5_param =\r
+static const PROGMEM IRMP_PARAMETER rc5_param =\r
{\r
IRMP_RC5_PROTOCOL, // protocol: ir protocol\r
RC5_BIT_LEN_MIN, // pulse_1_len_min: here: minimum length of short pulse\r
\r
#if IRMP_SUPPORT_DENON_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER denon_param =\r
+static const PROGMEM IRMP_PARAMETER denon_param =\r
{\r
IRMP_DENON_PROTOCOL, // protocol: ir protocol\r
DENON_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_RC6_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER rc6_param =\r
+static const PROGMEM IRMP_PARAMETER rc6_param =\r
{\r
IRMP_RC6_PROTOCOL, // protocol: ir protocol\r
\r
\r
#if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER recs80ext_param =\r
+static const PROGMEM IRMP_PARAMETER recs80ext_param =\r
{\r
IRMP_RECS80EXT_PROTOCOL, // protocol: ir protocol\r
RECS80EXT_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_NUBERT_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER nubert_param =\r
+static const PROGMEM IRMP_PARAMETER nubert_param =\r
{\r
IRMP_NUBERT_PROTOCOL, // protocol: ir protocol\r
NUBERT_1_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER bang_olufsen_param =\r
+static const PROGMEM IRMP_PARAMETER bang_olufsen_param =\r
{\r
IRMP_BANG_OLUFSEN_PROTOCOL, // protocol: ir protocol\r
BANG_OLUFSEN_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
static uint8_t first_bit;\r
\r
-static PROGMEM IRMP_PARAMETER grundig_param =\r
+static const PROGMEM IRMP_PARAMETER grundig_param =\r
{\r
IRMP_GRUNDIG_PROTOCOL, // protocol: ir protocol\r
\r
\r
#if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER ruwido_param =\r
+static const PROGMEM IRMP_PARAMETER ruwido_param =\r
{\r
IRMP_RUWIDO_PROTOCOL, // protocol: ir protocol\r
SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN, // pulse_1_len_min: here: minimum length of short pulse\r
\r
#if IRMP_SUPPORT_FDC_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER fdc_param =\r
+static const PROGMEM IRMP_PARAMETER fdc_param =\r
{\r
IRMP_FDC_PROTOCOL, // protocol: ir protocol\r
FDC_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_RCCAR_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER rccar_param =\r
+static const PROGMEM IRMP_PARAMETER rccar_param =\r
{\r
IRMP_RCCAR_PROTOCOL, // protocol: ir protocol\r
RCCAR_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_NIKON_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER nikon_param =\r
+static const PROGMEM IRMP_PARAMETER nikon_param =\r
{\r
IRMP_NIKON_PROTOCOL, // protocol: ir protocol\r
NIKON_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_KATHREIN_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER kathrein_param =\r
+static const PROGMEM IRMP_PARAMETER kathrein_param =\r
{\r
IRMP_KATHREIN_PROTOCOL, // protocol: ir protocol\r
KATHREIN_1_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#if IRMP_SUPPORT_NETBOX_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER netbox_param =\r
+static const 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, here: exact value\r
\r
#if IRMP_SUPPORT_LEGO_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER lego_param =\r
+static const PROGMEM IRMP_PARAMETER lego_param =\r
{\r
IRMP_LEGO_PROTOCOL, // protocol: ir protocol\r
LEGO_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#endif\r
\r
-#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1\r
-\r
-static PROGMEM IRMP_PARAMETER netbox_param =\r
-{\r
- IRMP_MERLIN_PROTOCOL, // protocol: ir protocol\r
- MERLIN_PULSE_LEN, // pulse_1_len_min: minimum length of pulse with bit value 1, here: exact value\r
- MERLIN_PULSE_REST_LEN, // pulse_1_len_max: maximum length of pulse with bit value 1, here: rest value\r
- MERLIN_PAUSE_LEN, // pause_1_len_min: minimum length of pause with bit value 1, here: exact value\r
- MERLIN_PAUSE_REST_LEN, // pause_1_len_max: maximum length of pause with bit value 1, here: rest value\r
- MERLIN_PULSE_LEN, // pulse_0_len_min: minimum length of pulse with bit value 0, here: exact value\r
- MERLIN_PULSE_REST_LEN, // pulse_0_len_max: maximum length of pulse with bit value 0, here: rest value\r
- MERLIN_PAUSE_LEN, // pause_0_len_min: minimum length of pause with bit value 0, here: exact value\r
- MERLIN_PAUSE_REST_LEN, // pause_0_len_max: maximum length of pause with bit value 0, here: rest value\r
- MERLIN_ADDRESS_OFFSET, // address_offset: address offset\r
- MERLIN_ADDRESS_OFFSET + MERLIN_ADDRESS_LEN, // address_end: end of address\r
- MERLIN_COMMAND_OFFSET, // command_offset: command offset\r
- MERLIN_COMMAND_OFFSET + MERLIN_COMMAND_LEN, // command_end: end of command\r
- MERLIN_COMPLETE_DATA_LEN, // complete_len: complete length of frame\r
- MERLIN_STOP_BIT, // stop_bit: flag: frame has stop bit\r
- MERLIN_LSB, // lsb_first: flag: LSB first\r
- MERLIN_FLAGS // flags: some flags\r
-};\r
-\r
-#endif\r
-\r
#if IRMP_SUPPORT_THOMSON_PROTOCOL == 1\r
\r
-static PROGMEM IRMP_PARAMETER thomson_param =\r
+static const PROGMEM IRMP_PARAMETER thomson_param =\r
{\r
IRMP_THOMSON_PROTOCOL, // protocol: ir protocol\r
THOMSON_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
\r
#endif\r
\r
-#if IRMP_SUPPORT_IMON_PROTOCOL == 1\r
-\r
-static PROGMEM IRMP_PARAMETER imon_param =\r
-{\r
- IRMP_IMON_PROTOCOL, // protocol: ir protocol\r
- IMON_PULSE_LEN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
- IMON_PULSE_REST_LEN, // pulse_1_len_max: maximum length of pulse with bit value 1\r
- IMON_PAUSE_LEN, // pause_1_len_min: minimum length of pause with bit value 1\r
- IMON_PAUSE_REST_LEN, // pause_1_len_max: maximum length of pause with bit value 1\r
- IMON_PULSE_LEN, // pulse_0_len_min: minimum length of pulse with bit value 0\r
- IMON_PULSE_REST_LEN, // pulse_0_len_max: maximum length of pulse with bit value 0\r
- IMON_PAUSE_LEN, // pause_0_len_min: minimum length of pause with bit value 0\r
- IMON_PAUSE_REST_LEN, // pause_0_len_max: maximum length of pause with bit value 0\r
- IMON_ADDRESS_OFFSET, // address_offset: address offset\r
- IMON_ADDRESS_OFFSET + IMON_ADDRESS_LEN, // address_end: end of address\r
- IMON_COMMAND_OFFSET, // command_offset: command offset\r
- IMON_COMMAND_OFFSET + IMON_COMMAND_LEN, // command_end: end of command\r
- IMON_COMPLETE_DATA_LEN, // complete_len: complete length of frame\r
- IMON_STOP_BIT, // stop_bit: flag: frame has stop bit\r
- IMON_LSB, // lsb_first: flag: LSB first\r
- IMON_FLAGS // flags: some flags\r
-};\r
-\r
-#endif\r
-\r
static uint8_t irmp_bit; // current bit position\r
static IRMP_PARAMETER irmp_param;\r
\r
static volatile uint16_t irmp_command;\r
static volatile uint16_t irmp_id; // only used for SAMSUNG protocol\r
static volatile uint8_t irmp_flags;\r
+// static volatile uint8_t irmp_busy_flag;\r
\r
#ifdef ANALYZE\r
static uint8_t IRMP_PIN;\r
void\r
irmp_init (void)\r
{\r
-#ifndef PIC_CCS_COMPILER\r
+#if !defined(PIC_CCS_COMPILER) && !defined(PIC_C18) // only AVR\r
IRMP_PORT &= ~(1<<IRMP_BIT); // deactivate pullup\r
IRMP_DDR &= ~(1<<IRMP_BIT); // set pin to input\r
-#endif // PIC_CCS_COMPILER\r
+#endif\r
\r
#if IRMP_LOGGING == 1\r
irmp_uart_init ();\r
}\r
break;\r
#endif\r
+#if IRMP_SUPPORT_RC5_PROTOCOL == 1\r
+ case IRMP_RC5_PROTOCOL:\r
+ irmp_address &= ~0x20; // clear toggle bit\r
+ rtc = TRUE;\r
+ break;\r
+#endif\r
#if IRMP_SUPPORT_IR60_PROTOCOL == 1\r
case IRMP_IR60_PROTOCOL:\r
if (irmp_command != 0x007d) // 0x007d (== 62<<1 + 1) is start instruction frame\r
return rtc;\r
}\r
\r
+// uint8_t\r
+// irmp_is_busy (void)\r
+// {\r
+// return irmp_busy_flag;\r
+// }\r
+\r
+#if IRMP_USE_CALLBACK == 1\r
+void\r
+irmp_set_callback_ptr (void (*cb)(uint8_t))\r
+{\r
+ irmp_callback_ptr = cb;\r
+}\r
+#endif // IRMP_USE_CALLBACK == 1\r
+\r
// these statics must not be volatile, because they are only used by irmp_store_bit(), which is called by irmp_ISR()\r
static uint16_t irmp_tmp_address; // ir address\r
static uint16_t irmp_tmp_command; // ir command\r
\r
irmp_input = input(IRMP_PIN);\r
\r
+#if IRMP_USE_CALLBACK == 1\r
+ if (irmp_callback_ptr)\r
+ {\r
+ static uint8_t last_inverted_input;\r
+\r
+ if (last_inverted_input != !irmp_input)\r
+ {\r
+ (*irmp_callback_ptr) (! irmp_input);\r
+ last_inverted_input = !irmp_input;\r
+ }\r
+ }\r
+#endif // IRMP_USE_CALLBACK == 1\r
+\r
irmp_log(irmp_input); // log ir signal, if IRMP_LOGGING defined\r
\r
if (! irmp_ir_detected) // ir code already detected?\r
{ // no...\r
if (! irmp_input) // receiving burst?\r
{ // yes...\r
+// irmp_busy_flag = TRUE;\r
#ifdef ANALYZE\r
if (! irmp_pulse_time)\r
{\r
ANALYZE_PRINTF ("%8d error 1: pause after start bit pulse %d too long: %d\n", time_counter, irmp_pulse_time, irmp_pause_time);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
}\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // reset flags, let's wait for another start bit\r
irmp_pulse_time = 0;\r
irmp_pause_time = 0;\r
irmp_pulse_time >= JVC_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= JVC_START_BIT_PULSE_LEN_MAX &&\r
irmp_pause_time >= JVC_REPEAT_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= JVC_REPEAT_START_BIT_PAUSE_LEN_MAX)\r
{\r
- ANALYZE_PRINTF ("protocol = NEC or JVC repeat frame, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
+ ANALYZE_PRINTF ("protocol = NEC or JVC (type 1) repeat frame, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
JVC_START_BIT_PULSE_LEN_MIN, JVC_START_BIT_PULSE_LEN_MAX,\r
JVC_REPEAT_START_BIT_PAUSE_LEN_MIN, JVC_REPEAT_START_BIT_PAUSE_LEN_MAX);\r
irmp_param_p = (IRMP_PARAMETER *) &nec_param;\r
else if (irmp_pulse_time >= NEC_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= NEC_START_BIT_PULSE_LEN_MAX &&\r
irmp_pause_time >= NEC_REPEAT_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NEC_REPEAT_START_BIT_PAUSE_LEN_MAX)\r
{ // it's NEC\r
- ANALYZE_PRINTF ("protocol = NEC (repetition frame), start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
- NEC_START_BIT_PULSE_LEN_MIN, NEC_START_BIT_PULSE_LEN_MAX,\r
- NEC_REPEAT_START_BIT_PAUSE_LEN_MIN, NEC_REPEAT_START_BIT_PAUSE_LEN_MAX);\r
+#if IRMP_SUPPORT_JVC_PROTOCOL == 1\r
+ if (irmp_protocol == IRMP_JVC_PROTOCOL) // last protocol was JVC, awaiting repeat frame\r
+ { // some jvc remote controls use nec repetition frame for jvc repetition frame\r
+ ANALYZE_PRINTF ("protocol = JVC repeat frame type 2, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
+ NEC_START_BIT_PULSE_LEN_MIN, NEC_START_BIT_PULSE_LEN_MAX,\r
+ NEC_REPEAT_START_BIT_PAUSE_LEN_MIN, NEC_REPEAT_START_BIT_PAUSE_LEN_MAX);\r
+ irmp_param_p = (IRMP_PARAMETER *) &nec_param;\r
+ }\r
+ else\r
+#endif // IRMP_SUPPORT_JVC_PROTOCOL == 1\r
+ {\r
+ ANALYZE_PRINTF ("protocol = NEC (repetition frame), start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
+ NEC_START_BIT_PULSE_LEN_MIN, NEC_START_BIT_PULSE_LEN_MAX,\r
+ NEC_REPEAT_START_BIT_PAUSE_LEN_MIN, NEC_REPEAT_START_BIT_PAUSE_LEN_MAX);\r
\r
- irmp_param_p = (IRMP_PARAMETER *) &nec_rep_param;\r
+ irmp_param_p = (IRMP_PARAMETER *) &nec_rep_param;\r
+ }\r
+ }\r
+ else\r
+\r
+#if IRMP_SUPPORT_JVC_PROTOCOL == 1\r
+ if (irmp_protocol == IRMP_JVC_PROTOCOL && // last protocol was JVC, awaiting repeat frame\r
+ irmp_pulse_time >= NEC_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= NEC_START_BIT_PULSE_LEN_MAX &&\r
+ irmp_pause_time >= NEC_0_PAUSE_LEN_MIN && irmp_pause_time <= NEC_0_PAUSE_LEN_MAX)\r
+ { // it's JVC repetition type 3\r
+ ANALYZE_PRINTF ("protocol = JVC repeat frame type 3, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
+ NEC_START_BIT_PULSE_LEN_MIN, NEC_START_BIT_PULSE_LEN_MAX,\r
+ NEC_0_PAUSE_LEN_MIN, NEC_0_PAUSE_LEN_MAX);\r
+ irmp_param_p = (IRMP_PARAMETER *) &nec_param;\r
}\r
else\r
+#endif // IRMP_SUPPORT_JVC_PROTOCOL == 1\r
+\r
#endif // IRMP_SUPPORT_NEC_PROTOCOL == 1\r
\r
#if IRMP_SUPPORT_NIKON_PROTOCOL == 1\r
else\r
#endif // IRMP_SUPPORT_NETBOX_PROTOCOL == 1\r
\r
-#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1\r
- if (irmp_pulse_time >= MERLIN_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= MERLIN_START_BIT_PULSE_LEN_MAX &&\r
- irmp_pause_time >= MERLIN_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= MERLIN_START_BIT_PAUSE_LEN_MAX)\r
- { // it's MERLIN\r
- ANALYZE_PRINTF ("protocol = MERLIN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
- MERLIN_START_BIT_PULSE_LEN_MIN, MERLIN_START_BIT_PULSE_LEN_MAX,\r
- MERLIN_START_BIT_PAUSE_LEN_MIN, MERLIN_START_BIT_PAUSE_LEN_MAX);\r
- irmp_param_p = (IRMP_PARAMETER *) &netbox_param;\r
- }\r
- else\r
-#endif // IRMP_SUPPORT_MERLIN_PROTOCOL == 1\r
-\r
#if IRMP_SUPPORT_LEGO_PROTOCOL == 1\r
if (irmp_pulse_time >= LEGO_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= LEGO_START_BIT_PULSE_LEN_MAX &&\r
irmp_pause_time >= LEGO_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= LEGO_START_BIT_PAUSE_LEN_MAX)\r
irmp_param_p = (IRMP_PARAMETER *) &lego_param;\r
}\r
else\r
-#endif // IRMP_SUPPORT_NEC_PROTOCOL == 1\r
-\r
-#if IRMP_SUPPORT_IMON_PROTOCOL == 1\r
- if (irmp_pulse_time >= IMON_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= IMON_START_BIT_PULSE_LEN_MAX &&\r
- irmp_pause_time >= IMON_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= IMON_START_BIT_PAUSE_LEN_MAX)\r
- { // it's IMON\r
- ANALYZE_PRINTF ("protocol = IMON, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
- IMON_START_BIT_PULSE_LEN_MIN, IMON_START_BIT_PULSE_LEN_MAX,\r
- IMON_START_BIT_PAUSE_LEN_MIN, IMON_START_BIT_PAUSE_LEN_MAX);\r
- irmp_param_p = (IRMP_PARAMETER *) &imon_param;\r
- }\r
- else\r
-#endif // IRMP_SUPPORT_IMON_PROTOCOL == 1\r
+#endif // IRMP_SUPPORT_LEGO_PROTOCOL == 1\r
\r
{\r
ANALYZE_PRINTF ("protocol = UNKNOWN\n");\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // wait for another start bit...\r
}\r
\r
\r
if (! (irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER))\r
{\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
+ 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
+ }\r
+ else\r
+ {\r
+ ANALYZE_PRINTF ("pulse: %3d - %3d or %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max,\r
+ 2 * irmp_param.pulse_0_len_min, 2 * irmp_param.pulse_0_len_max);\r
+ ANALYZE_PRINTF ("pause: %3d - %3d or %3d - %3d\n", irmp_param.pause_0_len_min, irmp_param.pause_0_len_max,\r
+ 2 * irmp_param.pause_0_len_min, 2 * irmp_param.pause_0_len_max);\r
}\r
\r
#if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1\r
}\r
else\r
{\r
- ANALYZE_PRINTF ("error: stop bit timing wrong\n");\r
+ ANALYZE_PRINTF ("error: stop bit timing wrong, irmp_bit = %d, irmp_pulse_time = %d, pulse_0_len_min = %d, pulse_0_len_max = %d\n",\r
+ irmp_bit, irmp_pulse_time, irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);\r
\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // wait for another start bit...\r
irmp_pulse_time = 0;\r
irmp_pause_time = 0;\r
got_light = TRUE; // this is a lie, but helps (generates stop bit)\r
}\r
else\r
-#if 1\r
- // MERLIN generates no stop bit, here is the timeout condition:\r
- if ((irmp_param.flags & IRMP_PARAM_FLAG_IS_SERIAL) && irmp_param.protocol == IRMP_MERLIN_PROTOCOL &&\r
- irmp_pause_time >= MERLIN_PULSE_LEN * (MERLIN_COMPLETE_DATA_LEN - irmp_bit))\r
- {\r
- got_light = TRUE; // this is a lie, but helps (generates stop bit)\r
- }\r
- else\r
-#endif\r
#endif\r
#if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1\r
if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL && !irmp_param.stop_bit)\r
#if IRMP_SUPPORT_JVC_PROTOCOL == 1\r
else if (irmp_param.protocol == IRMP_NEC_PROTOCOL && (irmp_bit == 16 || irmp_bit == 17)) // it was a JVC stop bit\r
{\r
- ANALYZE_PRINTF ("Switching to JVC protocol\n");\r
+ ANALYZE_PRINTF ("Switching to JVC protocol, irmp_bit = %d\n", irmp_bit);\r
irmp_param.stop_bit = TRUE; // set flag\r
irmp_param.protocol = IRMP_JVC_PROTOCOL; // switch protocol\r
irmp_param.complete_len = irmp_bit; // patch length: 16 or 17\r
}\r
#endif // IRMP_SUPPORT_NEC_PROTOCOL == 1\r
#if IRMP_SUPPORT_JVC_PROTOCOL == 1\r
- else if (irmp_param.protocol == IRMP_NEC42_PROTOCOL && irmp_bit == 16) // it was a JVC stop bit\r
+ else if (irmp_param.protocol == IRMP_NEC42_PROTOCOL && (irmp_bit == 16 || irmp_bit == 17)) // it was a JVC stop bit\r
{\r
- ANALYZE_PRINTF ("Switching to JVC protocol\n");\r
+ ANALYZE_PRINTF ("Switching to JVC protocol, irmp_bit = %d\n", irmp_bit);\r
irmp_param.stop_bit = TRUE; // set flag\r
irmp_param.protocol = IRMP_JVC_PROTOCOL; // switch protocol\r
irmp_param.complete_len = irmp_bit; // patch length: 16 or 17\r
ANALYZE_PRINTF ("error 2: pause %d after data bit %d too long\n", irmp_pause_time, irmp_bit);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // wait for another start bit...\r
irmp_pulse_time = 0;\r
irmp_pause_time = 0;\r
ANALYZE_NEWLINE ();\r
ANALYZE_PRINTF ("error 3 manchester: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
irmp_pause_time = 0;\r
}\r
{ // timing incorrect!\r
ANALYZE_PRINTF ("error 3 Samsung: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
irmp_pause_time = 0;\r
}\r
#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.protocol = IRMP_NEC16_PROTOCOL;\r
irmp_param.address_offset = NEC16_ADDRESS_OFFSET;\r
irmp_param.address_end = NEC16_ADDRESS_OFFSET + NEC16_ADDRESS_LEN;\r
irmp_param.command_offset = NEC16_COMMAND_OFFSET;\r
{ // timing incorrect!\r
ANALYZE_PRINTF ("error 3a B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
irmp_pause_time = 0;\r
}\r
{ // timing incorrect!\r
ANALYZE_PRINTF ("error 3b B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
irmp_pause_time = 0;\r
}\r
{ // timing incorrect!\r
ANALYZE_PRINTF ("error 3c B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
irmp_pause_time = 0;\r
}\r
{ // timing incorrect!\r
ANALYZE_PRINTF ("error 3d B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
irmp_pause_time = 0;\r
}\r
{ // timing incorrect!\r
ANALYZE_PRINTF ("error 3: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
irmp_pause_time = 0;\r
}\r
\r
irmp_address = irmp_tmp_address; // store address\r
#if IRMP_SUPPORT_NEC_PROTOCOL == 1\r
- last_irmp_address = irmp_tmp_address; // store as last address, too\r
+ if (irmp_param.protocol == IRMP_NEC_PROTOCOL)\r
+ {\r
+ last_irmp_address = irmp_tmp_address; // store as last address, too\r
+ }\r
#endif\r
\r
#if IRMP_SUPPORT_RC5_PROTOCOL == 1\r
\r
if (irmp_ir_detected)\r
{\r
- if (last_irmp_command == irmp_command &&\r
- last_irmp_address == irmp_address &&\r
+ if (last_irmp_command == irmp_tmp_command &&\r
+ last_irmp_address == irmp_tmp_address &&\r
repetition_len < IRMP_KEY_REPETITION_LEN)\r
{\r
irmp_flags |= IRMP_FLAG_REPETITION;\r
ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
}\r
\r
+// irmp_busy_flag = FALSE;\r
irmp_start_bit_detected = 0; // and wait for next start bit\r
irmp_tmp_command = 0;\r
irmp_pulse_time = 0;\r