]> cloudbase.mooo.com Git - irmp.git/commitdiff
Version 1.6.1: changed interfaces of irmp_ISR(), irsnd_send_data(), changed debug...
authorukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Thu, 10 Jun 2010 10:04:01 +0000 (10:04 +0000)
committerukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Thu, 10 Jun 2010 10:04:01 +0000 (10:04 +0000)
git-svn-id: svn://mikrocontroller.net/irmp@22 aeb2e35e-bfc4-4214-b83c-9e8de998ed28

IR-Data/test-suite.sh
README.txt
irmp.aps
irmp.c
irmp.h
irmpconfig.h
irsnd.c
irsnd.h
irsndmain.c
main.c

index a54440cb74ec5dc8af1c06c5a94c859856109dd8..da04f6825b023c528326f53596128db1f44f9784 100644 (file)
@@ -8,7 +8,7 @@
 #\r
 # Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de\r
 #\r
-# $Id: test-suite.sh,v 1.9 2010/06/08 22:22:13 fm Exp $\r
+# $Id: test-suite.sh,v 1.10 2010/06/09 12:04:04 fm Exp $\r
 #----------------------------------------------------------------------------\r
 \r
 for j in                            \\r
@@ -50,9 +50,9 @@ for j in                            \
     sharp-denon2.txt\r
 do\r
     echo "testing $j ..."\r
-    if ../irmp < $j | grep -q error\r
+    if ../irmp -v < $j | grep -q error\r
     then\r
-       ../irmp < $j | grep error\r
+       ../irmp -v < $j | grep error\r
        echo "test failed"\r
        exit 1\r
     fi\r
@@ -65,9 +65,9 @@ for j in                              \
     fdc-15kHz.txt\r
 do\r
     echo "testing $j ..."\r
-    if ../irmp-15kHz < $j | grep -q error\r
+    if ../irmp-15kHz -v < $j | grep -q error\r
     then\r
-       ../irmp-15kHz < $j | grep error\r
+       ../irmp-15kHz -v < $j | grep error\r
        echo "test failed"\r
        exit 1\r
     fi\r
index bef0a1f2586eec8b53bf1a7dca55b1a0b1c8dba6..4eb75819bea809ae9849639249e380e62ff768cd 100644 (file)
@@ -1,8 +1,8 @@
 IRMP - Infrared Multi Protocol Decoder\r
 --------------------------------------\r
 \r
-Version IRMP:  1.6.0  09.06.2010\r
-Version IRSND: 1.6.0  09.06.2010\r
+Version IRMP:  1.6.1  10.06.2010\r
+Version IRSND: 1.6.1  10.06.2010\r
 \r
 Dokumentation:\r
  \r
index 9ad8f4b2aa4efe875f89b86d567ef691a6b2d435..664e6c257b7f5da0e620c78c7a99f71953dea678 100644 (file)
--- a/irmp.aps
+++ b/irmp.aps
@@ -1 +1 @@
-<AVRStudio><MANAGEMENT><ProjectName>irmp</ProjectName><Created>07-Jan-2010 20:23:49</Created><LastEdit>29-Mar-2010 11:32:13</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\irmp.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>main.c</SOURCEFILE><SOURCEFILE>irmp.c</SOURCEFILE><HEADERFILE>irmp.h</HEADERFILE><HEADERFILE>irmpconfig.h</HEADERFILE><OTHERFILE>default\irmp.lss</OTHERFILE><OTHERFILE>default\irmp.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>irmp.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-20090313\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR-20090313\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>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>irmp.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>irmp.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>irmpconfig.h</FileName><Status>1</Status></File00003></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
+<AVRStudio><MANAGEMENT><ProjectName>irmp</ProjectName><Created>07-Jan-2010 20:23:49</Created><LastEdit>09-Jun-2010 11:02:51</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\irmp.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>main.c</SOURCEFILE><SOURCEFILE>irmp.c</SOURCEFILE><HEADERFILE>irmp.h</HEADERFILE><HEADERFILE>irmpconfig.h</HEADERFILE><OTHERFILE>default\irmp.lss</OTHERFILE><OTHERFILE>default\irmp.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>irmp.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-20090313\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR-20090313\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>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>irmp.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>irmp.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>irmpconfig.h</FileName><Status>1</Status></File00003></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/irmp.c b/irmp.c
index 4e45d5176cb762bf8b7fdccddcb726aec52d91b7..774980d576506392c1bbf26c497a2f189c3e4c20 100644 (file)
--- a/irmp.c
+++ b/irmp.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.c,v 1.35 2010/06/08 22:22:36 fm Exp $\r
+ * $Id: irmp.c,v 1.39 2010/06/10 10:09:47 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -521,25 +521,60 @@ typedef unsigned int16  uint16_t;
 #define AUTO_FRAME_REPETITION_LEN               (uint16_t)(F_INTERRUPTS * AUTO_FRAME_REPETITION_TIME + 0.5)       // use uint16_t!\r
 \r
 #ifdef DEBUG\r
