annotate service/busyboxArduino/IRremote/IRremoteInt.h @ 408:0787cd64ecf8

cmdline flag on piNode to pick hub host Ignore-this: e88b7bc860b040e6952ddf3723f26a23
author drewp@bigasterisk.com
date Tue, 12 Mar 2019 00:14:12 -0700
parents e88308cea843
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
155
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
1 /*
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
2 * IRremote
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
3 * Version 0.1 July, 2009
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
4 * Copyright 2009 Ken Shirriff
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
5 * For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
6 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
7 * Modified by Paul Stoffregen <paul@pjrc.com> to support other boards and timers
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
8 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
9 * Interrupt code based on NECIRrcv by Joe Knapp
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
10 * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
11 * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
12 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
13 * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
14 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
15
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
16 #ifndef IRremoteint_h
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
17 #define IRremoteint_h
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
18
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
19 #if defined(ARDUINO) && ARDUINO >= 100
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
20 #include <Arduino.h>
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
21 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
22 #include <WProgram.h>
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
23 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
24
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
25 // define which timer to use
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
26 //
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
27 // Uncomment the timer you wish to use on your board. If you
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
28 // are using another library which uses timer2, you have options
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
29 // to switch IRremote to use a different timer.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
30
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
31 // Arduino Mega
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
32 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
33 //#define IR_USE_TIMER1 // tx = pin 11
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
34 #define IR_USE_TIMER2 // tx = pin 9
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
35 //#define IR_USE_TIMER3 // tx = pin 5
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
36 //#define IR_USE_TIMER4 // tx = pin 6
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
37 //#define IR_USE_TIMER5 // tx = pin 46
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
38
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
39 // Teensy 1.0
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
40 #elif defined(__AVR_AT90USB162__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
41 #define IR_USE_TIMER1 // tx = pin 17
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
42
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
43 // Teensy 2.0
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
44 #elif defined(__AVR_ATmega32U4__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
45 //#define IR_USE_TIMER1 // tx = pin 14
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
46 //#define IR_USE_TIMER3 // tx = pin 9
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
47 #define IR_USE_TIMER4_HS // tx = pin 10
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
48
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
49 // Teensy 3.0
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
50 #elif defined(__MK20DX128__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
51 #define IR_USE_TIMER_CMT // tx = pin 5
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
52
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
53 // Teensy++ 1.0 & 2.0
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
54 #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
55 //#define IR_USE_TIMER1 // tx = pin 25
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
56 #define IR_USE_TIMER2 // tx = pin 1
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
57 //#define IR_USE_TIMER3 // tx = pin 16
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
58
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
59 // Sanguino
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
60 #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
61 //#define IR_USE_TIMER1 // tx = pin 13
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
62 #define IR_USE_TIMER2 // tx = pin 14
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
63
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
64 // Atmega8
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
65 #elif defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
66 #define IR_USE_TIMER1 // tx = pin 9
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
67
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
68 // Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
69 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
70 //#define IR_USE_TIMER1 // tx = pin 9
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
71 #define IR_USE_TIMER2 // tx = pin 3
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
72 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
73
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
74
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
75
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
76 #ifdef F_CPU
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
77 #define SYSCLOCK F_CPU // main Arduino clock
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
78 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
79 #define SYSCLOCK 16000000 // main Arduino clock
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
80 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
81
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
82 #define ERR 0
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
83 #define DECODED 1
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
84
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
85
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
86 // defines for setting and clearing register bits
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
87 #ifndef cbi
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
88 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
89 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
90 #ifndef sbi
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
91 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
92 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
93
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
94 // Pulse parms are *50-100 for the Mark and *50+100 for the space
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
95 // First MARK is the one after the long gap
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
96 // pulse parameters in usec
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
97 #define NEC_HDR_MARK 9000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
98 #define NEC_HDR_SPACE 4500
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
99 #define NEC_BIT_MARK 560
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
100 #define NEC_ONE_SPACE 1600
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
101 #define NEC_ZERO_SPACE 560
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
102 #define NEC_RPT_SPACE 2250
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
103
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
104 #define SONY_HDR_MARK 2400
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
105 #define SONY_HDR_SPACE 600
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
106 #define SONY_ONE_MARK 1200
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
107 #define SONY_ZERO_MARK 600
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
108 #define SONY_RPT_LENGTH 45000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
109 #define SONY_DOUBLE_SPACE_USECS 500 // usually ssee 713 - not using ticks as get number wrapround
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
110
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
111 // SA 8650B
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
112 #define SANYO_HDR_MARK 3500 // seen range 3500
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
113 #define SANYO_HDR_SPACE 950 // seen 950
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
114 #define SANYO_ONE_MARK 2400 // seen 2400
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
115 #define SANYO_ZERO_MARK 700 // seen 700
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
116 #define SANYO_DOUBLE_SPACE_USECS 800 // usually ssee 713 - not using ticks as get number wrapround
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
117 #define SANYO_RPT_LENGTH 45000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
118
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
119 // Mitsubishi RM 75501
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
120 // 14200 7 41 7 42 7 42 7 17 7 17 7 18 7 41 7 18 7 17 7 17 7 18 7 41 8 17 7 17 7 18 7 17 7
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
121
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
122 // #define MITSUBISHI_HDR_MARK 250 // seen range 3500
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
123 #define MITSUBISHI_HDR_SPACE 350 // 7*50+100
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
124 #define MITSUBISHI_ONE_MARK 1950 // 41*50-100
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
125 #define MITSUBISHI_ZERO_MARK 750 // 17*50-100
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
126 // #define MITSUBISHI_DOUBLE_SPACE_USECS 800 // usually ssee 713 - not using ticks as get number wrapround
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
127 // #define MITSUBISHI_RPT_LENGTH 45000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
128
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
129
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
130 #define RC5_T1 889
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
131 #define RC5_RPT_LENGTH 46000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
132
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
133 #define RC6_HDR_MARK 2666
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
134 #define RC6_HDR_SPACE 889
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
135 #define RC6_T1 444
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
136 #define RC6_RPT_LENGTH 46000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
137
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
138 #define SHARP_BIT_MARK 245
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
139 #define SHARP_ONE_SPACE 1805
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
140 #define SHARP_ZERO_SPACE 795
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
141 #define SHARP_GAP 600000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
142 #define SHARP_TOGGLE_MASK 0x3FF
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
143 #define SHARP_RPT_SPACE 3000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
144
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
145 #define DISH_HDR_MARK 400
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
146 #define DISH_HDR_SPACE 6100
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
147 #define DISH_BIT_MARK 400
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
148 #define DISH_ONE_SPACE 1700
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
149 #define DISH_ZERO_SPACE 2800
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
150 #define DISH_RPT_SPACE 6200
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
151 #define DISH_TOP_BIT 0x8000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
152
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
153 #define PANASONIC_HDR_MARK 3502
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
154 #define PANASONIC_HDR_SPACE 1750
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
155 #define PANASONIC_BIT_MARK 502
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
156 #define PANASONIC_ONE_SPACE 1244
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
157 #define PANASONIC_ZERO_SPACE 400
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
158
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
159 #define JVC_HDR_MARK 8000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
160 #define JVC_HDR_SPACE 4000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
161 #define JVC_BIT_MARK 600
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
162 #define JVC_ONE_SPACE 1600
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
163 #define JVC_ZERO_SPACE 550
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
164 #define JVC_RPT_LENGTH 60000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
165
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
166 #define LG_HDR_MARK 8000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
167 #define LG_HDR_SPACE 4000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
168 #define LG_BIT_MARK 600
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
169 #define LG_ONE_SPACE 1600
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
170 #define LG_ZERO_SPACE 550
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
171 #define LG_RPT_LENGTH 60000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
172
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
173 #define SAMSUNG_HDR_MARK 5000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
174 #define SAMSUNG_HDR_SPACE 5000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
175 #define SAMSUNG_BIT_MARK 560
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
176 #define SAMSUNG_ONE_SPACE 1600
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
177 #define SAMSUNG_ZERO_SPACE 560
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
178 #define SAMSUNG_RPT_SPACE 2250
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
179
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
180
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
181 #define SHARP_BITS 15
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
182 #define DISH_BITS 16
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
183
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
184 #define TOLERANCE 25 // percent tolerance in measurements
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
185 #define LTOL (1.0 - TOLERANCE/100.)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
186 #define UTOL (1.0 + TOLERANCE/100.)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
187
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
188 #define _GAP 5000 // Minimum map between transmissions
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
189 #define GAP_TICKS (_GAP/USECPERTICK)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
190
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
191 #define TICKS_LOW(us) (int) (((us)*LTOL/USECPERTICK))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
192 #define TICKS_HIGH(us) (int) (((us)*UTOL/USECPERTICK + 1))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
193
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
194 // receiver states
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
195 #define STATE_IDLE 2
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
196 #define STATE_MARK 3
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
197 #define STATE_SPACE 4
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
198 #define STATE_STOP 5
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
199
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
200 // information for the interrupt handler
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
201 typedef struct {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
202 uint8_t recvpin; // pin for IR data from detector
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
203 uint8_t rcvstate; // state machine
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
204 uint8_t blinkflag; // TRUE to enable blinking of pin 13 on IR processing
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
205 unsigned int timer; // state timer, counts 50uS ticks.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
206 unsigned int rawbuf[RAWBUF]; // raw data
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
207 uint8_t rawlen; // counter of entries in rawbuf
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
208 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
209 irparams_t;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
210
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
211 // Defined in IRremote.cpp
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
212 extern volatile irparams_t irparams;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
213
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
214 // IR detector output is active low
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
215 #define MARK 0
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
216 #define SPACE 1
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
217
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
218 #define TOPBIT 0x80000000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
219
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
220 #define NEC_BITS 32
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
221 #define SONY_BITS 12
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
222 #define SANYO_BITS 12
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
223 #define MITSUBISHI_BITS 16
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
224 #define MIN_RC5_SAMPLES 11
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
225 #define MIN_RC6_SAMPLES 1
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
226 #define PANASONIC_BITS 48
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
227 #define JVC_BITS 16
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
228 #define LG_BITS 28
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
229 #define SAMSUNG_BITS 32
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
230
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
231
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
232
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
233
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
234 // defines for timer2 (8 bits)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
235 #if defined(IR_USE_TIMER2)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
236 #define TIMER_RESET
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
237 #define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
238 #define TIMER_DISABLE_PWM (TCCR2A &= ~(_BV(COM2B1)))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
239 #define TIMER_ENABLE_INTR (TIMSK2 = _BV(OCIE2A))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
240 #define TIMER_DISABLE_INTR (TIMSK2 = 0)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
241 #define TIMER_INTR_NAME TIMER2_COMPA_vect
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
242 #define TIMER_CONFIG_KHZ(val) ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
243 const uint8_t pwmval = SYSCLOCK / 2000 / (val); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
244 TCCR2A = _BV(WGM20); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
245 TCCR2B = _BV(WGM22) | _BV(CS20); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
246 OCR2A = pwmval; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
247 OCR2B = pwmval / 3; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
248 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
249 #define TIMER_COUNT_TOP (SYSCLOCK * USECPERTICK / 1000000)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
250 #if (TIMER_COUNT_TOP < 256)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
251 #define TIMER_CONFIG_NORMAL() ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
252 TCCR2A = _BV(WGM21); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
253 TCCR2B = _BV(CS20); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
254 OCR2A = TIMER_COUNT_TOP; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
255 TCNT2 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
256 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
257 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
258 #define TIMER_CONFIG_NORMAL() ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
259 TCCR2A = _BV(WGM21); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
260 TCCR2B = _BV(CS21); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
261 OCR2A = TIMER_COUNT_TOP / 8; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
262 TCNT2 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
263 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
264 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
265 #if defined(CORE_OC2B_PIN)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
266 #define TIMER_PWM_PIN CORE_OC2B_PIN /* Teensy */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
267 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
268 #define TIMER_PWM_PIN 9 /* Arduino Mega */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
269 #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
270 #define TIMER_PWM_PIN 14 /* Sanguino */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
271 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
272 #define TIMER_PWM_PIN 3 /* Arduino Duemilanove, Diecimila, LilyPad, etc */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
273 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
274
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
275
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
276 // defines for timer1 (16 bits)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
277 #elif defined(IR_USE_TIMER1)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
278 #define TIMER_RESET
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
279 #define TIMER_ENABLE_PWM (TCCR1A |= _BV(COM1A1))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
280 #define TIMER_DISABLE_PWM (TCCR1A &= ~(_BV(COM1A1)))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
281 #if defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
282 #define TIMER_ENABLE_INTR (TIMSK = _BV(OCIE1A))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
283 #define TIMER_DISABLE_INTR (TIMSK = 0)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
284 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
285 #define TIMER_ENABLE_INTR (TIMSK1 = _BV(OCIE1A))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
286 #define TIMER_DISABLE_INTR (TIMSK1 = 0)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
287 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
288 #define TIMER_INTR_NAME TIMER1_COMPA_vect
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
289 #define TIMER_CONFIG_KHZ(val) ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
290 const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
291 TCCR1A = _BV(WGM11); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
292 TCCR1B = _BV(WGM13) | _BV(CS10); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
293 ICR1 = pwmval; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
294 OCR1A = pwmval / 3; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
295 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
296 #define TIMER_CONFIG_NORMAL() ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
297 TCCR1A = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
298 TCCR1B = _BV(WGM12) | _BV(CS10); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
299 OCR1A = SYSCLOCK * USECPERTICK / 1000000; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
300 TCNT1 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
301 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
302 #if defined(CORE_OC1A_PIN)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
303 #define TIMER_PWM_PIN CORE_OC1A_PIN /* Teensy */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
304 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
305 #define TIMER_PWM_PIN 11 /* Arduino Mega */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
306 #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
307 #define TIMER_PWM_PIN 13 /* Sanguino */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
308 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
309 #define TIMER_PWM_PIN 9 /* Arduino Duemilanove, Diecimila, LilyPad, etc */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
310 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
311
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
312
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
313 // defines for timer3 (16 bits)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
314 #elif defined(IR_USE_TIMER3)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
315 #define TIMER_RESET
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
316 #define TIMER_ENABLE_PWM (TCCR3A |= _BV(COM3A1))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
317 #define TIMER_DISABLE_PWM (TCCR3A &= ~(_BV(COM3A1)))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
318 #define TIMER_ENABLE_INTR (TIMSK3 = _BV(OCIE3A))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
319 #define TIMER_DISABLE_INTR (TIMSK3 = 0)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
320 #define TIMER_INTR_NAME TIMER3_COMPA_vect
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
321 #define TIMER_CONFIG_KHZ(val) ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
322 const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
323 TCCR3A = _BV(WGM31); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
324 TCCR3B = _BV(WGM33) | _BV(CS30); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
325 ICR3 = pwmval; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
326 OCR3A = pwmval / 3; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
327 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
328 #define TIMER_CONFIG_NORMAL() ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
329 TCCR3A = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
330 TCCR3B = _BV(WGM32) | _BV(CS30); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
331 OCR3A = SYSCLOCK * USECPERTICK / 1000000; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
332 TCNT3 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
333 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
334 #if defined(CORE_OC3A_PIN)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
335 #define TIMER_PWM_PIN CORE_OC3A_PIN /* Teensy */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
336 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
337 #define TIMER_PWM_PIN 5 /* Arduino Mega */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
338 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
339 #error "Please add OC3A pin number here\n"
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
340 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
341
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
342
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
343 // defines for timer4 (10 bits, high speed option)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
344 #elif defined(IR_USE_TIMER4_HS)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
345 #define TIMER_RESET
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
346 #define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A1))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
347 #define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A1)))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
348 #define TIMER_ENABLE_INTR (TIMSK4 = _BV(TOIE4))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
349 #define TIMER_DISABLE_INTR (TIMSK4 = 0)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
350 #define TIMER_INTR_NAME TIMER4_OVF_vect
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
351 #define TIMER_CONFIG_KHZ(val) ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
352 const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
353 TCCR4A = (1<<PWM4A); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
354 TCCR4B = _BV(CS40); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
355 TCCR4C = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
356 TCCR4D = (1<<WGM40); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
357 TCCR4E = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
358 TC4H = pwmval >> 8; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
359 OCR4C = pwmval; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
360 TC4H = (pwmval / 3) >> 8; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
361 OCR4A = (pwmval / 3) & 255; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
362 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
363 #define TIMER_CONFIG_NORMAL() ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
364 TCCR4A = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
365 TCCR4B = _BV(CS40); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
366 TCCR4C = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
367 TCCR4D = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
368 TCCR4E = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
369 TC4H = (SYSCLOCK * USECPERTICK / 1000000) >> 8; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
370 OCR4C = (SYSCLOCK * USECPERTICK / 1000000) & 255; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
371 TC4H = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
372 TCNT4 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
373 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
374 #if defined(CORE_OC4A_PIN)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
375 #define TIMER_PWM_PIN CORE_OC4A_PIN /* Teensy */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
376 #elif defined(__AVR_ATmega32U4__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
377 #define TIMER_PWM_PIN 13 /* Leonardo */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
378 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
379 #error "Please add OC4A pin number here\n"
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
380 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
381
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
382
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
383 // defines for timer4 (16 bits)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
384 #elif defined(IR_USE_TIMER4)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
385 #define TIMER_RESET
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
386 #define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A1))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
387 #define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A1)))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
388 #define TIMER_ENABLE_INTR (TIMSK4 = _BV(OCIE4A))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
389 #define TIMER_DISABLE_INTR (TIMSK4 = 0)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
390 #define TIMER_INTR_NAME TIMER4_COMPA_vect
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
391 #define TIMER_CONFIG_KHZ(val) ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
392 const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
393 TCCR4A = _BV(WGM41); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
394 TCCR4B = _BV(WGM43) | _BV(CS40); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
395 ICR4 = pwmval; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
396 OCR4A = pwmval / 3; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
397 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
398 #define TIMER_CONFIG_NORMAL() ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
399 TCCR4A = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
400 TCCR4B = _BV(WGM42) | _BV(CS40); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
401 OCR4A = SYSCLOCK * USECPERTICK / 1000000; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
402 TCNT4 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
403 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
404 #if defined(CORE_OC4A_PIN)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
405 #define TIMER_PWM_PIN CORE_OC4A_PIN
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
406 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
407 #define TIMER_PWM_PIN 6 /* Arduino Mega */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
408 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
409 #error "Please add OC4A pin number here\n"
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
410 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
411
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
412
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
413 // defines for timer5 (16 bits)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
414 #elif defined(IR_USE_TIMER5)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
415 #define TIMER_RESET
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
416 #define TIMER_ENABLE_PWM (TCCR5A |= _BV(COM5A1))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
417 #define TIMER_DISABLE_PWM (TCCR5A &= ~(_BV(COM5A1)))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
418 #define TIMER_ENABLE_INTR (TIMSK5 = _BV(OCIE5A))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
419 #define TIMER_DISABLE_INTR (TIMSK5 = 0)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
420 #define TIMER_INTR_NAME TIMER5_COMPA_vect
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
421 #define TIMER_CONFIG_KHZ(val) ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
422 const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
423 TCCR5A = _BV(WGM51); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
424 TCCR5B = _BV(WGM53) | _BV(CS50); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
425 ICR5 = pwmval; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
426 OCR5A = pwmval / 3; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
427 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
428 #define TIMER_CONFIG_NORMAL() ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
429 TCCR5A = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
430 TCCR5B = _BV(WGM52) | _BV(CS50); \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
431 OCR5A = SYSCLOCK * USECPERTICK / 1000000; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
432 TCNT5 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
433 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
434 #if defined(CORE_OC5A_PIN)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
435 #define TIMER_PWM_PIN CORE_OC5A_PIN
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
436 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
437 #define TIMER_PWM_PIN 46 /* Arduino Mega */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
438 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
439 #error "Please add OC5A pin number here\n"
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
440 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
441
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
442
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
443 // defines for special carrier modulator timer
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
444 #elif defined(IR_USE_TIMER_CMT)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
445 #define TIMER_RESET ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
446 uint8_t tmp = CMT_MSC; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
447 CMT_CMD2 = 30; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
448 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
449 #define TIMER_ENABLE_PWM CORE_PIN5_CONFIG = PORT_PCR_MUX(2)|PORT_PCR_DSE|PORT_PCR_SRE
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
450 #define TIMER_DISABLE_PWM CORE_PIN5_CONFIG = PORT_PCR_MUX(1)|PORT_PCR_DSE|PORT_PCR_SRE
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
451 #define TIMER_ENABLE_INTR NVIC_ENABLE_IRQ(IRQ_CMT)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
452 #define TIMER_DISABLE_INTR NVIC_DISABLE_IRQ(IRQ_CMT)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
453 #define TIMER_INTR_NAME cmt_isr
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
454 #ifdef ISR
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
455 #undef ISR
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
456 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
457 #define ISR(f) void f(void)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
458 #if F_BUS == 48000000
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
459 #define CMT_PPS_VAL 5
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
460 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
461 #define CMT_PPS_VAL 2
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
462 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
463 #define TIMER_CONFIG_KHZ(val) ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
464 SIM_SCGC4 |= SIM_SCGC4_CMT; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
465 SIM_SOPT2 |= SIM_SOPT2_PTD7PAD; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
466 CMT_PPS = CMT_PPS_VAL; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
467 CMT_CGH1 = 2667 / val; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
468 CMT_CGL1 = 5333 / val; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
469 CMT_CMD1 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
470 CMT_CMD2 = 30; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
471 CMT_CMD3 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
472 CMT_CMD4 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
473 CMT_OC = 0x60; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
474 CMT_MSC = 0x01; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
475 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
476 #define TIMER_CONFIG_NORMAL() ({ \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
477 SIM_SCGC4 |= SIM_SCGC4_CMT; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
478 CMT_PPS = CMT_PPS_VAL; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
479 CMT_CGH1 = 1; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
480 CMT_CGL1 = 1; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
481 CMT_CMD1 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
482 CMT_CMD2 = 30; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
483 CMT_CMD3 = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
484 CMT_CMD4 = 19; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
485 CMT_OC = 0; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
486 CMT_MSC = 0x03; \
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
487 })
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
488 #define TIMER_PWM_PIN 5
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
489
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
490
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
491 #else // unknown timer
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
492 #error "Internal code configuration error, no known IR_USE_TIMER# defined\n"
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
493 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
494
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
495
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
496 // defines for blinking the LED
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
497 #if defined(CORE_LED0_PIN)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
498 #define BLINKLED CORE_LED0_PIN
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
499 #define BLINKLED_ON() (digitalWrite(CORE_LED0_PIN, HIGH))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
500 #define BLINKLED_OFF() (digitalWrite(CORE_LED0_PIN, LOW))
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
501 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
502 #define BLINKLED 13
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
503 #define BLINKLED_ON() (PORTB |= B10000000)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
504 #define BLINKLED_OFF() (PORTB &= B01111111)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
505 #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
506 #define BLINKLED 0
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
507 #define BLINKLED_ON() (PORTD |= B00000001)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
508 #define BLINKLED_OFF() (PORTD &= B11111110)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
509 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
510 #define BLINKLED 13
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
511 #define BLINKLED_ON() (PORTB |= B00100000)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
512 #define BLINKLED_OFF() (PORTB &= B11011111)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
513 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
514
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
515 #endif