* ATmega164, ATmega324, ATmega644, ATmega644P, ATmega1284\r
* ATmega88, ATmega88P, ATmega168, ATmega168P, ATmega328P\r
*\r
- * $Id: irsnd.c,v 1.60 2012/10/05 07:58:39 fm Exp $\r
+ * $Id: irsnd.c,v 1.64 2012/12/06 08:49:33 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
*/\r
#if defined (__AVR_ATtiny84__) // ATtiny84 uses OC0A = PB2 or OC0B = PA7\r
# if IRSND_OCx == IRSND_OC0A // OC0A\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 2 // OC0A\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 2\r
# elif IRSND_OCx == IRSND_OC0B // OC0B\r
-# define IRSND_PORT PORTA // port A\r
-# define IRSND_DDR DDRA // ddr A\r
-# define IRSND_BIT 7 // OC0B\r
+# define IRSND_PORT_LETTER A\r
+# define IRSND_BIT_NUMBER 7\r
# else\r
# error Wrong value for IRSND_OCx, choose IRSND_OC0A or IRSND_OC0B in irsndconfig.h\r
# endif // IRSND_OCx\r
#elif defined (__AVR_ATtiny45__) || defined (__AVR_ATtiny85__) // ATtiny45/85 uses OC0A = PB0 or OC0B = PB1\r
# if IRSND_OCx == IRSND_OC0A // OC0A\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 0 // OC0A\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 0\r
# elif IRSND_OCx == IRSND_OC0B // OC0B\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 1 // OC0B\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 1\r
# else\r
# error Wrong value for IRSND_OCx, choose IRSND_OC0A or IRSND_OC0B in irsndconfig.h\r
# endif // IRSND_OCx\r
#elif defined (__AVR_ATtiny87__) || defined (__AVR_ATtiny167__) // ATtiny87/167 uses OC0A = PA2\r
# if IRSND_OCx == IRSND_OC0A // OC0A\r
-# define IRSND_PORT PORTA // port A\r
-# define IRSND_DDR DDRA // ddr A\r
-# define IRSND_BIT 2 // OC0A\r
+# define IRSND_PORT_LETTER A\r
+# define IRSND_BIT_NUMBER 2\r
# else\r
# error Wrong value for IRSND_OCx, choose IRSND_OC0A in irsndconfig.h\r
# endif // IRSND_OCx\r
#elif defined (__AVR_ATmega8__) // ATmega8 uses only OC2 = PB3\r
# if IRSND_OCx == IRSND_OC2 // OC0A\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 3 // OC0A\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 3\r
# else\r
# error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h\r
# endif // IRSND_OCx\r
#elif defined (__AVR_ATmega16__) || defined (__AVR_ATmega32__) // ATmega16|32 uses OC2 = PD7\r
# if IRSND_OCx == IRSND_OC2 // OC2\r
-# define IRSND_PORT PORTD // port D\r
-# define IRSND_DDR DDRD // ddr D\r
-# define IRSND_BIT 7 // OC2\r
+# define IRSND_PORT_LETTER D\r
+# define IRSND_BIT_NUMBER 7\r
# else\r
# error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h\r
# endif // IRSND_OCx\r
#elif defined (__AVR_ATmega162__) // ATmega162 uses OC2 = PB1 or OC0 = PB0\r
# if IRSND_OCx == IRSND_OC2 // OC2\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 1 // OC2\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 1\r
# elif IRSND_OCx == IRSND_OC0 // OC0\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 0 // OC0\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 0\r
# else\r
# error Wrong value for IRSND_OCx, choose IRSND_OC2 or IRSND_OC0 in irsndconfig.h\r
# endif // IRSND_OCx\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
-# define IRSND_BIT 7 // OC2A\r
+# define IRSND_PORT_LETTER D\r
+# define IRSND_BIT_NUMBER 7\r
# elif IRSND_OCx == IRSND_OC2B // OC2B\r
-# define IRSND_PORT PORTD // port D\r
-# define IRSND_DDR DDRD // ddr D\r
-# define IRSND_BIT 6 // OC2B\r
+# define IRSND_PORT_LETTER D\r
+# define IRSND_BIT_NUMBER 6\r
# elif IRSND_OCx == IRSND_OC0A // OC0A\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 3 // OC0A\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 3\r
# elif IRSND_OCx == IRSND_OC0B // OC0B\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 4 // OC0B\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 4\r
# 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
|| defined (__AVR_ATmega168P__) \\r
|| defined (__AVR_ATmega328P__) // ATmega48|88|168|168|328 uses OC2A = PB3 or OC2B = PD3 or OC0A = PD6 or OC0B = PD5\r
# if IRSND_OCx == IRSND_OC2A // OC2A\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 3 // OC2A\r
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 3\r
# elif IRSND_OCx == IRSND_OC2B // OC2B\r
-# define IRSND_PORT PORTD // port D\r
-# define IRSND_DDR DDRD // ddr D\r
-# define IRSND_BIT 3 // OC2B\r
+# define IRSND_PORT_LETTER D\r
+# define IRSND_BIT_NUMBER 3\r
# elif IRSND_OCx == IRSND_OC0A // OC0A\r
-# define IRSND_PORT PORTB // port B\r
-# define IRSND_DDR DDRB // ddr B\r
-# define IRSND_BIT 6 // OC0A\r
+# define IRSND_PORT_LETTER D\r
+# define IRSND_BIT_NUMBER 6\r
# elif IRSND_OCx == IRSND_OC0B // OC0B\r
-# define IRSND_PORT PORTD // port D\r
-# define IRSND_DDR DDRD // ddr D\r
-# define IRSND_BIT 5 // OC0B\r
+# define IRSND_PORT_LETTER D\r
+# define IRSND_BIT_NUMBER 5\r
# 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
+#elif defined (__AVR_ATmega8515__) // ATmega8515 uses OC0 = PB0 or OC1A = PD5 or OC1B = PE2\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
+# define IRSND_PORT_LETTER B\r
+# define IRSND_BIT_NUMBER 0\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
+# define IRSND_PORT_LETTER D\r
+# define IRSND_BIT_NUMBER 5\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
+# define IRSND_PORT_LETTER E\r
+# define IRSND_BIT_NUMBER 2\r
# else\r
# error Wrong value for IRSND_OCx, choose IRSND_OC0, IRSND_OC1A, or IRSND_OC1B in irsndconfig.h\r
# endif // IRSND_OCx\r
# endif // unix, WIN32\r
#endif // __AVR...\r
\r
+#if defined(ATMEL_AVR)\r
+# define _CONCAT(a,b) a##b\r
+# define CONCAT(a,b) _CONCAT(a,b)\r
+# define IRSND_PORT CONCAT(PORT, IRSND_PORT_LETTER)\r
+# define IRSND_DDR CONCAT(DDR, IRSND_PORT_LETTER)\r
+# define IRSND_BIT IRSND_BIT_NUMBER\r
+#endif\r
+\r
#if IRSND_SUPPORT_NIKON_PROTOCOL == 1\r
typedef uint16_t IRSND_PAUSE_LEN;\r
#else\r
# elif IRSND_OCx == IRSND_OC2A || IRSND_OCx == IRSND_OC2B // use OC2A or OC2B\r
TCCR2A = (1<<WGM21); // CTC mode\r
# if AVR_PRESCALER == 8\r
- TCCR2B |= (1<<CS21); // start Timer 2, prescaler = 8\r
+ TCCR2B = (1<<CS21); // start Timer 2, prescaler = 8\r
# else\r
- TCCR2B |= (1<<CS20); // start Timer 2, prescaler = 1\r
+ TCCR2B = (1<<CS20); // start Timer 2, prescaler = 1\r
# endif\r
# elif IRSND_OCx == IRSND_OC0 // use OC0\r
TCCR0 = (1<<WGM01); // CTC mode\r
# elif IRSND_OCx == IRSND_OC0A || IRSND_OCx == IRSND_OC0B // use OC0A or OC0B\r
TCCR0A = (1<<WGM01); // CTC mode\r
# if AVR_PRESCALER == 8\r
- TCCR0B |= (1<<CS01); // start Timer 0, prescaler = 8\r
+ TCCR0B = (1<<CS01); // start Timer 0, prescaler = 8\r
# else\r
- TCCR0B |= (1<<CS00); // start Timer 0, prescaler = 1\r
+ TCCR0B = (1<<CS00); // start Timer 0, prescaler = 1\r
# endif\r
# else\r
# error wrong value of IRSND_OCx\r
case IRMP_NIKON_PROTOCOL:\r
{\r
startbit_pulse_len = NIKON_START_BIT_PULSE_LEN;\r
- startbit_pause_len = 271 - 1; // NIKON_START_BIT_PAUSE_LEN;\r
+ startbit_pause_len = NIKON_START_BIT_PAUSE_LEN;\r
complete_data_len = NIKON_COMPLETE_DATA_LEN;\r
pulse_1_len = NIKON_PULSE_LEN;\r
pause_1_len = NIKON_1_PAUSE_LEN - 1;\r
\r
putchar ('\n');\r
\r
+#if 1 // enable here to send twice\r
(void) irsnd_send_data (&irmp_data, TRUE);\r
\r
while (irsnd_busy)\r
}\r
\r
putchar ('\n');\r
+#endif\r
}\r
else\r
{\r