-#define DEBUG_PUTCHAR(a)                        { if (! silent) { putchar (a);          } }\r
-#define DEBUG_PRINTF(...)                       { if (! silent) { printf (__VA_ARGS__); } }\r
+#define DEBUG_PUTCHAR(a)                        { if (! silent)             { putchar (a);          } }\r
+#define DEBUG_ONLY_NORMAL_PUTCHAR(a)            { if (! silent && !verbose) { putchar (a);          } }\r
+#define DEBUG_PRINTF(...)                       { if (verbose)              { printf (__VA_ARGS__); } }\r
+#define DEBUG_NEWLINE()                         { if (verbose)              { putchar ('\n');       } }\r
 static int      silent;\r
 static int      time_counter;\r
+static int      verbose;\r
 #else\r
 #define DEBUG_PUTCHAR(a)\r
+#define DEBUG_ONLY_NORMAL_PUTCHAR(a)\r
 #define DEBUG_PRINTF(...)\r
+#define DEBUG_NEWLINE()\r
 #endif\r
 \r
 #if IRMP_LOGGING == 1\r
-#define UART_BAUD                               9600L\r
+#define BAUD                                    9600L\r
+#include <util/setbaud.h>\r
+\r
+#ifdef UBRR0H\r
+\r
+#define UART0_UBRRH                             UBRR0H\r
+#define UART0_UBRRL                             UBRR0L\r
+#define UART0_UCSRA                             UCSR0A\r
+#define UART0_UCSRB                             UCSR0B\r
+#define UART0_UCSRC                             UCSR0C\r
+#define UART0_UDRE_BIT_VALUE                    (1<<UDRE0)\r
+#define UART0_UCSZ1_BIT_VALUE                   (1<<UCSZ01)\r
+#define UART0_UCSZ0_BIT_VALUE                   (1<<UCSZ00)\r
+#ifdef URSEL0\r
+#define UART0_URSEL_BIT_VALUE                   (1<<URSEL0)\r
+#else\r
+#define UART0_URSEL_BIT_VALUE                   (0)\r
+#endif\r
+#define UART0_TXEN_BIT_VALUE                    (1<<TXEN0)\r
+#define UART0_UDR_BIT_VALUE                     (1<<UDR0)\r
+\r
+#else\r
 \r
-// calculate real baud rate:\r
-#define UBRR_VAL                                ((F_CPU + UART_BAUD * 8) / (UART_BAUD * 16) - 1)    // round\r
-#define BAUD_REAL                               (F_CPU / (16 * (UBRR_VAL + 1)))                     // real baudrate\r
-#define BAUD_ERROR                              ((BAUD_REAL * 1000) / UART_BAUD)                    // error in promille\r
+#define UART0_UBRRH                             UBRRH\r
+#define UART0_UBRRL                             UBRRL\r
+#define UART0_UCSRA                             UCSRA\r
+#define UART0_UCSRB                             UCSRB\r
+#define UART0_UCSRC                             UCSRC\r
+#define UART0_UDRE_BIT_VALUE                    (1<<UDRE)\r
+#define UART0_UCSZ1_BIT_VALUE                   (1<<UCSZ1)\r
+#define UART0_UCSZ0_BIT_VALUE                   (1<<UCSZ0)\r
+#ifdef URSEL\r
+#define UART0_URSEL_BIT_VALUE                   (1<<URSEL)\r
+#else\r
+#define UART0_URSEL_BIT_VALUE                   (0)\r
+#endif\r
+#define UART0_TXEN_BIT_VALUE                    (1<<TXEN)\r
+#define UART0_UDR_BIT_VALUE                     (1<<UDR)\r
 \r
