]> cloudbase.mooo.com Git - irmp.git/commitdiff
Version 2.0.3:
authorukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Mon, 13 Feb 2012 11:18:28 +0000 (11:18 +0000)
committerukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Mon, 13 Feb 2012 11:18:28 +0000 (11:18 +0000)
irmp:
 - fixed bug when switching from nec42 to nec protocol
 - corrected timing for samsung/samsung32 protocol
 - added genre bits for kaseikyo
irsnd:
 - corrected timing for samsung/samsung32 protocol
 - added pause after sending last frame
 - added genre bits for kaseikyo

git-svn-id: svn://mikrocontroller.net/irmp@85 aeb2e35e-bfc4-4214-b83c-9e8de998ed28

IR-Data/samsung32-15kHz.txt [new file with mode: 0644]
IR-Data/test-suite.sh
README.txt
irmp.c
irmp.h
irsnd.aps
irsnd.c
main.c

diff --git a/IR-Data/samsung32-15kHz.txt b/IR-Data/samsung32-15kHz.txt
new file mode 100644 (file)
index 0000000..9ad8a3a
--- /dev/null
@@ -0,0 +1,4 @@
+# 62\r
+00000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111100000000011111111111111111111111110000000001111111100000000011111111111111111111111100000000011111111000000000111111110000000001111111100000000011111111000000000111111100000000001111111111111111111111110000000001111111100000000011111111111111111111111110000000001111111000000000011111110000000000111111100000000001111111000000000111111110000000001111111100000000011111111111111111111111110000000001111111000000000111111110000000001111111100000000011111111000000000111111110000000001111111100000000011111111111111111111111100000000011111111000000000111111111111111111111111100000000011111111111111111111111100000000001111111111111111111111110000000001111111111111111111111111000000000111111111111111111111111000000000011111111111111111111111100000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111110000000000111111111111111111111111000000000111111110000000001111111111111111111111111000000000111111100000000011111111000000000111111110000000001111111100000000011111111000000000111111111111111111111111000000000011111110000000000111111111111111111111111000000000111111110000000001111111100000000011111110000000000111111100000000011111111000000000111111110000000001111111111111111111111111000000000111111110000000001111111000000000111111110000000001111111100000000011111111000000000111111110000000001111111111111111111111110000000001111111100000000011111111111111111111111110000000001111111111111111111111110000000000111111111111111111111111000000000111111111111111111111111100000000011111111111111111111111100000000001111111111111111111111110000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111000000000011111111111111111111111100000000011111111000000000111111111111111111111111100000000011111111000000000111111100000000001111111000000000011111110000000001111111100000000011111111111111111111111100000000001111111000000000011111111111111111111111100000000011111111000000000111111110000000001111111100000000011111111000000000111111100000000011111111000000000111111111111111111111111100000000011111111000000000111111110000000001111111000000000011111110000000001111111100000000011111111000000000111111111111111111111111100000000011111111000000001111111111111111111111111000000000111111111111111111111111100000000011111111111111111111111100000000011111111111111111111111110000000001111111111111111111111111000000000111111111111111111111111000000000111111111111111111111\r
+# 71\r
+000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111000000000111111111111111111111111000000000011111110000000001111111100000000011111111000000000111111110000000001111111000000000011111110000000000111111111111111111111111000000000011111111111111111111111100000000011111111000000000111111110000000001111111100000000011111110000000000111111100000000001111111000000000011111111111111111111111100000000011111111000000000111111110000000001111111100000000011111110000000001111111100000000001111111111111111111111110000000001111111111111111111111111000000000111111111111111111111111000000000011111111111111111111111100000000001111111111111111111111110000000001111111111111111111111111000000000111111111111111111111111000000000011111111111111111111111100000000001111111000000000111111110000000001111111100000000011111111111111\r
index 94a79741f3ece59cb53b074348617f90a5e76080..58a2c9acd38bd8b5e43f1f34d049e7981ae18ec1 100644 (file)
@@ -83,6 +83,7 @@ for j in                                \
     irc-15kHz.txt                       \
     kathrein-15kHz.txt                  \
     recs80-15kHz.txt                    \
+    samsung32-15kHz.txt                 \
     t-home-mediareceiver-15kHz.txt      \
     universal-15kHz.txt                 \
     xbox360-15kHz.txt
index 61fa72c3e2c7287258ff1dba76a03ba792861824..83e2a6aa27635c2751984e2173ca7bd25092bb93 100644 (file)
@@ -1,8 +1,8 @@
 IRMP - Infrared Multi Protocol Decoder\r
 --------------------------------------\r
 \r
