From 46dd89b73055232942379e65afbb1dab5f95c445 Mon Sep 17 00:00:00 2001 From: ukw Date: Wed, 28 Apr 2010 14:58:16 +0000 Subject: [PATCH 1/1] Version 1.2.1: added APPLE_PROTOCOL to irsnd git-svn-id: svn://mikrocontroller.net/irmp@10 aeb2e35e-bfc4-4214-b83c-9e8de998ed28 --- IR-Data/test-suite.sh | 1 + README.txt | 4 +- irmp.c | 206 ++++++++++++++++++++++-------------------- irmp.exe | Bin 21504 -> 20480 bytes irsnd.aps | 2 +- irsnd.c | 72 ++++----------- irsnd.exe | Bin 12288 -> 12288 bytes irsndconfig.h | 56 ++++++++++++ irsndmain.c | 1 + 9 files changed, 187 insertions(+), 155 deletions(-) create mode 100644 irsndconfig.h diff --git a/IR-Data/test-suite.sh b/IR-Data/test-suite.sh index 60a1b02..353c4d3 100644 --- a/IR-Data/test-suite.sh +++ b/IR-Data/test-suite.sh @@ -7,6 +7,7 @@ for j in \ Samsung_DVD_Rec_00062C.txt \ Samsung_TV.txt \ Sony-RM-S-310.txt \ + sony-rm-s311.txt \ Sony-RM-U305C.txt \ Sony-RMT-D142P-DVD.txt \ Sony-RMT-V406.txt \ diff --git a/README.txt b/README.txt index 40d9a36..a01a7fe 100644 --- a/README.txt +++ b/README.txt @@ -1,8 +1,8 @@ IRMP - Infrared Multi Protocol Decoder -------------------------------------- -Version IRMP: 1.1.1 16.04.2010 -Version IRSND: 1.1.1 16.04.2010 +Version IRMP: 1.2.1 28.04.2010 +Version IRSND: 1.2.1 28.04.2010 Dokumentation: diff --git a/irmp.c b/irmp.c index f74363f..470a2f9 100644 --- a/irmp.c +++ b/irmp.c @@ -3,7 +3,7 @@ * * Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de * - * $Id: irmp.c,v 1.17 2010/04/16 09:23:29 fm Exp $ + * $Id: irmp.c,v 1.20 2010/04/19 13:42:17 fm Exp $ * * ATMEGA88 @ 8 MHz * @@ -12,6 +12,7 @@ * SIRCS - Sony * NEC - NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, and many other Japanese manufacturers * SAMSUNG - Samsung + * SAMSUNG32 - Samsung * MATSUSHITA - Matsushita * KASEIKYO - Panasonic, Denon & other Japanese manufacturers (members of "Japan's Association for Electric Home Application") * RECS80 - Philips, Nokia, Thomson, Nordmende, Telefunken, Saba @@ -461,8 +462,8 @@ typedef unsigned int16 uint16_t; #define AUTO_REPETITION_LEN (uint16_t)(F_INTERRUPTS * AUTO_REPETITION_TIME + 0.5) // use uint16_t! #ifdef DEBUG -#define DEBUG_PUTCHAR(a) { if (! silent) { putchar (a); } } -#define DEBUG_PRINTF(...) { if (! silent) { printf (__VA_ARGS__); } } +#define DEBUG_PUTCHAR(a) { if (! silent) { putchar (a); } } +#define DEBUG_PRINTF(...) { if (! silent) { printf (__VA_ARGS__); } } static int silent; #else #define DEBUG_PUTCHAR(a) @@ -474,17 +475,17 @@ static int silent; #define UART_BAUD 9600L // calculate real baud rate: -#define UBRR_VAL ((F_CPU+UART_BAUD*8)/(UART_BAUD*16)-1) // round -#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // real baudrate +#define UBRR_VAL ((F_CPU + UART_BAUD * 8) / (UART_BAUD * 16) - 1) // round +#define BAUD_REAL (F_CPU / (16 * (UBRR_VAL + 1))) // real baudrate #ifdef CODEVISION -#if ((BAUD_REAL*1000)/UART_BAUD-1000) > 10 +#if ((BAUD_REAL * 1000) / UART_BAUD - 1000) > 10 # error Error of baud rate of RS232 UARTx is more than 1%. That is too high! #endif #else // not CODEVISION -#define BAUD_ERROR ((BAUD_REAL*1000)/UART_BAUD-1000) // error in promille +#define BAUD_ERROR ((BAUD_REAL * 1000) / UART_BAUD - 1000) // error in promille #if ((BAUD_ERROR > 10) || (-BAUD_ERROR < 10)) # error Error of baud rate of RS232 UARTx is more than 1%. That is too high! @@ -500,9 +501,9 @@ static int silent; void irmp_uart_init (void) { - UCSR0B |= (1<> 8; // store baudrate (upper byte) - UBRR0L = UBRR_VAL & 0xFF; // store baudrate (lower byte) + UCSR0B |= (1<> 8; // store baudrate (upper byte) + UBRR0L = UBRR_VAL & 0xFF; // store baudrate (lower byte) } /*--------------------------------------------------------------------------------------------------------------------------------------------------- @@ -526,19 +527,19 @@ irmp_uart_putc (unsigned char ch) * Log IR signal *--------------------------------------------------------------------------------------------------------------------------------------------------- */ -#define c_startcycles 2 // min count of zeros before start of logging -#define c_endBits 1000 // log buffer size -#define c_datalen 700 // number of sequenced highbits to detect end +#define c_startcycles 2 // min count of zeros before start of logging +#define c_endBits 1000 // log buffer size +#define c_datalen 700 // number of sequenced highbits to detect end static void irmp_logIr (uint8_t val) { - static uint8_t s_data[c_datalen]; // logging buffer - static uint16_t s_dataIdx; // number of written bits - static uint8_t s_startcycles; // current number of start-zeros - static uint16_t s_ctr; // counts sequenced highbits - to detect end + static uint8_t s_data[c_datalen]; // logging buffer + static uint16_t s_dataIdx; // number of written bits + static uint8_t s_startcycles; // current number of start-zeros + static uint16_t s_ctr; // counts sequenced highbits - to detect end - if ((val == 0) && (s_startcycles < c_startcycles) && !s_dataIdx) // prevent that single random zeros init logging + if ((val == 0) && (s_startcycles < c_startcycles) && !s_dataIdx) // prevent that single random zeros init logging { ++s_startcycles; } @@ -546,11 +547,11 @@ irmp_logIr (uint8_t val) { s_startcycles = 0; - if ( (val == 0) // start or continue logging on "0" - || ((val == 1) && (s_dataIdx != 0))) // "1" cannot init logging + if ( (val == 0) // start or continue logging on "0" + || ((val == 1) && (s_dataIdx != 0))) // "1" cannot init logging { if (val) - { // set or clear bit in bitarray + { // set or clear bit in bitarray s_data[(s_dataIdx / 8)] |= (1<<(s_dataIdx % 8)); } else @@ -561,19 +562,19 @@ irmp_logIr (uint8_t val) ++s_dataIdx; if (val) - { // if high received then look at log-stop condition + { // if high received then look at log-stop condition ++s_ctr; if (s_ctr > c_endBits) - { // if stop condition (200 sequenced ones) meets, output on uart + { // if stop condition (200 sequenced ones) meets, output on uart uint16_t i; for (i = 0; i < c_startcycles; ++i) { - irmp_uart_putc ('0'); // the ignored starting zeros + irmp_uart_putc ('0'); // the ignored starting zeros } - for (i = 0;i < (s_dataIdx - c_endBits + 20) / 8; ++i) // transform bitset into uart chars + for (i = 0;i < (s_dataIdx - c_endBits + 20) / 8; ++i) // transform bitset into uart chars { uint8_t d = s_data[i]; uint8_t j; @@ -667,6 +668,26 @@ static PROGMEM IRMP_PARAMETER nec_param = NEC_LSB }; +static PROGMEM IRMP_PARAMETER nec_rep_param = +{ + IRMP_NEC_PROTOCOL, + NEC_PULSE_LEN_MIN, + NEC_PULSE_LEN_MAX, + NEC_1_PAUSE_LEN_MIN, + NEC_1_PAUSE_LEN_MAX, + NEC_PULSE_LEN_MIN, + NEC_PULSE_LEN_MAX, + NEC_0_PAUSE_LEN_MIN, + NEC_0_PAUSE_LEN_MAX, + 0, + 0, + 0, + 0, + 0, + NEC_STOP_BIT, + NEC_LSB +}; + #endif #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 @@ -1137,48 +1158,39 @@ irmp_ISR (void) } else { // receiving first data pulse! + IRMP_PARAMETER * irmp_param_p = (IRMP_PARAMETER *) 0; + DEBUG_PRINTF ("start-bit: pulse = %d, pause = %d\n", irmp_pulse_time, irmp_pause_time); #if IRMP_SUPPORT_SIRCS_PROTOCOL == 1 if (irmp_pulse_time >= SIRCS_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= SIRCS_START_BIT_PULSE_LEN_MAX && irmp_pause_time >= SIRCS_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= SIRCS_START_BIT_PAUSE_LEN_MAX) - { // it's SIRCS + { // it's SIRCS DEBUG_PRINTF ("protocol = SIRCS, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", SIRCS_START_BIT_PULSE_LEN_MIN, SIRCS_START_BIT_PULSE_LEN_MAX, SIRCS_START_BIT_PAUSE_LEN_MIN, SIRCS_START_BIT_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &sircs_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) (IRMP_PARAMETER *) &sircs_param; } else #endif // IRMP_SUPPORT_SIRCS_PROTOCOL == 1 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 if (irmp_pulse_time >= NEC_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= NEC_START_BIT_PULSE_LEN_MAX && - ((irmp_pause_time >= NEC_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NEC_START_BIT_PAUSE_LEN_MAX) || - (irmp_pause_time >= NEC_REPEAT_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NEC_REPEAT_START_BIT_PAUSE_LEN_MAX))) - { // it's NEC - if (irmp_pause_time <= NEC_REPEAT_START_BIT_PAUSE_LEN_MAX) - { - DEBUG_PRINTF ("protocol = NEC (repetition frame), start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", - NEC_START_BIT_PULSE_LEN_MIN, NEC_START_BIT_PULSE_LEN_MAX, - NEC_REPEAT_START_BIT_PAUSE_LEN_MIN, NEC_REPEAT_START_BIT_PAUSE_LEN_MAX); - } - else - { - DEBUG_PRINTF ("protocol = NEC, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", - NEC_START_BIT_PULSE_LEN_MIN, NEC_START_BIT_PULSE_LEN_MAX, - NEC_START_BIT_PAUSE_LEN_MIN, NEC_START_BIT_PAUSE_LEN_MAX); - } - - memcpy_P (&irmp_param, &nec_param, sizeof (IRMP_PARAMETER)); - - if (irmp_pause_time <= NEC_REPEAT_START_BIT_PAUSE_LEN_MAX) - { - irmp_param.address_offset = 0; - irmp_param.address_end = 0; - irmp_param.command_offset = 0; - irmp_param.command_end = 0; - irmp_param.complete_len = 0; - } + irmp_pause_time >= NEC_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NEC_START_BIT_PAUSE_LEN_MAX) + { + DEBUG_PRINTF ("protocol = NEC, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", + NEC_START_BIT_PULSE_LEN_MIN, NEC_START_BIT_PULSE_LEN_MAX, + NEC_START_BIT_PAUSE_LEN_MIN, NEC_START_BIT_PAUSE_LEN_MAX); + irmp_param_p = (IRMP_PARAMETER *) &nec_param; + } + else if (irmp_pulse_time >= NEC_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= NEC_START_BIT_PULSE_LEN_MAX && + irmp_pause_time >= NEC_REPEAT_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NEC_REPEAT_START_BIT_PAUSE_LEN_MAX) + { // it's NEC + DEBUG_PRINTF ("protocol = NEC (repetition frame), start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", + NEC_START_BIT_PULSE_LEN_MIN, NEC_START_BIT_PULSE_LEN_MAX, + NEC_REPEAT_START_BIT_PAUSE_LEN_MIN, NEC_REPEAT_START_BIT_PAUSE_LEN_MAX); + + irmp_param_p = (IRMP_PARAMETER *) &nec_rep_param; } else #endif // IRMP_SUPPORT_NEC_PROTOCOL == 1 @@ -1186,11 +1198,11 @@ irmp_ISR (void) #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 if (irmp_pulse_time >= SAMSUNG_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= SAMSUNG_START_BIT_PULSE_LEN_MAX && irmp_pause_time >= SAMSUNG_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= SAMSUNG_START_BIT_PAUSE_LEN_MAX) - { // it's SAMSUNG + { // it's SAMSUNG DEBUG_PRINTF ("protocol = SAMSUNG, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", SAMSUNG_START_BIT_PULSE_LEN_MIN, SAMSUNG_START_BIT_PULSE_LEN_MAX, SAMSUNG_START_BIT_PAUSE_LEN_MIN, SAMSUNG_START_BIT_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &samsung_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &samsung_param; } else #endif // IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 @@ -1198,11 +1210,11 @@ irmp_ISR (void) #if IRMP_SUPPORT_MATSUSHITA_PROTOCOL == 1 if (irmp_pulse_time >= MATSUSHITA_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= MATSUSHITA_START_BIT_PULSE_LEN_MAX && irmp_pause_time >= MATSUSHITA_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= MATSUSHITA_START_BIT_PAUSE_LEN_MAX) - { // it's MATSUSHITA + { // it's MATSUSHITA DEBUG_PRINTF ("protocol = MATSUSHITA, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", MATSUSHITA_START_BIT_PULSE_LEN_MIN, MATSUSHITA_START_BIT_PULSE_LEN_MAX, MATSUSHITA_START_BIT_PAUSE_LEN_MIN, MATSUSHITA_START_BIT_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &matsushita_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &matsushita_param; } else #endif // IRMP_SUPPORT_MATSUSHITA_PROTOCOL == 1 @@ -1210,11 +1222,11 @@ irmp_ISR (void) #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 if (irmp_pulse_time >= KASEIKYO_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= KASEIKYO_START_BIT_PULSE_LEN_MAX && irmp_pause_time >= KASEIKYO_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= KASEIKYO_START_BIT_PAUSE_LEN_MAX) - { // it's KASEIKYO + { // it's KASEIKYO DEBUG_PRINTF ("protocol = KASEIKYO, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", KASEIKYO_START_BIT_PULSE_LEN_MIN, KASEIKYO_START_BIT_PULSE_LEN_MAX, KASEIKYO_START_BIT_PAUSE_LEN_MIN, KASEIKYO_START_BIT_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &kaseikyo_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &kaseikyo_param; } else #endif // IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 @@ -1222,11 +1234,11 @@ irmp_ISR (void) #if IRMP_SUPPORT_RECS80_PROTOCOL == 1 if (irmp_pulse_time >= RECS80_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= RECS80_START_BIT_PULSE_LEN_MAX && irmp_pause_time >= RECS80_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= RECS80_START_BIT_PAUSE_LEN_MAX) - { // it's RECS80 + { // it's RECS80 DEBUG_PRINTF ("protocol = RECS80, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", RECS80_START_BIT_PULSE_LEN_MIN, RECS80_START_BIT_PULSE_LEN_MAX, RECS80_START_BIT_PAUSE_LEN_MIN, RECS80_START_BIT_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &recs80_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &recs80_param; } else #endif // IRMP_SUPPORT_RECS80_PROTOCOL == 1 @@ -1236,11 +1248,11 @@ irmp_ISR (void) (irmp_pulse_time >= 2 * RC5_START_BIT_LEN_MIN && irmp_pulse_time <= 2 * RC5_START_BIT_LEN_MAX)) && ((irmp_pause_time >= RC5_START_BIT_LEN_MIN && irmp_pause_time <= RC5_START_BIT_LEN_MAX) || (irmp_pause_time >= 2 * RC5_START_BIT_LEN_MIN && irmp_pause_time <= 2 * RC5_START_BIT_LEN_MAX))) - { // it's RC5 + { // it's RC5 DEBUG_PRINTF ("protocol = RC5, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", RC5_START_BIT_LEN_MIN, RC5_START_BIT_LEN_MAX, RC5_START_BIT_LEN_MIN, RC5_START_BIT_LEN_MAX); - memcpy_P (&irmp_param, &rc5_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &rc5_param; last_pause = irmp_pause_time; if ((irmp_pulse_time > RC5_START_BIT_LEN_MAX && irmp_pulse_time <= 2 * RC5_START_BIT_LEN_MAX) || @@ -1266,7 +1278,7 @@ irmp_ISR (void) DENON_PULSE_LEN_MIN, DENON_PULSE_LEN_MAX, DENON_1_PAUSE_LEN_MIN, DENON_1_PAUSE_LEN_MAX, DENON_0_PAUSE_LEN_MIN, DENON_0_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &denon_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &denon_param; } else #endif // IRMP_SUPPORT_DENON_PROTOCOL == 1 @@ -1278,7 +1290,7 @@ irmp_ISR (void) DEBUG_PRINTF ("protocol = RC6, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", RC6_START_BIT_PULSE_LEN_MIN, RC6_START_BIT_PULSE_LEN_MAX, RC6_START_BIT_PAUSE_LEN_MIN, RC6_START_BIT_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &rc6_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &rc6_param; last_pause = 0; last_value = 0; } @@ -1288,11 +1300,11 @@ irmp_ISR (void) #if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1 if (irmp_pulse_time >= RECS80EXT_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= RECS80EXT_START_BIT_PULSE_LEN_MAX && irmp_pause_time >= RECS80EXT_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= RECS80EXT_START_BIT_PAUSE_LEN_MAX) - { // it's RECS80EXT + { // it's RECS80EXT DEBUG_PRINTF ("protocol = RECS80EXT, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", RECS80EXT_START_BIT_PULSE_LEN_MIN, RECS80EXT_START_BIT_PULSE_LEN_MAX, RECS80EXT_START_BIT_PAUSE_LEN_MIN, RECS80EXT_START_BIT_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &recs80ext_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &recs80ext_param; } else #endif // IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1 @@ -1300,11 +1312,11 @@ irmp_ISR (void) #if IRMP_SUPPORT_NUBERT_PROTOCOL == 1 if (irmp_pulse_time >= NUBERT_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= NUBERT_START_BIT_PULSE_LEN_MAX && irmp_pause_time >= NUBERT_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NUBERT_START_BIT_PAUSE_LEN_MAX) - { // it's NUBERT + { // it's NUBERT DEBUG_PRINTF ("protocol = NUBERT, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n", NUBERT_START_BIT_PULSE_LEN_MIN, NUBERT_START_BIT_PULSE_LEN_MAX, NUBERT_START_BIT_PAUSE_LEN_MIN, NUBERT_START_BIT_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &nubert_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &nubert_param; } else #endif // IRMP_SUPPORT_NUBERT_PROTOCOL == 1 @@ -1312,7 +1324,7 @@ irmp_ISR (void) #if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 if (irmp_pulse_time >= BANG_OLUFSEN_START_BIT1_PULSE_LEN_MIN && irmp_pulse_time <= BANG_OLUFSEN_START_BIT1_PULSE_LEN_MAX && irmp_pause_time >= BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MAX) - { // it's BANG_OLUFSEN + { // it's BANG_OLUFSEN DEBUG_PRINTF ("protocol = BANG_OLUFSEN\n"); DEBUG_PRINTF ("start bit 1 timings: pulse: %3d - %3d, pause: %3d - %3d\n", BANG_OLUFSEN_START_BIT1_PULSE_LEN_MIN, BANG_OLUFSEN_START_BIT1_PULSE_LEN_MAX, @@ -1326,7 +1338,7 @@ irmp_ISR (void) DEBUG_PRINTF ("start bit 4 timings: pulse: %3d - %3d, pause: %3d - %3d\n", BANG_OLUFSEN_START_BIT4_PULSE_LEN_MIN, BANG_OLUFSEN_START_BIT4_PULSE_LEN_MAX, BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MIN, BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MAX); - memcpy_P (&irmp_param, &bang_olufsen_param, sizeof (IRMP_PARAMETER)); + irmp_param_p = (IRMP_PARAMETER *) &bang_olufsen_param; last_value = 0; } else @@ -1339,8 +1351,11 @@ irmp_ISR (void) if (irmp_start_bit_detected) { + memcpy_P (&irmp_param, irmp_param_p, sizeof (IRMP_PARAMETER)); + DEBUG_PRINTF ("pulse_1: %3d - %3d\n", irmp_param.pulse_1_len_min, irmp_param.pulse_1_len_max); DEBUG_PRINTF ("pause_1: %3d - %3d\n", irmp_param.pause_1_len_min, irmp_param.pause_1_len_max); + #if IRMP_SUPPORT_RC6_PROTOCOL == 1 if (irmp_param.protocol == IRMP_RC6_PROTOCOL) { @@ -1349,6 +1364,7 @@ irmp_ISR (void) #endif DEBUG_PRINTF ("pulse_0: %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max); DEBUG_PRINTF ("pause_0: %3d - %3d\n", irmp_param.pause_0_len_min, irmp_param.pause_0_len_max); + #if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 if (irmp_param.protocol == IRMP_BANG_OLUFSEN_PROTOCOL) { @@ -1358,9 +1374,9 @@ irmp_ISR (void) #endif DEBUG_PRINTF ("command_offset: %2d\n", irmp_param.command_offset); - DEBUG_PRINTF ("command_len: %3d\n", irmp_param.command_end - irmp_param.command_offset); - DEBUG_PRINTF ("complete_len: %3d\n", irmp_param.complete_len); - DEBUG_PRINTF ("stop_bit: %3d\n", irmp_param.stop_bit); + DEBUG_PRINTF ("command_len: %3d\n", irmp_param.command_end - irmp_param.command_offset); + DEBUG_PRINTF ("complete_len: %3d\n", irmp_param.complete_len); + DEBUG_PRINTF ("stop_bit: %3d\n", irmp_param.stop_bit); } irmp_bit = 0; @@ -1447,7 +1463,7 @@ irmp_ISR (void) irmp_pause_time > SIRCS_PAUSE_LEN_MAX && // minimum is 12 irmp_bit >= 12 - 1) // pause too long? { // yes, break and close this frame - irmp_param.complete_len = irmp_bit + 1; // set new complete length + irmp_param.complete_len = irmp_bit + 1; // set new complete length got_light = TRUE; // this is a lie, but helps (generates stop bit) irmp_param.command_end = irmp_param.command_offset + irmp_bit + 1; // correct command length irmp_pause_time = SIRCS_PAUSE_LEN_MAX - 1; // correct pause length @@ -1459,7 +1475,7 @@ irmp_ISR (void) irmp_pause_time > 2 * RC5_BIT_LEN_MAX && irmp_bit >= RC5_COMPLETE_DATA_LEN - 2 && !irmp_param.stop_bit) { // special rc5 decoder got_light = TRUE; // this is a lie, but generates a stop bit ;-) - irmp_param.stop_bit = TRUE; // set flag + irmp_param.stop_bit = TRUE; // set flag } else #endif @@ -1468,7 +1484,7 @@ irmp_ISR (void) irmp_pause_time > 2 * RC6_BIT_LEN_MAX && irmp_bit >= irmp_param.complete_len - 2 && !irmp_param.stop_bit) { // special rc6 decoder got_light = TRUE; // this is a lie, but generates a stop bit ;-) - irmp_param.stop_bit = TRUE; // set flag + irmp_param.stop_bit = TRUE; // set flag } else #endif @@ -1499,7 +1515,7 @@ irmp_ISR (void) DEBUG_PRINTF ("[bit %2d: pulse = %3d, pause = %3d] ", irmp_bit, irmp_pulse_time, irmp_pause_time); #if IRMP_SUPPORT_RC5_PROTOCOL == 1 - if (irmp_param.protocol == IRMP_RC5_PROTOCOL) // special rc5 decoder + if (irmp_param.protocol == IRMP_RC5_PROTOCOL) // special rc5 decoder { if (irmp_pulse_time > RC5_BIT_LEN_MAX && irmp_pulse_time <= 2 * RC5_BIT_LEN_MAX) { @@ -1597,7 +1613,7 @@ irmp_ISR (void) wait_for_space = 0; } else -#endif +#endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 if (irmp_param.protocol == IRMP_SAMSUNG_PROTOCOL && irmp_bit == 16) // Samsung: 16th bit @@ -1640,8 +1656,6 @@ irmp_ISR (void) irmp_start_bit_detected = 0; // reset flags and wait for next start bit irmp_pause_time = 0; } - - irmp_pulse_time = 1; // set counter to 1, not 0 } else #endif // IRMP_SUPPORT_SAMSUNG_PROTOCOL @@ -1651,7 +1665,7 @@ irmp_ISR (void) { if (irmp_pulse_time >= BANG_OLUFSEN_PULSE_LEN_MIN && irmp_pulse_time <= BANG_OLUFSEN_PULSE_LEN_MAX) { - if (irmp_bit == 1) // Bang & Olufsen: 3rd bit + if (irmp_bit == 1) // Bang & Olufsen: 3rd bit { if (irmp_pause_time >= BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX) { @@ -1663,13 +1677,11 @@ irmp_ISR (void) else { // timing incorrect! DEBUG_PRINTF ("error 3a B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time); - irmp_start_bit_detected = 0; // reset flags and wait for next start bit + irmp_start_bit_detected = 0; // reset flags and wait for next start bit irmp_pause_time = 0; } - - irmp_pulse_time = 1; // set counter to 1, not 0 } - else if (irmp_bit == 19) // Bang & Olufsen: trailer bit + else if (irmp_bit == 19) // Bang & Olufsen: trailer bit { if (irmp_pause_time >= BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MAX) { @@ -1679,26 +1691,24 @@ irmp_ISR (void) irmp_bit++; } else - { // timing incorrect! + { // timing incorrect! DEBUG_PRINTF ("error 3b B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time); - irmp_start_bit_detected = 0; // reset flags and wait for next start bit + irmp_start_bit_detected = 0; // reset flags and wait for next start bit irmp_pause_time = 0; } - - irmp_pulse_time = 1; // set counter to 1, not 0 } else { - if (irmp_pause_time >= irmp_param.pause_1_len_min && irmp_pause_time <= irmp_param.pause_1_len_max) - { // pulse & pause timings correct for "1"? + if (irmp_pause_time >= BANG_OLUFSEN_1_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_1_PAUSE_LEN_MAX) + { // pulse & pause timings correct for "1"? DEBUG_PUTCHAR ('1'); DEBUG_PUTCHAR ('\n'); irmp_store_bit (1); last_value = 1; wait_for_space = 0; } - else if (irmp_pause_time >= irmp_param.pause_0_len_min && irmp_pause_time <= irmp_param.pause_0_len_max) - { // pulse & pause timings correct for "0"? + else if (irmp_pause_time >= BANG_OLUFSEN_0_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_0_PAUSE_LEN_MAX) + { // pulse & pause timings correct for "0"? DEBUG_PUTCHAR ('0'); DEBUG_PUTCHAR ('\n'); irmp_store_bit (0); @@ -1713,17 +1723,17 @@ irmp_ISR (void) wait_for_space = 0; } else - { // timing incorrect! + { // timing incorrect! DEBUG_PRINTF ("error 3c B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time); - irmp_start_bit_detected = 0; // reset flags and wait for next start bit + irmp_start_bit_detected = 0; // reset flags and wait for next start bit irmp_pause_time = 0; } } } else - { // timing incorrect! + { // timing incorrect! DEBUG_PRINTF ("error 3d B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time); - irmp_start_bit_detected = 0; // reset flags and wait for next start bit + irmp_start_bit_detected = 0; // reset flags and wait for next start bit irmp_pause_time = 0; } } diff --git a/irmp.exe b/irmp.exe index 62f1033383137ef254e2825f15fa815277671ee0..62438b09125e17ca77919f6e981a4a8f4361f4c8 100644 GIT binary patch delta 8570 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 Q$doY$=S+GV6=BQ20Bpnns{jB1 diff --git a/irsnd.aps b/irsnd.aps index 1bad7a9..06570bc 100644 --- a/irsnd.aps +++ b/irsnd.aps @@ -1 +1 @@ -irsnd07-Jan-2010 20:23:4907-Mar-2010 17:16:07241007-Jan-2010 20:23:4944, 18, 0, 670AVR GCCdefault\irsnd.elfC:\avr\irmp\AVR SimulatorATmega88.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000irsndmain.cirsnd.cirmp.hirsnd.hdefault\irsnd.lssdefault\irsnd.mapdefaultNOatmega88111irsnd.elfdefault\1-Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault1C:\Program Files\WinAVR-20090313\bin\avr-gcc.exeC:\Program Files\WinAVR-20090313\utils\bin\make.exe00000irsndmain.c100001irmp.h100002irsnd.c100003irsnd.h1 +irsnd07-Jan-2010 20:23:4928-Apr-2010 16:49:57241007-Jan-2010 20:23:4944, 18, 0, 670AVR GCCdefault\irsnd.elfC:\avr\irmp\AVR SimulatorATmega88.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000irsndmain.cirsnd.cirmp.hirsnd.hirsndconfig.hdefault\irsnd.lssdefault\irsnd.mapdefaultNOatmega88111irsnd.elfdefault\0-Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault1C:\Program Files\WinAVR-20090313\bin\avr-gcc.exeC:\Program Files\WinAVR-20090313\utils\bin\make.exe00000irsndmain.c100001irmp.h100002irsnd.c100003irsnd.h100004irsndconfig.h1 diff --git a/irsnd.c b/irsnd.c index c18db62..fb0ac47 100644 --- a/irsnd.c +++ b/irsnd.c @@ -3,7 +3,7 @@ * * Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de * - * $Id: irsnd.c,v 1.7 2010/04/14 13:21:39 fm Exp $ + * $Id: irsnd.c,v 1.9 2010/04/28 14:58:59 fm Exp $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,46 +47,10 @@ typedef unsigned short uint16_t; #endif // WIN32 #endif // unix -#include "irmpconfig.h" #include "irmp.h" +#include "irsndconfig.h" #include "irsnd.h" -/*--------------------------------------------------------------------------------------------------------------------------------------------------- - * Change settings from 1 to 0 if you want to disable one or more encoders. - * This saves program space. - * 1 enable decoder - * 0 disable decoder - *--------------------------------------------------------------------------------------------------------------------------------------------------- - */ -#define IRSND_SUPPORT_SIRCS_PROTOCOL 1 // flag: support SIRCS uses ~150 bytes -#define IRSND_SUPPORT_NEC_PROTOCOL 1 // flag: support NEC uses ~100 bytes -#define IRSND_SUPPORT_SAMSUNG_PROTOCOL 1 // flag: support Samsung + Samsung32 uses ~300 bytes -#define IRSND_SUPPORT_MATSUSHITA_PROTOCOL 1 // flag: support Matsushita uses ~150 bytes -#define IRSND_SUPPORT_KASEIKYO_PROTOCOL 0 // flag: support Kaseikyo NOT SUPPORTED YET! -#define IRSND_SUPPORT_RECS80_PROTOCOL 1 // flag: support RECS80 uses ~100 bytes -#define IRSND_SUPPORT_RC5_PROTOCOL 1 // flag: support RC5 uses ~250 bytes -#define IRSND_SUPPORT_DENON_PROTOCOL 1 // flag: support DENON uses ~200 bytes -#define IRSND_SUPPORT_RC6_PROTOCOL 0 // flag: support RC6 NOT SUPPORTED YET! -#define IRSND_SUPPORT_RECS80EXT_PROTOCOL 1 // flag: support RECS80EXT uses ~100 bytes -#define IRSND_SUPPORT_NUBERT_PROTOCOL 1 // flag: support NUBERT uses ~100 bytes -#define IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL 1 // flag: support Bang&Olufsen uses ~250 bytes - - -/*--------------------------------------------------------------------------------------------------------------------------------------------------- - * Change hardware pin here: - *--------------------------------------------------------------------------------------------------------------------------------------------------- - */ -#if defined (__AVR_ATmega32__) || defined (__AVR_ATmega644P__) -#define IRSND_PORT PORTD // port D -#define IRSND_DDR DDRD // ddr D -#define IRSND_BIT 7 // OC2A -#else -#define IRSND_PORT PORTB // port B -#define IRSND_DDR DDRB // ddr B -#define IRSND_BIT 3 // OC2A -#endif // __AVR... - - #define SIRCS_START_BIT_PULSE_LEN (uint8_t)(F_INTERRUPTS * SIRCS_START_BIT_PULSE_TIME + 0.5) #define SIRCS_START_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * SIRCS_START_BIT_PAUSE_TIME + 0.5) #define SIRCS_1_PULSE_LEN (uint8_t)(F_INTERRUPTS * SIRCS_1_PULSE_TIME + 0.5) @@ -184,7 +148,7 @@ irsnd_on (void) TCCR2 |= (1<command, SIRCS_MINIMUM_DATA_LEN); - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = (command & 0x0FF0) >> 4; // CCCCCCCC irsnd_buffer[1] = (command & 0x000F) << 4; // CCCC0000 irsnd_busy = TRUE; @@ -316,15 +279,25 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) #endif #if IRSND_SUPPORT_NEC_PROTOCOL == 1 case IRMP_NEC_PROTOCOL: + case IRMP_APPLE_PROTOCOL: { address = bitsrevervse (irmp_data_p->address, NEC_ADDRESS_LEN); command = bitsrevervse (irmp_data_p->command, NEC_COMMAND_LEN); - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = (address & 0xFF00) >> 8; // AAAAAAAA irsnd_buffer[1] = (address & 0x00FF); // AAAAAAAA irsnd_buffer[2] = (command & 0xFF00) >> 8; // CCCCCCCC - irsnd_buffer[3] = ~((command & 0xFF00) >> 8); // cccccccc + + if (irsnd_protocol == IRMP_APPLE_PROTOCOL) + { + irsnd_protocol = IRMP_NEC_PROTOCOL; // APPLE protocol is NEC with fix bitmask instead of inverted command + irsnd_buffer[3] = 0x8B; // 10001011 + } + else + { + irsnd_buffer[3] = ~((command & 0xFF00) >> 8); // cccccccc + } + irsnd_busy = TRUE; break; } @@ -335,7 +308,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) address = bitsrevervse (irmp_data_p->address, SAMSUNG_ADDRESS_LEN); command = bitsrevervse (irmp_data_p->command, SAMSUNG_COMMAND_LEN); - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = (address & 0xFF00) >> 8; // AAAAAAAA irsnd_buffer[1] = (address & 0x00FF); // AAAAAAAA irsnd_buffer[2] = (command & 0x00F0) | ((command & 0xF000) >> 12); // IIIICCCC @@ -349,7 +321,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) address = bitsrevervse (irmp_data_p->address, SAMSUNG_ADDRESS_LEN); command = bitsrevervse (irmp_data_p->command, SAMSUNG32_COMMAND_LEN); - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = (address & 0xFF00) >> 8; // AAAAAAAA irsnd_buffer[1] = (address & 0x00FF); // AAAAAAAA irsnd_buffer[2] = (command & 0xFF00) >> 8; // CCCCCCCC @@ -364,7 +335,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) address = bitsrevervse (irmp_data_p->address, MATSUSHITA_ADDRESS_LEN); command = bitsrevervse (irmp_data_p->command, MATSUSHITA_COMMAND_LEN); - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = (command & 0x0FF0) >> 4; // CCCCCCCC irsnd_buffer[1] = ((command & 0x000F) << 4) | ((address & 0x0F00) >> 8); // CCCCAAAA irsnd_buffer[2] = (address & 0x00FF); // AAAAAAAA @@ -377,7 +347,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) { toggle_bit_recs80 = toggle_bit_recs80 ? 0x00 : 0x40; - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = 0x80 | toggle_bit_recs80 | ((irmp_data_p->address & 0x0007) << 3) | ((irmp_data_p->command & 0x0038) >> 3); // STAAACCC irsnd_buffer[1] = (irmp_data_p->command & 0x07) << 5; // CCC00000 @@ -390,7 +359,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) { toggle_bit_recs80ext = toggle_bit_recs80ext ? 0x00 : 0x40; - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = 0x80 | toggle_bit_recs80ext | ((irmp_data_p->address & 0x000F) << 2) | ((irmp_data_p->command & 0x0030) >> 4); // STAAAACC irsnd_buffer[1] = (irmp_data_p->command & 0x0F) << 4; // CCCC0000 @@ -403,7 +371,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) { toggle_bit_rc5 = toggle_bit_rc5 ? 0x00 : 0x40; - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = ((irmp_data_p->command & 0x40) ? 0x00 : 0x80) | toggle_bit_rc5 | ((irmp_data_p->address & 0x001F) << 1) | ((irmp_data_p->command & 0x20) >> 5); // CTAAAAAC irsnd_buffer[1] = (irmp_data_p->command & 0x1F) << 3; // CCCCC000 @@ -414,7 +381,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) #if IRSND_SUPPORT_DENON_PROTOCOL == 1 case IRMP_DENON_PROTOCOL: { - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = ((irmp_data_p->address & 0x1F) << 3) | ((irmp_data_p->command & 0x0380) >> 7); // AAAAACCC irsnd_buffer[1] = (irmp_data_p->command & 0x7F) << 1; // CCCCCCC0 irsnd_buffer[2] = ((irmp_data_p->address & 0x1F) << 3) | (((~irmp_data_p->command) & 0x0380) >> 7); // AAAAACCC @@ -426,7 +392,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) #if IRSND_SUPPORT_NUBERT_PROTOCOL == 1 case IRMP_NUBERT_PROTOCOL: { - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = irmp_data_p->command >> 2; // CCCCCCCC irsnd_buffer[1] = (irmp_data_p->command & 0x0003) << 6; // CC000000 irsnd_busy = TRUE; @@ -436,7 +401,6 @@ irsnd_send_data (IRMP_DATA * irmp_data_p) #if IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 case IRMP_BANG_OLUFSEN_PROTOCOL: { - irsnd_protocol = irmp_data_p->protocol; irsnd_buffer[0] = irmp_data_p->command >> 11; // SXSCCCCC irsnd_buffer[1] = irmp_data_p->command >> 3; // CCCCCCCC irsnd_buffer[2] = (irmp_data_p->command & 0x0007) << 5; // CCC00000 diff --git a/irsnd.exe b/irsnd.exe index 332444dda0ce08ccd11c5f1d550d653af394cb6e..bec88b33768fd8f6057532d9803f8b5e4a0c29a6 100644 GIT binary patch delta 2224 zcmbVMYgAR&5kBW~#fxy|%A1C_(D=^T=j^l3`;j1tKx43kDv1)cN{A9MDpuPh7Xn2P zQNvCeqsCVa*2YBP)(4G`i#H*HkOXwCs;iQa*b31ut#+ZL7`hK&mg&mskM6Z*pPAV+ zd%l@Hb4uoy%-?)7X>#U;Olo9(N!jQ?I)I|0h$3uQc_#sf(9>)$Vf+}KL0`c&^s}^% zd+D7t^i$~&$o-)Gzm)1gA?;1+4Z#cca z5s0^c2(iIsf#h2JT1L*#4xgVMO24`K^Y8KPA=vP8e}DYpsGnsF*Wm{dtUCN3L2#Zw z_v8a*4Z2^}ZPvs8&&mdIKU!IQ#b2g#apLGWoHkmE$@P_Jn@EMolP|XiA2n^kZ#I3` zQqpZ!Iyd3E(K<1`N=ySC>0>MyGi=1hj`JN^4ofuc)n{%chX%Dv8`c2rm!t*#=@f{Fr{5!;Cepc7z_} zTx_H3@%G?&vL6q=OndNFS1f%PA9Ky13o$(|^RcVpCIuo)YB`}+LIr03zZ&;o+@1nFB|Msb89yH0L7O-#Vmuv#)rhPK9V9O2 zop;(!6^u@@%)^K|=k>J>rfebHlCS~?OVBLDo`{KbExsIq=o}mtIW-`P#Pcn2^hD!~ z$Q9Td`3{|e^P*0XJudnMI@MDdy~c*UwyfHiWAQ(aBY;L$M1o1BCzx${U!SnyPAEOEoHmdJM2Byk8^M#+(hmvZVvYxx0qYT{g&I$HE@mGDeesS z1vdsh1QX#;VJ4gdUxcgRZ(u3>9ozxmb;I}IDR>s1gBRf!um@g;H{rkFT{r+K-p)Jt zAl}7?@lkvXpU5-(<9s$hkAI$D#;@hw{6_vwem7swAK{z$vwSE2HGhr&CqKaZp#T(& z!qG!05luiGlF_5+3G^h&M$e!H=y|jPtwklM0@Wal+*{Euv=23)M&w1GqVwny>P9{2 z2I@oike}cZB86BXS(qdMK@}vT*(aZoKb6nR7v*mG@A7r|mV8GZlpTsw zafc{TO1zS+OjV#FE2fgIE!YL|LVy{QhUlxEi)T9D?_!n7zY zMoZ9=wF%l3jnSZ66E#&^s1;}{v>NR#?V$FFHdas6AJ&1Mrf2K(^hNp-y+~iBuhn1G z%k>TV@AZ@VC;C_Vb$w6|Fvc3825-nlsxiaJG4hQ?#OnaDiCxYsbRG8Ie>Q_E~&b})6!0mj4pnQ3J@nG4Jn<_6;g zp&)u_A|?YCNWcV7keSEW+2zz5EO3!n>J0p9|e&0w?G zXV?X7A-jUDV7IY#>`C@K+s(#tyP644-R_r^8f$< delta 2240 zcmbtUeNa@_6@PC*cIkqI4PtZgKEvdwSqNRRPCGlgVL5*Dq zjI1IF=?x~6j8PyTwUJB^6GS`VOH+x70%1r~HKNvvhEx-YmNw(|uB_8^CjBdC=G=47 z@812Lv*(=qN()L0YHp>;;8Z3Rl0nKs+v!M(N+5uH44nNl97E5vyf=c=>G|{suBMmL z&*AIze%fr_Woe|mNxzY7=qrn zJ)9YYs^?L~PLn!AG-rZI)y9}qGMTb8mq`r~&2^9Y_7J|4V8;kHO!VXL2~LgdvSfLh zuSSkqY&9M;IIR`Ue~(&ip?{6D94TZia$KNS;`vSwy&4xf=h8{I$(flh#+g(Z(RQK} z<4x+j1e3}qc97^KvJd)H2!D;(r-=VPQ7O@+9!oMQw+HJJS}osxjYlUuZa-w9sKPyy zNbU_dFGhE?hEY^r*E(n65Fpqjd@yDqosa(+lS;ph6J0#L5ifL2qbu=N7fZj654on0 zci8XJ=m3s!H>NHoY(v4PSFX8Dl16b<;mOJ5uf-z9r1FN=tdX9Xp9m z!8c>Gr}UGcT>G-laH=pTEqL8cu5;~OfypnE%{q6XjU~yf!E58D(tGg>agff#r{ZQr zCXsMm>uf_Fd@pV@E{dXS(>Az7JfQhU?P2QEcE zJ@~Vvlg`WbWB$66@#&@G{&wknT5JM7{|G5z zP#*Yy`QG_CuSwl(o|Syo?wi9r#yr7nV%}hym{z8ZIl)W>KL;}a0tT1^=7as95gY~| zfnjh5d1(%R0qzKam zM&Jb`sDdfX7Ul|BLbi}2tHRd;4I|(L_*0k$ zIjF!{Fbgh%dGJ?oHCzuj!4g;wcf%LpOK=}-fPaKdum$=$VK?l71MmX80&l=u@Gi87 zk)l&f7QNy$5r{}M#7D#h;v%s?Tq`~)ZV|VMWujkvUaS=lh;NDSi0_Gi61&8Y#9r|; z@v?Ybyd~Zh?}_736mp@7Xc_`YL>kIK^H4TgjFzF*s2FWWWvCKWqZfVXRaA%mfZjz% zQ5*UYeS-SYIdmBfp_}MibPtV_T#`qcDG8DyrAv#XTxq$qQhG|-CRIq!ORq@{(sAjM zbX~e5(XvxclG9{PmgG!1TV5d-%CE==O?g~ zovyN~sAi~h)nBUH)GD=3J*c*+e^&d{^Xe7#D|JNuw;G{EYjK)Ko2t#!6wTDKv}`R$ z%hmF=0&SI6s1^CNjoKEiM0-Xn)haZ)#$scsQD8i4R2nr#tx<0@8?8pW(QkZiTr{p3 zUm3Rz@)%Mn>U{7~FcFM{naM!LXE1Y^1xy~Zp7|~F40Dn>&3wxImAS}VWxix?GouUz ztRNnwfXM&=6)XV-U=1h&n?VWift{clya-+e_23|A0=<(Kgr_-ek6 ze~Whtae_yXg-T(M&?}6P>5hi6&;zH!1@LiL0N21GxS34#?_dR)Yl>< #include #include "irmp.h" +#include "irsndconfig.h" #include "irsnd.h" #endif // CODEVISION -- 2.39.2