-#if ((BAUD_ERROR < 990) || (BAUD_ERROR > 1010))\r
-#  error Error of baud rate of RS232 UARTx is more than 1%. That is too high!\r
 #endif\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
@@ -550,9 +585,17 @@ static int      time_counter;
 void\r
 irmp_uart_init (void)\r
 {\r
-    UCSR0B |= (1<<TXEN0);                                                                   // activate UART0 TX\r
-    UBRR0H = UBRR_VAL >> 8;                                                                 // store baudrate (upper byte)\r
-    UBRR0L = UBRR_VAL & 0xFF;                                                               // store baudrate (lower byte)\r
+    UART0_UBRRH = UBRRH_VALUE;                                                                      // set baud rate\r
+    UART0_UBRRL = UBRRL_VALUE;\r
+\r
+#if USE_2X\r
+    UART0_UCSRA = (1<<U2X);\r
+#else\r
+    UART0_UCSRA = 0;\r
+#endif\r
+\r
+    UART0_UCSRC = UART0_UCSZ1_BIT_VALUE | UART0_UCSZ0_BIT_VALUE | UART0_URSEL_BIT_VALUE;\r
+    UART0_UCSRB |= UART0_TXEN_BIT_VALUE;                                                            // enable UART TX\r
 }\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
@@ -564,12 +607,12 @@ irmp_uart_init (void)
 void\r
 irmp_uart_putc (unsigned char ch)\r
 {\r
-    while (!(UCSR0A & (1<<UDRE0)))\r
+    while (!(UART0_UCSRA & UART0_UDRE_BIT_VALUE))\r
     {\r
         ;\r
     }\r
 \r
-    UDR0 = ch;\r
+    UART0_UDR = ch;\r
 }\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
@@ -1206,7 +1249,7 @@ irmp_store_bit (uint8_t value)
  *  @details  ISR routine, called 10000 times per second\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
  */\r
-void\r
+uint8_t\r
 irmp_ISR (void)\r
 {\r
     static uint8_t    irmp_start_bit_detected;                                  // flag: start bit detected\r
@@ -1287,6 +1330,7 @@ irmp_ISR (void)
                     if (irmp_pause_time > IRMP_TIMEOUT_LEN)                     // timeout?\r
                     {                                                           // yes...\r
                         DEBUG_PRINTF ("error 1: pause after start bit pulse %d too long: %d\n", irmp_pulse_time, irmp_pause_time);\r
+                        DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
                         irmp_start_bit_detected = 0;                            // reset flags, let's wait for another start bit\r
                         irmp_pulse_time         = 0;\r
                         irmp_pause_time         = 0;\r
@@ -1565,14 +1609,14 @@ irmp_ISR (void)
                         {\r
                           DEBUG_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
                           DEBUG_PUTCHAR ('1');\r
-                          DEBUG_PUTCHAR ('\n');\r
+                          DEBUG_NEWLINE ();\r
                           irmp_store_bit (1);\r
                         }\r
                         else if (! last_value)\r
                         {\r
                           DEBUG_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
                           DEBUG_PUTCHAR ('0');\r
-                          DEBUG_PUTCHAR ('\n');\r
+                          DEBUG_NEWLINE ();\r
                           irmp_store_bit (0);\r
                         }\r
                     }\r
@@ -1586,14 +1630,14 @@ irmp_ISR (void)
                         {\r
                           DEBUG_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
                           DEBUG_PUTCHAR ('0');\r
-                          DEBUG_PUTCHAR ('\n');\r
+                          DEBUG_NEWLINE ();\r
                           irmp_store_bit (0);\r
                         }\r
                         else if (! last_value)\r
                         {\r
                           DEBUG_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
                           DEBUG_PUTCHAR ('1');\r
-                          DEBUG_PUTCHAR ('\n');\r
+                          DEBUG_NEWLINE ();\r
                           irmp_store_bit (1);\r
                         }\r
                     }\r