-Version IRMP:  2.0.2 22.09.2011\r
-Version IRSND: 2.0.1 20.09.2011\r
+Version IRMP:  2.0.3 13.02.2012\r
+Version IRSND: 2.0.3 13.02.2012\r
 \r
 Dokumentation:\r
  \r
diff --git a/irmp.c b/irmp.c
index 020860f6a8ac2594d110955656eafd05d42b45ba..9a707ba6e7c454819048d063ef5ee3f74367a9a0 100644 (file)
--- a/irmp.c
+++ b/irmp.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.c,v 1.110 2011/09/22 10:19:44 fm Exp $\r
+ * $Id: irmp.c,v 1.112 2012/02/13 10:59:07 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -1736,6 +1736,7 @@ static uint16_t irmp_tmp_id;
 #endif\r
 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1\r
 static uint8_t  xor_check[6];                                                           // check kaseikyo "parity" bits\r
+static uint8_t  genre2;                                                                 // save genre2 bits here, later copied to MSB in flags\r
 #endif\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
@@ -1798,23 +1799,29 @@ irmp_store_bit (uint8_t value)
 #endif\r
 \r
 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1\r
-    else if (irmp_param.protocol == IRMP_KASEIKYO_PROTOCOL && irmp_bit >= 20 && irmp_bit < 24)\r
+    else if (irmp_param.protocol == IRMP_KASEIKYO_PROTOCOL)\r
     {\r
-        irmp_tmp_command |= (((uint16_t) (value)) << (irmp_bit - 8));                   // store 4 system bits in upper nibble with LSB first\r
-    }\r
-\r
-    if (irmp_param.protocol == IRMP_KASEIKYO_PROTOCOL && irmp_bit < KASEIKYO_COMPLETE_DATA_LEN)\r
-    {\r
-        if (value)\r
+        if (irmp_bit >= 20 && irmp_bit < 24)\r
         {\r
-            xor_check[irmp_bit / 8] |= 1 << (irmp_bit % 8);\r
+            irmp_tmp_command |= (((uint16_t) (value)) << (irmp_bit - 8));       // store 4 system bits (genre 1) in upper nibble with LSB first\r
         }\r
-        else\r
+       else if (irmp_bit >= 24 && irmp_bit < 28)\r
         {\r
-            xor_check[irmp_bit / 8] &= ~(1 << (irmp_bit % 8));\r
+            genre2 |= (((uint8_t) (value)) << (irmp_bit - 20));                 // store 4 system bits (genre 2) in upper nibble with LSB first\r
         }\r
-    }\r
 \r
+        if (irmp_bit < KASEIKYO_COMPLETE_DATA_LEN)\r
+        {\r
+            if (value)\r
+            {\r
+                xor_check[irmp_bit / 8] |= 1 << (irmp_bit % 8);\r
+            }\r
+            else\r
+            {\r
+                xor_check[irmp_bit / 8] &= ~(1 << (irmp_bit % 8));\r
+            }\r
+        }\r
+    }\r
 #endif\r
 \r
     irmp_bit++;\r
@@ -1914,7 +1921,7 @@ irmp_ISR (void)
 #ifdef ANALYZE\r
                 if (! irmp_pulse_time)\r
                 {\r
-                    ANALYZE_PRINTF("%8d [starting pulse]\n", time_counter);\r
+                    ANALYZE_PRINTF("%8.3fms [starting pulse]\n", (double) (time_counter * 1000) / F_INTERRUPTS);\r
                 }\r
 #endif\r
                 irmp_pulse_time++;                                              // increment counter\r
@@ -1928,6 +1935,9 @@ irmp_ISR (void)
                     wait_for_space          = 0;\r
                     irmp_tmp_command        = 0;\r
                     irmp_tmp_address        = 0;\r
+#if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1\r
+                    genre2                  = 0;\r
+#endif\r
 \r
 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) || IRMP_SUPPORT_NEC42_PROTOCOL == 1\r
                     irmp_tmp_command2       = 0;\r
@@ -1972,7 +1982,7 @@ irmp_ISR (void)
                         else\r
 #endif // IRMP_SUPPORT_JVC_PROTOCOL == 1\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_PRINTF ("%8.3fms error 1: pause after start bit pulse %d too long: %d\n", (double) (time_counter * 1000) / F_INTERRUPTS, irmp_pulse_time, irmp_pause_time);\r
                             ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');\r
                         }\r
 //                      irmp_busy_flag = FALSE;\r
