25#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1 || IRMP_SUPPORT_NOKIA_PROTOCOL == 1 || IRMP_SUPPORT_IR60_PROTOCOL == 1
26# define IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL 1
28# define IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL 0
31#if IRMP_SUPPORT_SIEMENS_PROTOCOL == 1 || IRMP_SUPPORT_RUWIDO_PROTOCOL == 1
32# define IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL 1
34# define IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL 0
37#if IRMP_SUPPORT_RC5_PROTOCOL == 1 || \
38 IRMP_SUPPORT_RCII_PROTOCOL == 1 || \
39 IRMP_SUPPORT_S100_PROTOCOL == 1 || \
40 IRMP_SUPPORT_RC6_PROTOCOL == 1 || \
41 IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 || \
42 IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 || \
43 IRMP_SUPPORT_IR60_PROTOCOL == 1 || \
44 IRMP_SUPPORT_A1TVBOX_PROTOCOL == 1 || \
45 IRMP_SUPPORT_MERLIN_PROTOCOL == 1 || \
46 IRMP_SUPPORT_ORTEK_PROTOCOL == 1
47# define IRMP_SUPPORT_MANCHESTER 1
49# define IRMP_SUPPORT_MANCHESTER 0
52#if IRMP_SUPPORT_NETBOX_PROTOCOL == 1
53# define IRMP_SUPPORT_SERIAL 1
55# define IRMP_SUPPORT_SERIAL 0
58#define IRMP_KEY_REPETITION_LEN (uint_fast16_t)(F_INTERRUPTS * 150.0e-3 + 0.5)
60#define MIN_TOLERANCE_00 1.0
61#define MAX_TOLERANCE_00 1.0
63#define MIN_TOLERANCE_02 0.98
64#define MAX_TOLERANCE_02 1.02
66#define MIN_TOLERANCE_03 0.97
67#define MAX_TOLERANCE_03 1.03
69#define MIN_TOLERANCE_05 0.95
70#define MAX_TOLERANCE_05 1.05
72#define MIN_TOLERANCE_10 0.9
73#define MAX_TOLERANCE_10 1.1
75#define MIN_TOLERANCE_15 0.85
76#define MAX_TOLERANCE_15 1.15
78#define MIN_TOLERANCE_20 0.8
79#define MAX_TOLERANCE_20 1.2
81#define MIN_TOLERANCE_30 0.7
82#define MAX_TOLERANCE_30 1.3
84#define MIN_TOLERANCE_40 0.6
85#define MAX_TOLERANCE_40 1.4
87#define MIN_TOLERANCE_50 0.5
88#define MAX_TOLERANCE_50 1.5
90#define MIN_TOLERANCE_60 0.4
91#define MAX_TOLERANCE_60 1.6
93#define MIN_TOLERANCE_70 0.3
94#define MAX_TOLERANCE_70 1.7
96#define SIRCS_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
97#define SIRCS_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
98#define SIRCS_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
99#if IRMP_SUPPORT_NETBOX_PROTOCOL
100# define SIRCS_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5))
102# define SIRCS_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
104#define SIRCS_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_1_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
105#define SIRCS_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_1_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
106#define SIRCS_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_0_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
107#define SIRCS_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_0_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
108#define SIRCS_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
109#define SIRCS_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
111#define NEC_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
112#define NEC_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
113#define NEC_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
114#define NEC_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
115#define NEC_REPEAT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_REPEAT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
116#define NEC_REPEAT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_REPEAT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
117#define NEC_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
118#define NEC_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
119#define NEC_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
120#define NEC_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
121#define NEC_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
122#define NEC_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
126#define NEC_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * NEC_FRAME_REPEAT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5)
128#define NEC_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * 100.0e-3 * MAX_TOLERANCE_20 + 0.5)
131#define SAMSUNG_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
132#define SAMSUNG_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
133#define SAMSUNG_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
134#define SAMSUNG_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
135#define SAMSUNG_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
136#define SAMSUNG_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
137#define SAMSUNG_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
138#define SAMSUNG_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
139#define SAMSUNG_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
140#define SAMSUNG_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
142#define SAMSUNGAH_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
143#define SAMSUNGAH_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
144#define SAMSUNGAH_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
145#define SAMSUNGAH_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
146#define SAMSUNGAH_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
147#define SAMSUNGAH_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
148#define SAMSUNGAH_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
149#define SAMSUNGAH_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
150#define SAMSUNGAH_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
151#define SAMSUNGAH_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
153#define MATSUSHITA_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
154#define MATSUSHITA_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
155#define MATSUSHITA_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
156#define MATSUSHITA_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
157#define MATSUSHITA_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
158#define MATSUSHITA_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
159#define MATSUSHITA_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_1_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
160#define MATSUSHITA_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_1_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
161#define MATSUSHITA_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
162#define MATSUSHITA_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_0_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
164#define KASEIKYO_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
165#define KASEIKYO_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
166#define KASEIKYO_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
167#define KASEIKYO_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
168#define KASEIKYO_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
169#define KASEIKYO_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
170#define KASEIKYO_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
171#define KASEIKYO_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
172#define KASEIKYO_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
173#define KASEIKYO_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
175#define MITSU_HEAVY_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
176#define MITSU_HEAVY_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
177#define MITSU_HEAVY_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
178#define MITSU_HEAVY_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
179#define MITSU_HEAVY_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
180#define MITSU_HEAVY_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
181#define MITSU_HEAVY_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
182#define MITSU_HEAVY_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
183#define MITSU_HEAVY_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
184#define MITSU_HEAVY_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
186#define VINCENT_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
187#define VINCENT_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
188#define VINCENT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
189#define VINCENT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
190#define VINCENT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
191#define VINCENT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
192#define VINCENT_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
193#define VINCENT_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
194#define VINCENT_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
195#define VINCENT_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
197#define PANASONIC_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
198#define PANASONIC_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
199#define PANASONIC_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
200#define PANASONIC_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
201#define PANASONIC_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
202#define PANASONIC_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
203#define PANASONIC_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
204#define PANASONIC_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
205#define PANASONIC_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
206#define PANASONIC_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
208#define RECS80_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
209#define RECS80_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
210#define RECS80_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
211#define RECS80_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
212#define RECS80_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
213#define RECS80_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
214#define RECS80_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
215#define RECS80_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
216#define RECS80_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
217#define RECS80_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
219#if IRMP_SUPPORT_BOSE_PROTOCOL == 1
220#define RC5_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
221#define RC5_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
223#define RC5_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
224#define RC5_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
227#define RC5_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
228#define RC5_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
230#define RCII_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
231#define RCII_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
232#define RCII_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
233#define RCII_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
234#define RCII_START_BIT2_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT2_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
235#define RCII_START_BIT2_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT2_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
237#define RCII_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCII_BIT_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
238#define RCII_BIT_LEN ((uint_fast8_t)(F_INTERRUPTS * RCII_BIT_TIME))
239#define RCII_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCII_BIT_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
241#if IRMP_SUPPORT_BOSE_PROTOCOL == 1
242#define S100_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
243#define S100_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
245#define S100_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
246#define S100_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
249#define S100_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
250#define S100_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
252#define DENON_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
253#define DENON_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
254#define DENON_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * DENON_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
255#define DENON_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * DENON_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
257#define DENON_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * DENON_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
258#define DENON_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * DENON_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
259#define DENON_AUTO_REPETITION_PAUSE_LEN ((uint_fast16_t)(F_INTERRUPTS * DENON_AUTO_REPETITION_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
261#define THOMSON_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * THOMSON_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
262#define THOMSON_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * THOMSON_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
263#define THOMSON_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * THOMSON_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
264#define THOMSON_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * THOMSON_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
265#define THOMSON_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * THOMSON_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
266#define THOMSON_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * THOMSON_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
268#define RC6_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
269#define RC6_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
270#define RC6_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
271#define RC6_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
272#define RC6_TOGGLE_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_TOGGLE_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
273#define RC6_TOGGLE_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_TOGGLE_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
274#define RC6_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
275#define RC6_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_60 + 0.5) + 1)
276#define RC6_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
277#define RC6_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
279#define RECS80EXT_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
280#define RECS80EXT_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
281#define RECS80EXT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
282#define RECS80EXT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
283#define RECS80EXT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
284#define RECS80EXT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
285#define RECS80EXT_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
286#define RECS80EXT_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
287#define RECS80EXT_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
288#define RECS80EXT_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
290#define NUBERT_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
291#define NUBERT_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
292#define NUBERT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
293#define NUBERT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
294#define NUBERT_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
295#define NUBERT_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
296#define NUBERT_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
297#define NUBERT_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
298#define NUBERT_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
299#define NUBERT_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
300#define NUBERT_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
301#define NUBERT_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
303#define FAN_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
304#define FAN_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
305#define FAN_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
306#define FAN_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
307#define FAN_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
308#define FAN_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
309#define FAN_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
310#define FAN_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
311#define FAN_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
312#define FAN_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
313#define FAN_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
314#define FAN_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
316#define SPEAKER_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
317#define SPEAKER_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
318#define SPEAKER_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
319#define SPEAKER_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
320#define SPEAKER_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
321#define SPEAKER_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
322#define SPEAKER_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
323#define SPEAKER_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
324#define SPEAKER_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
325#define SPEAKER_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
326#define SPEAKER_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
327#define SPEAKER_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
329#define BANG_OLUFSEN_START_BIT1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
330#define BANG_OLUFSEN_START_BIT1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
331#define BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
332#define BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
333#define BANG_OLUFSEN_START_BIT2_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT2_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
334#define BANG_OLUFSEN_START_BIT2_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT2_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
335#define BANG_OLUFSEN_START_BIT2_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT2_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
336#define BANG_OLUFSEN_START_BIT2_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT2_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
337#define BANG_OLUFSEN_START_BIT3_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT3_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
338#define BANG_OLUFSEN_START_BIT3_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT3_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
339#define BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT3_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
340#define BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX ((PAUSE_LEN)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT3_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
341#define BANG_OLUFSEN_START_BIT4_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT4_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
342#define BANG_OLUFSEN_START_BIT4_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT4_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
343#define BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT4_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
344#define BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT4_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
345#define BANG_OLUFSEN_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
346#define BANG_OLUFSEN_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
347#define BANG_OLUFSEN_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
348#define BANG_OLUFSEN_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
349#define BANG_OLUFSEN_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
350#define BANG_OLUFSEN_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
351#define BANG_OLUFSEN_R_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_R_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
352#define BANG_OLUFSEN_R_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_R_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
353#define BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
354#define BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
356#define IR60_TIMEOUT_LEN ((uint_fast8_t)(F_INTERRUPTS * IR60_TIMEOUT_TIME * 0.5))
357#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
358#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
359#define GRUNDIG_NOKIA_IR60_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
360#define GRUNDIG_NOKIA_IR60_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
361#define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_PRE_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) + 1)
362#define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_PRE_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
364#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
365#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
366#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
367#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
368#define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
369#define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
370#define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
371#define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
373#define FDC_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
374#define FDC_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5))
375#define FDC_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
376#define FDC_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5))
377#define FDC_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
378#define FDC_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_PULSE_TIME * MAX_TOLERANCE_50 + 0.5) + 1)
379#define FDC_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
380#define FDC_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
382#define FDC_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
384#define FDC_0_PAUSE_LEN_MIN (1)
386#define FDC_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
388#define RCCAR_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
389#define RCCAR_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
390#define RCCAR_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
391#define RCCAR_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
392#define RCCAR_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
393#define RCCAR_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
394#define RCCAR_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
395#define RCCAR_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
396#define RCCAR_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
397#define RCCAR_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
399#define JVC_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * JVC_START_BIT_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
400#define JVC_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * JVC_START_BIT_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
401#define JVC_REPEAT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * (JVC_FRAME_REPEAT_PAUSE_TIME - IRMP_TIMEOUT_TIME) * MIN_TOLERANCE_40 + 0.5) - 1)
402#define JVC_REPEAT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * (JVC_FRAME_REPEAT_PAUSE_TIME - IRMP_TIMEOUT_TIME) * MAX_TOLERANCE_70 + 0.5) - 1)
403#define JVC_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * JVC_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
404#define JVC_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * JVC_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
405#define JVC_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * JVC_1_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
406#define JVC_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * JVC_1_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
407#define JVC_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * JVC_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
408#define JVC_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * JVC_0_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
410#define JVC_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * JVC_FRAME_REPEAT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5)
412#define NIKON_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
413#define NIKON_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
414#define NIKON_START_BIT_PAUSE_LEN_MIN ((uint_fast16_t)(F_INTERRUPTS * NIKON_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
415#define NIKON_START_BIT_PAUSE_LEN_MAX ((uint_fast16_t)(F_INTERRUPTS * NIKON_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
416#define NIKON_REPEAT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_REPEAT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
417#define NIKON_REPEAT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_REPEAT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
418#define NIKON_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
419#define NIKON_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
420#define NIKON_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
421#define NIKON_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
422#define NIKON_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
423#define NIKON_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
424#define NIKON_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * NIKON_FRAME_REPEAT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5)
426#define KATHREIN_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
427#define KATHREIN_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
428#define KATHREIN_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
429#define KATHREIN_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
430#define KATHREIN_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_1_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
431#define KATHREIN_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_1_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
432#define KATHREIN_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
433#define KATHREIN_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
434#define KATHREIN_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_0_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
435#define KATHREIN_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_0_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
436#define KATHREIN_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
437#define KATHREIN_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
438#define KATHREIN_SYNC_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_SYNC_BIT_PAUSE_LEN_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
439#define KATHREIN_SYNC_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_SYNC_BIT_PAUSE_LEN_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
441#define NETBOX_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
442#define NETBOX_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NETBOX_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
443#define NETBOX_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
444#define NETBOX_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NETBOX_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
445#define NETBOX_PULSE_LEN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_PULSE_TIME))
446#define NETBOX_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_PAUSE_TIME))
447#define NETBOX_PULSE_REST_LEN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_PULSE_TIME / 4))
448#define NETBOX_PAUSE_REST_LEN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_PAUSE_TIME / 4))
450#define LEGO_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_START_BIT_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
451#define LEGO_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_START_BIT_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
452#define LEGO_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_START_BIT_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
453#define LEGO_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_START_BIT_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
454#define LEGO_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
455#define LEGO_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
456#define LEGO_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_1_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
457#define LEGO_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_1_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
458#define LEGO_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)
459#define LEGO_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_0_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)
461#define IRMP16_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
462#define IRMP16_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
463#define IRMP16_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
464#define IRMP16_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
465#define IRMP16_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
466#define IRMP16_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
467#define IRMP16_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
468#define IRMP16_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
469#define IRMP16_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
470#define IRMP16_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
472#define GREE_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
473#define GREE_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
474#define GREE_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
475#define GREE_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
476#define GREE_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
477#define GREE_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
478#define GREE_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
479#define GREE_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
480#define GREE_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
481#define GREE_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
483#define BOSE_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_START_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
484#define BOSE_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_START_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
485#define BOSE_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_START_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
486#define BOSE_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_START_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
487#define BOSE_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
488#define BOSE_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
489#define BOSE_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
490#define BOSE_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
491#define BOSE_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
492#define BOSE_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
493#define BOSE_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * 100.0e-3 * MAX_TOLERANCE_20 + 0.5)
495#define A1TVBOX_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
496#define A1TVBOX_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
497#define A1TVBOX_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
498#define A1TVBOX_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
499#define A1TVBOX_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
500#define A1TVBOX_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
501#define A1TVBOX_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
502#define A1TVBOX_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
504#define MERLIN_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MERLIN_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
505#define MERLIN_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MERLIN_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
506#define MERLIN_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MERLIN_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
507#define MERLIN_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MERLIN_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
508#define MERLIN_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MERLIN_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
509#define MERLIN_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MERLIN_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
510#define MERLIN_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MERLIN_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
511#define MERLIN_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MERLIN_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
513#define ORTEK_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ORTEK_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
514#define ORTEK_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ORTEK_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
515#define ORTEK_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ORTEK_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
516#define ORTEK_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ORTEK_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
517#define ORTEK_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ORTEK_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
518#define ORTEK_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ORTEK_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
519#define ORTEK_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ORTEK_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
520#define ORTEK_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ORTEK_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
522#define TELEFUNKEN_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
523#define TELEFUNKEN_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
524#define TELEFUNKEN_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * (TELEFUNKEN_START_BIT_PAUSE_TIME) * MIN_TOLERANCE_10 + 0.5) - 1)
525#define TELEFUNKEN_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * (TELEFUNKEN_START_BIT_PAUSE_TIME) * MAX_TOLERANCE_10 + 0.5) - 1)
526#define TELEFUNKEN_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
527#define TELEFUNKEN_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
528#define TELEFUNKEN_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
529#define TELEFUNKEN_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
530#define TELEFUNKEN_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
531#define TELEFUNKEN_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
535#define ROOMBA_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
536#define ROOMBA_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
537#define ROOMBA_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
538#define ROOMBA_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
539#define ROOMBA_1_PAUSE_LEN_EXACT ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PAUSE_TIME + 0.5))
540#define ROOMBA_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
541#define ROOMBA_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
542#define ROOMBA_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
543#define ROOMBA_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
544#define ROOMBA_0_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PAUSE_TIME))
545#define ROOMBA_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
546#define ROOMBA_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
547#define ROOMBA_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
548#define ROOMBA_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
550#define RCMM32_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
551#define RCMM32_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
552#define RCMM32_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
553#define RCMM32_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
554#define RCMM32_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
555#define RCMM32_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
556#define RCMM32_BIT_00_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_00_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
557#define RCMM32_BIT_00_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_00_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
558#define RCMM32_BIT_01_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_01_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
559#define RCMM32_BIT_01_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_01_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
560#define RCMM32_BIT_10_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_10_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
561#define RCMM32_BIT_10_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_10_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
562#define RCMM32_BIT_11_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_11_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
563#define RCMM32_BIT_11_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_11_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
565#define PENTAX_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
566#define PENTAX_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
567#define PENTAX_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
568#define PENTAX_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
569#define PENTAX_1_PAUSE_LEN_EXACT ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME + 0.5))
570#define PENTAX_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
571#define PENTAX_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
572#define PENTAX_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
573#define PENTAX_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
574#define PENTAX_0_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME))
575#define PENTAX_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
576#define PENTAX_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
577#define PENTAX_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
578#define PENTAX_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
580#define ACP24_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_START_BIT_PULSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1)
581#define ACP24_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_START_BIT_PULSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1)
582#define ACP24_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_START_BIT_PAUSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1)
583#define ACP24_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_START_BIT_PAUSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1)
584#define ACP24_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_PULSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1)
585#define ACP24_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_PULSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1)
586#define ACP24_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_1_PAUSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1)
587#define ACP24_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_1_PAUSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1)
588#define ACP24_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_0_PAUSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1)
589#define ACP24_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_0_PAUSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1)
591#define METZ_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
592#define METZ_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
593#define METZ_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
594#define METZ_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
595#define METZ_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
596#define METZ_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
597#define METZ_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
598#define METZ_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
599#define METZ_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
600#define METZ_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
601#define METZ_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * METZ_FRAME_REPEAT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5)
603#define RADIO1_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
604#define RADIO1_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
605#define RADIO1_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
606#define RADIO1_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
607#define RADIO1_1_PAUSE_LEN_EXACT ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PAUSE_TIME + 0.5))
608#define RADIO1_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
609#define RADIO1_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
610#define RADIO1_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
611#define RADIO1_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
612#define RADIO1_0_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PAUSE_TIME))
613#define RADIO1_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
614#define RADIO1_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
615#define RADIO1_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
616#define RADIO1_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
618#define AUTO_FRAME_REPETITION_LEN (uint_fast16_t)(F_INTERRUPTS * AUTO_FRAME_REPETITION_TIME + 0.5)
621# define ANALYZE_PUTCHAR(a) { if (! silent) { putchar (a); } }
622# define ANALYZE_ONLY_NORMAL_PUTCHAR(a) { if (! silent && !verbose) { putchar (a); } }
623# define ANALYZE_PRINTF(...) { if (verbose) { printf (__VA_ARGS__); } }
624# define ANALYZE_ONLY_NORMAL_PRINTF(...) { if (! silent && !verbose) { printf (__VA_ARGS__); } }
625# define ANALYZE_NEWLINE() { if (verbose) { putchar ('\n'); } }
627static int time_counter;
631# define ANALYZE_PUTCHAR(a)
632# define ANALYZE_ONLY_NORMAL_PUTCHAR(a)
633# define ANALYZE_PRINTF(...)
634# define ANALYZE_ONLY_NORMAL_PRINTF(...)
635# define ANALYZE_NEWLINE()
639#if IRMP_USE_CALLBACK == 1
640static void (*irmp_callback_ptr) (uint_fast8_t);
643#define PARITY_CHECK_OK 1
644#define PARITY_CHECK_FAILED 0
650#if defined(UNIX_OR_WINDOWS) || IRMP_PROTOCOL_NAMES == 1
651static const char proto_unknown[] PROGMEM =
"UNKNOWN";
652static const char proto_sircs[] PROGMEM =
"SIRCS";
653static const char proto_nec[] PROGMEM =
"NEC";
654static const char proto_samsung[] PROGMEM =
"SAMSUNG";
655static const char proto_matsushita[] PROGMEM =
"MATSUSH";
656static const char proto_kaseikyo[] PROGMEM =
"KASEIKYO";
657static const char proto_recs80[] PROGMEM =
"RECS80";
658static const char proto_rc5[] PROGMEM =
"RC5";
659static const char proto_denon[] PROGMEM =
"DENON";
660static const char proto_rc6[] PROGMEM =
"RC6";
661static const char proto_samsung32[] PROGMEM =
"SAMSG32";
662static const char proto_apple[] PROGMEM =
"APPLE";
663static const char proto_recs80ext[] PROGMEM =
"RECS80EX";
664static const char proto_nubert[] PROGMEM =
"NUBERT";
665static const char proto_bang_olufsen[] PROGMEM =
"BANG OLU";
666static const char proto_grundig[] PROGMEM =
"GRUNDIG";
667static const char proto_nokia[] PROGMEM =
"NOKIA";
668static const char proto_siemens[] PROGMEM =
"SIEMENS";
669static const char proto_fdc[] PROGMEM =
"FDC";
670static const char proto_rccar[] PROGMEM =
"RCCAR";
671static const char proto_jvc[] PROGMEM =
"JVC";
672static const char proto_rc6a[] PROGMEM =
"RC6A";
673static const char proto_nikon[] PROGMEM =
"NIKON";
674static const char proto_ruwido[] PROGMEM =
"RUWIDO";
675static const char proto_ir60[] PROGMEM =
"IR60";
676static const char proto_kathrein[] PROGMEM =
"KATHREIN";
677static const char proto_netbox[] PROGMEM =
"NETBOX";
678static const char proto_nec16[] PROGMEM =
"NEC16";
679static const char proto_nec42[] PROGMEM =
"NEC42";
680static const char proto_lego[] PROGMEM =
"LEGO";
681static const char proto_thomson[] PROGMEM =
"THOMSON";
682static const char proto_bose[] PROGMEM =
"BOSE";
683static const char proto_a1tvbox[] PROGMEM =
"A1TVBOX";
684static const char proto_ortek[] PROGMEM =
"ORTEK";
685static const char proto_telefunken[] PROGMEM =
"TELEFUNKEN";
686static const char proto_roomba[] PROGMEM =
"ROOMBA";
687static const char proto_rcmm32[] PROGMEM =
"RCMM32";
688static const char proto_rcmm24[] PROGMEM =
"RCMM24";
689static const char proto_rcmm12[] PROGMEM =
"RCMM12";
690static const char proto_speaker[] PROGMEM =
"SPEAKER";
691static const char proto_lgair[] PROGMEM =
"LGAIR";
692static const char proto_samsung48[] PROGMEM =
"SAMSG48";
693static const char proto_merlin[] PROGMEM =
"MERLIN";
694static const char proto_pentax[] PROGMEM =
"PENTAX";
695static const char proto_fan[] PROGMEM =
"FAN";
696static const char proto_s100[] PROGMEM =
"S100";
697static const char proto_acp24[] PROGMEM =
"ACP24";
698static const char proto_technics[] PROGMEM =
"TECHNICS";
699static const char proto_panasonic[] PROGMEM =
"PANASONIC";
700static const char proto_mitsu_heavy[] PROGMEM =
"MITSU_HEAVY";
701static const char proto_vincent[] PROGMEM =
"VINCENT";
702static const char proto_samsungah[] PROGMEM =
"SAMSUNGAH";
703static const char proto_irmp16[] PROGMEM =
"IRMP16";
704static const char proto_gree[] PROGMEM =
"GREE";
705static const char proto_rcii[] PROGMEM =
"RCII";
706static const char proto_metz[] PROGMEM =
"METZ";
707static const char proto_onkyo[] PROGMEM =
"ONKYO";
709static const char proto_radio1[] PROGMEM =
"RADIO1";
783#if defined(ARM_STM32F4XX)
784# define STM32_GPIO_CLOCK RCC_AHB1Periph_GPIOA
785# define STM32_UART_CLOCK RCC_APB1Periph_USART2
786# define STM32_GPIO_PORT GPIOA
787# define STM32_GPIO_PIN GPIO_Pin_2
788# define STM32_GPIO_SOURCE GPIO_PinSource2
789# define STM32_UART_AF GPIO_AF_USART2
790# define STM32_UART_COM USART2
791# define STM32_UART_BAUD 115200
792# include "stm32f4xx_usart.h"
793#elif defined(ARM_STM32F10X)
794# define STM32_UART_COM USART3
795#elif defined(ARDUINO)
796# if defined(USB_SERIAL)
797# include "usb_serial.h"
799# error USB_SERIAL not defined in ARDUINO Environment
801#elif defined(_CHIBIOS_HAL_)
802# if IRMP_EXT_LOGGING == 1
803# error IRMP_EXT_LOGGING not implemented for ChibiOS HAL, use regular logging instead
806# if IRMP_EXT_LOGGING == 1
807# include "irmpextlog.h"
810# ifndef UNIX_OR_WINDOWS
811# include <util/setbaud.h>
816#define UART0_UBRRH UBRR0H
817#define UART0_UBRRL UBRR0L
818#define UART0_UCSRA UCSR0A
819#define UART0_UCSRB UCSR0B
820#define UART0_UCSRC UCSR0C
821#define UART0_UDRE_BIT_VALUE (1<<UDRE0)
822#define UART0_UCSZ1_BIT_VALUE (1<<UCSZ01)
823#define UART0_UCSZ0_BIT_VALUE (1<<UCSZ00)
825#define UART0_URSEL_BIT_VALUE (1<<URSEL0)
827#define UART0_URSEL_BIT_VALUE (0)
829#define UART0_TXEN_BIT_VALUE (1<<TXEN0)
830#define UART0_UDR UDR0
831#define UART0_U2X U2X0
835#define UART0_UBRRH UBRRH
836#define UART0_UBRRL UBRRL
837#define UART0_UCSRA UCSRA
838#define UART0_UCSRB UCSRB
839#define UART0_UCSRC UCSRC
840#define UART0_UDRE_BIT_VALUE (1<<UDRE)
841#define UART0_UCSZ1_BIT_VALUE (1<<UCSZ1)
842#define UART0_UCSZ0_BIT_VALUE (1<<UCSZ0)
844#define UART0_URSEL_BIT_VALUE (1<<URSEL)
846#define UART0_URSEL_BIT_VALUE (0)
848#define UART0_TXEN_BIT_VALUE (1<<TXEN)
864#ifndef UNIX_OR_WINDOWS
865#if defined(ARM_STM32F4XX)
866 GPIO_InitTypeDef GPIO_InitStructure;
867 USART_InitTypeDef USART_InitStructure;
870 RCC_AHB1PeriphClockCmd(STM32_GPIO_CLOCK, ENABLE);
873 RCC_APB1PeriphClockCmd(STM32_UART_CLOCK, ENABLE);
876 GPIO_PinAFConfig(STM32_GPIO_PORT,STM32_GPIO_SOURCE,STM32_UART_AF);
879 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
880 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
881 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
882 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
885 GPIO_InitStructure.GPIO_Pin = STM32_GPIO_PIN;
886 GPIO_Init(STM32_GPIO_PORT, &GPIO_InitStructure);
889 USART_OverSampling8Cmd(STM32_UART_COM, ENABLE);
892 USART_InitStructure.USART_BaudRate = STM32_UART_BAUD;
893 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
894 USART_InitStructure.USART_StopBits = USART_StopBits_1;
895 USART_InitStructure.USART_Parity = USART_Parity_No;
896 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
897 USART_InitStructure.USART_Mode = USART_Mode_Tx;
898 USART_Init(STM32_UART_COM, &USART_InitStructure);
901 USART_Cmd(STM32_UART_COM, ENABLE);
903#elif defined(ARM_STM32F10X)
904 GPIO_InitTypeDef GPIO_InitStructure;
905 USART_InitTypeDef USART_InitStructure;
908 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
911 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
914 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
915 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
918 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
919 GPIO_Init(GPIOB, &GPIO_InitStructure);
922 USART_OverSampling8Cmd(STM32_UART_COM, ENABLE);
925 USART_InitStructure.USART_BaudRate = 115200;
926 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
927 USART_InitStructure.USART_StopBits = USART_StopBits_1;
928 USART_InitStructure.USART_Parity = USART_Parity_No;
929 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
930 USART_InitStructure.USART_Mode = USART_Mode_Tx;
931 USART_Init(STM32_UART_COM, &USART_InitStructure);
934 USART_Cmd(STM32_UART_COM, ENABLE);
936#elif defined(ARDUINO)
940#elif defined (__AVR_XMEGA__)
942 PMIC.CTRL |= PMIC_HILVLEN_bm;
944 USARTC1.BAUDCTRLB = 0;
945 USARTC1.BAUDCTRLA = F_CPU / 153600 - 1;
946 USARTC1.CTRLA = USART_RXCINTLVL_HI_gc;
947 USARTC1.CTRLB = USART_TXEN_bm | USART_RXEN_bm;
948 USARTC1.CTRLC = USART_CHSIZE_8BIT_gc;
950 PORTC.DIR &= ~(1<<6);
952#elif defined (_CHIBIOS_HAL_)
957#if (IRMP_EXT_LOGGING == 0)
958 UART0_UBRRH = UBRRH_VALUE;
959 UART0_UBRRL = UBRRL_VALUE;
962 UART0_UCSRA |= (1<<UART0_U2X);
964 UART0_UCSRA &= ~(1<<UART0_U2X);
967 UART0_UCSRC = UART0_UCSZ1_BIT_VALUE | UART0_UCSZ0_BIT_VALUE | UART0_URSEL_BIT_VALUE;
968 UART0_UCSRB |= UART0_TXEN_BIT_VALUE;
983irmp_uart_putc (
unsigned char ch)
985#ifndef UNIX_OR_WINDOWS
986#if defined(ARM_STM32F4XX) || defined(ARM_STM32F10X)
988 while (USART_GetFlagStatus(STM32_UART_COM, USART_FLAG_TXE) == RESET)
993 USART_SendData(STM32_UART_COM, ch);
997 while (USART_GetFlagStatus(STM32_UART_COM, USART_FLAG_TXE) == RESET);
998 USART_SendData(STM32_UART_COM,
'\r');
1001#elif defined(ARDUINO)
1003 usb_serial_putchar(ch);
1005#elif defined(_CHIBIOS_HAL_)
1007 sdWriteI(&IRMP_LOGGING_SD,&ch,1);
1010#if (IRMP_EXT_LOGGING == 0)
1012# if defined (__AVR_XMEGA__)
1013 while (!(USARTC1.STATUS & USART_DREIF_bm))
1021 while (!(UART0_UCSRA & UART0_UDRE_BIT_VALUE))
1046#define STARTCYCLES 2
1053 static uint8_t buf[DATALEN];
1054 static uint_fast16_t buf_idx;
1055 static uint_fast8_t startcycles;
1056 static uint_fast16_t cnt;
1057 static uint_fast8_t last_val = 1;
1059 if (! val && (startcycles < STARTCYCLES) && !buf_idx)
1067 if (! val || buf_idx != 0)
1069 if (last_val == val)
1073 if (val && cnt > ENDBITS)
1078 uint_fast8_t v =
'1';
1081 for (i8 = 0; i8 < STARTCYCLES; i8++)
1083 irmp_uart_putc (
'0');
1086 for (i = 0; i < buf_idx; i++)
1095 d |= ((uint_fast16_t) buf[i] << 8);
1098 for (j = 0; j < d; j++)
1103 v = (v ==
'1') ?
'0' :
'1';
1106 for (i8 = 0; i8 < 20; i8++)
1108 irmp_uart_putc (
'1');
1111 irmp_uart_putc (
'\n');
1117 else if (buf_idx < DATALEN - 3)
1121 buf[buf_idx++] = 0xff;
1122 buf[buf_idx++] = (cnt & 0xff);
1123 buf[buf_idx] = (cnt >> 8);
1139#define irmp_log(val)
1144 uint_fast8_t protocol;
1145 uint_fast8_t pulse_1_len_min;
1146 uint_fast8_t pulse_1_len_max;
1147 uint_fast8_t pause_1_len_min;
1148 uint_fast8_t pause_1_len_max;
1149 uint_fast8_t pulse_0_len_min;
1150 uint_fast8_t pulse_0_len_max;
1151 uint_fast8_t pause_0_len_min;
1152 uint_fast8_t pause_0_len_max;
1153 uint_fast8_t address_offset;
1154 uint_fast8_t address_end;
1155 uint_fast8_t command_offset;
1156 uint_fast8_t command_end;
1157 uint_fast8_t complete_len;
1158 uint_fast8_t stop_bit;
1159 uint_fast8_t lsb_first;
1163#if IRMP_SUPPORT_SIRCS_PROTOCOL == 1
1165static const PROGMEM IRMP_PARAMETER sircs_param =
1188#if IRMP_SUPPORT_NEC_PROTOCOL == 1
1190static const PROGMEM IRMP_PARAMETER nec_param =
1211static const PROGMEM IRMP_PARAMETER nec_rep_param =
1234#if IRMP_SUPPORT_NEC42_PROTOCOL == 1
1236static const PROGMEM IRMP_PARAMETER nec42_param =
1259#if IRMP_SUPPORT_LGAIR_PROTOCOL == 1
1261static const PROGMEM IRMP_PARAMETER lgair_param =
1284#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
1286static const PROGMEM IRMP_PARAMETER samsung_param =
1309#if IRMP_SUPPORT_SAMSUNGAH_PROTOCOL == 1
1311static const PROGMEM IRMP_PARAMETER samsungah_param =
1334#if IRMP_SUPPORT_TELEFUNKEN_PROTOCOL == 1
1336static const PROGMEM IRMP_PARAMETER telefunken_param =
1359#if IRMP_SUPPORT_MATSUSHITA_PROTOCOL == 1
1361static const PROGMEM IRMP_PARAMETER matsushita_param =
1384#if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1
1386static const PROGMEM IRMP_PARAMETER kaseikyo_param =
1409#if IRMP_SUPPORT_PANASONIC_PROTOCOL == 1
1411static const PROGMEM IRMP_PARAMETER panasonic_param =
1434#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1
1436static const PROGMEM IRMP_PARAMETER mitsu_heavy_param =
1459#if IRMP_SUPPORT_VINCENT_PROTOCOL == 1
1461static const PROGMEM IRMP_PARAMETER vincent_param =
1484#if IRMP_SUPPORT_RECS80_PROTOCOL == 1
1486static const PROGMEM IRMP_PARAMETER recs80_param =
1509#if IRMP_SUPPORT_RC5_PROTOCOL == 1
1511static const PROGMEM IRMP_PARAMETER rc5_param =
1534#if IRMP_SUPPORT_RCII_PROTOCOL == 1
1536static const PROGMEM IRMP_PARAMETER rcii_param =
1559#if IRMP_SUPPORT_S100_PROTOCOL == 1
1561static const PROGMEM IRMP_PARAMETER s100_param =
1584#if IRMP_SUPPORT_DENON_PROTOCOL == 1
1586static const PROGMEM IRMP_PARAMETER denon_param =
1609#if IRMP_SUPPORT_RC6_PROTOCOL == 1
1611static const PROGMEM IRMP_PARAMETER rc6_param =
1635#if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1
1637static const PROGMEM IRMP_PARAMETER recs80ext_param =
1660#if IRMP_SUPPORT_NUBERT_PROTOCOL == 1
1662static const PROGMEM IRMP_PARAMETER nubert_param =
1685#if IRMP_SUPPORT_FAN_PROTOCOL == 1
1687static const PROGMEM IRMP_PARAMETER fan_param =
1710#if IRMP_SUPPORT_SPEAKER_PROTOCOL == 1
1712static const PROGMEM IRMP_PARAMETER speaker_param =
1735#if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
1737static const PROGMEM IRMP_PARAMETER bang_olufsen_param =
1760#if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1
1762static uint_fast8_t first_bit;
1764static const PROGMEM IRMP_PARAMETER grundig_param =
1788#if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1
1790static const PROGMEM IRMP_PARAMETER ruwido_param =
1813#if IRMP_SUPPORT_FDC_PROTOCOL == 1
1815static const PROGMEM IRMP_PARAMETER fdc_param =
1838#if IRMP_SUPPORT_RCCAR_PROTOCOL == 1
1840static const PROGMEM IRMP_PARAMETER rccar_param =
1863#if IRMP_SUPPORT_NIKON_PROTOCOL == 1
1865static const PROGMEM IRMP_PARAMETER nikon_param =
1888#if IRMP_SUPPORT_KATHREIN_PROTOCOL == 1
1890static const PROGMEM IRMP_PARAMETER kathrein_param =
1913#if IRMP_SUPPORT_NETBOX_PROTOCOL == 1
1915static const PROGMEM IRMP_PARAMETER netbox_param =
1938#if IRMP_SUPPORT_LEGO_PROTOCOL == 1
1940static const PROGMEM IRMP_PARAMETER lego_param =
1963#if IRMP_SUPPORT_IRMP16_PROTOCOL == 1
1965static const PROGMEM IRMP_PARAMETER irmp16_param =
1988#if IRMP_SUPPORT_GREE_PROTOCOL == 1
1990static const PROGMEM IRMP_PARAMETER gree_param =
2013#if IRMP_SUPPORT_THOMSON_PROTOCOL == 1
2015static const PROGMEM IRMP_PARAMETER thomson_param =
2038#if IRMP_SUPPORT_BOSE_PROTOCOL == 1
2040static const PROGMEM IRMP_PARAMETER bose_param =
2063#if IRMP_SUPPORT_A1TVBOX_PROTOCOL == 1
2065static const PROGMEM IRMP_PARAMETER a1tvbox_param =
2089#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1
2091static const PROGMEM IRMP_PARAMETER merlin_param =
2115#if IRMP_SUPPORT_ORTEK_PROTOCOL == 1
2117static const PROGMEM IRMP_PARAMETER ortek_param =
2141#if IRMP_SUPPORT_ROOMBA_PROTOCOL == 1
2143static const PROGMEM IRMP_PARAMETER roomba_param =
2166#if IRMP_SUPPORT_RCMM_PROTOCOL == 1
2168static const PROGMEM IRMP_PARAMETER rcmm_param =
2192#if IRMP_SUPPORT_PENTAX_PROTOCOL == 1
2194static const PROGMEM IRMP_PARAMETER pentax_param =
2217#if IRMP_SUPPORT_ACP24_PROTOCOL == 1
2219static const PROGMEM IRMP_PARAMETER acp24_param =
2242#if IRMP_SUPPORT_METZ_PROTOCOL == 1
2244static const PROGMEM IRMP_PARAMETER metz_param =
2267#if IRMP_SUPPORT_RADIO1_PROTOCOL == 1
2269static const PROGMEM IRMP_PARAMETER radio1_param =
2293static uint_fast8_t irmp_bit;
2294static IRMP_PARAMETER irmp_param;
2296#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)
2297static IRMP_PARAMETER irmp_param2;
2300static volatile uint_fast8_t irmp_ir_detected =
FALSE;
2301static volatile uint_fast8_t irmp_protocol;
2302static volatile uint_fast16_t irmp_address;
2304static volatile uint_fast32_t irmp_command;
2306static volatile uint_fast16_t irmp_command;
2308static volatile uint_fast16_t irmp_id;
2309static volatile uint_fast8_t irmp_flags;
2312#if defined(__MBED__)
2320static uint_fast8_t IRMP_PIN;
2321static uint_fast8_t radio;
2333#if defined(PIC_CCS) || defined(PIC_C18)
2334#elif defined (ARM_STM32_HAL)
2335#elif defined (ARM_STM32)
2336 GPIO_InitTypeDef GPIO_InitStructure;
2339# if defined (ARM_STM32L1XX)
2340 RCC_AHBPeriphClockCmd(IRMP_PORT_RCC, ENABLE);
2341# elif defined (ARM_STM32F10X)
2342 RCC_APB2PeriphClockCmd(IRMP_PORT_RCC, ENABLE);
2343# elif defined (ARM_STM32F4XX)
2344 RCC_AHB1PeriphClockCmd(IRMP_PORT_RCC, ENABLE);
2348 GPIO_InitStructure.GPIO_Pin = IRMP_BIT;
2349# if defined (ARM_STM32L1XX) || defined (ARM_STM32F4XX)
2350 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
2351 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
2352 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
2353 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
2354# elif defined (ARM_STM32F10X)
2355 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
2356 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
2358 GPIO_Init(IRMP_PORT, &GPIO_InitStructure);
2360#elif defined(STELLARIS_ARM_CORTEX_M4)
2362 ROM_SysCtlPeripheralEnable(IRMP_PORT_PERIPH);
2365 ROM_GPIODirModeSet(IRMP_PORT_BASE, IRMP_PORT_PIN, GPIO_DIR_MODE_IN);
2366 ROM_GPIOPadConfigSet(IRMP_PORT_BASE, IRMP_PORT_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
2368#elif defined(__SDCC_stm8)
2369 IRMP_GPIO_STRUCT->DDR &= ~(1<<IRMP_BIT);
2370 IRMP_GPIO_STRUCT->CR1 |= (1<<IRMP_BIT);
2372#elif defined (TEENSY_ARM_CORTEX_M4)
2373 pinMode(IRMP_PIN, INPUT);
2375#elif defined(__xtensa__)
2376 pinMode(IRMP_BIT_NUMBER, INPUT);
2378# if (IRMP_BIT_NUMBER == 12)
2379 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
2384# warning Please add PIN_FUNC_SELECT when necessary.
2386 GPIO_DIS_OUTPUT(IRMP_BIT_NUMBER);
2388#elif defined(__MBED__)
2389 gpio_init_in_ex(&gpioIRin, IRMP_PIN, IRMP_PINMODE);
2391#elif defined(_CHIBIOS_HAL_)
2395 IRMP_PORT &= ~(1<<IRMP_BIT);
2396 IRMP_DDR &= ~(1<<IRMP_BIT);
2399#if IRMP_LOGGING == 1
2414 uint_fast8_t rtc =
FALSE;
2415#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1
2416 uint_fast8_t cmd_len = 0;
2419 if (irmp_ir_detected)
2421 switch (irmp_protocol)
2423#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
2425 if ((irmp_command >> 8) == (~irmp_command & 0x00FF))
2427 irmp_command &= 0xff;
2428 irmp_command |= irmp_id << 8;
2433#if IRMP_SUPPORT_SAMSUNG48_PROTOCOL == 1
2435 irmp_command = (irmp_command & 0x00FF) | ((irmp_id & 0x00FF) << 8);
2441#if IRMP_SUPPORT_NEC_PROTOCOL == 1
2443 if ((irmp_command >> 8) == (~irmp_command & 0x00FF))
2445 irmp_command &= 0xff;
2448 else if (irmp_address == 0x87EE)
2454 irmp_address = (irmp_command & 0xFF00) >> 8;
2455 irmp_command &= 0x00FF;
2470#if IRMP_SUPPORT_NEC_PROTOCOL == 1
2472 if ((irmp_command >> 8) == (irmp_command & 0x00FF))
2474 irmp_command &= 0xff;
2480#if IRMP_SUPPORT_BOSE_PROTOCOL == 1
2482 if ((irmp_command >> 8) == (~irmp_command & 0x00FF))
2484 irmp_command &= 0xff;
2490#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1
2496 else if (irmp_bit >= 19 && ((irmp_bit - 3) % 8 == 0))
2498 if (((irmp_command >> 1) & 1) != (irmp_command & 1))
2501 irmp_command |= ((irmp_address & 1) << (irmp_bit - 12));
2503 cmd_len = (irmp_bit - 11) >> 3;
2510#if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1
2513 if (((irmp_command >> 1) & 0x0001) == (~irmp_command & 0x0001))
2520#if IRMP_SUPPORT_KATHREIN_PROTOCOL == 1
2522 if (irmp_command != 0x0000)
2528#if IRMP_SUPPORT_RC5_PROTOCOL == 1
2530 irmp_address &= ~0x20;
2534#if IRMP_SUPPORT_S100_PROTOCOL == 1
2536 irmp_address &= ~0x20;
2540#if IRMP_SUPPORT_IR60_PROTOCOL == 1
2542 if (irmp_command != 0x007d)
2554#if IRMP_SUPPORT_RCCAR_PROTOCOL == 1
2559 irmp_address = (irmp_command & 0x000C) >> 2;
2560 irmp_command = ((irmp_command & 0x1000) >> 2) |
2561 ((irmp_command & 0x0003) << 8) |
2562 ((irmp_command & 0x0FF0) >> 4);
2567#if IRMP_SUPPORT_NETBOX_PROTOCOL == 1
2569 if (irmp_command & 0x1000)
2571 if ((irmp_command & 0x1f) == 0x15)
2574 irmp_command &= 0x7F;
2577 else if ((irmp_command & 0x1f) == 0x10)
2580 irmp_command |= 0x80;
2598#if IRMP_SUPPORT_LEGO_PROTOCOL == 1
2601 uint_fast8_t crc = 0x0F ^ ((irmp_command & 0xF000) >> 12) ^ ((irmp_command & 0x0F00) >> 8) ^ ((irmp_command & 0x00F0) >> 4);
2603 if ((irmp_command & 0x000F) == crc)
2619#if IRMP_SUPPORT_METZ_PROTOCOL == 1
2621 irmp_address &= ~0x40;
2622 if (((~irmp_address) & 0x07) == (irmp_address >> 3) && ((~irmp_command) & 0x3f) == (irmp_command >> 6))
2639 irmp_data_p->
protocol = irmp_protocol;
2640 irmp_data_p->
address = irmp_address;
2641 irmp_data_p->
command = irmp_command;
2642 irmp_data_p->
flags = irmp_flags;
2643#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1
2644 irmp_data_p->
flags |= cmd_len;
2656 irmp_ir_detected =
FALSE;
2662#if IRMP_USE_CALLBACK == 1
2664irmp_set_callback_ptr (
void (*cb)(uint_fast8_t))
2666 irmp_callback_ptr = cb;
2671static uint_fast16_t irmp_tmp_address;
2673static uint_fast32_t irmp_tmp_command;
2675static uint_fast16_t irmp_tmp_command;
2678#if (IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)) || IRMP_SUPPORT_NEC42_PROTOCOL == 1
2679static uint_fast16_t irmp_tmp_address2;
2680static uint_fast16_t irmp_tmp_command2;
2683#if IRMP_SUPPORT_LGAIR_PROTOCOL == 1
2684static uint_fast16_t irmp_lgair_address;
2685static uint_fast16_t irmp_lgair_command;
2688#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
2689static uint_fast16_t irmp_tmp_id;
2691#if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1
2692static uint8_t xor_check[6];
2693static uint_fast8_t genre2;
2696#if IRMP_SUPPORT_ORTEK_PROTOCOL == 1
2697static uint_fast8_t parity;
2700#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1
2701static uint_fast8_t check;
2702static uint_fast8_t mitsu_parity;
2715irmp_store_bit (uint_fast8_t value)
2717#if IRMP_SUPPORT_ACP24_PROTOCOL == 1
2734 case 0: irmp_tmp_command |= (1<<15);
break;
2735 case 2: irmp_tmp_command |= (1<<13);
break;
2736 case 3: irmp_tmp_command |= (1<<12);
break;
2737 case 4: irmp_tmp_command |= (1<<10);
break;
2738 case 5: irmp_tmp_command |= (1<< 9);
break;
2739 case 6: irmp_tmp_command |= (1<< 8);
break;
2740 case 20: irmp_tmp_command |= (1<< 6);
break;
2741 case 22: irmp_tmp_command |= (1<<11);
break;
2742 case 23: irmp_tmp_command |= (1<< 7);
break;
2743 case 24: irmp_tmp_command |= (1<<14);
break;
2744 case 26: irmp_tmp_command |= (1<< 5);
break;
2745 case 44: irmp_tmp_command |= (1<< 4);
break;
2746 case 66: irmp_tmp_command |= (1<< 3);
break;
2747 case 67: irmp_tmp_command |= (1<< 2);
break;
2748 case 68: irmp_tmp_command |= (1<< 1);
break;
2749 case 69: irmp_tmp_command |= (1<< 0);
break;
2756#if IRMP_SUPPORT_ORTEK_PROTOCOL == 1
2766 else if (irmp_bit == 14)
2798#if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1
2806 if (irmp_bit >= irmp_param.address_offset && irmp_bit < irmp_param.address_end)
2808 if (irmp_param.lsb_first)
2810 irmp_tmp_address |= (((uint_fast16_t) (value)) << (irmp_bit - irmp_param.address_offset));
2814 irmp_tmp_address <<= 1;
2815 irmp_tmp_address |= value;
2818 else if (irmp_bit >= irmp_param.command_offset && irmp_bit < irmp_param.command_end)
2820 if (irmp_param.lsb_first)
2822#if IRMP_SUPPORT_SAMSUNG48_PROTOCOL == 1
2825 irmp_tmp_id |= (((uint_fast16_t) (value)) << (irmp_bit - 32));
2830 irmp_tmp_command |= (((uint_fast16_t) (value)) << (irmp_bit - irmp_param.command_offset));
2835 irmp_tmp_command <<= 1;
2836 irmp_tmp_command |= value;
2840#if IRMP_SUPPORT_LGAIR_PROTOCOL == 1
2845 irmp_lgair_address <<= 1;
2846 irmp_lgair_address |= value;
2848 else if (irmp_bit < 24)
2850 irmp_lgair_command <<= 1;
2851 irmp_lgair_command |= value;
2857#if IRMP_SUPPORT_NEC42_PROTOCOL == 1
2860 irmp_tmp_address2 |= (((uint_fast16_t) (value)) << (irmp_bit - 13));
2865#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
2873#if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1
2876 if (irmp_bit >= 20 && irmp_bit < 24)
2878 irmp_tmp_command |= (((uint_fast16_t) (value)) << (irmp_bit - 8));
2880 else if (irmp_bit >= 24 && irmp_bit < 28)
2882 genre2 |= (((uint_fast8_t) (value)) << (irmp_bit - 20));
2889 xor_check[irmp_bit / 8] |= 1 << (irmp_bit % 8);
2893 xor_check[irmp_bit / 8] &= ~(1 << (irmp_bit % 8));
2900#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1
2903 if (irmp_bit == 72 )
2907 check = irmp_tmp_address >> 8;
2910 if (check == (irmp_tmp_address & 0xFF))
2912 irmp_tmp_address <<= 8;
2919 check = irmp_tmp_command >> 8;
2921 if (check == (irmp_tmp_command & 0xFF))
2923 irmp_tmp_address |= irmp_tmp_command & 0xFF;
2929 irmp_tmp_command = 0;
2932 if (irmp_bit >= 72 )
2934 irmp_tmp_command <<= 1;
2935 irmp_tmp_command |= value;
2953#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)
2955irmp_store_bit2 (uint_fast8_t value)
2957 uint_fast8_t irmp_bit2;
2959 if (irmp_param.protocol)
2961 irmp_bit2 = irmp_bit - 2;
2965 irmp_bit2 = irmp_bit - 1;
2968 if (irmp_bit2 >= irmp_param2.address_offset && irmp_bit2 < irmp_param2.address_end)
2970 irmp_tmp_address2 |= (((uint_fast16_t) (value)) << (irmp_bit2 - irmp_param2.address_offset));
2972 else if (irmp_bit2 >= irmp_param2.command_offset && irmp_bit2 < irmp_param2.command_end)
2974 irmp_tmp_command2 |= (((uint_fast16_t) (value)) << (irmp_bit2 - irmp_param2.command_offset));
2980static uint32_t s_curSample;
2981static uint32_t s_startBitSample;
2992 static uint_fast8_t irmp_start_bit_detected;
2993 static uint_fast8_t wait_for_space;
2994 static uint_fast8_t wait_for_start_space;
2995 static uint_fast8_t irmp_pulse_time;
2997 static uint_fast16_t last_irmp_address = 0xFFFF;
2999 static uint_fast32_t last_irmp_command = 0xFFFFFFFF;
3001 static uint_fast16_t last_irmp_command = 0xFFFF;
3003 static uint_fast16_t key_repetition_len;
3004 static uint_fast8_t repetition_frame_number;
3005#if IRMP_SUPPORT_DENON_PROTOCOL == 1
3006 static uint_fast16_t last_irmp_denon_command;
3007 static uint_fast16_t denon_repetition_len = 0xFFFF;
3009#if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_S100_PROTOCOL == 1
3010 static uint_fast8_t rc5_cmd_bit6;
3012#if IRMP_SUPPORT_MANCHESTER == 1
3015#if IRMP_SUPPORT_MANCHESTER == 1 || IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
3016 static uint_fast8_t last_value;
3018#if IRMP_SUPPORT_RCII_PROTOCOL == 1
3019 static uint_fast8_t waiting_for_2nd_pulse = 0;
3021 uint_fast8_t irmp_input;
3026 static uint_fast8_t last_irmp_start_bit_detected = 0xFF;
3027 static uint_fast8_t last_irmp_pulse_time = 0xFF;
3029 if (last_irmp_start_bit_detected != irmp_start_bit_detected || last_irmp_pulse_time != irmp_pulse_time)
3031 last_irmp_start_bit_detected = irmp_start_bit_detected;
3032 last_irmp_pulse_time = irmp_pulse_time;
3034 printf (
"%d %d %d\n", time_counter, irmp_start_bit_detected, irmp_pulse_time);
3041#if defined(__SDCC_stm8)
3042 irmp_input =
input(IRMP_GPIO_STRUCT->IDR)
3043#elif defined(__MBED__)
3045 irmp_input = gpio_read (&gpioIRin);
3047 irmp_input =
input(IRMP_PIN);
3050#if IRMP_USE_CALLBACK == 1
3051 if (irmp_callback_ptr)
3053 static uint_fast8_t last_inverted_input;
3055 if (last_inverted_input != !irmp_input)
3057 (*irmp_callback_ptr) (! irmp_input);
3058 last_inverted_input = !irmp_input;
3065 if (! irmp_ir_detected)
3067 if (! irmp_start_bit_detected)
3073 if (! irmp_pulse_time)
3075 s_startBitSample = s_curSample;
3076 ANALYZE_PRINTF(
"%8.3fms [starting pulse]\n", (
double) (time_counter * 1000) / F_INTERRUPTS);
3083 if (irmp_pulse_time)
3085 irmp_start_bit_detected = 1;
3086 wait_for_start_space = 1;
3088 irmp_tmp_command = 0;
3089 irmp_tmp_address = 0;
3090#if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1
3093#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
3097#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) || IRMP_SUPPORT_NEC42_PROTOCOL == 1
3098 irmp_tmp_command2 = 0;
3099 irmp_tmp_address2 = 0;
3101#if IRMP_SUPPORT_LGAIR_PROTOCOL == 1
3102 irmp_lgair_command = 0;
3103 irmp_lgair_address = 0;
3106 irmp_pause_time = 1;
3107#if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_S100_PROTOCOL == 1
3113 if (key_repetition_len < 0xFFFF)
3115 key_repetition_len++;
3117#if IRMP_SUPPORT_DENON_PROTOCOL == 1
3118 if (denon_repetition_len < 0xFFFF)
3120 denon_repetition_len++;
3125 ANALYZE_PRINTF (
"%8.3fms warning: did not receive inverted command repetition\n",
3126 (
double) (time_counter * 1000) / F_INTERRUPTS);
3128 last_irmp_denon_command = 0;
3129 denon_repetition_len = 0xFFFF;
3139 if (wait_for_start_space)
3145#if IRMP_SUPPORT_NIKON_PROTOCOL == 1
3147 irmp_pause_time > IRMP_TIMEOUT_NIKON_LEN)
3152#if IRMP_SUPPORT_JVC_PROTOCOL == 1
3161 ANALYZE_PRINTF (
"%8.3fms error 1: pause after start bit pulse %d too long: %d\n", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_pulse_time, irmp_pause_time);
3166 irmp_start_bit_detected = 0;
3167 irmp_pulse_time = 0;
3168 irmp_pause_time = 0;
3173 IRMP_PARAMETER * irmp_param_p;
3174 irmp_param_p = (IRMP_PARAMETER *) 0;
3176#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)
3177 irmp_param2.protocol = 0;
3181 ANALYZE_PRINTF (
"%8.3fms [start-bit: pulse = %2d, pause = %2d]\n", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_pulse_time, irmp_pause_time);
3184#if IRMP_SUPPORT_SIRCS_PROTOCOL == 1
3189 ANALYZE_PRINTF (
"protocol = SIRCS, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3193 irmp_param_p = (IRMP_PARAMETER *) &sircs_param;
3198#if IRMP_SUPPORT_JVC_PROTOCOL == 1
3204 ANALYZE_PRINTF (
"protocol = NEC or JVC (type 1) repeat frame, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3208 irmp_param_p = (IRMP_PARAMETER *) &nec_param;
3213#if IRMP_SUPPORT_NEC_PROTOCOL == 1
3217#if IRMP_SUPPORT_NEC42_PROTOCOL == 1
3219 ANALYZE_PRINTF (
"protocol = NEC42, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3223 irmp_param_p = (IRMP_PARAMETER *) &nec42_param;
3226 ANALYZE_PRINTF (
"protocol = NEC, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3230 irmp_param_p = (IRMP_PARAMETER *) &nec_param;
3236#if IRMP_SUPPORT_JVC_PROTOCOL == 1
3240 ANALYZE_PRINTF (
"protocol = JVC repeat frame type 2, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3244 irmp_param_p = (IRMP_PARAMETER *) &nec_param;
3250 ANALYZE_PRINTF (
"protocol = NEC (repetition frame), start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3255 irmp_param_p = (IRMP_PARAMETER *) &nec_rep_param;
3260#if IRMP_SUPPORT_JVC_PROTOCOL == 1
3266 ANALYZE_PRINTF (
"protocol = JVC repeat frame type 3, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3270 irmp_param_p = (IRMP_PARAMETER *) &nec_param;
3277#if IRMP_SUPPORT_TELEFUNKEN_PROTOCOL == 1
3282 ANALYZE_PRINTF (
"protocol = TELEFUNKEN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3286 irmp_param_p = (IRMP_PARAMETER *) &telefunken_param;
3291#if IRMP_SUPPORT_ROOMBA_PROTOCOL == 1
3296 ANALYZE_PRINTF (
"protocol = ROOMBA, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3300 irmp_param_p = (IRMP_PARAMETER *) &roomba_param;
3305#if IRMP_SUPPORT_ACP24_PROTOCOL == 1
3310 ANALYZE_PRINTF (
"protocol = ACP24, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3314 irmp_param_p = (IRMP_PARAMETER *) &acp24_param;
3319#if IRMP_SUPPORT_PENTAX_PROTOCOL == 1
3324 ANALYZE_PRINTF (
"protocol = PENTAX, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3328 irmp_param_p = (IRMP_PARAMETER *) &pentax_param;
3333#if IRMP_SUPPORT_NIKON_PROTOCOL == 1
3338 ANALYZE_PRINTF (
"protocol = NIKON, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3342 irmp_param_p = (IRMP_PARAMETER *) &nikon_param;
3347#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
3352 ANALYZE_PRINTF (
"protocol = SAMSUNG, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3356 irmp_param_p = (IRMP_PARAMETER *) &samsung_param;
3361#if IRMP_SUPPORT_SAMSUNGAH_PROTOCOL == 1
3366 ANALYZE_PRINTF (
"protocol = SAMSUNGAH, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3370 irmp_param_p = (IRMP_PARAMETER *) &samsungah_param;
3375#if IRMP_SUPPORT_MATSUSHITA_PROTOCOL == 1
3380 ANALYZE_PRINTF (
"protocol = MATSUSHITA, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3384 irmp_param_p = (IRMP_PARAMETER *) &matsushita_param;
3389#if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1
3394 ANALYZE_PRINTF (
"protocol = KASEIKYO, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3398 irmp_param_p = (IRMP_PARAMETER *) &kaseikyo_param;
3403#if IRMP_SUPPORT_PANASONIC_PROTOCOL == 1
3408 ANALYZE_PRINTF (
"protocol = PANASONIC, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3412 irmp_param_p = (IRMP_PARAMETER *) &panasonic_param;
3417#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1
3422 ANALYZE_PRINTF (
"protocol = MITSU_HEAVY, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3426 irmp_param_p = (IRMP_PARAMETER *) &mitsu_heavy_param;
3431#if IRMP_SUPPORT_VINCENT_PROTOCOL == 1
3436 ANALYZE_PRINTF (
"protocol = VINCENT, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3440 irmp_param_p = (IRMP_PARAMETER *) &vincent_param;
3445#if IRMP_SUPPORT_METZ_PROTOCOL == 1
3450 ANALYZE_PRINTF (
"protocol = METZ, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3454 irmp_param_p = (IRMP_PARAMETER *) &metz_param;
3459#if IRMP_SUPPORT_RADIO1_PROTOCOL == 1
3464 ANALYZE_PRINTF (
"protocol = RADIO1, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3468 irmp_param_p = (IRMP_PARAMETER *) &radio1_param;
3473#if IRMP_SUPPORT_RECS80_PROTOCOL == 1
3478 ANALYZE_PRINTF (
"protocol = RECS80, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3482 irmp_param_p = (IRMP_PARAMETER *) &recs80_param;
3487#if IRMP_SUPPORT_S100_PROTOCOL == 1
3494 ANALYZE_PRINTF (
"protocol = S100, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or pulse: %3d - %3d, pause: %3d - %3d\n",
3501 irmp_param_p = (IRMP_PARAMETER *) &s100_param;
3502 last_pause = irmp_pause_time;
3508 rc5_cmd_bit6 = 1<<6;
3518#if IRMP_SUPPORT_RC5_PROTOCOL == 1
3524#if IRMP_SUPPORT_FDC_PROTOCOL == 1
3530 ANALYZE_PRINTF (
"FDC start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3533 ANALYZE_PRINTF (
"RC5 start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3537 memcpy_P (&irmp_param2, &fdc_param,
sizeof (IRMP_PARAMETER));
3542#if IRMP_SUPPORT_RCCAR_PROTOCOL == 1
3548 ANALYZE_PRINTF (
"RCCAR start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3551 ANALYZE_PRINTF (
"RC5 start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3555 memcpy_P (&irmp_param2, &rccar_param,
sizeof (IRMP_PARAMETER));
3561 ANALYZE_PRINTF (
"protocol = RC5, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or pulse: %3d - %3d, pause: %3d - %3d\n",
3569 irmp_param_p = (IRMP_PARAMETER *) &rc5_param;
3570 last_pause = irmp_pause_time;
3576 rc5_cmd_bit6 = 1<<6;
3586#if IRMP_SUPPORT_RCII_PROTOCOL == 1
3591 ANALYZE_PRINTF (
"protocol = RCII, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3595 irmp_param_p = (IRMP_PARAMETER *) &rcii_param;
3596 last_pause = irmp_pause_time;
3597 waiting_for_2nd_pulse = 1;
3603#if IRMP_SUPPORT_DENON_PROTOCOL == 1
3609 ANALYZE_PRINTF (
"protocol = DENON, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or %3d - %3d\n",
3614 irmp_param_p = (IRMP_PARAMETER *) &denon_param;
3619#if IRMP_SUPPORT_THOMSON_PROTOCOL == 1
3625 ANALYZE_PRINTF (
"protocol = THOMSON, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or %3d - %3d\n",
3630 irmp_param_p = (IRMP_PARAMETER *) &thomson_param;
3635#if IRMP_SUPPORT_BOSE_PROTOCOL == 1
3640 ANALYZE_PRINTF (
"protocol = BOSE, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3644 irmp_param_p = (IRMP_PARAMETER *) &bose_param;
3649#if IRMP_SUPPORT_RC6_PROTOCOL == 1
3654 ANALYZE_PRINTF (
"protocol = RC6, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3658 irmp_param_p = (IRMP_PARAMETER *) &rc6_param;
3665#if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1
3670 ANALYZE_PRINTF (
"protocol = RECS80EXT, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3674 irmp_param_p = (IRMP_PARAMETER *) &recs80ext_param;
3679#if IRMP_SUPPORT_NUBERT_PROTOCOL == 1
3684 ANALYZE_PRINTF (
"protocol = NUBERT, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3688 irmp_param_p = (IRMP_PARAMETER *) &nubert_param;
3693#if IRMP_SUPPORT_FAN_PROTOCOL == 1
3698 ANALYZE_PRINTF (
"protocol = FAN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3702 irmp_param_p = (IRMP_PARAMETER *) &fan_param;
3707#if IRMP_SUPPORT_SPEAKER_PROTOCOL == 1
3712 ANALYZE_PRINTF (
"protocol = SPEAKER, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3716 irmp_param_p = (IRMP_PARAMETER *) &speaker_param;
3721#if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
3727 ANALYZE_PRINTF (
"start bit 1 timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3730 ANALYZE_PRINTF (
"start bit 2 timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3733 ANALYZE_PRINTF (
"start bit 3 timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3736 ANALYZE_PRINTF (
"start bit 4 timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3740 irmp_param_p = (IRMP_PARAMETER *) &bang_olufsen_param;
3746#if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1
3751 ANALYZE_PRINTF (
"protocol = GRUNDIG, pre bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3755 irmp_param_p = (IRMP_PARAMETER *) &grundig_param;
3756 last_pause = irmp_pause_time;
3762#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1
3767 ANALYZE_PRINTF (
"protocol = MERLIN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3771 irmp_param_p = (IRMP_PARAMETER *) &merlin_param;
3772 last_pause = irmp_pause_time;
3778#if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1
3785 ANALYZE_PRINTF (
"protocol = RUWIDO, start bit timings: pulse: %3d - %3d or %3d - %3d, pause: %3d - %3d or %3d - %3d\n",
3791 irmp_param_p = (IRMP_PARAMETER *) &ruwido_param;
3792 last_pause = irmp_pause_time;
3798#if IRMP_SUPPORT_FDC_PROTOCOL == 1
3803 ANALYZE_PRINTF (
"protocol = FDC, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3807 irmp_param_p = (IRMP_PARAMETER *) &fdc_param;
3812#if IRMP_SUPPORT_RCCAR_PROTOCOL == 1
3817 ANALYZE_PRINTF (
"protocol = RCCAR, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3821 irmp_param_p = (IRMP_PARAMETER *) &rccar_param;
3826#if IRMP_SUPPORT_KATHREIN_PROTOCOL == 1
3831 ANALYZE_PRINTF (
"protocol = KATHREIN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3835 irmp_param_p = (IRMP_PARAMETER *) &kathrein_param;
3840#if IRMP_SUPPORT_NETBOX_PROTOCOL == 1
3845 ANALYZE_PRINTF (
"protocol = NETBOX, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3849 irmp_param_p = (IRMP_PARAMETER *) &netbox_param;
3854#if IRMP_SUPPORT_LEGO_PROTOCOL == 1
3859 ANALYZE_PRINTF (
"protocol = LEGO, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3863 irmp_param_p = (IRMP_PARAMETER *) &lego_param;
3868#if IRMP_SUPPORT_IRMP16_PROTOCOL == 1
3873 ANALYZE_PRINTF (
"protocol = IRMP16, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3877 irmp_param_p = (IRMP_PARAMETER *) &irmp16_param;
3882#if IRMP_SUPPORT_GREE_PROTOCOL == 1
3887 ANALYZE_PRINTF (
"protocol = GREE, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3891 irmp_param_p = (IRMP_PARAMETER *) &gree_param;
3896#if IRMP_SUPPORT_A1TVBOX_PROTOCOL == 1
3901 ANALYZE_PRINTF (
"protocol = A1TVBOX, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3905 irmp_param_p = (IRMP_PARAMETER *) &a1tvbox_param;
3912#if IRMP_SUPPORT_ORTEK_PROTOCOL == 1
3917 ANALYZE_PRINTF (
"protocol = ORTEK, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3921 irmp_param_p = (IRMP_PARAMETER *) &ortek_param;
3929#if IRMP_SUPPORT_RCMM_PROTOCOL == 1
3934 ANALYZE_PRINTF (
"protocol = RCMM, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3938 irmp_param_p = (IRMP_PARAMETER *) &rcmm_param;
3946 irmp_start_bit_detected = 0;
3949 if (irmp_start_bit_detected)
3951 memcpy_P (&irmp_param, irmp_param_p,
sizeof (IRMP_PARAMETER));
3956 ANALYZE_PRINTF (
"pulse_1: %3d - %3d\n", irmp_param.pulse_1_len_min, irmp_param.pulse_1_len_max);
3957 ANALYZE_PRINTF (
"pause_1: %3d - %3d\n", irmp_param.pause_1_len_min, irmp_param.pause_1_len_max);
3963 ANALYZE_PRINTF (
"pulse: %3d - %3d or %3d - %3d\n", irmp_param.pulse_1_len_min, irmp_param.pulse_1_len_max,
3964 2 * irmp_param.pulse_1_len_min, 2 * irmp_param.pulse_1_len_max);
3965 ANALYZE_PRINTF (
"pause: %3d - %3d or %3d - %3d\n", irmp_param.pause_1_len_min, irmp_param.pause_1_len_max,
3966 2 * irmp_param.pause_1_len_min, 2 * irmp_param.pause_1_len_max);
3970#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)
3971 if (irmp_param2.protocol)
3974 ANALYZE_PRINTF (
"pulse_0: %3d - %3d\n", irmp_param2.pulse_0_len_min, irmp_param2.pulse_0_len_max);
3975 ANALYZE_PRINTF (
"pause_0: %3d - %3d\n", irmp_param2.pause_0_len_min, irmp_param2.pause_0_len_max);
3976 ANALYZE_PRINTF (
"pulse_1: %3d - %3d\n", irmp_param2.pulse_1_len_min, irmp_param2.pulse_1_len_max);
3977 ANALYZE_PRINTF (
"pause_1: %3d - %3d\n", irmp_param2.pause_1_len_min, irmp_param2.pause_1_len_max);
3983#if IRMP_SUPPORT_RC6_PROTOCOL == 1
3995 ANALYZE_PRINTF (
"pulse_0: %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);
3996 ANALYZE_PRINTF (
"pause_0: %3d - %3d\n", irmp_param.pause_0_len_min, irmp_param.pause_0_len_max);
4002 ANALYZE_PRINTF (
"pulse: %3d - %3d or %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max,
4003 2 * irmp_param.pulse_0_len_min, 2 * irmp_param.pulse_0_len_max);
4004 ANALYZE_PRINTF (
"pause: %3d - %3d or %3d - %3d\n", irmp_param.pause_0_len_min, irmp_param.pause_0_len_max,
4005 2 * irmp_param.pause_0_len_min, 2 * irmp_param.pause_0_len_max);
4010#if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
4013 ANALYZE_PRINTF (
"pulse_r: %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);
4018 ANALYZE_PRINTF (
"command_offset: %2d\n", irmp_param.command_offset);
4019 ANALYZE_PRINTF (
"command_len: %3d\n", irmp_param.command_end - irmp_param.command_offset);
4027#if IRMP_SUPPORT_MANCHESTER == 1
4033 if (irmp_pause_time > irmp_param.pulse_1_len_max && irmp_pause_time <= 2 * irmp_param.pulse_1_len_max)
4036 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4042 else if (! last_value)
4045 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4055#if IRMP_SUPPORT_SERIAL == 1
4064#if IRMP_SUPPORT_DENON_PROTOCOL == 1
4068 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4090#if IRMP_SUPPORT_THOMSON_PROTOCOL == 1
4094 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4120 irmp_pulse_time = 1;
4121 irmp_pause_time = 0;
4122 wait_for_start_space = 0;
4125 else if (wait_for_space)
4127 uint_fast8_t got_light =
FALSE;
4131 if (irmp_bit == irmp_param.complete_len && irmp_param.stop_bit == 1)
4140 (irmp_pulse_time >= irmp_param.pulse_0_len_min && irmp_pulse_time <= irmp_param.pulse_0_len_max))
4148 irmp_param.stop_bit = 0;
4153 ANALYZE_PRINTF (
"error: stop bit timing wrong, irmp_bit = %d, irmp_pulse_time = %d, pulse_0_len_min = %d, pulse_0_len_max = %d\n",
4154 irmp_bit, irmp_pulse_time, irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);
4156 irmp_start_bit_detected = 0;
4157 irmp_pulse_time = 0;
4158 irmp_pause_time = 0;
4165#if IRMP_SUPPORT_SIRCS_PROTOCOL == 1
4170 irmp_param.complete_len = irmp_bit + 1;
4173 irmp_param.command_end = irmp_param.command_offset + irmp_bit + 1;
4178#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1
4183 irmp_param.complete_len = irmp_bit;
4189#if IRMP_SUPPORT_FAN_PROTOCOL == 1
4210#if IRMP_SUPPORT_SERIAL == 1
4219#if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1
4222 if (irmp_pause_time >
IR60_TIMEOUT_LEN && (irmp_bit == 5 || irmp_bit == 6))
4228 irmp_param.stop_bit =
TRUE;
4237 irmp_tmp_command <<= 1;
4238 irmp_tmp_command |= first_bit;
4244 irmp_param.stop_bit =
TRUE;
4249 ANALYZE_PRINTF (
"Switching to NOKIA protocol, irmp_bit = %d\n", irmp_bit);
4257 if (irmp_tmp_command & 0x300)
4259 irmp_tmp_address = (irmp_tmp_command >> 8);
4260 irmp_tmp_command &= 0xFF;
4266#if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1
4273 irmp_param.stop_bit =
TRUE;
4289 irmp_tmp_address <<= 2;
4290 irmp_tmp_address |= (irmp_tmp_command >> 6);
4291 irmp_tmp_command &= 0x003F;
4293 irmp_tmp_command |= last_value;
4298#if IRMP_SUPPORT_ROOMBA_PROTOCOL == 1
4315#if IRMP_SUPPORT_MANCHESTER == 1
4317 irmp_pause_time >= 2 * irmp_param.pause_1_len_max && irmp_bit >= irmp_param.complete_len - 2 && !irmp_param.stop_bit)
4320 irmp_param.stop_bit =
TRUE;
4326 if (irmp_bit == irmp_param.complete_len - 1 && irmp_param.stop_bit == 0)
4330#if IRMP_SUPPORT_NEC_PROTOCOL == 1
4334 ANALYZE_PRINTF (
"Detected non-standard repetition frame, switching to NEC repetition\n");
4338 irmp_param.stop_bit =
TRUE;
4340 irmp_param.complete_len = irmp_bit;
4341 irmp_tmp_address = last_irmp_address;
4342 irmp_tmp_command = last_irmp_command;
4344 key_repetition_len = 0;
4349 ANALYZE_PRINTF (
"ignoring NEC repetition frame: timeout occured, key_repetition_len = %d > %d\n",
4352 irmp_ir_detected =
FALSE;
4356#if IRMP_SUPPORT_JVC_PROTOCOL == 1
4357 else if (irmp_param.protocol ==
IRMP_NEC_PROTOCOL && (irmp_bit == 16 || irmp_bit == 17))
4360 ANALYZE_PRINTF (
"Switching to JVC protocol, irmp_bit = %d\n", irmp_bit);
4362 irmp_param.stop_bit =
TRUE;
4364 irmp_param.complete_len = irmp_bit;
4365 irmp_tmp_command = (irmp_tmp_address >> 4);
4366 irmp_tmp_address = irmp_tmp_address & 0x000F;
4367 irmp_start_bit_detected = 1;
4370#if IRMP_SUPPORT_LGAIR_PROTOCOL == 1
4371 else if (irmp_param.protocol ==
IRMP_NEC_PROTOCOL && (irmp_bit == 28 || irmp_bit == 29))
4374 ANALYZE_PRINTF (
"Switching to LGAIR protocol, irmp_bit = %d\n", irmp_bit);
4376 irmp_param.stop_bit =
TRUE;
4378 irmp_param.complete_len = irmp_bit;
4379 irmp_tmp_command = irmp_lgair_command;
4380 irmp_tmp_address = irmp_lgair_address;
4381 irmp_start_bit_detected = 1;
4385#if IRMP_SUPPORT_NEC42_PROTOCOL == 1
4386#if IRMP_SUPPORT_NEC_PROTOCOL == 1
4392 irmp_param.stop_bit =
TRUE;
4394 irmp_param.complete_len = irmp_bit;
4399 irmp_tmp_address |= (irmp_tmp_address2 & 0x0007) << 13;
4400 irmp_tmp_command = (irmp_tmp_address2 >> 3) | (irmp_tmp_command << 10);
4403#if IRMP_SUPPORT_LGAIR_PROTOCOL == 1
4409 irmp_param.stop_bit =
TRUE;
4411 irmp_param.complete_len = irmp_bit;
4412 irmp_tmp_address = irmp_lgair_address;
4413 irmp_tmp_command = irmp_lgair_command;
4416#if IRMP_SUPPORT_JVC_PROTOCOL == 1
4417 else if (irmp_param.protocol ==
IRMP_NEC42_PROTOCOL && (irmp_bit == 16 || irmp_bit == 17))
4420 ANALYZE_PRINTF (
"Switching to JVC protocol, irmp_bit = %d\n", irmp_bit);
4422 irmp_param.stop_bit =
TRUE;
4424 irmp_param.complete_len = irmp_bit;
4429 irmp_tmp_command = (irmp_tmp_address >> 4) | (irmp_tmp_address2 << 9);
4430 irmp_tmp_address = irmp_tmp_address & 0x000F;
4435#if IRMP_SUPPORT_SAMSUNG48_PROTOCOL == 1
4448#if IRMP_SUPPORT_RCMM_PROTOCOL == 1
4453 irmp_tmp_command = (irmp_tmp_address & 0xFF);
4454 irmp_tmp_address >>= 8;
4457 ANALYZE_PRINTF (
"Switching to RCMM12 protocol, irmp_bit = %d\n", irmp_bit);
4464 ANALYZE_PRINTF (
"Switching to RCMM24 protocol, irmp_bit = %d\n", irmp_bit);
4468 irmp_param.stop_bit =
TRUE;
4469 irmp_param.complete_len = irmp_bit;
4473#if IRMP_SUPPORT_TECHNICS_PROTOCOL == 1
4477 ANALYZE_PRINTF (
"Switching to TECHNICS protocol, irmp_bit = %d\n", irmp_bit);
4487 irmp_tmp_address <<= 1;
4488 if (irmp_tmp_command & (1<<11))
4490 irmp_tmp_address |= 1;
4491 irmp_tmp_command &= ~(1<<11);
4494 if (irmp_tmp_command == ((~irmp_tmp_address) & 0x07FF))
4496 irmp_tmp_address = 0;
4499 irmp_param.complete_len = irmp_bit;
4507 irmp_start_bit_detected = 0;
4508 irmp_pulse_time = 0;
4509 irmp_pause_time = 0;
4516 ANALYZE_PRINTF (
"error 2: pause %d after data bit %d too long\n", irmp_pause_time, irmp_bit);
4519 irmp_start_bit_detected = 0;
4520 irmp_pulse_time = 0;
4521 irmp_pause_time = 0;
4534 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4537#if IRMP_SUPPORT_MANCHESTER == 1
4540#if IRMP_SUPPORT_MERLIN_PROTOCOL == 1
4543 if (last_value == 0)
4545 if (irmp_pulse_time >= 2 * irmp_param.pulse_1_len_min && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max &&
4546 last_pause >= irmp_param.pause_1_len_min && last_pause <= irmp_param.pulse_1_len_max)
4548 irmp_param.complete_len += 2;
4555 if (last_pause >= 2 * irmp_param.pause_1_len_min && last_pause <= 2 * irmp_param.pulse_1_len_max)
4557 if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max)
4559 irmp_param.complete_len++;
4562 else if (irmp_pulse_time >= 2 * irmp_param.pulse_1_len_min && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max)
4564 irmp_param.complete_len += 2;
4574 if (irmp_pulse_time > irmp_param.pulse_1_len_max )
4576 if (irmp_pulse_time > irmp_param.pulse_1_len_max && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max &&
4577 irmp_pause_time <= 2 * irmp_param.pause_1_len_max)
4580#if IRMP_SUPPORT_RC6_PROTOCOL == 1
4608#if IRMP_SUPPORT_RC6_PROTOCOL == 1
4616 if (irmp_pause_time > 2 * irmp_param.pause_1_len_max)
4636#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_RCII_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)
4637 if (! irmp_param2.protocol)
4648 else if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max
4651 uint_fast8_t manchester_value;
4653 if (last_pause > irmp_param.pause_1_len_max && last_pause <= 2 * irmp_param.pause_1_len_max)
4655 manchester_value = last_value ? 0 : 1;
4656 last_value = manchester_value;
4660 manchester_value = last_value;
4667#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)
4668 if (! irmp_param2.protocol)
4676#if IRMP_SUPPORT_RC6_PROTOCOL == 1
4677 if (irmp_param.protocol ==
IRMP_RC6_PROTOCOL && irmp_bit == 1 && manchester_value == 1)
4683 irmp_param.address_offset = 5;
4684 irmp_param.address_end = irmp_param.address_offset + 15;
4685 irmp_param.command_offset = irmp_param.address_end + 1;
4686 irmp_param.command_end = irmp_param.command_offset + 16 - 1;
4687 irmp_tmp_address = 0;
4691 irmp_store_bit (manchester_value);
4695#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_FDC_PROTOCOL == 1
4704 irmp_param.protocol = 0;
4708#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_RCCAR_PROTOCOL == 1
4717 irmp_param.protocol = 0;
4725 ANALYZE_PRINTF (
"error 3 manchester: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
4728 irmp_start_bit_detected = 0;
4729 irmp_pause_time = 0;
4733#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_FDC_PROTOCOL == 1
4741 irmp_store_bit2 (1);
4748 irmp_store_bit2 (0);
4751 if (! irmp_param.protocol)
4756 memcpy (&irmp_param, &irmp_param2,
sizeof (IRMP_PARAMETER));
4757 irmp_param2.protocol = 0;
4758 irmp_tmp_address = irmp_tmp_address2;
4759 irmp_tmp_command = irmp_tmp_command2;
4763#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_RCCAR_PROTOCOL == 1
4771 irmp_store_bit2 (1);
4778 irmp_store_bit2 (0);
4781 if (! irmp_param.protocol)
4786 memcpy (&irmp_param, &irmp_param2,
sizeof (IRMP_PARAMETER));
4787 irmp_param2.protocol = 0;
4788 irmp_tmp_address = irmp_tmp_address2;
4789 irmp_tmp_command = irmp_tmp_command2;
4794 last_pause = irmp_pause_time;
4800#if IRMP_SUPPORT_SERIAL == 1
4803 while (irmp_bit < irmp_param.complete_len && irmp_pulse_time > irmp_param.pulse_1_len_max)
4810 if (irmp_pulse_time >= irmp_param.pulse_1_len_min)
4812 irmp_pulse_time -= irmp_param.pulse_1_len_min;
4816 irmp_pulse_time = 0;
4820 while (irmp_bit < irmp_param.complete_len && irmp_pause_time > irmp_param.pause_1_len_max)
4827 if (irmp_pause_time >= irmp_param.pause_1_len_min)
4829 irmp_pause_time -= irmp_param.pause_1_len_min;
4833 irmp_pause_time = 0;
4844#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
4858#if IRMP_SUPPORT_SAMSUNG48_PROTOCOL == 1
4897 ANALYZE_PRINTF (
"error 3 Samsung: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
4900 irmp_start_bit_detected = 0;
4901 irmp_pause_time = 0;
4907#if IRMP_SUPPORT_NEC16_PROTOCOL
4908#if IRMP_SUPPORT_NEC42_PROTOCOL == 1
4916 ANALYZE_PRINTF (
"Switching to NEC16 protocol\n");
4918 irmp_param.protocol = IRMP_NEC16_PROTOCOL;
4919 irmp_param.address_offset = NEC16_ADDRESS_OFFSET;
4920 irmp_param.address_end = NEC16_ADDRESS_OFFSET + NEC16_ADDRESS_LEN;
4921 irmp_param.command_offset = NEC16_COMMAND_OFFSET;
4922 irmp_param.command_end = NEC16_COMMAND_OFFSET + NEC16_COMMAND_LEN;
4923 irmp_param.complete_len = NEC16_COMPLETE_DATA_LEN;
4929#
if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
4932 if (irmp_pulse_time >= BANG_OLUFSEN_PULSE_LEN_MIN && irmp_pulse_time <= BANG_OLUFSEN_PULSE_LEN_MAX)
4936 if (irmp_pause_time >= BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX)
4939 ANALYZE_PRINTF (
"3rd start bit\n");
4947 ANALYZE_PRINTF (
"error 3a B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
4948 ANALYZE_ONLY_NORMAL_PUTCHAR (
'\n');
4950 irmp_start_bit_detected = 0;
4951 irmp_pause_time = 0;
4954 else if (irmp_bit == 19)
4956 if (irmp_pause_time >= BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MAX)
4959 ANALYZE_PRINTF (
"trailer bit\n");
4967 ANALYZE_PRINTF (
"error 3b B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
4968 ANALYZE_ONLY_NORMAL_PUTCHAR (
'\n');
4970 irmp_start_bit_detected = 0;
4971 irmp_pause_time = 0;
4976 if (irmp_pause_time >= BANG_OLUFSEN_1_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_1_PAUSE_LEN_MAX)
4979 ANALYZE_PUTCHAR (
'1');
4986 else if (irmp_pause_time >= BANG_OLUFSEN_0_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_0_PAUSE_LEN_MAX)
4989 ANALYZE_PUTCHAR (
'0');
4996 else if (irmp_pause_time >= BANG_OLUFSEN_R_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_R_PAUSE_LEN_MAX)
4999 ANALYZE_PUTCHAR (last_value +
'0');
5002 irmp_store_bit (last_value);
5008 ANALYZE_PRINTF (
"error 3c B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
5009 ANALYZE_ONLY_NORMAL_PUTCHAR (
'\n');
5011 irmp_start_bit_detected = 0;
5012 irmp_pause_time = 0;
5019 ANALYZE_PRINTF (
"error 3d B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
5020 ANALYZE_ONLY_NORMAL_PUTCHAR (
'\n');
5022 irmp_start_bit_detected = 0;
5023 irmp_pause_time = 0;
5029#if IRMP_SUPPORT_RCMM_PROTOCOL == 1
5032 if (irmp_pause_time >= RCMM32_BIT_00_PAUSE_LEN_MIN && irmp_pause_time <= RCMM32_BIT_00_PAUSE_LEN_MAX)
5035 ANALYZE_PUTCHAR (
'0');
5036 ANALYZE_PUTCHAR (
'0');
5076 if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max &&
5077 irmp_pause_time >= irmp_param.pause_1_len_min && irmp_pause_time <= irmp_param.pause_1_len_max)
5086 else if (irmp_pulse_time >= irmp_param.pulse_0_len_min && irmp_pulse_time <= irmp_param.pulse_0_len_max &&
5087 irmp_pause_time >= irmp_param.pause_0_len_min && irmp_pause_time <= irmp_param.pause_0_len_max)
5097#if IRMP_SUPPORT_KATHREIN_PROTOCOL
5101 (((irmp_bit == 8 || irmp_bit == 6) &&
5114 irmp_tmp_command <<= 1;
5130 ANALYZE_PRINTF (
"error 3: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
5133 irmp_start_bit_detected = 0;
5134 irmp_pause_time = 0;
5137 irmp_pulse_time = 1;
5149 irmp_pause_time = 1;
5151#if IRMP_SUPPORT_RCII_PROTOCOL == 1
5154printf (
"fm: %d %d\n", irmp_pulse_time * 1000000 / F_INTERRUPTS,
RCII_BIT_LEN * 1000000 / F_INTERRUPTS);
5171 ANALYZE_PRINTF (
"RCII: got 2nd pulse, irmp_pulse_time = %d\n", irmp_pulse_time);
5173 waiting_for_2nd_pulse = 0;
5179 if (irmp_start_bit_detected && irmp_bit == irmp_param.complete_len && irmp_param.stop_bit == 0)
5183 repetition_frame_number++;
5187 repetition_frame_number = 0;
5190#if IRMP_SUPPORT_SIRCS_PROTOCOL == 1
5192 if (irmp_param.protocol ==
IRMP_SIRCS_PROTOCOL && (repetition_frame_number == 1 || repetition_frame_number == 2))
5195 ANALYZE_PRINTF (
"code skipped: SIRCS auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5198 key_repetition_len = 0;
5203#if IRMP_SUPPORT_ORTEK_PROTOCOL == 1
5208 ANALYZE_PRINTF (
"code skipped: ORTEK auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5211 key_repetition_len = 0;
5216#if 0 && IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1
5221 ANALYZE_PRINTF (
"code skipped: KASEIKYO auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5224 key_repetition_len = 0;
5229#if 0 && IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
5234 ANALYZE_PRINTF (
"code skipped: SAMSUNG32/SAMSUNG48 auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5237 key_repetition_len = 0;
5242#if IRMP_SUPPORT_NUBERT_PROTOCOL == 1
5247 ANALYZE_PRINTF (
"code skipped: NUBERT auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5250 key_repetition_len = 0;
5255#if IRMP_SUPPORT_SPEAKER_PROTOCOL == 1
5260 ANALYZE_PRINTF (
"code skipped: SPEAKER auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5263 key_repetition_len = 0;
5270 ANALYZE_PRINTF (
"%8.3fms code detected, length = %d\n", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit);
5272 irmp_ir_detected =
TRUE;
5274#if IRMP_SUPPORT_DENON_PROTOCOL == 1
5277 if ((~irmp_tmp_command & 0x3FF) == last_irmp_denon_command)
5279 irmp_tmp_command = last_irmp_denon_command;
5280 last_irmp_denon_command = 0;
5282 irmp_protocol = irmp_param.protocol;
5283 irmp_address = irmp_tmp_address;
5284 irmp_command = irmp_tmp_command;
5288 if ((irmp_tmp_command & 0x01) == 0x00)
5291 ANALYZE_PRINTF (
"%8.3fms info Denon: waiting for inverted command repetition\n", (
double) (time_counter * 1000) / F_INTERRUPTS);
5293 last_irmp_denon_command = irmp_tmp_command;
5294 denon_repetition_len = 0;
5295 irmp_ir_detected =
FALSE;
5300 ANALYZE_PRINTF (
"%8.3fms warning Denon: got unexpected inverted command, ignoring it\n", (
double) (time_counter * 1000) / F_INTERRUPTS);
5302 last_irmp_denon_command = 0;
5303 irmp_ir_detected =
FALSE;
5310#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
5316 irmp_ir_detected =
FALSE;
5321#if IRMP_SUPPORT_NOKIA_PROTOCOL == 1
5322 if (irmp_param.protocol ==
IRMP_NOKIA_PROTOCOL && irmp_tmp_address == 0x00ff && irmp_tmp_command == 0x00fe)
5327 irmp_ir_detected =
FALSE;
5332#if IRMP_SUPPORT_NEC_PROTOCOL == 1
5338 ANALYZE_PRINTF (
"Detected NEC repetition frame, key_repetition_len = %d\n", (
int)key_repetition_len);
5341 irmp_tmp_address = last_irmp_address;
5342 irmp_tmp_command = last_irmp_command;
5344 key_repetition_len = 0;
5349 ANALYZE_PRINTF (
"Detected NEC repetition frame, ignoring it: timeout occured, key_repetition_len = %d > %d\n",
5352 irmp_ir_detected =
FALSE;
5357#if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1
5360 uint_fast8_t xor_value;
5362 xor_value = (xor_check[0] & 0x0F) ^ ((xor_check[0] & 0xF0) >> 4) ^ (xor_check[1] & 0x0F) ^ ((xor_check[1] & 0xF0) >> 4);
5364 if (xor_value != (xor_check[2] & 0x0F))
5367 ANALYZE_PRINTF (
"error 4: wrong XOR check for customer id: 0x%1x 0x%1x\n", xor_value, xor_check[2] & 0x0F);
5369 irmp_ir_detected =
FALSE;
5372 xor_value = xor_check[2] ^ xor_check[3] ^ xor_check[4];
5374 if (xor_value != xor_check[5])
5377 ANALYZE_PRINTF (
"error 5: wrong XOR check for data bits: 0x%02x 0x%02x\n", xor_value, xor_check[5]);
5379 irmp_ir_detected =
FALSE;
5382 irmp_flags |= genre2;
5386#if IRMP_SUPPORT_ORTEK_PROTOCOL == 1
5394 irmp_ir_detected =
FALSE;
5397 if ((irmp_tmp_address & 0x03) == 0x02)
5400 ANALYZE_PRINTF (
"code skipped: ORTEK end of transmission frame (key release)\n");
5402 irmp_ir_detected =
FALSE;
5404 irmp_tmp_address >>= 2;
5408#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1
5411 check = irmp_tmp_command >> 8;
5413 if (check == (irmp_tmp_command & 0xFF)) {
5414 irmp_tmp_command &= 0xFF;
5422 irmp_ir_detected =
FALSE;
5427#if IRMP_SUPPORT_RC6_PROTOCOL == 1
5435 irmp_protocol = irmp_param.protocol;
5438#if IRMP_SUPPORT_FDC_PROTOCOL == 1
5441 if (irmp_tmp_command & 0x000F)
5443 irmp_tmp_command = (irmp_tmp_command >> 4) | 0x80;
5447 irmp_tmp_command >>= 4;
5449 irmp_tmp_command |= (irmp_tmp_address << 2) & 0x0F00;
5450 irmp_tmp_address &= 0x003F;
5454 irmp_address = irmp_tmp_address;
5455#if IRMP_SUPPORT_NEC_PROTOCOL == 1
5458 last_irmp_address = irmp_tmp_address;
5462#if IRMP_SUPPORT_RC5_PROTOCOL == 1
5465 irmp_tmp_command |= rc5_cmd_bit6;
5468#if IRMP_SUPPORT_S100_PROTOCOL == 1
5471 irmp_tmp_command |= rc5_cmd_bit6;
5474 irmp_command = irmp_tmp_command;
5476#if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
5477 irmp_id = irmp_tmp_id;
5482 if (irmp_ir_detected)
5484 if (last_irmp_command == irmp_tmp_command &&
5485 last_irmp_address == irmp_tmp_address &&
5491 last_irmp_address = irmp_tmp_address;
5492 last_irmp_command = irmp_tmp_command;
5494 key_repetition_len = 0;
5503 irmp_start_bit_detected = 0;
5504 irmp_tmp_command = 0;
5505 irmp_pulse_time = 0;
5506 irmp_pause_time = 0;
5508#if IRMP_SUPPORT_JVC_PROTOCOL == 1
5518#if defined(STELLARIS_ARM_CORTEX_M4)
5520 TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
5523#if (defined(_CHIBIOS_RT_) || defined(_CHIBIOS_NIL_)) && IRMP_USE_EVENT == 1
5524 if (IRMP_EVENT_THREAD_PTR != NULL && irmp_ir_detected)
5525 chEvtSignalI(IRMP_EVENT_THREAD_PTR,IRMP_EVENT_BIT);
5528#if IRMP_USE_IDLE_CALL == 1
5530 if (!irmp_start_bit_detected && !irmp_pulse_time
5540 return (irmp_ir_detected);
5578 puts (
"-----------------------------------------------------------------------------");
5579 printf (
"%s:\n", text);
5581 for (i = 0; i < 256; i++)
5583 if (buf[i] > max_value)
5589 for (i = 1; i < 200; i++)
5594 value = (buf[i] * 60) / max_value;
5596 for (j = 0; j < value; j++)
5600 printf (
" %d\n", buf[i]);
5611 average = (float) sum / (
float) counter;
5622 printf (
"avg: %4.1f=%6.1f us, ", average, (1000000. * average) / (
float) F_INTERRUPTS);
5623 printf (
"min: %2d=%6.1f us, ", min, (1000000. * min) / (
float) F_INTERRUPTS);
5624 printf (
"max: %2d=%6.1f us, ", max, (1000000. * max) / (
float) F_INTERRUPTS);
5626 tolerance = (max - average);
5628 if (average - min > tolerance)
5630 tolerance = average - min;
5633 tolerance = tolerance * 100 / average;
5634 printf (
"tol: %4.1f%%\n", tolerance);
5644#define STATE_LEFT_SHIFT 0x01
5645#define STATE_RIGHT_SHIFT 0x02
5646#define STATE_LEFT_CTRL 0x04
5647#define STATE_LEFT_ALT 0x08
5648#define STATE_RIGHT_ALT 0x10
5650#define KEY_ESCAPE 0x1B
5651#define KEY_MENUE 0x80
5652#define KEY_BACK 0x81
5653#define KEY_FORWARD 0x82
5654#define KEY_ADDRESS 0x83
5655#define KEY_WINDOW 0x84
5656#define KEY_1ST_PAGE 0x85
5657#define KEY_STOP 0x86
5658#define KEY_MAIL 0x87
5659#define KEY_FAVORITES 0x88
5660#define KEY_NEW_PAGE 0x89
5661#define KEY_SETUP 0x8A
5662#define KEY_FONT 0x8B
5663#define KEY_PRINT 0x8C
5664#define KEY_ON_OFF 0x8E
5666#define KEY_INSERT 0x90
5667#define KEY_DELETE 0x91
5668#define KEY_LEFT 0x92
5669#define KEY_HOME 0x93
5672#define KEY_DOWN 0x96
5673#define KEY_PAGE_UP 0x97
5674#define KEY_PAGE_DOWN 0x98
5675#define KEY_RIGHT 0x99
5676#define KEY_MOUSE_1 0x9E
5677#define KEY_MOUSE_2 0x9F
5680get_fdc_key (uint_fast16_t cmd)
5682 static uint8_t key_table[128] =
5685 0,
'^',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'0', 0xDF, 0xB4, 0,
'\b',
5686 '\t',
'q',
'w',
'e',
'r',
't',
'z',
'u',
'i',
'o',
'p', 0xFC,
'+', 0, 0,
'a',
5687 's',
'd',
'f',
'g',
'h',
'j',
'k',
'l', 0xF6, 0xE4,
'#',
'\r', 0,
'<',
'y',
'x',
5688 'c',
'v',
'b',
'n',
'm',
',',
'.',
'-', 0, 0, 0, 0, 0,
' ', 0, 0,
5690 0, 0xB0,
'!',
'"', 0xA7,
'$',
'%',
'&',
'/',
'(',
')',
'=',
'?',
'`', 0,
'\b',
5691 '\t',
'Q',
'W',
'E',
'R',
'T',
'Z',
'U',
'I',
'O',
'P', 0xDC,
'*', 0, 0,
'A',
5692 'S',
'D',
'F',
'G',
'H',
'J',
'K',
'L', 0xD6, 0xC4,
'\'',
'\r', 0,
'>',
'Y',
'X',
5693 'C',
'V',
'B',
'N',
'M',
';',
':',
'_', 0, 0, 0, 0, 0,
' ', 0, 0
5695 static uint_fast8_t state;
5697 uint_fast8_t key = 0;
5702 case 0x00AC: state &= ~STATE_LEFT_SHIFT;
break;
5704 case 0x00B9: state &= ~STATE_RIGHT_SHIFT;
break;
5706 case 0x00BA: state &= ~STATE_LEFT_CTRL;
break;
5708 case 0x00BC: state &= ~STATE_LEFT_ALT;
break;
5710 case 0x00BE: state &= ~STATE_RIGHT_ALT;
break;
5715 case 0x004f: key =
KEY_LEFT;
break;
5716 case 0x0050: key =
KEY_HOME;
break;
5717 case 0x0051: key =
KEY_END;
break;
5718 case 0x0053: key =
KEY_UP;
break;
5719 case 0x0054: key =
KEY_DOWN;
break;
5730 if (cmd >= 0x70 && cmd <= 0x7F)
5740 case 0x0003: key = 0xB2;
break;
5741 case 0x0008: key =
'{';
break;
5742 case 0x0009: key =
'[';
break;
5743 case 0x000A: key =
']';
break;
5744 case 0x000B: key =
'}';
break;
5745 case 0x000C: key =
'\\';
break;
5746 case 0x001C: key =
'~';
break;
5747 case 0x002D: key =
'|';
break;
5748 case 0x0034: key = 0xB5;
break;
5753 if (key_table[cmd] >=
'a' && key_table[cmd] <=
'z')
5755 key = key_table[cmd] -
'a' + 1;
5759 key = key_table[cmd];
5768 key = key_table[idx];
5780static int analyze =
FALSE;
5781static int list =
FALSE;
5783static int expected_protocol;
5784static int expected_address;
5785static int expected_command;
5786static int do_check_expected_values;
5791 if (! analyze && ! list)
5803 printf (
"%8.3fms ", (
double) (time_counter * 1000) / F_INTERRUPTS);
5808 uint16_t temp = (irmp_data.
command & 0x000F) + 15;
5810 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x, temp=%d",
5815 if ((key >= 0x20 && key < 0x7F) || key >= 0xA0)
5817 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x, asc=0x%02x, key='%c'",
5820 else if (key ==
'\r' || key ==
'\t' || key ==
KEY_ESCAPE || (key >= 0x80 && key <= 0x9F))
5822 char * p = (
char *) NULL;
5826 case '\t' : p =
"TAB";
break;
5827 case '\r' : p =
"CR";
break;
5848 case KEY_END : p =
"END";
break;
5849 case KEY_UP : p =
"UP";
break;
5856 default : p =
"<UNKNWON>";
break;
5859 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x, asc=0x%02x, key=%s",
5864 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x, asc=0x%02x",
5870 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x",
5874 if (do_check_expected_values)
5876 if (irmp_data.
protocol != expected_protocol ||
5877 irmp_data.
address != expected_address ||
5878 (
int)irmp_data.
command != expected_command)
5880 printf (
"\nerror 7: expected values differ: p=%2d (%s), a=0x%04x, c=0x%04x\n",
5881 expected_protocol, irmp_protocol_names[expected_protocol], expected_address, expected_command);
5885 printf (
" checked!\n");
5887 do_check_expected_values =
FALSE;
5906 int start_pulses[256];
5907 int start_pauses[256];
5911 int first_pulse =
TRUE;
5912 int first_pause =
TRUE;
5916 if (! strcmp (argv[1],
"-v"))
5920 else if (! strcmp (argv[1],
"-l"))
5924 else if (! strcmp (argv[1],
"-a"))
5928 else if (! strcmp (argv[1],
"-s"))
5932 else if (! strcmp (argv[1],
"-r"))
5938 for (i = 0; i < 256; i++)
5940 start_pulses[i] = 0;
5941 start_pauses[i] = 0;
5948 while ((ch = getchar ()) != EOF)
5950 if (ch ==
'_' || ch ==
'0')
5958 printf (
"pause: %d\n", pause);
5967 start_pauses[pause]++;
5969 first_pause =
FALSE;
5985 else if (ch == 0xaf || ch ==
'-' || ch ==
'1')
5991 printf (
"pulse: %d ", pulse);
6000 start_pulses[pulse]++;
6002 first_pulse =
FALSE;
6018 else if (ch ==
'\n')
6023 if (list && pause > 0)
6025 printf (
"pause: %d\n", pause);
6031 for (i = 0; i < (int) ((10000.0 * F_INTERRUPTS) / 10000); i++)
6045 while ((ch = getchar()) !=
'\n' && ch != EOF)
6056 puts (
"----------------------------------------------------------------------");
6060 while ((ch = getchar()) !=
'\n' && ch != EOF)
6064 if (ch ==
'[' && idx == -1)
6072 do_check_expected_values =
FALSE;
6076 expected_protocol = atoi (buf);
6078 if (expected_protocol > 0)
6087 if (sscanf (p,
"%x", &expected_address) == 1)
6089 do_check_expected_values =
TRUE;
6096 if (do_check_expected_values)
6098 do_check_expected_values =
FALSE;
6106 if (sscanf (p,
"%x", &expected_command) == 1)
6108 do_check_expected_values =
TRUE;
6115 if (do_check_expected_values)
6122 else if (idx < 1024 - 2)
6146 puts (
"-----------------------------------------------------------------------------");
#define SAMSUNGAH_PULSE_LEN_MIN
#define ORTEK_BIT_PULSE_LEN_MIN
#define NUBERT_0_PULSE_LEN_MAX
#define RCCAR_0_PAUSE_LEN_MAX
#define DENON_PULSE_LEN_MIN
#define JVC_REPEAT_START_BIT_PAUSE_LEN_MIN
#define FDC_0_PAUSE_LEN_MIN
#define NEC_PULSE_LEN_MAX
#define KASEIKYO_START_BIT_PULSE_LEN_MAX
#define ACP24_START_BIT_PAUSE_LEN_MIN
#define NETBOX_START_BIT_PULSE_LEN_MIN
#define SAMSUNGAH_0_PAUSE_LEN_MAX
#define RC6_BIT_PAUSE_LEN_MIN
#define KASEIKYO_PULSE_LEN_MAX
#define NUBERT_1_PAUSE_LEN_MIN
#define A1TVBOX_BIT_PAUSE_LEN_MAX
#define ORTEK_BIT_PAUSE_LEN_MAX
#define MATSUSHITA_START_BIT_PAUSE_LEN_MAX
#define SAMSUNGAH_START_BIT_PAUSE_LEN_MIN
#define ROOMBA_1_PAUSE_LEN_EXACT
#define DENON_0_PAUSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT3_PULSE_LEN_MIN
#define ROOMBA_START_BIT_PULSE_LEN_MIN
#define BOSE_1_PAUSE_LEN_MIN
#define TELEFUNKEN_0_PAUSE_LEN_MIN
#define PARITY_CHECK_FAILED
#define LEGO_PULSE_LEN_MIN
#define NIKON_START_BIT_PAUSE_LEN_MAX
#define METZ_START_BIT_PAUSE_LEN_MAX
#define PANASONIC_0_PAUSE_LEN_MIN
#define PENTAX_PULSE_LEN_MIN
#define ORTEK_START_BIT_PULSE_LEN_MIN
#define MERLIN_START_BIT_PULSE_LEN_MIN
#define RC6_START_BIT_PULSE_LEN_MAX
#define BANG_OLUFSEN_R_PAUSE_LEN_MIN
#define SAMSUNG_START_BIT_PULSE_LEN_MAX
#define GREE_PULSE_LEN_MIN
#define LEGO_START_BIT_PAUSE_LEN_MAX
#define PANASONIC_START_BIT_PAUSE_LEN_MIN
#define STATE_RIGHT_SHIFT
#define LEGO_0_PAUSE_LEN_MIN
#define MATSUSHITA_1_PAUSE_LEN_MIN
#define S100_START_BIT_LEN_MAX
#define NEC_START_BIT_PAUSE_LEN_MIN
#define GREE_START_BIT_PAUSE_LEN_MIN
#define RCII_START_BIT_PULSE_LEN_MIN
#define DENON_1_PAUSE_LEN_MAX
#define SAMSUNGAH_1_PAUSE_LEN_MIN
#define MATSUSHITA_START_BIT_PULSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT3_PULSE_LEN_MAX
#define IRMP16_1_PAUSE_LEN_MAX
#define ORTEK_START_BIT_PAUSE_LEN_MAX
#define SAMSUNG_0_PAUSE_LEN_MIN
#define NEC_REPEAT_START_BIT_PAUSE_LEN_MAX
#define FDC_0_PAUSE_LEN_MAX
#define MERLIN_START_BIT_PAUSE_LEN_MAX
#define SIRCS_0_PULSE_LEN_MAX
#define RECS80EXT_START_BIT_PAUSE_LEN_MAX
#define RECS80EXT_0_PAUSE_LEN_MAX
#define ROOMBA_0_PULSE_LEN_MIN
#define NIKON_PULSE_LEN_MAX
#define KATHREIN_1_PAUSE_LEN_MIN
#define SAMSUNGAH_1_PAUSE_LEN_MAX
#define RCCAR_1_PAUSE_LEN_MIN
#define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX
#define RCCAR_0_PAUSE_LEN_MIN
#define NEC_START_BIT_PULSE_LEN_MIN
#define KASEIKYO_1_PAUSE_LEN_MIN
#define BOSE_1_PAUSE_LEN_MAX
#define METZ_1_PAUSE_LEN_MAX
#define ANALYZE_ONLY_NORMAL_PUTCHAR(a)
#define SAMSUNG_1_PAUSE_LEN_MIN
#define ROOMBA_0_PAUSE_LEN_MIN
#define PENTAX_START_BIT_PAUSE_LEN_MIN
#define MATSUSHITA_0_PAUSE_LEN_MAX
#define SPEAKER_START_BIT_PAUSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX
#define RC6_START_BIT_PAUSE_LEN_MAX
#define NIKON_START_BIT_PULSE_LEN_MAX
#define MATSUSHITA_START_BIT_PULSE_LEN_MIN
#define PANASONIC_START_BIT_PULSE_LEN_MIN
#define SIRCS_0_PULSE_LEN_MIN
#define BANG_OLUFSEN_0_PAUSE_LEN_MIN
#define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN
#define MATSUSHITA_PULSE_LEN_MAX
#define BOSE_START_BIT_PAUSE_LEN_MIN
#define GRUNDIG_NOKIA_IR60_BIT_LEN_MIN
#define ACP24_PULSE_LEN_MAX
#define BANG_OLUFSEN_1_PAUSE_LEN_MAX
#define MITSU_HEAVY_1_PAUSE_LEN_MAX
#define BOSE_START_BIT_PAUSE_LEN_MAX
#define NUBERT_0_PULSE_LEN_MIN
#define LEGO_START_BIT_PAUSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT1_PULSE_LEN_MAX
#define BOSE_0_PAUSE_LEN_MAX
#define ORTEK_START_BIT_PAUSE_LEN_MIN
#define VINCENT_0_PAUSE_LEN_MAX
void print_spectrum(char *text, int *buf, int is_pulse)
#define BANG_OLUFSEN_START_BIT2_PAUSE_LEN_MAX
#define TELEFUNKEN_PULSE_LEN_MAX
#define GREE_0_PAUSE_LEN_MAX
#define TELEFUNKEN_PULSE_LEN_MIN
#define KASEIKYO_0_PAUSE_LEN_MAX
#define RADIO1_1_PAUSE_LEN_MAX
#define JVC_REPEAT_START_BIT_PAUSE_LEN_MAX
#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MIN
#define PENTAX_1_PAUSE_LEN_MIN
#define A1TVBOX_BIT_PULSE_LEN_MAX
#define MITSU_HEAVY_0_PAUSE_LEN_MAX
#define ANALYZE_PUTCHAR(a)
#define PANASONIC_START_BIT_PAUSE_LEN_MAX
#define FAN_0_PAUSE_LEN_MAX
int main(int argc, char **argv)
#define THOMSON_PULSE_LEN_MAX
#define FDC_START_BIT_PAUSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN
#define TELEFUNKEN_1_PAUSE_LEN_MAX
#define ORTEK_START_BIT_PULSE_LEN_MAX
#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN
#define NETBOX_PAUSE_REST_LEN
#define BOSE_PULSE_LEN_MIN
#define LEGO_0_PAUSE_LEN_MAX
#define SIRCS_START_BIT_PULSE_LEN_MAX
#define MATSUSHITA_START_BIT_PAUSE_LEN_MIN
#define SAMSUNG_PULSE_LEN_MAX
#define NIKON_0_PAUSE_LEN_MIN
#define FDC_START_BIT_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MIN
#define ROOMBA_1_PAUSE_LEN_MIN
#define RCMM32_BIT_PULSE_LEN_MIN
#define METZ_1_PAUSE_LEN_MIN
#define KATHREIN_SYNC_BIT_PAUSE_LEN_MIN
#define RADIO1_0_PAUSE_LEN_MAX
#define IRMP16_START_BIT_PULSE_LEN_MIN
#define LEGO_PULSE_LEN_MAX
#define TELEFUNKEN_START_BIT_PAUSE_LEN_MAX
#define SPEAKER_1_PAUSE_LEN_MAX
#define IRMP16_START_BIT_PAUSE_LEN_MAX
#define SAMSUNG_START_BIT_PAUSE_LEN_MAX
#define FDC_1_PAUSE_LEN_MIN
#define BOSE_0_PAUSE_LEN_MIN
#define SPEAKER_1_PULSE_LEN_MIN
#define KASEIKYO_START_BIT_PAUSE_LEN_MAX
#define NEC_0_PAUSE_LEN_MAX
#define ACP24_START_BIT_PULSE_LEN_MAX
#define RC6_START_BIT_PULSE_LEN_MIN
#define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT4_PULSE_LEN_MIN
#define MITSU_HEAVY_PULSE_LEN_MAX
#define BOSE_PULSE_LEN_MAX
#define RECS80_START_BIT_PAUSE_LEN_MAX
#define NUBERT_1_PAUSE_LEN_MAX
#define PENTAX_PULSE_LEN_MAX
#define VINCENT_START_BIT_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT1_PULSE_LEN_MIN
#define NUBERT_1_PULSE_LEN_MIN
#define RECS80_1_PAUSE_LEN_MIN
#define RCMM32_START_BIT_PAUSE_LEN_MAX
#define MERLIN_BIT_PULSE_LEN_MIN
#define RCMM32_BIT_01_PAUSE_LEN_MIN
#define DENON_AUTO_REPETITION_PAUSE_LEN
#define FAN_1_PULSE_LEN_MAX
#define NETBOX_PULSE_REST_LEN
#define RECS80EXT_1_PAUSE_LEN_MIN
#define METZ_0_PAUSE_LEN_MAX
uint_fast8_t irmp_get_data(IRMP_DATA *irmp_data_p)
#define BANG_OLUFSEN_1_PAUSE_LEN_MIN
#define NEC_START_BIT_PAUSE_LEN_MAX
#define THOMSON_PULSE_LEN_MIN
#define RC5_START_BIT_LEN_MAX
#define RC6_START_BIT_PAUSE_LEN_MIN
#define A1TVBOX_START_BIT_PULSE_LEN_MIN
#define NIKON_1_PAUSE_LEN_MAX
#define BANG_OLUFSEN_PULSE_LEN_MIN
#define RCCAR_PULSE_LEN_MAX
#define SAMSUNG_PULSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MAX
#define FAN_START_BIT_PULSE_LEN_MAX
#define KATHREIN_START_BIT_PAUSE_LEN_MAX
#define KATHREIN_START_BIT_PAUSE_LEN_MIN
#define ORTEK_BIT_PULSE_LEN_MAX
#define SPEAKER_1_PULSE_LEN_MAX
#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX
#define NUBERT_START_BIT_PAUSE_LEN_MAX
#define A1TVBOX_START_BIT_PAUSE_LEN_MAX
#define FAN_START_BIT_PAUSE_LEN_MIN
#define MITSU_HEAVY_START_BIT_PULSE_LEN_MIN
#define ACP24_1_PAUSE_LEN_MAX
#define ROOMBA_START_BIT_PAUSE_LEN_MAX
#define RECS80EXT_START_BIT_PULSE_LEN_MAX
#define RECS80EXT_START_BIT_PAUSE_LEN_MIN
#define SIRCS_1_PULSE_LEN_MIN
#define VINCENT_1_PAUSE_LEN_MAX
#define KASEIKYO_START_BIT_PULSE_LEN_MIN
#define PENTAX_0_PAUSE_LEN_MAX
#define RCII_START_BIT_PULSE_LEN_MAX
#define RECS80EXT_START_BIT_PULSE_LEN_MIN
#define ORTEK_BIT_PAUSE_LEN_MIN
#define RCMM32_BIT_10_PAUSE_LEN_MAX
#define VINCENT_1_PAUSE_LEN_MIN
#define KATHREIN_0_PULSE_LEN_MAX
#define PENTAX_START_BIT_PULSE_LEN_MIN
#define RECS80EXT_0_PAUSE_LEN_MIN
#define ROOMBA_0_PAUSE_LEN
#define IRMP16_START_BIT_PAUSE_LEN_MIN
#define LEGO_START_BIT_PULSE_LEN_MAX
#define SAMSUNG_START_BIT_PAUSE_LEN_MIN
#define NIKON_PULSE_LEN_MIN
#define SPEAKER_0_PAUSE_LEN_MAX
#define TELEFUNKEN_START_BIT_PULSE_LEN_MIN
#define IRMP_SUPPORT_SERIAL
#define NUBERT_0_PAUSE_LEN_MAX
#define IRMP16_START_BIT_PULSE_LEN_MAX
#define DENON_PULSE_LEN_MAX
#define KATHREIN_0_PAUSE_LEN_MAX
#define NUBERT_START_BIT_PULSE_LEN_MAX
#define KATHREIN_START_BIT_PULSE_LEN_MAX
#define SAMSUNGAH_START_BIT_PULSE_LEN_MIN
#define IRMP16_PULSE_LEN_MAX
#define FAN_0_PULSE_LEN_MAX
#define SPEAKER_1_PAUSE_LEN_MIN
#define MERLIN_BIT_PAUSE_LEN_MAX
#define BANG_OLUFSEN_0_PAUSE_LEN_MAX
#define RCMM32_BIT_10_PAUSE_LEN_MIN
#define SIRCS_START_BIT_PAUSE_LEN_MAX
#define SAMSUNGAH_START_BIT_PAUSE_LEN_MAX
#define NIKON_START_BIT_PAUSE_LEN_MIN
#define RECS80EXT_PULSE_LEN_MIN
#define NEC_PULSE_LEN_MIN
#define RCCAR_START_BIT_PAUSE_LEN_MAX
#define RECS80_PULSE_LEN_MAX
#define SIRCS_START_BIT_PULSE_LEN_MIN
#define THOMSON_1_PAUSE_LEN_MAX
#define NUBERT_1_PULSE_LEN_MAX
#define S100_START_BIT_LEN_MIN
#define A1TVBOX_START_BIT_PULSE_LEN_MAX
#define ROOMBA_0_PAUSE_LEN_MAX
#define MATSUSHITA_0_PAUSE_LEN_MIN
#define RECS80_1_PAUSE_LEN_MAX
#define A1TVBOX_START_BIT_PAUSE_LEN_MIN
#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX
#define FAN_1_PAUSE_LEN_MIN
#define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX
#define NEC_0_PAUSE_LEN_MIN
#define SIRCS_PAUSE_LEN_MAX
#define RADIO1_0_PULSE_LEN_MAX
#define MITSU_HEAVY_START_BIT_PAUSE_LEN_MAX
#define THOMSON_0_PAUSE_LEN_MAX
#define VINCENT_PULSE_LEN_MAX
#define A1TVBOX_BIT_PULSE_LEN_MIN
#define GREE_START_BIT_PULSE_LEN_MIN
#define MITSU_HEAVY_PULSE_LEN_MIN
#define RCMM32_START_BIT_PULSE_LEN_MIN
#define NEC_1_PAUSE_LEN_MAX
#define KASEIKYO_START_BIT_PAUSE_LEN_MIN
#define ACP24_START_BIT_PULSE_LEN_MIN
#define PANASONIC_1_PAUSE_LEN_MAX
#define AUTO_FRAME_REPETITION_LEN
#define MATSUSHITA_1_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT2_PAUSE_LEN_MIN
#define MITSU_HEAVY_START_BIT_PAUSE_LEN_MIN
#define ANALYZE_PRINTF(...)
#define NETBOX_START_BIT_PAUSE_LEN_MAX
#define KATHREIN_START_BIT_PULSE_LEN_MIN
#define MERLIN_BIT_PAUSE_LEN_MIN
#define FAN_0_PAUSE_LEN_MIN
#define NEC_START_BIT_PULSE_LEN_MAX
#define RC6_TOGGLE_BIT_LEN_MAX
#define SAMSUNG_0_PAUSE_LEN_MAX
#define IRMP_SUPPORT_MANCHESTER
#define RECS80_0_PAUSE_LEN_MAX
#define RADIO1_START_BIT_PAUSE_LEN_MIN
#define A1TVBOX_BIT_PAUSE_LEN_MIN
#define SAMSUNGAH_0_PAUSE_LEN_MIN
#define PANASONIC_PULSE_LEN_MIN
#define GREE_PULSE_LEN_MAX
#define FAN_1_PAUSE_LEN_MAX
#define RECS80_0_PAUSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT2_PULSE_LEN_MAX
#define NETBOX_START_BIT_PULSE_LEN_MAX
#define TELEFUNKEN_1_PAUSE_LEN_MIN
#define SIRCS_PAUSE_LEN_MIN
#define RC6_BIT_PULSE_LEN_MAX
#define RCCAR_1_PAUSE_LEN_MAX
#define KATHREIN_1_PULSE_LEN_MIN
uint_fast8_t irmp_ISR(void)
#define RC6_BIT_PAUSE_LEN_MAX
#define KATHREIN_1_PAUSE_LEN_MAX
#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN
#define FDC_PULSE_LEN_MIN
#define VINCENT_START_BIT_PULSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT2_PULSE_LEN_MIN
#define GREE_1_PAUSE_LEN_MIN
#define NETBOX_START_BIT_PAUSE_LEN_MIN
#define KASEIKYO_0_PAUSE_LEN_MIN
#define IRMP16_0_PAUSE_LEN_MIN
#define ACP24_1_PAUSE_LEN_MIN
#define SPEAKER_0_PULSE_LEN_MIN
#define SPEAKER_START_BIT_PULSE_LEN_MIN
#define LEGO_1_PAUSE_LEN_MIN
#define RADIO1_0_PAUSE_LEN_MIN
#define JVC_START_BIT_PULSE_LEN_MAX
#define VINCENT_START_BIT_PULSE_LEN_MIN
#define RC6_BIT_PULSE_LEN_MIN
#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MAX
#define NIKON_1_PAUSE_LEN_MIN
#define NEC_FRAME_REPEAT_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MIN
#define RECS80EXT_1_PAUSE_LEN_MAX
#define NUBERT_0_PAUSE_LEN_MIN
#define RADIO1_0_PULSE_LEN_MIN
#define METZ_START_BIT_PAUSE_LEN_MIN
#define TELEFUNKEN_0_PAUSE_LEN_MAX
#define RCMM32_START_BIT_PAUSE_LEN_MIN
#define ANALYZE_NEWLINE()
#define ROOMBA_1_PULSE_LEN_MIN
#define GREE_START_BIT_PAUSE_LEN_MAX
#define IRMP_KEY_REPETITION_LEN
#define GREE_0_PAUSE_LEN_MIN
#define LEGO_START_BIT_PULSE_LEN_MIN
#define PANASONIC_PULSE_LEN_MAX
#define GRUNDIG_NOKIA_IR60_BIT_LEN_MAX
#define VINCENT_0_PAUSE_LEN_MIN
#define RCMM32_BIT_11_PAUSE_LEN_MIN
#define PENTAX_0_PAUSE_LEN_MIN
#define FDC_PULSE_LEN_MAX
#define ROOMBA_1_PULSE_LEN_MAX
#define KASEIKYO_1_PAUSE_LEN_MAX
#define MITSU_HEAVY_1_PAUSE_LEN_MIN
#define IRMP16_1_PAUSE_LEN_MIN
#define KATHREIN_SYNC_BIT_PAUSE_LEN_MAX
#define FDC_START_BIT_PULSE_LEN_MIN
#define SAMSUNG_1_PAUSE_LEN_MAX
#define TELEFUNKEN_START_BIT_PAUSE_LEN_MIN
#define ROOMBA_START_BIT_PULSE_LEN_MAX
#define METZ_PULSE_LEN_MIN
#define BOSE_START_BIT_PULSE_LEN_MIN
#define FAN_1_PULSE_LEN_MIN
#define RCCAR_START_BIT_PULSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MAX
#define RADIO1_1_PULSE_LEN_MAX
#define DENON_1_PAUSE_LEN_MIN
#define ACP24_START_BIT_PAUSE_LEN_MAX
#define FAN_START_BIT_PULSE_LEN_MIN
#define FDC_1_PAUSE_LEN_MAX
#define RECS80_START_BIT_PAUSE_LEN_MIN
#define ROOMBA_0_PULSE_LEN_MAX
#define IRMP16_PULSE_LEN_MIN
#define IRMP16_0_PAUSE_LEN_MAX
#define FAN_START_BIT_PAUSE_LEN_MAX
#define ROOMBA_1_PAUSE_LEN_MAX
#define SAMSUNG_START_BIT_PULSE_LEN_MIN
#define TELEFUNKEN_START_BIT_PULSE_LEN_MAX
#define THOMSON_1_PAUSE_LEN_MIN
#define NEC_REPEAT_START_BIT_PAUSE_LEN_MIN
#define NEC_1_PAUSE_LEN_MIN
#define RADIO1_1_PULSE_LEN_MIN
#define RECS80EXT_PULSE_LEN_MAX
#define KATHREIN_0_PAUSE_LEN_MIN
#define RCMM32_START_BIT_PULSE_LEN_MAX
#define SPEAKER_0_PAUSE_LEN_MIN
#define KASEIKYO_PULSE_LEN_MIN
#define ANALYZE_ONLY_NORMAL_PRINTF(...)
#define GREE_START_BIT_PULSE_LEN_MAX
#define SIRCS_START_BIT_PAUSE_LEN_MIN
#define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MIN
#define MATSUSHITA_PULSE_LEN_MIN
#define LEGO_1_PAUSE_LEN_MAX
#define RCII_START_BIT_PAUSE_LEN_MIN
#define PANASONIC_1_PAUSE_LEN_MIN
#define METZ_0_PAUSE_LEN_MIN
#define MERLIN_START_BIT_PULSE_LEN_MAX
#define RCCAR_PULSE_LEN_MIN
#define RCCAR_START_BIT_PULSE_LEN_MIN
#define PENTAX_START_BIT_PULSE_LEN_MAX
#define PENTAX_1_PAUSE_LEN_MAX
#define NUBERT_START_BIT_PULSE_LEN_MIN
#define VINCENT_PULSE_LEN_MIN
#define MITSU_HEAVY_0_PAUSE_LEN_MIN
#define GREE_1_PAUSE_LEN_MAX
#define METZ_PULSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT4_PULSE_LEN_MAX
#define DENON_0_PAUSE_LEN_MAX
#define BANG_OLUFSEN_R_PAUSE_LEN_MAX
#define NIKON_START_BIT_PULSE_LEN_MIN
#define RECS80_START_BIT_PULSE_LEN_MAX
#define SPEAKER_START_BIT_PAUSE_LEN_MAX
#define ACP24_0_PAUSE_LEN_MIN
#define RCII_START_BIT_PAUSE_LEN_MAX
#define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN
#define RC5_START_BIT_LEN_MIN
#define RCMM32_BIT_01_PAUSE_LEN_MAX
#define ACP24_0_PAUSE_LEN_MAX
#define FDC_START_BIT_PULSE_LEN_MAX
#define BANG_OLUFSEN_PULSE_LEN_MAX
#define SPEAKER_START_BIT_PULSE_LEN_MAX
#define RECS80_PULSE_LEN_MIN
#define RCCAR_START_BIT_PAUSE_LEN_MIN
#define METZ_START_BIT_PULSE_LEN_MAX
#define VINCENT_START_BIT_PAUSE_LEN_MIN
#define RCMM32_BIT_PULSE_LEN_MAX
#define SIRCS_1_PULSE_LEN_MAX
#define FAN_0_PULSE_LEN_MIN
#define SPEAKER_0_PULSE_LEN_MAX
#define PANASONIC_START_BIT_PULSE_LEN_MAX
#define ACP24_PULSE_LEN_MIN
#define RECS80_START_BIT_PULSE_LEN_MIN
#define SAMSUNGAH_START_BIT_PULSE_LEN_MAX
#define RC6_TOGGLE_BIT_LEN_MIN
#define JVC_START_BIT_PULSE_LEN_MIN
#define KATHREIN_0_PULSE_LEN_MIN
#define METZ_START_BIT_PULSE_LEN_MIN
#define RADIO1_START_BIT_PAUSE_LEN_MAX
#define RADIO1_1_PAUSE_LEN_MIN
#define KATHREIN_1_PULSE_LEN_MAX
#define RADIO1_START_BIT_PULSE_LEN_MAX
#define RADIO1_START_BIT_PULSE_LEN_MIN
#define MERLIN_BIT_PULSE_LEN_MAX
#define PENTAX_START_BIT_PAUSE_LEN_MAX
#define NIKON_0_PAUSE_LEN_MAX
#define PANASONIC_0_PAUSE_LEN_MAX
#define SAMSUNGAH_PULSE_LEN_MAX
#define RCMM32_BIT_11_PAUSE_LEN_MAX
#define THOMSON_0_PAUSE_LEN_MIN
#define MITSU_HEAVY_START_BIT_PULSE_LEN_MAX
#define NUBERT_START_BIT_PAUSE_LEN_MIN
#define ROOMBA_START_BIT_PAUSE_LEN_MIN
#define BOSE_START_BIT_PULSE_LEN_MAX
#define MERLIN_START_BIT_PAUSE_LEN_MIN
#define IRMP_FLAG_REPETITION
#define KASEIKYO_ADDRESS_LEN
#define IRMP_PARAM_FLAG_IS_SERIAL
#define ROOMBA_ADDRESS_LEN
#define MERLIN_ADDRESS_OFFSET
#define RECS80_COMPLETE_DATA_LEN
#define BANG_OLUFSEN_STOP_BIT
#define SPEAKER_COMPLETE_DATA_LEN
#define IRMP_ACP24_PROTOCOL
#define KASEIKYO_COMMAND_OFFSET
#define ROOMBA_COMPLETE_DATA_LEN
#define JVC_START_BIT_PULSE_TIME
#define NUBERT_COMMAND_LEN
#define SIEMENS_COMMAND_LEN
#define SIRCS_ADDRESS_LEN
#define TELEFUNKEN_COMMAND_LEN
#define IRMP_RC6A_PROTOCOL
#define SAMSUNG_COMMAND_OFFSET
#define NOKIA_COMMAND_OFFSET
#define IRMP_RECS80EXT_PROTOCOL
#define IRMP_RCCAR_PROTOCOL
#define RUWIDO_ADDRESS_OFFSET
#define TELEFUNKEN_ADDRESS_OFFSET
#define SIEMENS_ADDRESS_LEN
#define NEC42_COMPLETE_DATA_LEN
#define A1TVBOX_COMMAND_LEN
#define KATHREIN_COMMAND_OFFSET
#define ACP24_COMMAND_OFFSET
#define NEC42_COMMAND_OFFSET
#define SAMSUNG_ADDRESS_OFFSET
#define NIKON_ADDRESS_OFFSET
#define NEC_COMMAND_OFFSET
#define PANASONIC_COMMAND_LEN
#define IRMP_PARAM_FLAG_1ST_PULSE_IS_1
#define IRMP_IRMP16_PROTOCOL
#define ROOMBA_COMMAND_OFFSET
#define PENTAX_ADDRESS_OFFSET
#define NOKIA_COMMAND_LEN
#define PENTAX_COMPLETE_DATA_LEN
#define IRMP_NETBOX_PROTOCOL
#define NUBERT_COMMAND_OFFSET
#define RUWIDO_ADDRESS_LEN
#define METZ_ADDRESS_OFFSET
#define A1TVBOX_ADDRESS_OFFSET
#define LGAIR_COMMAND_LEN
#define IRMP_RADIO1_PROTOCOL
#define MATSUSHITA_STOP_BIT
#define TELEFUNKEN_COMMAND_OFFSET
#define THOMSON_COMMAND_OFFSET
#define SAMSUNG48_COMPLETE_DATA_LEN
#define SAMSUNGAH_COMMAND_OFFSET
#define SAMSUNG_ID_OFFSET
#define SIRCS_ADDRESS_OFFSET
#define LGAIR_ADDRESS_LEN
#define RC6_ADDRESS_OFFSET
#define BOSE_COMPLETE_DATA_LEN
#define IRMP_RCII_PROTOCOL
#define LGAIR_ADDRESS_OFFSET
#define RCCAR_ADDRESS_LEN
#define S100_ADDRESS_OFFSET
#define NUBERT_ADDRESS_LEN
#define RCCAR_COMMAND_OFFSET
#define GRUNDIG_ADDRESS_LEN
#define SPEAKER_ADDRESS_OFFSET
#define IRMP_GREE_PROTOCOL
#define TELEFUNKEN_ADDRESS_LEN
#define SAMSUNG32_COMMAND_LEN
#define KATHREIN_ADDRESS_OFFSET
#define IRMP_MERLIN_PROTOCOL
#define BANG_OLUFSEN_FLAGS
#define SAMSUNG48_COMMAND_LEN
#define RC5_COMPLETE_DATA_LEN
#define RCMM32_COMMAND_OFFSET
#define ACP24_COMPLETE_DATA_LEN
#define S100_COMPLETE_DATA_LEN
#define FAN_COMPLETE_DATA_LEN
#define RECS80_COMMAND_LEN
#define METZ_COMMAND_OFFSET
#define RUWIDO_COMPLETE_DATA_LEN
#define IRMP_DENON_PROTOCOL
#define SIEMENS_OR_RUWIDO_STOP_BIT
#define RUWIDO_COMMAND_OFFSET
#define RCII_ADDRESS_OFFSET
#define RCMM32_ADDRESS_LEN
#define THOMSON_COMMAND_LEN
#define IRMP_RC5_PROTOCOL
#define FAN_ADDRESS_OFFSET
#define GRUNDIG_COMPLETE_DATA_LEN
#define DENON_COMMAND_OFFSET
#define IR60_COMMAND_OFFSET
#define RADIO1_ADDRESS_LEN
#define IRMP16_ADDRESS_LEN
#define NETBOX_COMMAND_OFFSET
#define IRMP_RUWIDO_PROTOCOL
#define IRMP_SAMSUNGAH_PROTOCOL
#define IRMP_BANG_OLUFSEN_PROTOCOL
#define ROOMBA_COMMAND_LEN
#define KASEIKYO_STOP_BIT
#define IRMP_APPLE_PROTOCOL
#define SAMSUNG_COMPLETE_DATA_LEN
#define SIRCS_COMMAND_LEN
#define IRMP16_COMMAND_OFFSET
#define RCMM32_COMMAND_LEN
#define IRMP_JVC_PROTOCOL
#define IRMP_RCMM24_PROTOCOL
#define RECS80EXT_COMMAND_OFFSET
#define IRMP_VINCENT_PROTOCOL
#define SAMSUNG32_COMPLETE_DATA_LEN
#define LEGO_ADDRESS_OFFSET
#define IRMP_SIRCS_PROTOCOL
#define IRMP_NEC_PROTOCOL
#define IRMP_ROOMBA_PROTOCOL
#define RECS80EXT_COMPLETE_DATA_LEN
#define LGAIR_COMMAND_OFFSET
#define PANASONIC_ADDRESS_LEN
#define NETBOX_COMPLETE_DATA_LEN
#define IRMP16_ADDRESS_OFFSET
#define NOKIA_COMPLETE_DATA_LEN
#define NETBOX_ADDRESS_LEN
#define PENTAX_ADDRESS_LEN
#define GREE_COMMAND_OFFSET
#define IRMP_PANASONIC_PROTOCOL
#define BANG_OLUFSEN_ADDRESS_LEN
#define THOMSON_ADDRESS_OFFSET
#define SIEMENS_COMMAND_OFFSET
#define KASEIKYO_COMMAND_LEN
#define DENON_COMPLETE_DATA_LEN
#define PANASONIC_COMMAND_OFFSET
#define LEGO_COMMAND_OFFSET
#define FDC_ADDRESS_OFFSET
#define RECS80_ADDRESS_OFFSET
#define ROOMBA_ADDRESS_OFFSET
#define PANASONIC_STOP_BIT
#define IRMP_NOKIA_PROTOCOL
#define MITSU_HEAVY_FLAGS
#define IRMP_NIKON_PROTOCOL
#define VINCENT_ADDRESS_OFFSET
#define SPEAKER_COMMAND_LEN
#define MATSUSHITA_COMMAND_OFFSET
#define SAMSUNG32_COMMAND_OFFSET
#define MERLIN_ADDRESS_LEN
#define IRMP_ORTEK_PROTOCOL
#define GRUNDIG_NOKIA_IR60_FLAGS
#define SIRCS_COMMAND_OFFSET
#define SAMSUNGAH_COMMAND_LEN
#define IRMP_NUBERT_PROTOCOL
#define RC6_COMPLETE_DATA_LEN_SHORT
#define SAMSUNG_ADDRESS_LEN
#define NEC_COMPLETE_DATA_LEN
#define VINCENT_COMMAND_LEN
#define RUWIDO_COMMAND_LEN
#define IRMP_METZ_PROTOCOL
#define FDC_COMMAND_OFFSET
#define A1TVBOX_COMMAND_OFFSET
#define NEC42_COMMAND_LEN
#define ACP24_ADDRESS_LEN
#define MITSU_HEAVY_STOP_BIT
#define GRUNDIG_COMMAND_LEN
#define IRMP_A1TVBOX_PROTOCOL
#define ORTEK_ADDRESS_OFFSET
#define RADIO1_COMMAND_OFFSET
#define RECS80EXT_COMMAND_LEN
#define SAMSUNGAH_ADDRESS_OFFSET
#define IRMP_KATHREIN_PROTOCOL
#define IRMP_TELEFUNKEN_PROTOCOL
#define IRMP16_COMPLETE_DATA_LEN
#define SPEAKER_COMMAND_OFFSET
#define IRMP_MATSUSHITA_PROTOCOL
#define SIEMENS_OR_RUWIDO_LSB
#define MITSU_HEAVY_COMMAND_LEN
#define GREE_ADDRESS_OFFSET
#define IRMP_FDC_PROTOCOL
#define IRMP16_COMMAND_LEN
#define ACP24_COMMAND_LEN
#define SAMSUNGAH_ADDRESS_LEN
#define IRMP_S100_PROTOCOL
#define IRMP_KASEIKYO_PROTOCOL
#define ACP24_ADDRESS_OFFSET
#define IRMP_TECHNICS_PROTOCOL
#define MITSU_HEAVY_COMPLETE_DATA_LEN
#define RADIO1_COMMAND_LEN
#define SPEAKER_ADDRESS_LEN
#define TELEFUNKEN_COMPLETE_DATA_LEN
#define RC6_COMMAND_OFFSET
#define S100_COMMAND_OFFSET
#define GRUNDIG_ADDRESS_OFFSET
#define IRMP_PENTAX_PROTOCOL
#define IRMP_RCMM32_PROTOCOL
#define GREE_COMPLETE_DATA_LEN
#define BANG_OLUFSEN_ADDRESS_OFFSET
#define IRMP_SAMSUNG32_PROTOCOL
#define MATSUSHITA_ADDRESS_LEN
#define LEGO_COMPLETE_DATA_LEN
#define IRMP_ONKYO_PROTOCOL
#define MITSU_HEAVY_ADDRESS_LEN
#define MATSUSHITA_COMPLETE_DATA_LEN
#define IRMP_NEC42_PROTOCOL
#define KATHREIN_COMMAND_LEN
#define TELEFUNKEN_STOP_BIT
#define RCCAR_COMPLETE_DATA_LEN
#define BOSE_ADDRESS_OFFSET
#define IRMP_LGAIR_PROTOCOL
#define NIKON_COMMAND_OFFSET
#define MERLIN_COMPLETE_DATA_LEN
#define THOMSON_COMPLETE_DATA_LEN
#define KATHREIN_STOP_BIT
#define PENTAX_COMMAND_LEN
#define NOKIA_ADDRESS_LEN
#define DENON_ADDRESS_LEN
#define RCII_COMMAND_OFFSET
#define KASEIKYO_ADDRESS_OFFSET
#define NIKON_ADDRESS_LEN
#define IRMP_THOMSON_PROTOCOL
#define BANG_OLUFSEN_COMPLETE_DATA_LEN
#define SAMSUNGAH_STOP_BIT
#define RECS80EXT_STOP_BIT
#define SIEMENS_OR_RUWIDO_FLAGS
#define SIRCS_MINIMUM_DATA_LEN
#define THOMSON_ADDRESS_LEN
#define NUBERT_ADDRESS_OFFSET
#define IRMP_FAN_PROTOCOL
#define IRMP_GRUNDIG_PROTOCOL
#define IRMP_PARAM_FLAG_IS_MANCHESTER
#define IRMP_UNKNOWN_PROTOCOL
#define RCII_COMPLETE_DATA_LEN
#define DENON_ADDRESS_OFFSET
#define SIRCS_COMPLETE_DATA_LEN
#define RECS80_COMMAND_OFFSET
#define NEC42_ADDRESS_LEN
#define IRMP_SPEAKER_PROTOCOL
#define NEC_ADDRESS_OFFSET
#define KATHREIN_ADDRESS_LEN
#define KASEIKYO_COMPLETE_DATA_LEN
#define IR60_COMPLETE_DATA_LEN
#define RECS80EXT_ADDRESS_LEN
#define IRMP_MITSU_HEAVY_PROTOCOL
#define MATSUSHITA_ADDRESS_OFFSET
#define ORTEK_COMMAND_LEN
#define NEC42_ADDRESS_OFFSET
#define KATHREIN_COMPLETE_DATA_LEN
#define MITSU_HEAVY_ADDRESS_OFFSET
#define SAMSUNGAH_COMPLETE_DATA_LEN
#define BANG_OLUFSEN_COMMAND_OFFSET
#define SAMSUNG_COMMAND_LEN
#define RCCAR_COMMAND_LEN
#define RECS80_ADDRESS_LEN
#define VINCENT_COMPLETE_DATA_LEN
#define IRMP_BOSE_PROTOCOL
#define MITSU_HEAVY_COMMAND_OFFSET
#define A1TVBOX_ADDRESS_LEN
#define ORTEK_COMPLETE_DATA_LEN
#define ORTEK_ADDRESS_LEN
#define PANASONIC_ADDRESS_OFFSET
#define ORTEK_COMMAND_OFFSET
#define IRMP_SAMSUNG_PROTOCOL
#define MATSUSHITA_COMMAND_LEN
#define IRMP_LEGO_PROTOCOL
#define FDC_COMPLETE_DATA_LEN
#define VINCENT_ADDRESS_LEN
#define GRUNDIG_COMMAND_OFFSET
#define NUBERT_COMPLETE_DATA_LEN
#define NIKON_COMPLETE_DATA_LEN
#define GRUNDIG_NOKIA_IR60_STOP_BIT
#define MERLIN_COMMAND_LEN
#define GRUNDIG_NOKIA_IR60_LSB
#define RCCAR_ADDRESS_OFFSET
#define VINCENT_COMMAND_OFFSET
#define IRMP_RECS80_PROTOCOL
#define IRMP_RCMM12_PROTOCOL
#define FAN_COMMAND_OFFSET
#define NOKIA_ADDRESS_OFFSET
#define SIEMENS_ADDRESS_OFFSET
#define NIKON_COMMAND_LEN
#define RCMM32_ADDRESS_OFFSET
#define BANG_OLUFSEN_COMMAND_LEN
#define NETBOX_COMMAND_LEN
#define LGAIR_COMPLETE_DATA_LEN
#define PANASONIC_COMPLETE_DATA_LEN
#define SAMSUNG48_COMMAND_OFFSET
#define MERLIN_COMMAND_OFFSET
#define RADIO1_COMPLETE_DATA_LEN
#define IR60_ADDRESS_OFFSET
#define IRMP_SAMSUNG48_PROTOCOL
#define NETBOX_ADDRESS_OFFSET
#define RC5_COMMAND_OFFSET
#define RCMM32_COMPLETE_DATA_LEN
#define RADIO1_ADDRESS_OFFSET
#define RC5_ADDRESS_OFFSET
#define A1TVBOX_COMPLETE_DATA_LEN
#define BOSE_COMMAND_OFFSET
#define RC6_COMPLETE_DATA_LEN_LONG
#define SIEMENS_COMPLETE_DATA_LEN
#define IRMP_IR60_PROTOCOL
#define DENON_COMMAND_LEN
#define IRMP_RC6_PROTOCOL
#define IRMP_SIEMENS_PROTOCOL
#define RECS80EXT_ADDRESS_OFFSET
#define METZ_COMPLETE_DATA_LEN
#define PENTAX_COMMAND_OFFSET