@@ -1607,14 +1651,14 @@ irmp_ISR (void)
                         {\r
                           DEBUG_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
                           DEBUG_PUTCHAR ('0');\r
-                          DEBUG_PUTCHAR ('\n');\r
+                          DEBUG_NEWLINE ();\r
                           irmp_store_bit (0);\r
                         }\r
                         else if (! last_value)\r
                         {\r
                           DEBUG_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);\r
                           DEBUG_PUTCHAR ('1');\r
-                          DEBUG_PUTCHAR ('\n');\r
+                          DEBUG_NEWLINE ();\r
                           irmp_store_bit (1);\r
                         }\r
                     }\r
@@ -1629,13 +1673,13 @@ irmp_ISR (void)
                         if (irmp_pause_time >= DENON_1_PAUSE_LEN_MIN && irmp_pause_time <= DENON_1_PAUSE_LEN_MAX)\r
                         {                                                       // pause timings correct for "1"?\r
                           DEBUG_PUTCHAR ('1');                                  // yes, store 1\r
-                          DEBUG_PUTCHAR ('\n');\r
+                          DEBUG_NEWLINE ();\r
                           irmp_store_bit (1);\r
                         }\r
                         else // if (irmp_pause_time >= DENON_0_PAUSE_LEN_MIN && irmp_pause_time <= DENON_0_PAUSE_LEN_MAX)\r
                         {                                                       // pause timings correct for "0"?\r
                           DEBUG_PUTCHAR ('0');                                  // yes, store 0\r
-                          DEBUG_PUTCHAR ('\n');\r
+                          DEBUG_NEWLINE ();\r
                           irmp_store_bit (0);\r
                         }\r
                     }\r
@@ -1767,6 +1811,7 @@ irmp_ISR (void)
                             else\r
                             {\r
                                 DEBUG_PRINTF ("error 2: pause %d after data bit %d too long\n", irmp_pause_time, irmp_bit);\r
+                                DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
 \r
                                 irmp_start_bit_detected = 0;                    // wait for another start bit...\r
                                 irmp_pulse_time         = 0;\r
@@ -1792,7 +1837,7 @@ irmp_ISR (void)
                             DEBUG_PUTCHAR ('1');\r
                             irmp_store_bit (1);\r
                             DEBUG_PUTCHAR ('0');\r
-                            DEBUG_PUTCHAR ('\n');\r
+                            DEBUG_NEWLINE ();\r
                             irmp_store_bit (0);\r
                             last_value = 0;\r
                         }\r
@@ -1812,7 +1857,7 @@ irmp_ISR (void)
                             }\r
 \r
                             DEBUG_PUTCHAR (rc5_value + '0');\r
-                            DEBUG_PUTCHAR ('\n');\r
+                            DEBUG_NEWLINE ();\r
                             irmp_store_bit (rc5_value);\r
                         }\r
 \r
@@ -1831,7 +1876,7 @@ irmp_ISR (void)
                             DEBUG_PUTCHAR ('0');\r
                             irmp_store_bit (0);\r
                             DEBUG_PUTCHAR ('1');\r
-                            DEBUG_PUTCHAR ('\n');\r
+                            DEBUG_NEWLINE ();\r
                             irmp_store_bit (1);\r
                             last_value = 1;\r
                         }\r
@@ -1851,7 +1896,7 @@ irmp_ISR (void)
                             }\r
 \r
                             DEBUG_PUTCHAR (grundig_value + '0');\r
-                            DEBUG_PUTCHAR ('\n');\r
+                            DEBUG_NEWLINE ();\r
                             irmp_store_bit (grundig_value);\r
                         }\r
 \r
