]> sigrok.org Git - libsigrokdecode.git/blob - irmp/irmpconfig.h
irmp: introduce (part of) upstream IRMP sources
[libsigrokdecode.git] / irmp / irmpconfig.h
1 /*---------------------------------------------------------------------------------------------------------------------------------------------------
2  * irmpconfig.h
3  *
4  * DO NOT INCLUDE THIS FILE, WILL BE INCLUDED BY IRMP.H!
5  *
6  * Copyright (c) 2009-2019 Frank Meyer - frank(at)fli4l.de
7  * Extensions for PIC 12F1820 W.Strobl 2014-07-20
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *---------------------------------------------------------------------------------------------------------------------------------------------------
14  */
15
16 #ifndef _IRMP_H_
17 #  error please include only irmp.h, not irmpconfig.h
18 #endif
19
20 #ifdef IRMPCONFIG_STAGE1_H
21
22 /*---------------------------------------------------------------------------------------------------------------------------------------------------
23  * Change IRMP_32_BIT here
24  *
25  * Normally, IRMP_32_BIT ist 0. Then we use irmp.command as a 16 bit value.
26  * If you set IRMP_32_BIT to 1, we will use irmp.command as a 32 bit value.
27  * A 32 bit command costs more CPU resources on 8 bit processors (e.g. AVR),
28  * but there are IR protocols which need more than 16 bits for a reasonable
29  * command value.
30  *
31  * If you want to use one of the following protocols, set IRMP_32_BIT to 1,
32  * otherwise set it to 0:
33  *    - MERLIN
34  *---------------------------------------------------------------------------------------------------------------------------------------------------
35  */
36
37 #define IRMP_32_BIT     0                                                                               // use 32 bit command value, 0 or 1
38
39 #endif // IRMPCONFIG_STAGE1_H
40 #ifdef IRMPCONFIG_STAGE2_H
41
42 /*---------------------------------------------------------------------------------------------------------------------------------------------------
43  * Change F_INTERRUPTS if you change the number of interrupts per second,
44  * Normally, F_INTERRUPTS should be in the range from 10000 to 15000, typical is 15000
45  * A value above 15000 costs additional program space, absolute maximum value is 20000.
46  * On PIC with XC8/C18 Compiler, use 15151 as the correct value.
47  *---------------------------------------------------------------------------------------------------------------------------------------------------
48  */
49 #ifndef F_INTERRUPTS
50 #  define F_INTERRUPTS                          15000   // interrupts per second, min: 10000, max: 20000, typ: 15000
51 #endif
52
53 /*---------------------------------------------------------------------------------------------------------------------------------------------------
54  * Change settings from 1 to 0 if you want to disable one or more decoders.
55  * This saves program space.
56  *
57  * 1 enable  decoder
58  * 0 disable decoder
59  *
60  * The standard decoders are enabled per default.
61  * Less common protocols are disabled here, you need to enable them manually.
62  *
63  * If you want to use FDC or RCCAR simultaneous with RC5 protocol, additional program space is required.
64  * If you don't need RC5 when using FDC/RCCAR, you should disable RC5.
65  * You cannot enable both DENON and RUWIDO, only enable one of them.
66  *---------------------------------------------------------------------------------------------------------------------------------------------------
67  */
68
69 // typical protocols, disable here!             Enable  Remarks                 F_INTERRUPTS            Program Space
70 #define IRMP_SUPPORT_SIRCS_PROTOCOL             1       // Sony SIRCS           >= 10000                 ~150 bytes
71 #define IRMP_SUPPORT_NEC_PROTOCOL               1       // NEC + APPLE + ONKYO  >= 10000                 ~300 bytes
72 #define IRMP_SUPPORT_SAMSUNG_PROTOCOL           1       // Samsung + Samsg32    >= 10000                 ~300 bytes
73 #define IRMP_SUPPORT_KASEIKYO_PROTOCOL          1       // Kaseikyo             >= 10000                 ~250 bytes
74
75 // more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space
76 #define IRMP_SUPPORT_JVC_PROTOCOL               0       // JVC                  >= 10000                 ~150 bytes
77 #define IRMP_SUPPORT_NEC16_PROTOCOL             0       // NEC16                >= 10000                 ~100 bytes
78 #define IRMP_SUPPORT_NEC42_PROTOCOL             0       // NEC42                >= 10000                 ~300 bytes
79 #define IRMP_SUPPORT_MATSUSHITA_PROTOCOL        0       // Matsushita           >= 10000                  ~50 bytes
80 #define IRMP_SUPPORT_DENON_PROTOCOL             0       // DENON, Sharp         >= 10000                 ~250 bytes
81 #define IRMP_SUPPORT_RC5_PROTOCOL               0       // RC5                  >= 10000                 ~250 bytes
82 #define IRMP_SUPPORT_RC6_PROTOCOL               0       // RC6 & RC6A           >= 10000                 ~250 bytes
83 #define IRMP_SUPPORT_IR60_PROTOCOL              0       // IR60 (SDA2008)       >= 10000                 ~300 bytes
84 #define IRMP_SUPPORT_GRUNDIG_PROTOCOL           0       // Grundig              >= 10000                 ~300 bytes
85 #define IRMP_SUPPORT_SIEMENS_PROTOCOL           0       // Siemens Gigaset      >= 15000                 ~550 bytes
86 #define IRMP_SUPPORT_NOKIA_PROTOCOL             0       // Nokia                >= 10000                 ~300 bytes
87
88 // exotic protocols, enable here!               Enable  Remarks                 F_INTERRUPTS            Program Space
89 #define IRMP_SUPPORT_BOSE_PROTOCOL              0       // BOSE                 >= 10000                 ~150 bytes
90 #define IRMP_SUPPORT_KATHREIN_PROTOCOL          0       // Kathrein             >= 10000                 ~200 bytes
91 #define IRMP_SUPPORT_NUBERT_PROTOCOL            0       // NUBERT               >= 10000                  ~50 bytes
92 #define IRMP_SUPPORT_FAN_PROTOCOL               0       // FAN (ventilator)     >= 10000                  ~50 bytes
93 #define IRMP_SUPPORT_SPEAKER_PROTOCOL           0       // SPEAKER (~NUBERT)    >= 10000                  ~50 bytes
94 #define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL      0       // Bang & Olufsen       >= 10000                 ~200 bytes
95 #define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     >= 15000                  ~50 bytes
96 #define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT (SAA3008)  >= 15000                  ~50 bytes
97 #define IRMP_SUPPORT_THOMSON_PROTOCOL           0       // Thomson              >= 10000                 ~250 bytes
98 #define IRMP_SUPPORT_NIKON_PROTOCOL             0       // NIKON camera         >= 10000                 ~250 bytes
99 #define IRMP_SUPPORT_NETBOX_PROTOCOL            0       // Netbox keyboard      >= 10000                 ~400 bytes (PROTOTYPE!)
100 #define IRMP_SUPPORT_ORTEK_PROTOCOL             0       // ORTEK (Hama)         >= 10000                 ~150 bytes
101 #define IRMP_SUPPORT_TELEFUNKEN_PROTOCOL        0       // Telefunken 1560      >= 10000                 ~150 bytes
102 #define IRMP_SUPPORT_FDC_PROTOCOL               0       // FDC3402 keyboard     >= 10000 (better 15000)  ~150 bytes (~400 in combination with RC5)
103 #define IRMP_SUPPORT_RCCAR_PROTOCOL             0       // RC Car               >= 10000 (better 15000)  ~150 bytes (~500 in combination with RC5)
104 #define IRMP_SUPPORT_ROOMBA_PROTOCOL            0       // iRobot Roomba        >= 10000                 ~150 bytes
105 #define IRMP_SUPPORT_RUWIDO_PROTOCOL            0       // RUWIDO, T-Home       >= 15000                 ~550 bytes
106 #define IRMP_SUPPORT_A1TVBOX_PROTOCOL           0       // A1 TV BOX            >= 15000 (better 20000)  ~300 bytes
107 #define IRMP_SUPPORT_LEGO_PROTOCOL              0       // LEGO Power RC        >= 20000                 ~150 bytes
108 #define IRMP_SUPPORT_RCMM_PROTOCOL              0       // RCMM 12,24, or 32    >= 20000                 ~150 bytes
109 #define IRMP_SUPPORT_LGAIR_PROTOCOL             0       // LG Air Condition     >= 10000                 ~300 bytes
110 #define IRMP_SUPPORT_SAMSUNG48_PROTOCOL         0       // Samsung48            >= 10000                 ~100 bytes (SAMSUNG must be enabled!)
111 #define IRMP_SUPPORT_MERLIN_PROTOCOL            0       // Merlin               >= 15000 (better 20000)  ~300 bytes
112 #define IRMP_SUPPORT_PENTAX_PROTOCOL            0       // Pentax               >= 10000                 ~150 bytes
113 #define IRMP_SUPPORT_S100_PROTOCOL              0       // S100                 >= 10000                 ~250 bytes
114 #define IRMP_SUPPORT_ACP24_PROTOCOL             0       // ACP24                >= 10000                 ~250 bytes
115 #define IRMP_SUPPORT_TECHNICS_PROTOCOL          0       // TECHNICS             >= 10000                 ~250 bytes
116 #define IRMP_SUPPORT_PANASONIC_PROTOCOL         0       // PANASONIC Beamer     >= 10000                 ~250 bytes
117 #define IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL       0       // Mitsubishi Aircond   >= 10000                 ~250 bytes
118 #define IRMP_SUPPORT_VINCENT_PROTOCOL           0       // VINCENT              >= 10000                 ~250 bytes
119 #define IRMP_SUPPORT_SAMSUNGAH_PROTOCOL         0       // SAMSUNG AH           >= 10000                 ~250 bytes
120 #define IRMP_SUPPORT_IRMP16_PROTOCOL            0       // IRMP specific        >= 15000                 ~250 bytes
121 #define IRMP_SUPPORT_GREE_PROTOCOL              0       // GREE CLIMATE         >= 10000                 ~250 bytes
122 #define IRMP_SUPPORT_RCII_PROTOCOL              0       // RCII T+A             >= 15000                 ~250 bytes
123 #define IRMP_SUPPORT_METZ_PROTOCOL              0       // METZ                 >= 15000                 ~250 bytes
124
125 #define IRMP_SUPPORT_RADIO1_PROTOCOL            0       // RADIO, e.g. TEVION   >= 10000                 ~250 bytes (experimental)
126
127 /*---------------------------------------------------------------------------------------------------------------------------------------------------
128  * Change hardware pin here for ATMEL ATMega/ATTiny/XMega
129  *---------------------------------------------------------------------------------------------------------------------------------------------------
130  */
131 #if defined (ATMEL_AVR) || defined (__AVR_XMEGA__)                      // use PB6 as IR input on AVR
132 #  define IRMP_PORT_LETTER                      B
133 #  define IRMP_BIT_NUMBER                       6
134
135 /*---------------------------------------------------------------------------------------------------------------------------------------------------
136  * Change hardware pin here for PIC C18 or XC8 compiler
137  *---------------------------------------------------------------------------------------------------------------------------------------------------
138  */
139 #elif defined (PIC_C18)                                                 // use RB4 as IR input on PIC (C18 or XC8 compiler)
140 #  if defined(__12F1840)
141 #    define IRMP_PIN                            RA5                     // on 12F1840 with XC8 compiler
142 #  else
143 #    define IRMP_PIN                            PORTBbits.RB4           // PIC C18
144 #  endif
145
146 /*---------------------------------------------------------------------------------------------------------------------------------------------------
147  * Change hardware pin here for PIC CCS compiler
148  *---------------------------------------------------------------------------------------------------------------------------------------------------
149  */
150 #elif defined (PIC_CCS)
151 #  define IRMP_PIN                              PIN_B4                  // use PB4 as IR input on PIC (CCS compiler)
152
153 /*---------------------------------------------------------------------------------------------------------------------------------------------------
154  * Change hardware pin here for ARM STM32
155  *---------------------------------------------------------------------------------------------------------------------------------------------------
156  */
157 #elif defined (ARM_STM32)                                               // use C13 as IR input on STM32
158 #  define IRMP_PORT_LETTER                      C
159 #  define IRMP_BIT_NUMBER                       13
160
161 /*---------------------------------------------------------------------------------------------------------------------------------------------------
162  * Hardware pin for ARM STM32 (HAL) - don't change here, define IRMP_RECEIVE_GPIO_Port & IRMP_RECEIVE_PIN in STM32Cube (Main.h)
163  *---------------------------------------------------------------------------------------------------------------------------------------------------
164  */
165 #elif defined (ARM_STM32_HAL)                                           // STM32: IRMP_RECEIVE_GPIO_Port & IRMP_RECEIVE_PIN must be defined in STM32Cube
166 #  define IRMP_PORT_LETTER                      IRMP_Receive_GPIO_Port
167 #  define IRMP_BIT_NUMBER                       IRMP_Receive_Pin
168
169 /*---------------------------------------------------------------------------------------------------------------------------------------------------
170  * Change hardware pin here for Stellaris ARM Cortex M4
171  *---------------------------------------------------------------------------------------------------------------------------------------------------
172  */
173 #elif defined (STELLARIS_ARM_CORTEX_M4)                                 // use B4 as IR input on Stellaris LM4F
174 #  define IRMP_PORT_LETTER                      B
175 #  define IRMP_BIT_NUMBER                       4
176
177 /*---------------------------------------------------------------------------------------------------------------------------------------------------
178  * Change hardware pin here for STM8
179  *---------------------------------------------------------------------------------------------------------------------------------------------------
180  */
181 #elif defined (SDCC_STM8)                                               // use PA1 as IR input on STM8
182 #  define IRMP_PORT_LETTER                      A
183 #  define IRMP_BIT_NUMBER                       1
184
185 /*---------------------------------------------------------------------------------------------------------------------------------------------------
186  * Change hardware pin here for ESP8266
187  *---------------------------------------------------------------------------------------------------------------------------------------------------
188  */
189 #elif defined (__xtensa__)
190 #  define IRMP_BIT_NUMBER                       12                      // use GPIO12 (Pin 7 UEXT) on ESP8266-EVB evaluation board
191
192 /*---------------------------------------------------------------------------------------------------------------------------------------------------
193  * Change hardware pin here for Teensy 3.x with teensyduino gcc compiler
194  *---------------------------------------------------------------------------------------------------------------------------------------------------
195  */
196 #elif defined (TEENSY_ARM_CORTEX_M4)
197 #  define IRMP_PIN                              1                       // use Digital pin 1 as IR input on Teensy
198
199 /*---------------------------------------------------------------------------------------------------------------------------------------------------
200  * Change hardware pin here for MBED
201  *---------------------------------------------------------------------------------------------------------------------------------------------------
202  */
203 #elif defined(__MBED__)
204 #  define IRMP_PIN                              P0_22                   // use P1_27 on LPC1347
205 #  define IRMP_PINMODE                          PullUp                  // hardware dependent
206
207 /*---------------------------------------------------------------------------------------------------------------------------------------------------
208  * Change hardware pin here for ChibiOS HAL
209  *---------------------------------------------------------------------------------------------------------------------------------------------------
210  */
211 #elif defined(_CHIBIOS_HAL_)
212 #  define IRMP_PIN                              LINE_IR_IN              // use pin names as defined in the board config file, prefixed with "LINE_"
213 #  define IRMP_LOGGING_SD                       SD1                     // the ChibiOS HAL Serial Driver instance to log to
214                                                                         // (when IRMP_LOGGING is enabled below). 
215                                                                         // Make sure SERIAL_BUFFERS_SIZE is large enough when enabling logging
216
217 /*---------------------------------------------------------------------------------------------------------------------------------------------------
218  * Handling of unknown target system: DON'T CHANGE
219  *---------------------------------------------------------------------------------------------------------------------------------------------------
220  */
221 #elif !defined (UNIX_OR_WINDOWS)
222 #  error target system not defined.
223 #endif
224
225 /*---------------------------------------------------------------------------------------------------------------------------------------------------
226  * Set IRMP_LOGGING to 1 if want to log data to UART with 9600Bd
227  *---------------------------------------------------------------------------------------------------------------------------------------------------
228  */
229 #ifndef IRMP_LOGGING
230 #  define IRMP_LOGGING                          0       // 1: log IR signal (scan), 0: do not. default is 0
231 #endif
232
233 /*---------------------------------------------------------------------------------------------------------------------------------------------------
234  * Use external logging routines
235  * If you enable external logging, you have also to enable IRMP_LOGGING above
236  *---------------------------------------------------------------------------------------------------------------------------------------------------
237  */
238 #ifndef IRMP_EXT_LOGGING
239 #  define IRMP_EXT_LOGGING                      0       // 1: use external logging, 0: do not. default is 0
240 #endif
241
242 /*---------------------------------------------------------------------------------------------------------------------------------------------------
243  * Set IRMP_PROTOCOL_NAMES to 1 if want to access protocol names (for logging etc), costs ~300 bytes RAM!
244  *---------------------------------------------------------------------------------------------------------------------------------------------------
245  */
246 #ifndef IRMP_PROTOCOL_NAMES
247 #  define IRMP_PROTOCOL_NAMES                   0       // 1: access protocol names, 0: do not. default is 0
248 #endif
249
250 /*---------------------------------------------------------------------------------------------------------------------------------------------------
251  * Use Callbacks to indicate input signal
252  *---------------------------------------------------------------------------------------------------------------------------------------------------
253  */
254 #ifndef IRMP_USE_CALLBACK
255 #  define IRMP_USE_CALLBACK                     0       // 1: use callbacks. 0: do not. default is 0
256 #endif
257
258 /*---------------------------------------------------------------------------------------------------------------------------------------------------
259  * Call the user-provided irmp_idle() function when IRMP is idle.
260  * Can be used to disable the timer irq and enter a sleep mode to save power
261  *---------------------------------------------------------------------------------------------------------------------------------------------------
262  */
263 #ifndef IRMP_USE_IDLE_CALL
264 #  define IRMP_USE_IDLE_CALL                    0       // 1: use idle calls. 0: do not. default is 0
265 #endif
266
267 /*---------------------------------------------------------------------------------------------------------------------------------------------------
268  * Use ChibiOS Events to signal that valid IR data was received
269  *---------------------------------------------------------------------------------------------------------------------------------------------------
270  */
271 #if defined(_CHIBIOS_RT_) || defined(_CHIBIOS_NIL_)
272
273 #  ifndef IRMP_USE_EVENT
274 #    define IRMP_USE_EVENT                      0       // 1: use event. 0: do not. default is 0
275 #  endif
276
277 #  if IRMP_USE_EVENT == 1 && !defined(IRMP_EVENT_BIT)
278 #    define IRMP_EVENT_BIT                      1                     // event flag or bit to send
279 #  endif
280 #  if IRMP_USE_EVENT == 1 && !defined(IRMP_EVENT_THREAD_PTR)
281 #    define IRMP_EVENT_THREAD_PTR               ir_receive_thread_p   // pointer to the thread to send the event to
282 extern thread_t *IRMP_EVENT_THREAD_PTR;                               // the pointer must be defined and initialized elsewhere
283 #  endif
284
285 #endif // _CHIBIOS_RT_ || _CHIBIOS_NIL_
286
287 #endif // _IRMPCONFIG_STAGE2_H_