@@ -1989,7 +1999,7 @@ irmp_ISR (void)
                     irmp_param2.protocol = 0;\r
 #endif\r
 \r
-                    ANALYZE_PRINTF ("%8d [start-bit: pulse = %2d, pause = %2d]\n", time_counter, irmp_pulse_time, irmp_pause_time);\r
+                    ANALYZE_PRINTF ("%8.3fms [start-bit: pulse = %2d, pause = %2d]\n", (double) (time_counter * 1000) / F_INTERRUPTS, irmp_pulse_time, irmp_pause_time);\r
 \r
 #if IRMP_SUPPORT_SIRCS_PROTOCOL == 1\r
                     if (irmp_pulse_time >= SIRCS_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= SIRCS_START_BIT_PULSE_LEN_MAX &&\r
@@ -2453,14 +2463,14 @@ irmp_ISR (void)
                     {\r
                         if (irmp_pause_time > irmp_param.pulse_1_len_max && irmp_pause_time <= 2 * irmp_param.pulse_1_len_max)\r
                         {\r
-                            ANALYZE_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+                            ANALYZE_PRINTF ("%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
                             ANALYZE_PUTCHAR ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? '0' : '1');\r
                             ANALYZE_NEWLINE ();\r
                             irmp_store_bit ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? 0 : 1);\r
                         }\r
                         else if (! last_value)  // && irmp_pause_time >= irmp_param.pause_1_len_min && irmp_pause_time <= irmp_param.pause_1_len_max)\r
                         {\r
-                            ANALYZE_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+                            ANALYZE_PRINTF ("%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
 \r
                             ANALYZE_PUTCHAR ((irmp_param.flags & IRMP_PARAM_FLAG_1ST_PULSE_IS_1) ? '1' : '0');\r
                             ANALYZE_NEWLINE ();\r
@@ -2482,7 +2492,7 @@ irmp_ISR (void)
 #if IRMP_SUPPORT_DENON_PROTOCOL == 1\r
                     if (irmp_param.protocol == IRMP_DENON_PROTOCOL)\r
                     {\r
-                        ANALYZE_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+                        ANALYZE_PRINTF ("%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
 \r
                         if (irmp_pause_time >= DENON_1_PAUSE_LEN_MIN && irmp_pause_time <= DENON_1_PAUSE_LEN_MAX)\r
                         {                                                       // pause timings correct for "1"?\r
@@ -2502,7 +2512,7 @@ irmp_ISR (void)
 #if IRMP_SUPPORT_THOMSON_PROTOCOL == 1\r
                     if (irmp_param.protocol == IRMP_THOMSON_PROTOCOL)\r
                     {\r
-                        ANALYZE_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+                        ANALYZE_PRINTF ("%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
 \r
                         if (irmp_pause_time >= THOMSON_1_PAUSE_LEN_MIN && irmp_pause_time <= THOMSON_1_PAUSE_LEN_MAX)\r
                         {                                                       // pause timings correct for "1"?\r
@@ -2703,7 +2713,7 @@ irmp_ISR (void)
                                 //        0123456789ABC0123456789ABC0123456701234567\r
                                 // NEC42: AAAAAAAAAAAAAaaaaaaaaaaaaaCCCCCCCCcccccccc\r
                                 // NEC:   AAAAAAAAaaaaaaaaCCCCCCCCcccccccc\r
-                                irmp_tmp_address        |= (irmp_tmp_address2 & 0x0007) << 12;\r
+                                irmp_tmp_address        |= (irmp_tmp_address2 & 0x0007) << 13;      // fm 2012-02-13: 12 -> 13\r
                                 irmp_tmp_command        = (irmp_tmp_address2 >> 3) | (irmp_tmp_command << 10);\r
                             }\r
 #endif // IRMP_SUPPORT_NEC_PROTOCOL == 1\r
@@ -2743,7 +2753,7 @@ irmp_ISR (void)
 \r
                 if (got_light)\r
                 {\r
-                    ANALYZE_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+                    ANALYZE_PRINTF ("%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
 \r
 #if IRMP_SUPPORT_MANCHESTER == 1\r
                     if ((irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER))                                     // Manchester\r
@@ -3252,7 +3262,7 @@ irmp_ISR (void)
 #endif\r
 \r
                 {\r
-                    ANALYZE_PRINTF ("%8d code detected, length = %d\n", time_counter, irmp_bit);\r
+                    ANALYZE_PRINTF ("%8.3fms code detected, length = %d\n", (double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit);\r
                     irmp_ir_detected = TRUE;\r
 \r
 #if IRMP_SUPPORT_DENON_PROTOCOL == 1\r
@@ -3336,6 +3346,8 @@ irmp_ISR (void)
                                 ANALYZE_PRINTF ("error 4: wrong XOR check for data bits: 0x%02x 0x%02x\n", xor, xor_check[5]);\r
                                 irmp_ir_detected = FALSE;\r
                             }\r
+\r
+                            irmp_flags |= genre2;      // write the genre2 bits into MSB of the flag byte\r
                         }\r
 #endif // IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1\r
 \r
@@ -3806,7 +3818,7 @@ next_tick (void)
 \r
             if (verbose)\r
             {\r
-                printf ("%8d ", time_counter);\r
+                printf ("%8.3fms ", (double) (time_counter * 1000) / F_INTERRUPTS);\r
             }\r
 \r
             if (irmp_data.protocol == IRMP_FDC_PROTOCOL && (key = get_fdc_key (irmp_data.command)) != 0)\r
diff --git a/irmp.h b/irmp.h
index 4ac14b0f3215ec9743e9700e275d8f3d89d4619b..ccaee8199c718e6c0e3e25fd78d396df43c95d4b 100644 (file)
--- a/irmp.h
+++ b/irmp.h
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.h,v 1.67 2011/09/22 10:19:44 fm Exp $\r
+ * $Id: irmp.h,v 1.68 2012/02/13 10:55:50 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -136,8 +136,9 @@ typedef uint8_t     PAUSE_LEN;
 #define SAMSUNG_START_BIT_PULSE_TIME            4500.0e-6                       // 4500 usec pulse\r
 #define SAMSUNG_START_BIT_PAUSE_TIME            4500.0e-6                       // 4500 usec pause\r
 #define SAMSUNG_PULSE_TIME                       550.0e-6                       //  550 usec pulse\r
-#define SAMSUNG_1_PAUSE_TIME                    1450.0e-6                       // 1450 usec pause\r
-#define SAMSUNG_0_PAUSE_TIME                     450.0e-6                       //  450 usec pause\r
+#define SAMSUNG_1_PAUSE_TIME                    1650.0e-6                       // 1650 usec pause\r
+#define SAMSUNG_0_PAUSE_TIME                     550.0e-6                       //  550 usec pause\r
+\r
 #define SAMSUNG_FRAME_REPEAT_PAUSE_TIME           25.0e-3                       // frame repeat after 25ms\r
 #define SAMSUNG_ADDRESS_OFFSET                   0                              // skip 0 bits\r
 #define SAMSUNG_ADDRESS_LEN                     16                              // read 16 address bits\r
@@ -153,7 +154,7 @@ typedef uint8_t     PAUSE_LEN;
 #define SAMSUNG32_COMMAND_OFFSET                16                              // skip 16 bits\r
 #define SAMSUNG32_COMMAND_LEN                   16                              // read 16 command bits\r
 #define SAMSUNG32_COMPLETE_DATA_LEN             32                              // complete length\r
-#define SAMSUNG32_FRAMES                        2                               // SAMSUNG32 sends each frame 2 times\r
+#define SAMSUNG32_FRAMES                        1                               // SAMSUNG32 sends each frame 1 times\r
 #define SAMSUNG32_AUTO_REPETITION_PAUSE_TIME    47.0e-3                         // repetition after 47 ms\r
 #define SAMSUNG32_FRAME_REPEAT_PAUSE_TIME       47.0e-3                         // frame repeat after 40ms\r
 \r
index 386137ec12a1925a5cc5ac6f61f5d2b442b010d2..6b9e0314fd97ac1676d89c28c73efba2d132d1a9 100644 (file)
--- a/irsnd.aps
+++ b/irsnd.aps
@@ -1 +1 @@
-<AVRStudio><MANAGEMENT><ProjectName>irsnd</ProjectName><Created>07-Jan-2010 20:23:49</Created><LastEdit>07-Sep-2011 16:01:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>07-Jan-2010 20:23:49</Created><Version>4</Version><Build>4, 18, 0, 670</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\irsnd.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\avr\irmp\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega88.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>irsndmain.c</SOURCEFILE><SOURCEFILE>irsnd.c</SOURCEFILE><HEADERFILE>irmp.h</HEADERFILE><HEADERFILE>irsnd.h</HEADERFILE><HEADERFILE>irsndconfig.h</HEADERFILE><OTHERFILE>default\irsnd.lss</OTHERFILE><OTHERFILE>default\irsnd.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega88</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>irsnd.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99           -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>irsndmain.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>irmp.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>irsnd.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>irsnd.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>irsndconfig.h</FileName><Status>1</Status></File00004></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
+<AVRStudio><MANAGEMENT><ProjectName>irsnd</ProjectName><Created>07-Jan-2010 20:23:49</Created><LastEdit>09-Oct-2011 12:13:26</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>07-Jan-2010 20:23:49</Created><Version>4</Version><Build>4, 18, 0, 670</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\irsnd.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\avr\irmp\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega88.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>irsndmain.c</SOURCEFILE><SOURCEFILE>irsnd.c</SOURCEFILE><HEADERFILE>irmp.h</HEADERFILE><HEADERFILE>irsnd.h</HEADERFILE><HEADERFILE>irsndconfig.h</HEADERFILE><OTHERFILE>default\irsnd.lss</OTHERFILE><OTHERFILE>default\irsnd.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega1284p</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>irsnd.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99             -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>irsndmain.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>irmp.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>irsnd.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>irsnd.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>irsndconfig.h</FileName><Status>1</Status></File00004></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/irsnd.c b/irsnd.c
index 09fa29520945bbc4c8d59ded57ae8f99d07438e3..ce93c1a16ceed81b8418afcf1a4e38e1b336aed0 100644 (file)
--- a/irsnd.c
+++ b/irsnd.c
@@ -12,7 +12,7 @@
  * ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284\r
  * ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P\r
  *\r
- * $Id: irsnd.c,v 1.41 2011/09/20 10:45:28 fm Exp $\r
+ * $Id: irsnd.c,v 1.45 2012/02/13 11:02:29 fm Exp $\r
  *\r
  * This program is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
@@ -136,7 +136,8 @@ typedef unsigned short  uint16_t;
    || defined (__AVR_ATmega324__)   \\r
    || defined (__AVR_ATmega644__)   \\r
    || defined (__AVR_ATmega644P__)  \\r
-   || defined (__AVR_ATmega1284__)                      // ATmega164|324|644|644P|1284 uses OC2A = PD7 or OC2B = PD6 or OC0A = PB3 or OC0B = PB4\r
+   || defined (__AVR_ATmega1284__)  \\r
+   || defined (__AVR_ATmega1284P__)                     // ATmega164|324|644|644P|1284 uses OC2A = PD7 or OC2B = PD6 or OC0A = PB3 or OC0B = PB4\r
 #if IRSND_OCx == IRSND_OC2A                             // OC2A\r
 #define IRSND_PORT                              PORTD   // port D\r
 #define IRSND_DDR                               DDRD    // ddr D\r
@@ -182,6 +183,21 @@ typedef unsigned short  uint16_t;
 #else\r
 #error Wrong value for IRSND_OCx, choose IRSND_OC2A, IRSND_OC2B, IRSND_OC0A, or IRSND_OC0B in irsndconfig.h\r
 #endif // IRSND_OCx\r
+#elif defined (__AVR_ATmega8515__) \r
+#if IRSND_OCx == IRSND_OC0   \r
+#define IRSND_PORT                              PORTB   // port B\r
+#define IRSND_DDR                               DDRB    // ddr B\r
+#define IRSND_BIT                               0       // OC0\r
+#elif IRSND_OCx == IRSND_OC1A \r
+#define IRSND_PORT                              PORTD   // port D\r
+#define IRSND_DDR                               DDRD    // ddr D\r
+#define IRSND_BIT                               5       // OC1A\r
+#elif IRSND_OCx == IRSND_OC1B \r
+#define IRSND_PORT                              PORTE   // port E\r
+#define IRSND_DDR                               DDRE    // ddr E\r
+#define IRSND_BIT                               2       // OC1E\r
+#error Wrong value for IRSND_OCx, choose IRSND_OC0, IRSND_OC1A, or IRSND_OC1B in irsndconfig.h\r
+#endif // IRSND_OCx\r
 \r
 #else\r
 #if !defined (unix) && !defined (WIN32)\r
@@ -713,16 +729,18 @@ irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait)
         case IRMP_KASEIKYO_PROTOCOL:\r
         {\r
             uint8_t xor;\r
+            uint16_t genre2;\r
 \r
             address = bitsrevervse (irmp_data_p->address, KASEIKYO_ADDRESS_LEN);\r
             command = bitsrevervse (irmp_data_p->command, KASEIKYO_COMMAND_LEN + 4);\r
+            genre2 = bitsrevervse ((irmp_data_p->flags & ~IRSND_REPETITION_MASK) >> 4, 4);\r
 \r
             xor = ((address & 0x000F) ^ ((address & 0x00F0) >> 4) ^ ((address & 0x0F00) >> 8) ^ ((address & 0xF000) >> 12)) & 0x0F;\r
 \r
             irsnd_buffer[0] = (address & 0xFF00) >> 8;                                                          // AAAAAAAA\r
             irsnd_buffer[1] = (address & 0x00FF);                                                               // AAAAAAAA\r
             irsnd_buffer[2] = xor << 4 | (command & 0x000F);                                                    // XXXXCCCC\r
-            irsnd_buffer[3] = 0 | (command & 0xF000) >> 12;                                                     // 0000CCCC\r
+            irsnd_buffer[3] = (genre2 << 4) | (command & 0xF000) >> 12;                                         // ggggCCCC\r
             irsnd_buffer[4] = (command & 0x0FF0) >> 4;                                                          // CCCCCCCC\r
 \r
             xor = irsnd_buffer[2] ^ irsnd_buffer[3] ^ irsnd_buffer[4];\r
@@ -962,6 +980,7 @@ irsnd_stop (void)
 uint8_t\r
 irsnd_ISR (void)\r
 {\r
+    static uint8_t  send_trailer;\r
     static uint8_t  current_bit = 0xFF;\r
     static uint8_t  pulse_counter;\r
     static IRSND_PAUSE_LEN  pause_counter;\r
@@ -1061,6 +1080,12 @@ irsnd_ISR (void)
             }\r
             else\r
             {\r
+                if (send_trailer)\r
+                {\r
+                    irsnd_busy = FALSE;\r
+                    return irsnd_busy;\r
+                }\r
+\r
                 n_repeat_frames             = irsnd_repeat;\r
 \r
                 if (n_repeat_frames == IRSND_ENDLESS_REPETITION)\r
@@ -1984,6 +2009,8 @@ irsnd_ISR (void)
             }\r
             else\r
             {\r
+                irsnd_busy = TRUE;\r
+                send_trailer = TRUE;\r
                 n_repeat_frames = 0;\r
                 repeat_counter = 0;\r
             }\r
@@ -2016,7 +2043,6 @@ irsnd_ISR (void)
 int\r
 main (int argc, char ** argv)\r
 {\r
-    int         idx;\r
     int         protocol;\r
     int         address;\r
     int         command;\r
@@ -2054,11 +2080,6 @@ main (int argc, char ** argv)
             irsnd_ISR ();\r
         }\r
 \r
-        for (idx = 0; idx < 20; idx++)\r
-        {\r
-            irsnd_ISR ();\r
-        }\r
-\r
         putchar ('\n');\r
     }\r
     else\r
diff --git a/main.c b/main.c
index 28bbe145d6c8f789fed1e35f7096abf9bef3a989..4e666daeba5091311162df6e2431dd358672f76d 100644 (file)
--- a/main.c
+++ b/main.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: main.c,v 1.11 2011/09/20 10:45:28 fm Exp $\r
+ * $Id: main.c,v 1.12 2012/02/13 10:59:07 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -33,8 +33,15 @@ void
 timer1_init (void)\r
 {\r
 #if defined (__AVR_ATtiny45__) || defined (__AVR_ATtiny85__)                // ATtiny45 / ATtiny85:\r
+\r
+#if F_CPU >= 16000000L\r
+    OCR1C   =  (F_CPU / F_INTERRUPTS / 8) - 1;                              // compare value: 1/15000 of CPU frequency, presc = 8\r
+    TCCR1   = (1 << CTC1) | (1 << CS12);                                    // switch CTC Mode on, set prescaler to 8\r
+#else\r
     OCR1C   =  (F_CPU / F_INTERRUPTS / 4) - 1;                              // compare value: 1/15000 of CPU frequency, presc = 4\r
     TCCR1   = (1 << CTC1) | (1 << CS11) | (1 << CS10);                      // switch CTC Mode on, set prescaler to 4\r
+#endif\r
+\r
 #else                                                                       // ATmegaXX:\r
     OCR1A   =  (F_CPU / F_INTERRUPTS) - 1;                                  // compare value: 1/15000 of CPU frequency\r
     TCCR1B  = (1 << WGM12) | (1 << CS10);                                   // switch CTC Mode on, set prescaler to 1\r