@@ -1878,7 +1923,7 @@ irmp_ISR (void)
                                 DEBUG_PUTCHAR ('0');\r
                                 irmp_store_bit (0);\r
                                 last_value = 0;\r
-                                DEBUG_PUTCHAR ('\n');\r
+                                DEBUG_NEWLINE ();\r
                                 break;\r
 \r
                             default:\r
@@ -1887,7 +1932,7 @@ irmp_ISR (void)
                                     DEBUG_PUTCHAR ('0');\r
                                     irmp_store_bit (0);\r
                                     DEBUG_PUTCHAR ('1');\r
-                                    DEBUG_PUTCHAR ('\n');\r
+                                    DEBUG_NEWLINE ();\r
                                     irmp_store_bit (1);\r
                                     last_value = 1;\r
                                 }\r
@@ -1911,7 +1956,7 @@ irmp_ISR (void)
                                     }\r
 \r
                                     DEBUG_PUTCHAR (rc5_value + '0');\r
-                                    DEBUG_PUTCHAR ('\n');\r
+                                    DEBUG_NEWLINE ();\r
                                     irmp_store_bit (rc5_value);\r
                                 }\r
 \r
@@ -1932,7 +1977,7 @@ irmp_ISR (void)
                             DEBUG_PUTCHAR ('0');\r
                             irmp_store_bit (0);\r
                             DEBUG_PUTCHAR ('1');\r
-                            DEBUG_PUTCHAR ('\n');\r
+                            DEBUG_NEWLINE ();\r
                             irmp_store_bit (1);\r
                             last_value = 1;\r
                         }\r
@@ -1952,7 +1997,7 @@ irmp_ISR (void)
                             }\r
 \r
                             DEBUG_PUTCHAR (siemens_value + '0');\r
-                            DEBUG_PUTCHAR ('\n');\r
+                            DEBUG_NEWLINE ();\r
                             irmp_store_bit (siemens_value);\r
                         }\r
 \r
@@ -1983,14 +2028,14 @@ irmp_ISR (void)
                             if (irmp_pause_time >= SAMSUNG_1_PAUSE_LEN_MIN && irmp_pause_time <= SAMSUNG_1_PAUSE_LEN_MAX)\r
                             {\r
                                 DEBUG_PUTCHAR ('1');\r
-                                DEBUG_PUTCHAR ('\n');\r
+                                DEBUG_NEWLINE ();\r
                                 irmp_store_bit (1);\r
                                 wait_for_space = 0;\r
                             }\r
                             else\r
                             {\r
                                 DEBUG_PUTCHAR ('0');\r
-                                DEBUG_PUTCHAR ('\n');\r
+                                DEBUG_NEWLINE ();\r
                                 irmp_store_bit (0);\r
                                 wait_for_space = 0;\r
                             }\r
@@ -2000,6 +2045,7 @@ irmp_ISR (void)
                         else\r
                         {                                                           // timing incorrect!\r
                             DEBUG_PRINTF ("error 3 Samsung: timing not correct: data bit %d,  pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+                            DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
                             irmp_start_bit_detected = 0;                            // reset flags and wait for next start bit\r
                             irmp_pause_time         = 0;\r
                         }\r
@@ -2024,6 +2070,7 @@ irmp_ISR (void)
                                 else\r
                                 {                                                   // timing incorrect!\r
                                     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);\r
+                                    DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
                                     irmp_start_bit_detected = 0;                    // reset flags and wait for next start bit\r
                                     irmp_pause_time         = 0;\r
                                 }\r
@@ -2040,6 +2087,7 @@ irmp_ISR (void)
                                 else\r
                                 {                                                   // timing incorrect!\r
                                     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);\r
+                                    DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
                                     irmp_start_bit_detected = 0;                    // reset flags and wait for next start bit\r
                                     irmp_pause_time         = 0;\r
                                 }\r
