From c7a47e897cc2d4716bf54b323c46978e624b65cf Mon Sep 17 00:00:00 2001 From: ukw Date: Thu, 2 Sep 2010 10:07:18 +0000 Subject: [PATCH 1/1] Version 1.8.0: added JVC in irsnd, fitted APPLE protocol to IRMP 1.7.3 git-svn-id: svn://mikrocontroller.net/irmp@46 aeb2e35e-bfc4-4214-b83c-9e8de998ed28 --- IR-Data/test-suite.sh | 25 +-- README.txt | 4 +- irmp.c | 365 ++++++++++++++++++++++++------------------ irmp.exe | Bin 25088 -> 26112 bytes irmp.h | 20 ++- irmpconfig.h | 4 +- irsnd.c | 83 ++++++++-- irsnd.exe | Bin 13824 -> 13824 bytes irsndconfig.h | 7 +- main.c | 10 +- 10 files changed, 325 insertions(+), 193 deletions(-) diff --git a/IR-Data/test-suite.sh b/IR-Data/test-suite.sh index 53585ed..a1abf02 100644 --- a/IR-Data/test-suite.sh +++ b/IR-Data/test-suite.sh @@ -28,6 +28,7 @@ for j in \ Grundig_TP715.txt \ Grundig_TP715_SatTV.txt \ Grundig_TP715_Video.txt \ + Kathrein-UFS-912-Remote.txt \ Matsushita.txt \ Nokia.txt \ Panasonic-Blue-Ray.txt \ @@ -62,28 +63,30 @@ for j in \ rc6-hold.txt \ rc6.txt \ sharp-denon.txt \ - sharp-denon2.txt + sharp-denon2.txt \ + xbox360-10kHz.txt do echo "testing $j ..." if tmpsrc/irmp -v < $j | grep -q error then - tmpsrc/irmp -v < $j | grep error - echo "test failed" - exit 1 + tmpsrc/irmp -v < $j | grep error + echo "test failed" + exit 1 fi done for j in \ Siemens-Gigaset-M740AV-15kHz.txt \ bo_beolink1000-15kHz.txt \ - denon-15kHz.txt + denon-15kHz.txt \ + xbox360-15kHz.txt do echo "testing $j ..." if tmpsrc/irmp-15kHz -v < $j | grep -q error then - tmpsrc/irmp-15kHz -v < $j | grep error - echo "test failed" - exit 1 + tmpsrc/irmp-15kHz -v < $j | grep error + echo "test failed" + exit 1 fi done @@ -95,9 +98,9 @@ do echo "testing $j ..." if tmpsrc/irmp-20kHz -v < $j | grep -q error then - tmpsrc/irmp-20kHz -v < $j | grep error - echo "test failed" - exit 1 + tmpsrc/irmp-20kHz -v < $j | grep error + echo "test failed" + exit 1 fi done diff --git a/README.txt b/README.txt index e065ac2..0bf0e38 100644 --- a/README.txt +++ b/README.txt @@ -1,8 +1,8 @@ IRMP - Infrared Multi Protocol Decoder -------------------------------------- -Version IRMP: 1.7.3 29.08.2010 -Version IRSND: 1.7.3 29.08.2010 +Version IRMP: 1.8.0 02.09.2010 +Version IRSND: 1.8.0 92.09.2010 Dokumentation: diff --git a/irmp.c b/irmp.c index 4077f54..879d50e 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.79 2010/08/28 22:14:56 fm Exp $ + * $Id: irmp.c,v 1.82 2010/08/31 15:22:24 fm Exp $ * * ATMEGA88 @ 8 MHz * @@ -342,16 +342,6 @@ typedef unsigned int16 uint16_t; #define IRMP_SUPPORT_MANCHESTER 0 #endif -#define IRMP_TIMEOUT_TIME 16500.0e-6 // timeout after 16.5 ms darkness -#define IRMP_TIMEOUT_TIME_MS 16500L // timeout after 16.5 ms darkness - -#if (F_INTERRUPTS * IRMP_TIMEOUT_TIME_MS) / 1000000 >= 254 -typedef uint16_t PAUSE_LEN; -#else -typedef uint8_t PAUSE_LEN; -#endif - -#define IRMP_TIMEOUT_LEN (PAUSE_LEN)(F_INTERRUPTS * IRMP_TIMEOUT_TIME + 0.5) #define IRMP_KEY_REPETITION_LEN (uint16_t)(F_INTERRUPTS * 150.0e-3 + 0.5) // autodetect key repetition within 150 msec #define MIN_TOLERANCE_00 1.0 // -0% @@ -474,8 +464,10 @@ typedef uint8_t PAUSE_LEN; #define RC6_START_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC6_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) #define RC6_TOGGLE_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * RC6_TOGGLE_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) #define RC6_TOGGLE_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC6_TOGGLE_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) -#define RC6_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) -#define RC6_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) +#define RC6_BIT_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) +#define RC6_BIT_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_30 + 0.5) + 1) // pulses: 300 - 700 +#define RC6_BIT_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) // pauses: 300 - 600 +#define RC6_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) #define RECS80EXT_START_BIT_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME * MIN_TOLERANCE_00 + 0.5) - 1) #define RECS80EXT_START_BIT_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME * MAX_TOLERANCE_00 + 0.5) + 1) @@ -617,6 +609,7 @@ static int verbose; #endif #define UART0_TXEN_BIT_VALUE (1< IRMP_TIMEOUT_LEN) // timeout? { // yes... - ANALYZE_PRINTF ("error 1: pause after start bit pulse %d too long: %d\n", irmp_pulse_time, irmp_pause_time); - ANALYZE_ONLY_NORMAL_PUTCHAR ('\n'); +#if IRMP_SUPPORT_JVC_PROTOCOL == 1 + if (irmp_protocol == IRMP_JVC_PROTOCOL) // don't show eror if JVC protocol, irmp_pulse_time has been set below! + { + ; + } + else +#endif // IRMP_SUPPORT_JVC_PROTOCOL == 1 + { + ANALYZE_PRINTF ("%8d error 1: pause after start bit pulse %d too long: %d\n", time_counter, irmp_pulse_time, irmp_pause_time); + ANALYZE_ONLY_NORMAL_PUTCHAR ('\n'); + } irmp_start_bit_detected = 0; // reset flags, let's wait for another start bit irmp_pulse_time = 0; irmp_pause_time = 0; @@ -1539,7 +1542,7 @@ irmp_ISR (void) irmp_param2.protocol = 0; #endif - ANALYZE_PRINTF ("start-bit: pulse = %d, pause = %d\n", irmp_pulse_time, irmp_pause_time); + ANALYZE_PRINTF ("%8d [start-bit: pulse = %2d, pause = %2d]\n", time_counter, 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 && @@ -1717,7 +1720,7 @@ irmp_ISR (void) RC6_START_BIT_PAUSE_LEN_MIN, RC6_START_BIT_PAUSE_LEN_MAX); irmp_param_p = (IRMP_PARAMETER *) &rc6_param; last_pause = 0; - last_value = 0; + last_value = 1; } else #endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 @@ -1838,9 +1841,9 @@ irmp_ISR (void) else { ANALYZE_PRINTF ("pulse: %3d - %3d or %3d - %3d\n", irmp_param.pulse_1_len_min, irmp_param.pulse_1_len_max, - 2 * irmp_param.pulse_1_len_min, 2 * irmp_param.pulse_1_len_max); + irmp_param.pulse_1_len_max + 1, 2 * irmp_param.pulse_1_len_max); ANALYZE_PRINTF ("pause: %3d - %3d or %3d - %3d\n", irmp_param.pause_1_len_min, irmp_param.pause_1_len_max, - 2 * irmp_param.pause_1_len_min, 2 * irmp_param.pause_1_len_max); + irmp_param.pause_1_len_max + 1, 2 * irmp_param.pause_1_len_max); } #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) @@ -2056,35 +2059,60 @@ irmp_ISR (void) #if IRMP_SUPPORT_MANCHESTER == 1 if ((irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER)) // Manchester { -#if IRMP_SUPPORT_RC6_PROTOCOL == 1 - if (irmp_param.protocol == IRMP_RC6_PROTOCOL && irmp_bit >= 3 && irmp_bit <= 5) // special bits of RC6 + if (irmp_pulse_time > irmp_param.pulse_1_len_max /* && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max */) { - if (irmp_pulse_time > RC6_TOGGLE_BIT_LEN_MAX && irmp_pause_time > RC6_TOGGLE_BIT_LEN_MAX) +#if IRMP_SUPPORT_RC6_PROTOCOL == 1 + if (irmp_param.protocol == IRMP_RC6_PROTOCOL && irmp_bit == 4 && irmp_pulse_time > RC6_TOGGLE_BIT_LEN_MIN) // RC6 toggle bit { - ANALYZE_PUTCHAR ('1'); - irmp_store_bit (1); + ANALYZE_PUTCHAR ('T'); + if (irmp_param.complete_len == RC6_COMPLETE_DATA_LEN_LONG) // RC6 mode 6A + { + irmp_store_bit (1); + last_value = 1; + } + else // RC6 mode 0 + { + irmp_store_bit (0); + last_value = 0; + } + ANALYZE_NEWLINE (); } + else +#endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 + { + ANALYZE_PUTCHAR ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? '0' : '1'); + irmp_store_bit ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? 0 : 1 ); - ANALYZE_PUTCHAR ('0'); - irmp_store_bit (0); - last_value = 0; - ANALYZE_NEWLINE (); - } - else +#if IRMP_SUPPORT_RC6_PROTOCOL == 1 + if (irmp_param.protocol == IRMP_RC6_PROTOCOL && irmp_bit == 4 && irmp_pulse_time > RC6_TOGGLE_BIT_LEN_MIN) // RC6 toggle bit + { + ANALYZE_PUTCHAR ('T'); + irmp_store_bit (1); + + if (irmp_pause_time > 2 * irmp_param.pause_1_len_max) + { + last_value = 0; + } + else + { + last_value = 1; + } + ANALYZE_NEWLINE (); + } + else #endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 - if (irmp_pulse_time > irmp_param.pulse_1_len_max && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max) - { - ANALYZE_PUTCHAR ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? '0' : '1'); - irmp_store_bit ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? 0 : 1 ); - ANALYZE_PUTCHAR ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? '1' : '0'); - irmp_store_bit ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? 1 : 0 ); + { + ANALYZE_PUTCHAR ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? '1' : '0'); + irmp_store_bit ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? 1 : 0 ); #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) - if (! irmp_param2.protocol) + if (! irmp_param2.protocol) #endif - { - ANALYZE_NEWLINE (); + { + ANALYZE_NEWLINE (); + } + last_value = (irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? 1 : 0; + } } - last_value = (irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? 1 : 0; } else if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max) { @@ -2100,22 +2128,28 @@ irmp_ISR (void) manchester_value = last_value; } -#if 0 -#if IRMP_SUPPORT_RC6_PROTOCOL == 1 - if (irmp_param.protocol == IRMP_RC6_PROTOCOL && irmp_bit == 1 && manchester_value == 0) // RC6 mode != 0 ??? - { - irmp_param.complete_len = RC6_COMPLETE_DATA_LEN_LONG; - } -#endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 -#endif // 0 - ANALYZE_PUTCHAR (manchester_value + '0'); + #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) if (! irmp_param2.protocol) #endif { ANALYZE_NEWLINE (); } + +#if IRMP_SUPPORT_RC6_PROTOCOL == 1 + if (irmp_param.protocol == IRMP_RC6_PROTOCOL && irmp_bit == 1 && manchester_value == 1) // RC6 mode != 0 ??? + { + ANALYZE_PRINTF ("Switching to RC6A protocol\n"); + irmp_param.complete_len = RC6_COMPLETE_DATA_LEN_LONG; + irmp_param.address_offset = 5; + irmp_param.address_end = irmp_param.address_offset + 15; + irmp_param.command_offset = irmp_param.address_end + 1; // skip 1 system bit, changes like a toggle bit + irmp_param.command_end = irmp_param.command_offset + 16 - 1; + irmp_tmp_address = 1; // addr 0 - 32767 --> 32768 - 65535 + } +#endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 + irmp_store_bit (manchester_value); } else @@ -2145,7 +2179,7 @@ irmp_ISR (void) { ANALYZE_PUTCHAR ('?'); ANALYZE_NEWLINE (); - ANALYZE_PRINTF ("error 3 RC5: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time); + ANALYZE_PRINTF ("error 3 manchester: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time); ANALYZE_ONLY_NORMAL_PUTCHAR ('\n'); irmp_start_bit_detected = 0; // reset flags and wait for next start bit irmp_pause_time = 0; @@ -2378,7 +2412,7 @@ irmp_ISR (void) if (irmp_start_bit_detected && irmp_bit == irmp_param.complete_len && irmp_param.stop_bit == 0) // enough bits received? { - if (last_irmp_command == irmp_tmp_command && repetition_counter < AUTO_FRAME_REPETITION_LEN) + if (last_irmp_command == irmp_tmp_command && repetition_len < AUTO_FRAME_REPETITION_LEN) { repetition_frame_number++; } @@ -2392,8 +2426,8 @@ irmp_ISR (void) if (irmp_param.protocol == IRMP_SIRCS_PROTOCOL && (repetition_frame_number == 1 || repetition_frame_number == 2)) { ANALYZE_PRINTF ("code skipped: SIRCS auto repetition frame #%d, counter = %d, auto repetition len = %d\n", - repetition_frame_number + 1, repetition_counter, AUTO_FRAME_REPETITION_LEN); - repetition_counter = 0; + repetition_frame_number + 1, repetition_len, AUTO_FRAME_REPETITION_LEN); + repetition_len = 0; } else #endif @@ -2403,8 +2437,8 @@ irmp_ISR (void) if (irmp_param.protocol == IRMP_KASEIKYO_PROTOCOL && repetition_frame_number == 1) { ANALYZE_PRINTF ("code skipped: KASEIKYO auto repetition frame #%d, counter = %d, auto repetition len = %d\n", - repetition_frame_number + 1, repetition_counter, AUTO_FRAME_REPETITION_LEN); - repetition_counter = 0; + repetition_frame_number + 1, repetition_len, AUTO_FRAME_REPETITION_LEN); + repetition_len = 0; } else #endif @@ -2414,8 +2448,8 @@ irmp_ISR (void) if (irmp_param.protocol == IRMP_SAMSUNG32_PROTOCOL && (repetition_frame_number & 0x01)) { ANALYZE_PRINTF ("code skipped: SAMSUNG32 auto repetition frame #%d, counter = %d, auto repetition len = %d\n", - repetition_frame_number + 1, repetition_counter, AUTO_FRAME_REPETITION_LEN); - repetition_counter = 0; + repetition_frame_number + 1, repetition_len, AUTO_FRAME_REPETITION_LEN); + repetition_len = 0; } else #endif @@ -2425,14 +2459,14 @@ irmp_ISR (void) if (irmp_param.protocol == IRMP_NUBERT_PROTOCOL && (repetition_frame_number & 0x01)) { ANALYZE_PRINTF ("code skipped: NUBERT auto repetition frame #%d, counter = %d, auto repetition len = %d\n", - repetition_frame_number + 1, repetition_counter, AUTO_FRAME_REPETITION_LEN); - repetition_counter = 0; + repetition_frame_number + 1, repetition_len, AUTO_FRAME_REPETITION_LEN); + repetition_len = 0; } else #endif { - ANALYZE_PRINTF ("code detected, length = %d\n", irmp_bit); + ANALYZE_PRINTF ("%8d code detected, length = %d\n", time_counter, irmp_bit); irmp_ir_detected = TRUE; #if IRMP_SUPPORT_DENON_PROTOCOL == 1 @@ -2477,18 +2511,18 @@ irmp_ISR (void) #if IRMP_SUPPORT_NEC_PROTOCOL == 1 if (irmp_param.protocol == IRMP_NEC_PROTOCOL && irmp_bit == 0) // repetition frame { - if (repetition_counter < NEC_FRAME_REPEAT_PAUSE_LEN_MAX) + if (repetition_len < NEC_FRAME_REPEAT_PAUSE_LEN_MAX) { - ANALYZE_PRINTF ("Detected NEC repetition frame, repetition_counter = %d\n", repetition_counter); + ANALYZE_PRINTF ("Detected NEC repetition frame, repetition_len = %d\n", repetition_len); irmp_tmp_address = last_irmp_address; // address is last address irmp_tmp_command = last_irmp_command; // command is last command irmp_flags |= IRMP_FLAG_REPETITION; - repetition_counter = 0; + repetition_len = 0; } else { - ANALYZE_PRINTF ("Detected NEC repetition frame, ignoring it: timeout occured, repetition_counter = %d > %d\n", - repetition_counter, NEC_FRAME_REPEAT_PAUSE_LEN_MAX); + ANALYZE_PRINTF ("Detected NEC repetition frame, ignoring it: timeout occured, repetition_len = %d > %d\n", + repetition_len, NEC_FRAME_REPEAT_PAUSE_LEN_MAX); irmp_ir_detected = FALSE; } } @@ -2519,6 +2553,14 @@ irmp_ISR (void) } #endif // IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 +#if IRMP_SUPPORT_RC6_PROTOCOL == 1 + if (irmp_param.protocol == IRMP_RC6_PROTOCOL && irmp_param.complete_len == RC6_COMPLETE_DATA_LEN_LONG) // RC6 mode = 6? + { + irmp_protocol = IRMP_RC6A_PROTOCOL; + } + else +#endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 + irmp_protocol = irmp_param.protocol; #if IRMP_SUPPORT_FDC_PROTOCOL == 1 @@ -2560,7 +2602,7 @@ irmp_ISR (void) { if (last_irmp_command == irmp_command && last_irmp_address == irmp_address && - repetition_counter < IRMP_KEY_REPETITION_LEN) + repetition_len < IRMP_KEY_REPETITION_LEN) { irmp_flags |= IRMP_FLAG_REPETITION; } @@ -2568,7 +2610,7 @@ irmp_ISR (void) last_irmp_address = irmp_tmp_address; // store as last address, too last_irmp_command = irmp_tmp_command; // store as last command, too - repetition_counter = 0; + repetition_len = 0; } else { @@ -2616,7 +2658,7 @@ irmp_ISR (void) static void print_timings (void) { - printf ("IRMP_TIMEOUT_LEN: %d\n", IRMP_TIMEOUT_LEN); + printf ("IRMP_TIMEOUT_LEN: %d [%d byte(s)]\n", IRMP_TIMEOUT_LEN, sizeof (PAUSE_LEN)); printf ("IRMP_KEY_REPETITION_LEN %d\n", IRMP_KEY_REPETITION_LEN); puts (""); printf ("PROTOCOL S S-PULSE S-PAUSE PULSE-0 PAUSE-0 PULSE-1 PAUSE-1\n"); @@ -2665,9 +2707,9 @@ print_timings (void) DENON_PULSE_LEN_MIN, DENON_PULSE_LEN_MAX, DENON_0_PAUSE_LEN_MIN, DENON_0_PAUSE_LEN_MAX, DENON_PULSE_LEN_MIN, DENON_PULSE_LEN_MAX, DENON_1_PAUSE_LEN_MIN, DENON_1_PAUSE_LEN_MAX); - printf ("RC6 1 %3d - %3d %3d - %3d %3d - %3d\n", + printf ("RC6 1 %3d - %3d %3d - %3d %3d - %3d %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, - RC6_BIT_LEN_MIN, RC6_BIT_LEN_MAX); + RC6_BIT_PULSE_LEN_MIN, RC6_BIT_PULSE_LEN_MAX, RC6_BIT_PAUSE_LEN_MIN, RC6_BIT_PAUSE_LEN_MAX); printf ("RECS80EXT 1 %3d - %3d %3d - %3d %3d - %3d %3d - %3d %3d - %3d %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, @@ -2934,12 +2976,96 @@ get_fdc_key (uint16_t cmd) return (key); } +static int analyze = FALSE; +static int list = FALSE; +static IRMP_DATA irmp_data; + +static void +next_tick (void) +{ + if (! analyze && ! list) + { + (void) irmp_ISR (); + + if (irmp_get_data (&irmp_data)) + { + uint8_t key; + + ANALYZE_ONLY_NORMAL_PUTCHAR (' '); + + if (verbose) + { + printf ("%8d ", time_counter); + } + + if (irmp_data.protocol == IRMP_FDC_PROTOCOL && (key = get_fdc_key (irmp_data.command)) != 0) + { + if ((key >= 0x20 && key < 0x7F) || key >= 0xA0) + { + printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x, asc = 0x%02x, key = '%c'\n", + irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags, key, key); + } + else if (key == '\r' || key == '\t' || key == KEY_ESCAPE || (key >= 0x80 && key <= 0x9F)) // function keys + { + char * p = (char *) NULL; + + switch (key) + { + case '\t' : p = "TAB"; break; + case '\r' : p = "CR"; break; + case KEY_ESCAPE : p = "ESCAPE"; break; + case KEY_MENUE : p = "MENUE"; break; + case KEY_BACK : p = "BACK"; break; + case KEY_FORWARD : p = "FORWARD"; break; + case KEY_ADDRESS : p = "ADDRESS"; break; + case KEY_WINDOW : p = "WINDOW"; break; + case KEY_1ST_PAGE : p = "1ST_PAGE"; break; + case KEY_STOP : p = "STOP"; break; + case KEY_MAIL : p = "MAIL"; break; + case KEY_FAVORITES : p = "FAVORITES"; break; + case KEY_NEW_PAGE : p = "NEW_PAGE"; break; + case KEY_SETUP : p = "SETUP"; break; + case KEY_FONT : p = "FONT"; break; + case KEY_PRINT : p = "PRINT"; break; + case KEY_ON_OFF : p = "ON_OFF"; break; + + case KEY_INSERT : p = "INSERT"; break; + case KEY_DELETE : p = "DELETE"; break; + case KEY_LEFT : p = "LEFT"; break; + case KEY_HOME : p = "HOME"; break; + case KEY_END : p = "END"; break; + case KEY_UP : p = "UP"; break; + case KEY_DOWN : p = "DOWN"; break; + case KEY_PAGE_UP : p = "PAGE_UP"; break; + case KEY_PAGE_DOWN : p = "PAGE_DOWN"; break; + case KEY_RIGHT : p = "RIGHT"; break; + case KEY_MOUSE_1 : p = "KEY_MOUSE_1"; break; + case KEY_MOUSE_2 : p = "KEY_MOUSE_2"; break; + default : p = ""; break; + } + + printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x, asc = 0x%02x, key = %s\n", + irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags, key, p); + } + else + { + printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x, asc = 0x%02x\n", + irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags, key); + } + } + else + { + printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x\n", + irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags); + } + } + } +} + int main (int argc, char ** argv) { int i; - int analyze = FALSE; - int list = FALSE; int ch; int last_ch = 0; int pulse = 0; @@ -2953,8 +3079,6 @@ main (int argc, char ** argv) int first_pulse = TRUE; int first_pause = TRUE; - IRMP_DATA irmp_data; - if (argc == 2) { if (! strcmp (argv[1], "-v")) @@ -3074,7 +3198,7 @@ main (int argc, char ** argv) { for (i = 0; i < (int) ((8000.0 * F_INTERRUPTS) / 10000); i++) // newline: long pause of 800 msec { - (void) irmp_ISR (); + next_tick (); } } first_pulse = TRUE; @@ -3108,78 +3232,7 @@ main (int argc, char ** argv) last_ch = ch; - if (! analyze && ! list) - { - (void) irmp_ISR (); - - if (irmp_get_data (&irmp_data)) - { - uint8_t key; - - ANALYZE_ONLY_NORMAL_PUTCHAR (' '); - - if (irmp_data.protocol == IRMP_FDC_PROTOCOL && (key = get_fdc_key (irmp_data.command)) != 0) - { - if ((key >= 0x20 && key < 0x7F) || key >= 0xA0) - { - printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x, asc = 0x%02x, key = '%c'\n", - irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags, key, key); - } - else if (key == '\r' || key == '\t' || key == KEY_ESCAPE || (key >= 0x80 && key <= 0x9F)) // function keys - { - char * p = (char *) NULL; - - switch (key) - { - case '\t' : p = "TAB"; break; - case '\r' : p = "CR"; break; - case KEY_ESCAPE : p = "ESCAPE"; break; - case KEY_MENUE : p = "MENUE"; break; - case KEY_BACK : p = "BACK"; break; - case KEY_FORWARD : p = "FORWARD"; break; - case KEY_ADDRESS : p = "ADDRESS"; break; - case KEY_WINDOW : p = "WINDOW"; break; - case KEY_1ST_PAGE : p = "1ST_PAGE"; break; - case KEY_STOP : p = "STOP"; break; - case KEY_MAIL : p = "MAIL"; break; - case KEY_FAVORITES : p = "FAVORITES"; break; - case KEY_NEW_PAGE : p = "NEW_PAGE"; break; - case KEY_SETUP : p = "SETUP"; break; - case KEY_FONT : p = "FONT"; break; - case KEY_PRINT : p = "PRINT"; break; - case KEY_ON_OFF : p = "ON_OFF"; break; - - case KEY_INSERT : p = "INSERT"; break; - case KEY_DELETE : p = "DELETE"; break; - case KEY_LEFT : p = "LEFT"; break; - case KEY_HOME : p = "HOME"; break; - case KEY_END : p = "END"; break; - case KEY_UP : p = "UP"; break; - case KEY_DOWN : p = "DOWN"; break; - case KEY_PAGE_UP : p = "PAGE_UP"; break; - case KEY_PAGE_DOWN : p = "PAGE_DOWN"; break; - case KEY_RIGHT : p = "RIGHT"; break; - case KEY_MOUSE_1 : p = "KEY_MOUSE_1"; break; - case KEY_MOUSE_2 : p = "KEY_MOUSE_2"; break; - default : p = ""; break; - } - - printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x, asc = 0x%02x, key = %s\n", - irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags, key, p); - } - else - { - printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x, asc = 0x%02x\n", - irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags, key); - } - } - else - { - printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x\n", - irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags); - } - } - } + next_tick (); } if (analyze) diff --git a/irmp.exe b/irmp.exe index 808c9e2907ee03d68dc1a4491c908ab0e3894236..b6b3217f49184c95d3edb47318e1daf1d1f15b96 100644 GIT binary patch delta 12532 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 qSFpW`~ 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 K_R?nUtN#UYfBIPf diff --git a/irmp.h b/irmp.h index c8c709a..21ff7db 100644 --- a/irmp.h +++ b/irmp.h @@ -3,7 +3,7 @@ * * Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de * - * $Id: irmp.h,v 1.41 2010/08/18 12:03:26 fm Exp $ + * $Id: irmp.h,v 1.43 2010/08/31 15:22:24 fm Exp $ * * ATMEGA88 @ 8 MHz * @@ -22,6 +22,21 @@ extern "C" { #endif +/*--------------------------------------------------------------------------------------------------------------------------------------------------- + * timing constants: + *--------------------------------------------------------------------------------------------------------------------------------------------------- + */ +#define IRMP_TIMEOUT_TIME 16500.0e-6 // timeout after 16.5 ms darkness +#define IRMP_TIMEOUT_TIME_MS 16500L // timeout after 16.5 ms darkness + +#if (F_INTERRUPTS * IRMP_TIMEOUT_TIME_MS) / 1000000 >= 254 +typedef uint16_t PAUSE_LEN; +#else +typedef uint8_t PAUSE_LEN; +#endif + +#define IRMP_TIMEOUT_LEN (PAUSE_LEN)(F_INTERRUPTS * IRMP_TIMEOUT_TIME + 0.5) + /*--------------------------------------------------------------------------------------------------------------------------------------------------- * IR protocols *--------------------------------------------------------------------------------------------------------------------------------------------------- @@ -46,6 +61,7 @@ extern "C" #define IRMP_FDC_PROTOCOL 18 // FDC keyboard #define IRMP_RCCAR_PROTOCOL 19 // RC Car #define IRMP_JVC_PROTOCOL 20 // JVC +#define IRMP_RC6A_PROTOCOL 21 // RC6A, e.g. Kathrein, XBOX // some flags of struct IRMP_PARAMETER: #define IRMP_PARAM_FLAG_IS_MANCHESTER 0x01 @@ -322,7 +338,7 @@ extern "C" #define JVC_PULSE_TIME 560.0e-6 // 560 usec pulse #define JVC_1_PAUSE_TIME 1690.0e-6 // 1690 usec pause #define JVC_0_PAUSE_TIME 560.0e-6 // 560 usec pause -#define JVC_FRAME_REPEAT_PAUSE_TIME 25.0e-3 // frame repeat after 25ms +#define JVC_FRAME_REPEAT_PAUSE_TIME 22.0e-3 // frame repeat after 22ms #define JVC_ADDRESS_OFFSET 0 // skip 0 bits #define JVC_ADDRESS_LEN 4 // read 4 address bits #define JVC_COMMAND_OFFSET 4 // skip 4 bits diff --git a/irmpconfig.h b/irmpconfig.h index 2d26848..1a42f89 100644 --- a/irmpconfig.h +++ b/irmpconfig.h @@ -3,7 +3,7 @@ * * Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de * - * $Id: irmpconfig.h,v 1.37 2010/08/18 12:03:26 fm Exp $ + * $Id: irmpconfig.h,v 1.39 2010/08/30 15:45:27 fm Exp $ * * ATMEGA88 @ 8 MHz * @@ -51,7 +51,7 @@ #define IRMP_SUPPORT_DENON_PROTOCOL 1 // DENON >= 10000 ~250 bytes #define IRMP_SUPPORT_JVC_PROTOCOL 1 // JVC >= 10000 ~250 bytes #define IRMP_SUPPORT_RC5_PROTOCOL 1 // RC5 >= 10000 ~250 bytes -#define IRMP_SUPPORT_RC6_PROTOCOL 1 // RC6 >= 10000 ~200 bytes +#define IRMP_SUPPORT_RC6_PROTOCOL 1 // RC6 & RC6A >= 10000 ~200 bytes #define IRMP_SUPPORT_GRUNDIG_PROTOCOL 1 // Grundig >= 10000 ~150 bytes #define IRMP_SUPPORT_NOKIA_PROTOCOL 1 // Nokia >= 10000 ~150 bytes #define IRMP_SUPPORT_NUBERT_PROTOCOL 1 // NUBERT >= 10000 ~50 bytes diff --git a/irsnd.c b/irsnd.c index ee91c6b..6f2e6b1 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.21 2010/08/18 12:03:26 fm Exp $ + * $Id: irsnd.c,v 1.24 2010/09/02 10:22:26 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 @@ -26,6 +26,9 @@ #ifdef WIN32 // test/debug on windows #include +#include +#include + #define F_CPU 8000000L typedef unsigned char uint8_t; typedef unsigned short uint16_t; @@ -175,6 +178,14 @@ typedef unsigned short uint16_t; #define RCCAR_0_PAUSE_LEN (uint8_t)(F_INTERRUPTS * RCCAR_0_PAUSE_TIME + 0.5) #define RCCAR_FRAME_REPEAT_PAUSE_LEN (uint16_t)(F_INTERRUPTS * RCCAR_FRAME_REPEAT_PAUSE_TIME + 0.5) // use uint16_t! +#define JVC_START_BIT_PULSE_LEN (uint8_t)(F_INTERRUPTS * JVC_START_BIT_PULSE_TIME + 0.5) +#define JVC_START_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * JVC_START_BIT_PAUSE_TIME + 0.5) +#define JVC_REPEAT_START_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * JVC_REPEAT_START_BIT_PAUSE_TIME + 0.5) +#define JVC_PULSE_LEN (uint8_t)(F_INTERRUPTS * JVC_PULSE_TIME + 0.5) +#define JVC_1_PAUSE_LEN (uint8_t)(F_INTERRUPTS * JVC_1_PAUSE_TIME + 0.5) +#define JVC_0_PAUSE_LEN (uint8_t)(F_INTERRUPTS * JVC_0_PAUSE_TIME + 0.5) +#define JVC_FRAME_REPEAT_PAUSE_LEN (uint16_t)(F_INTERRUPTS * JVC_FRAME_REPEAT_PAUSE_TIME + 0.5) // use uint16_t! + static volatile uint8_t irsnd_busy; static volatile uint8_t irsnd_protocol; static volatile uint8_t irsnd_buffer[6]; @@ -334,8 +345,25 @@ irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait) } #endif #if IRSND_SUPPORT_NEC_PROTOCOL == 1 - case IRMP_NEC_PROTOCOL: case IRMP_APPLE_PROTOCOL: + { + command = irmp_data_p->command | (irmp_data_p->address << 8); // store address as ID in upper byte of command + address = 0x87EE; // set fixed NEC-lookalike address (customer ID of apple) + + address = bitsrevervse (address, NEC_ADDRESS_LEN); + command = bitsrevervse (command, NEC_COMMAND_LEN); + + irsnd_protocol = IRMP_NEC_PROTOCOL; // APPLE protocol is NEC with id instead of inverted command + + irsnd_buffer[0] = (address & 0xFF00) >> 8; // AAAAAAAA + irsnd_buffer[1] = (address & 0x00FF); // AAAAAAAA + irsnd_buffer[2] = (command & 0xFF00) >> 8; // CCCCCCCC + irsnd_buffer[3] = (command & 0x00FF); // CCCCCCCC + + irsnd_busy = TRUE; + break; + } + case IRMP_NEC_PROTOCOL: { address = bitsrevervse (irmp_data_p->address, NEC_ADDRESS_LEN); command = bitsrevervse (irmp_data_p->command, NEC_COMMAND_LEN); @@ -344,12 +372,8 @@ irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait) irsnd_buffer[1] = (address & 0x00FF); // AAAAAAAA irsnd_buffer[2] = (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_protocol = IRMP_NEC_PROTOCOL; // APPLE protocol is NEC with fix bitmask instead of inverted command + irsnd_buffer[3] = 0x8B; // 10001011 { irsnd_buffer[3] = ~((command & 0xFF00) >> 8); // cccccccc } @@ -556,6 +580,19 @@ irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait) break; } #endif +#if IRSND_SUPPORT_JVC_PROTOCOL == 1 + case IRMP_JVC_PROTOCOL: + { + address = bitsrevervse (irmp_data_p->address, JVC_ADDRESS_LEN); + command = bitsrevervse (irmp_data_p->command, JVC_COMMAND_LEN); + + irsnd_buffer[0] = ((address & 0x000F) << 4) | (command & 0x0F00) >> 8; // AAAACCCC + irsnd_buffer[1] = (command & 0x00FF); // CCCCCCCC + + irsnd_busy = TRUE; + break; + } +#endif default: { break; @@ -984,6 +1021,30 @@ irsnd_ISR (void) break; } #endif +#if IRSND_SUPPORT_JVC_PROTOCOL == 1 + case IRMP_JVC_PROTOCOL: + { + if (repeat_counter != 0) // skip start bit if repetition frame + { + current_bit = 0; + } + + startbit_pulse_len = JVC_START_BIT_PULSE_LEN; + startbit_pause_len = JVC_START_BIT_PAUSE_LEN; + complete_data_len = JVC_COMPLETE_DATA_LEN; + pulse_1_len = JVC_PULSE_LEN; + pause_1_len = JVC_1_PAUSE_LEN; + pulse_0_len = JVC_PULSE_LEN; + pause_0_len = JVC_0_PAUSE_LEN; + has_stop_bit = JVC_STOP_BIT; + n_auto_repetitions = 1; // 1 frame + auto_repetition_pause_len = 0; + repeat_frame_pause_len = JVC_FRAME_REPEAT_PAUSE_LEN; + irsnd_set_freq (IRSND_FREQ_38_KHZ); + + break; + } +#endif default: { irsnd_busy = FALSE; @@ -1036,11 +1097,15 @@ irsnd_ISR (void) #if IRSND_SUPPORT_RCCAR_PROTOCOL == 1 case IRMP_RCCAR_PROTOCOL: #endif +#if IRSND_SUPPORT_JVC_PROTOCOL == 1 + case IRMP_JVC_PROTOCOL: +#endif #if IRSND_SUPPORT_SIRCS_PROTOCOL == 1 || IRSND_SUPPORT_NEC_PROTOCOL == 1 || IRSND_SUPPORT_SAMSUNG_PROTOCOL == 1 || IRSND_SUPPORT_MATSUSHITA_PROTOCOL == 1 || \ IRSND_SUPPORT_KASEIKYO_PROTOCOL == 1 || IRSND_SUPPORT_RECS80_PROTOCOL == 1 || IRSND_SUPPORT_RECS80EXT_PROTOCOL == 1 || IRSND_SUPPORT_DENON_PROTOCOL == 1 || \ - IRSND_SUPPORT_NUBERT_PROTOCOL == 1 || IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 || IRSND_SUPPORT_FDC_PROTOCOL == 1 || IRSND_SUPPORT_RCCAR_PROTOCOL == 1 + IRSND_SUPPORT_NUBERT_PROTOCOL == 1 || IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 || IRSND_SUPPORT_FDC_PROTOCOL == 1 || IRSND_SUPPORT_RCCAR_PROTOCOL == 1 || \ + IRSND_SUPPORT_JVC_PROTOCOL == 1 { if (pulse_counter == 0) { diff --git a/irsnd.exe b/irsnd.exe index 76481e3915fca96dbea84f8b077cb82af56f8c4f..02672d3bf586b73812692db1255309b7c50cfd12 100644 GIT binary patch delta 2767 zcmYjT3sh9q8s6tHgM%>4APnzOfuTgf&im~1*k{J16iXxYYPo!8fM)9If|}PD6igmb z;HJVJ-r~AaZ<#2dc{7!?F@y@?W~HT|X%J+V*UIH%?jEF;d#(Tf_xZm)|Ni$r-*?s& zFDqVF{YTLKtGqQgob=2wIG!3$-^#>Os3{>~W&pYw01|7G67UC3&z$wivv|G-F|IWj3ALa^8{~nr&*Z+xDM0p6Rk&-UI;O`5^@Ws9Nj- zL7k;@T$Tblv@7@IGMB~VFZ{{2zqR~fm!-kZw^sUtT8Hqqzi^+qWTFSqw*4RDykH5B z4z}VA<|(l)y_Wh40t~@Eb0vAG{JjIaLt=*(y-OC#F@2BR_WN!7v+42~F3X;bkSMHKdeYao0vdpl?jWDJjFk4b^wB5A$N>i7ExiB)=}z}DORtKVN?4e*Sd?w3PR zq+ZqQflYc}$BSa84SSF5kiT^-{wOw^O2XlBE2y2gC{Cc3*gh2he12@K zCy@RN|N1Vxe;hgWxW+}U`cQ8Z>6>CgnIvW$Gm)9jJkBg&Rxx{+1I%IO7?a8htin!W zA7*pdS?v34BYTKF#^JOLR^(JJhb!QUxKgg18_!STr}ESJ$N1fR6Mvq+!e8TW z@U##j*o9~zK}Z#JAx~H%6bU854xw2%A)FMx_6lc(tHKR|7A<0;I7VbdSw!NqVu^TK zydYi?uZy8lloT(Gl9o#a(psrhs+4M^S0q}Fk)3j~TrR&T*UGQS+vFYcdvb%^B!3_u zl#j^AxxkLW1{I&e8+%11E_sRqE6`6u|cn{>^1o#llfeWEG4?Y8*g&SctdML$~EPtVpi>Hw3?_Ut7)pN-mhk<+3HMnuKI+!R9&gAR*Ssq zi|Whj8*06}Q{AoZQxB>~)i$+LJ*Qq&FRRy8pbgW)HHVgF71N$qjp96O}nYldWde*qxF$`s?O<9H}uK+ zRDHTWTVJ5(>E0FkD!o*HNqX&|zu1kK&ERT?5r_f8%5}v=B*dw1b)CANC}q3qQ}YS?z1o}F z9>V$2`aODvK1F|3e?#xlO(+66Q7WOTLMZwqS~*D24X6ygh-%Sm2$27#gg)RP^C{EL KG+q*dss97OeXOtm delta 2521 zcmZ8h3wTt;6~6Z-8#a&4ZeTa>4S4|}0W$YFbMKwI_aYj^rhH&Pq>?~EAS#dYlxSsR z5@ACO5C)4;c_XGRR3M)q4`HK_HX0RDd5O?~1p^6)k*~mqbvp~vuV3f;&iT*&XYR~7 zbI#eyS(UR^--#Hyx}xEpmzy+*q_V@f&L;8%`$Y7eNQUVI43plFl}0{fRW_aUvK!c< z<_7L-*3s9w{KY7SDGBA)-%2D)BFB*pG0`zDvEv}iFiia@vMD-)b&(^{$&YmK9X3a8y%Wc{g^Ex78LlxmH^pg}Q*Zg2JY-dZujRC*-)T zgQLf8jzVNul!rWG%W~C@%eC*0dwAvB4A~H!+3e^evUca*wz^X-*KFi*`w-jJ%^bs! zI{UW+T5aI~La(+llxekvg9ui4Mzmbz0*-JnEuB$Y>WDuok*tm07TF!~APwT^lSF34 zj36k+OFoY=VBkLU<^$jaDMf4j?K<|SB6V_%EO>}N4ui5BxMMb-VlPN#f$ zPnai^`-n;}l@iYb?i$4z)Ytxh>wfYjH9==hc`U$ZTAmpwJoLTCS3hIl3a}&!d8$( z$M85>(h|BQT+wVY%~8hv7(qU9{JQ@#x;5ab3Tto8eZ7k68MTf#DO_Df3ggE`@evHO z{}eIeAqmDOapyU5Hhw%yea^}3K(fj?iu;BoUpvRJD@cKB45zXL#3vHsD&o#D3s(&~%G=nM#qq**`$evK>exYlE3!Pn2 zKZZgp9O0&~XZi`3S;{( z`0#hxU@J`j*MH`J{N4F9;r!;Qxm#lWXK2tYhy_`o0E_@7U?P|T7K7bjKR5!8f-F9t zFXUz3;z#nM`4Ya2f0loa5Aw(O^L&Vp7My}xm?JC@UKN%JuL}*r4WWcQ4Oj`1T~^fXgAu2f~XaJiB6$!&?VG`ZlJr!rpBpB zYKA&U9i~Fnr#_|@tK-!v>I`+3I$y0&m#b^kMs<_AUEQfRs|VDe`d9S}^@4iYulA_D z>RmOYMrm&JOq;H~pv~7Rv>L5mBU+=jO?zM4t9_&$)jria zw6ofGTCa9jWAr|HyzbG{^&DN)HQmyS^kV%VMLA z>HG8}daLgLO8b-$h`l%m7h(mEz@zbaJPA+3&*S;{6f|A8f%TM zMw1aVt{69rdq$McybVcfsZb^1IM;;=Nl*h`?%5&re@)G$id86DU@01V7pUEfWGjfmogY3U8hh&=) zt0XHK${?jk8LdoEN|ou#Jf&J$sjOAbE8i;JO0RNT`L_}QV_^avt^TkOLTJEIa2%Wu zm%yd42Cjgs;X1ehz6*E2W_SR$z&3aSo`sj;4frFx3nNe*ovs{|hY+2v5oi>ejAo$s zOVJ1DFgk{g({Z|nLMTSfRuLVaDmpSvbXeNea&5Ne*Vb#hwS8KqK2RU3KcTPF-_bAX pkvM_2>Hs_xtGE= 10000 uses ~150 bytes #define IRSND_SUPPORT_RC5_PROTOCOL 1 // RC5 >= 10000 uses ~150 bytes #define IRSND_SUPPORT_DENON_PROTOCOL 1 // DENON >= 10000 uses ~200 bytes -#define IRSND_SUPPORT_RC6_PROTOCOL 0 // RC6 NOT SUPPORTED YET! +#define IRSND_SUPPORT_JVC_PROTOCOL 1 // JVC >= 10000 uses ~150 bytes +#define IRSND_SUPPORT_RC6_PROTOCOL 0 // RC6 NOT SUPPORTED YET! DON'T CHANGE! #define IRSND_SUPPORT_NUBERT_PROTOCOL 1 // NUBERT >= 10000 uses ~100 bytes #define IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL 1 // Bang&Olufsen >= 10000 uses ~250 bytes #define IRSND_SUPPORT_GRUNDIG_PROTOCOL 1 // Grundig >= 10000 uses ~300 bytes @@ -47,7 +48,6 @@ #define IRSND_SUPPORT_SIEMENS_PROTOCOL 0 // Siemens, Gigaset >= 15000 uses ~150 bytes #define IRSND_SUPPORT_RECS80_PROTOCOL 0 // RECS80 >= 20000 uses ~100 bytes #define IRSND_SUPPORT_RECS80EXT_PROTOCOL 0 // RECS80EXT >= 20000 uses ~100 bytes -#define IRSND_SUPPORT_JVC_PROTOCOL 0 // JVC NOT SUPPORTED YET! /*--------------------------------------------------------------------------------------------------------------------------------------------------- @@ -82,4 +82,3 @@ #undef IRSND_SUPPORT_RECS80EXT_PROTOCOL #define IRSND_SUPPORT_RECS80EXT_PROTOCOL 0 #endif - diff --git a/main.c b/main.c index cfcb8c9..f28cce9 100644 --- a/main.c +++ b/main.c @@ -3,7 +3,7 @@ * * Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de * - * $Id: main.c,v 1.7 2010/06/22 08:33:21 fm Exp $ + * $Id: main.c,v 1.8 2010/08/30 15:45:27 fm Exp $ * * ATMEGA88 @ 8 MHz * @@ -108,9 +108,7 @@ main (void) #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif - static uint8_t *Proto[]={"SIRCS","NEC","SAMSUNG","MATSUSH","KASEIKYO","RECS80","RC5(x)","DENON","RC6","SAMSG32","APPLE"}; - #define IRMP_APPLE_ADDRESS 0x77E1 - + static uint8_t *Proto[]={"SIRCS","NEC","SAMSUNG","MATSUSH","KASEIKYO","RECS80","RC5(x)","DENON","RC6","SAMSG32","APPLE","RECS80X","NUBERT","B&O","GRUNDIG","NOKIA","SIEMENS","FDC","RCCAR","JVC","RC6A"}; #if IRMP_LOGGING == 0 // USART initialization has to be done here if Logging is off @@ -146,9 +144,7 @@ main (void) // irmp_data.address is the address/manufacturer code of ir sender // irmp_data.command is the command code #if IRMP_LOGGING != 1 - if((irmp_data.protocol == IRMP_NEC_PROTOCOL) && (irmp_data.address == IRMP_APPLE_ADDRESS)) - printf("Code: Apple\n"); - else printf("Code: %s\n",Proto[irmp_data.protocol-1]); + printf("Code: %s\n",Proto[irmp_data.protocol-1]); printf("Address: 0x%.2X\n",irmp_data.address); printf("Command: 0x%.2X\n\n",irmp_data.command); #endif -- 2.39.2