@@ -2049,7 +2097,7 @@ irmp_ISR (void)
                                 if (irmp_pause_time >= BANG_OLUFSEN_1_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_1_PAUSE_LEN_MAX)\r
                                 {                                                   // pulse & pause timings correct for "1"?\r
                                     DEBUG_PUTCHAR ('1');\r
-                                    DEBUG_PUTCHAR ('\n');\r
+                                    DEBUG_NEWLINE ();\r
                                     irmp_store_bit (1);\r
                                     last_value = 1;\r
                                     wait_for_space = 0;\r
@@ -2057,7 +2105,7 @@ irmp_ISR (void)
                                 else if (irmp_pause_time >= BANG_OLUFSEN_0_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_0_PAUSE_LEN_MAX)\r
                                 {                                                   // pulse & pause timings correct for "0"?\r
                                     DEBUG_PUTCHAR ('0');\r
-                                    DEBUG_PUTCHAR ('\n');\r
+                                    DEBUG_NEWLINE ();\r
                                     irmp_store_bit (0);\r
                                     last_value = 0;\r
                                     wait_for_space = 0;\r
@@ -2065,13 +2113,14 @@ irmp_ISR (void)
                                 else if (irmp_pause_time >= BANG_OLUFSEN_R_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_R_PAUSE_LEN_MAX)\r
                                 {\r
                                     DEBUG_PUTCHAR (last_value + '0');\r
-                                    DEBUG_PUTCHAR ('\n');\r
+                                    DEBUG_NEWLINE ();\r
                                     irmp_store_bit (last_value);\r
                                     wait_for_space = 0;\r
                                 }\r
                                 else\r
                                 {                                                   // timing incorrect!\r
                                     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);\r
+                                    DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
                                     irmp_start_bit_detected = 0;                    // reset flags and wait for next start bit\r
                                     irmp_pause_time         = 0;\r
                                 }\r
@@ -2080,6 +2129,7 @@ irmp_ISR (void)
                         else\r
                         {                                                           // timing incorrect!\r
                             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);\r
+                            DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
                             irmp_start_bit_detected = 0;                            // reset flags and wait for next start bit\r
                             irmp_pause_time         = 0;\r
                         }\r
@@ -2091,7 +2141,7 @@ irmp_ISR (void)
                         irmp_pause_time >= irmp_param.pause_1_len_min && irmp_pause_time <= irmp_param.pause_1_len_max)\r
                     {                                                               // pulse & pause timings correct for "1"?\r
                         DEBUG_PUTCHAR ('1');\r
-                        DEBUG_PUTCHAR ('\n');\r
+                        DEBUG_NEWLINE ();\r
                         irmp_store_bit (1);\r
                         wait_for_space = 0;\r
                     }\r
@@ -2099,13 +2149,14 @@ irmp_ISR (void)
                              irmp_pause_time >= irmp_param.pause_0_len_min && irmp_pause_time <= irmp_param.pause_0_len_max)\r
                     {                                                               // pulse & pause timings correct for "0"?\r
                         DEBUG_PUTCHAR ('0');\r
-                        DEBUG_PUTCHAR ('\n');\r
+                        DEBUG_NEWLINE ();\r
                         irmp_store_bit (0);\r
                         wait_for_space = 0;\r
                     }\r
                     else\r
                     {                                                               // timing incorrect!\r
                         DEBUG_PRINTF ("error 3: timing not correct: data bit %d,  pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+                        DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
                         irmp_start_bit_detected = 0;                                // reset flags and wait for next start bit\r
                         irmp_pause_time         = 0;\r
                     }\r
@@ -2252,6 +2303,10 @@ irmp_ISR (void)
 \r
                     repetition_counter = 0;\r
                 }\r
+                else\r
+                {\r
+                    DEBUG_ONLY_NORMAL_PUTCHAR ('\n');\r
+                }\r
 \r
                 irmp_start_bit_detected = 0;                                        // and wait for next start bit\r
                 irmp_tmp_command        = 0;\r
@@ -2260,6 +2315,7 @@ irmp_ISR (void)
             }\r
         }\r
     }\r
+    return (irmp_ir_detected);\r
 }\r
 \r
 #ifdef DEBUG\r
@@ -2320,7 +2376,6 @@ int
 main (int argc, char ** argv)\r
 {\r
     int         i;\r
-    int         verbose = FALSE;\r
     int         analyze = FALSE;\r
     int         ch;\r
     int         last_ch = 0;\r
@@ -2371,7 +2426,6 @@ main (int argc, char ** argv)
         else if (! strcmp (argv[1], "-a"))\r
         {\r
             analyze = TRUE;\r
-            verbose = TRUE;\r
         }\r
         else if (! strcmp (argv[1], "-s"))\r
         {\r
@@ -2392,7 +2446,7 @@ main (int argc, char ** argv)
         {\r
             if (last_ch != ch)\r
             {\r
-                if (verbose && pause > 0)\r
+                if (analyze && pause > 0)\r
                 {\r
                     printf ("pause: %d\n", pause);\r
 \r
@@ -2457,7 +2511,7 @@ main (int argc, char ** argv)
         {\r
             if (last_ch != ch)\r
             {\r
-                if (verbose)\r
+                if (analyze)\r
                 {\r
                     printf ("pulse: %d ", pulse);\r
 \r
@@ -2514,7 +2568,7 @@ main (int argc, char ** argv)
         {\r
             IRMP_PIN = 0xff;\r
 \r
-            if (verbose && pause > 0)\r
+            if (analyze && pause > 0)\r
             {\r
                 printf ("pause: %d\n", pause);\r
             }\r
@@ -2524,7 +2578,7 @@ main (int argc, char ** argv)
             {\r
                 for (i = 0; i < 8000; i++)                                              // newline: long pause of 800 msec\r
                 {\r
-                    irmp_ISR ();\r
+                    (void) irmp_ISR ();\r
                 }\r
             }\r
             first_pulse = TRUE;\r
@@ -2549,12 +2603,13 @@ main (int argc, char ** argv)
 \r
         if (! analyze)\r
         {\r
-            irmp_ISR ();\r
+            (void) irmp_ISR ();\r
         }\r
 \r
         if (irmp_get_data (&irmp_data))\r
         {\r
-            printf ("protcol = %d, address = 0x%04x, code = 0x%04x, flags = 0x%02x\n",\r
+            DEBUG_ONLY_NORMAL_PUTCHAR (' ');\r
+            printf ("p = %2d, a = 0x%04x, c = 0x%04x, f = 0x%02x\n",\r
                     irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags);\r
         }\r
     }\r
diff --git a/irmp.h b/irmp.h
index ba3beb7b16f98a9265f29c9277dd80cc90540b2d..f95263774a3ed3221a8db1a2b7c9cef64ac73874 100644 (file)
--- a/irmp.h
+++ b/irmp.h
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.h,v 1.26 2010/06/08 23:34:14 fm Exp $\r
+ * $Id: irmp.h,v 1.27 2010/06/10 10:05:56 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -313,7 +313,7 @@ extern uint8_t                        irmp_get_data (IRMP_DATA *);
  *  ISR routine\r
  *  @details  ISR routine, called 10000 times per second\r
  */\r
-extern void                           irmp_ISR (void);\r
+extern uint8_t                        irmp_ISR (void);\r
 \r
 #ifdef __cplusplus\r
 }\r
index 1f074aefb62955fffbda56a6a0aaa889202d91c4..8d8b7d4b6db2f448db0a1f8f3e12a71741778b56 100644 (file)
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmpconfig.h,v 1.11 2010/06/08 23:34:14 fm Exp $\r
+ * $Id: irmpconfig.h,v 1.12 2010/06/10 10:09:47 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -22,7 +22,7 @@
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
  */\r
 #ifndef F_INTERRUPTS\r
-#define F_INTERRUPTS                            10000   // interrupts per second\r
+#define F_INTERRUPTS                            10000   // interrupts per second, min: 10000, max: 15000\r
 #endif\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
@@ -81,6 +81,8 @@
  * Set IRMP_LOGGING to 1 if want to log data to UART with 9600Bd\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
  */\r
-#define IRMP_LOGGING                            0                             // 1: log IR signal (scan), 0: do not (default)\r
+#ifndef IRMP_LOGGING\r
+#define IRMP_LOGGING                            0       // 1: log IR signal (scan), 0: do not (default)\r
+#endif\r
 \r
 #endif /* _WC_IRMPCONFIG_H_ */\r
diff --git a/irsnd.c b/irsnd.c
index 2df0b02a529ce6cb736bef24e8fc8807a272f2b2..b6138f0fb2b3523c8a3df1a5edc40846c2b90cc2 100644 (file)
--- a/irsnd.c
+++ b/irsnd.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsnd.c,v 1.16 2010/06/08 23:34:14 fm Exp $\r
+ * $Id: irsnd.c,v 1.17 2010/06/10 10:05:56 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
@@ -276,7 +276,7 @@ bitsrevervse (uint16_t x, uint8_t len)
 \r
 \r
 uint8_t\r
-irsnd_send_data (IRMP_DATA * irmp_data_p)\r
+irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait)\r
 {\r
 #if IRSND_SUPPORT_RECS80_PROTOCOL == 1\r
     static uint8_t  toggle_bit_recs80;\r
@@ -290,9 +290,16 @@ irsnd_send_data (IRMP_DATA * irmp_data_p)
     uint16_t        address;\r
     uint16_t        command;\r
 \r
-    while (irsnd_busy)\r
+    if (do_wait)\r
     {\r
-        ;\r
+        while (irsnd_busy)\r
+        {\r
+            // do nothing;\r
+        }\r
+    }\r
+    else if (irsnd_busy)\r
+    {\r
+        return (FALSE);\r
     }\r
 \r
     irsnd_protocol  = irmp_data_p->protocol;\r
@@ -1305,7 +1312,7 @@ main (int argc, char ** argv)
 \r
         irsnd_init ();\r
 \r
-        (void) irsnd_send_data (&irmp_data);\r
+        (void) irsnd_send_data (&irmp_data, TRUE);\r
 \r
         while (irsnd_busy)\r
         {\r
diff --git a/irsnd.h b/irsnd.h
index 11f52279d7d998579ac6d246afe7dcda2b387f9e..b5f214bb4fece9029bd042aaa67f6c50477fb5c5 100644 (file)
--- a/irsnd.h
+++ b/irsnd.h
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsnd.h,v 1.2 2010/04/14 13:21:39 fm Exp $\r
+ * $Id: irsnd.h,v 1.3 2010/06/10 10:05:56 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -36,7 +36,7 @@ extern uint8_t                      irsnd_is_busy (void);
  *  @param    pointer to IRMP data structure\r
  *  @return    TRUE: successful, FALSE: failed\r
  */\r
-extern uint8_t                      irsnd_send_data (IRMP_DATA *);\r
+extern uint8_t                      irsnd_send_data (IRMP_DATA *, uint8_t);\r
 \r
 /**\r
  *  ISR routine\r
index 9a25c8f6a3eb5050c4d5efb53fd9ccfe126620ce..c50c818f48e183f1d9b5877e7672182fb6af437b 100644 (file)
@@ -143,7 +143,7 @@ main (void)
     irmp_data.command  = 0x0001;\r
     irmp_data.flags    = 0;\r
 \r
-    irsnd_send_data (&irmp_data);\r
+    irsnd_send_data (&irmp_data, TRUE);\r
     _delay_ms (1000);\r
   }\r
 }\r
diff --git a/main.c b/main.c
index faab8ea43cd47b84295a7b4239cdd9e6b6fc5958..cc37574f9429d5b143f268efcd14e9c02c04386d 100644 (file)
--- a/main.c
+++ b/main.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: main.c,v 1.5 2010/03/29 09:33:29 fm Exp $\r
+ * $Id: main.c,v 1.6 2010/06/10 10:09:47 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -86,7 +86,7 @@ interrupt [TIM1_COMPA] void timer1_compa_isr(void)
 ISR(TIMER1_COMPA_vect)\r
 #endif  // CODEVISION\r
 {\r
-  irmp_ISR();                                                           // call irmp ISR\r
+  (void) irmp_ISR();                                                        // call irmp ISR\r
   // call other timer interrupt routines...\r
 }\r
 \r