]> sigrok.org Git - libsigrokdecode.git/blob - irmp/irmpsystem.h
avr_isp: Add more parts
[libsigrokdecode.git] / irmp / irmpsystem.h
1 /*---------------------------------------------------------------------------------------------------------------------------------------------------
2  * irmpsystem.h - system specific includes and defines
3  *
4  * Copyright (c) 2009-2019 Frank Meyer - frank(at)fli4l.de
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *---------------------------------------------------------------------------------------------------------------------------------------------------
11  */
12
13 #ifndef _IRMPSYSTEM_H_
14 #define _IRMPSYSTEM_H_
15
16 #if !defined(_IRMP_H_) && !defined(_IRSND_H_)
17 #  error please include only irmp.h or irsnd.h, not irmpsystem.h
18 #endif
19
20 /* Workaround required when building with xtensa (cross-)toolchains. */
21 #ifdef __xtensa__
22 #undef __xtensa__
23 #endif
24
25 #if defined(__18CXX)                                                                // Microchip PIC C18 compiler
26 #  define PIC_C18
27 #elif defined(__XC8)                                                                // PIC XC8 compiler
28 #  include <xc.h>
29 #  define PIC_C18
30 #elif defined(__PCM__) || defined(__PCB__) || defined(__PCH__)                      // CCS PIC compiler
31 #  define PIC_CCS
32 #elif defined(STM32L1XX_MD) || defined(STM32L1XX_MDP) || defined(STM32L1XX_HD)      // ARM STM32
33 #  include <stm32l1xx.h>
34 #  define ARM_STM32
35 #  define ARM_STM32L1XX
36 #  define F_CPU (SysCtlClockGet())
37 #elif defined(STM32F10X_LD) || defined(STM32F10X_LD_VL) \
38    || defined(STM32F10X_MD) || defined(STM32F10X_MD_VL) \
39    || defined(STM32F10X_HD) || defined(STM32F10X_HD_VL) \
40    || defined(STM32F10X_XL) || defined(STM32F10X_CL)                                // ARM STM32
41 #  include <stm32f10x.h>
42 #  define ARM_STM32
43 #  define ARM_STM32F10X
44 #  define F_CPU (SysCtlClockGet())
45 #elif defined(STM32F4XX)                                                            // ARM STM32
46 #  include <stm32f4xx.h>
47 #  define ARM_STM32
48 #  define ARM_STM32F4XX
49 #elif defined(USE_HAL_DRIVER)                                                       // ARM STM32 with HAL Library
50 #  include "gpio.h"
51 #  if defined(_IRSND_H_)
52 #    include"tim.h"
53 #  endif
54 #  define ARM_STM32_HAL
55 #  define F_CPU SystemCoreClock
56 #elif defined(__SDCC_stm8)                                                          // STM8
57 #  define SDCC_STM8
58 #elif defined(TARGET_IS_BLIZZARD_RA2)                                               // TI Stellaris (tested on Stellaris Launchpad with Code Composer Studio)
59 #  define STELLARIS_ARM_CORTEX_M4
60 #  define F_CPU (SysCtlClockGet())
61 #elif defined(__xtensa__)                                                           // ESP8266 (Arduino)
62 #  include "Arduino.h"
63 #  include "ets_sys.h"
64 #  include "osapi.h"
65 #  include "gpio.h"
66 #  include "os_type.h"
67 #  include "c_types.h"
68 #  define uint_fast8_t uint8_t
69 #  define uint_fast16_t uint16_t
70 #elif defined(TEENSYDUINO) && (defined(__MK20DX256__) || defined(__MK20DX128__))    // Teensy 3.x (tested on Teensy 3.1 in Arduino 1.6.5 / Teensyduino 1.2.5)
71 #  include <core_pins.h>
72 #  define TEENSY_ARM_CORTEX_M4
73 #elif defined(unix) || defined(WIN32) || defined(__APPLE__)                         // Unix/Linux or Windows or Apple
74 #  define UNIX_OR_WINDOWS
75 #elif defined(__MBED__)                                                             // mbed platform
76 // #include "mbed.h"                                                                // if mbed.h is used, source must be compiled as cpp
77 #include "gpio_api.h"
78 #elif defined(IRMP_CHIBIOS_HAL)                                                     // ChibiOS HAL
79 #  include "hal.h"
80 #else
81 #  define ATMEL_AVR                                                                 // ATMEL AVR
82 #endif
83
84 #include <string.h>
85
86 #ifdef UNIX_OR_WINDOWS                                                              // Analyze on Unix/Linux or Windows
87 #  include <stdio.h>
88 #  include <stdlib.h>
89 #  define F_CPU 8000000L
90 #  define ANALYZE
91 #  ifdef unix
92 #    include <stdint.h>
93 #  else
94 typedef unsigned char                   uint8_t;
95 typedef unsigned short                  uint16_t;
96 #  endif
97 #endif
98
99
100 #if defined(ATMEL_AVR)
101 #  include <stdint.h>
102 #  include <stdio.h>
103 #  include <avr/io.h>
104 #  include <util/delay.h>
105 #  include <avr/pgmspace.h>
106 #  include <avr/interrupt.h>
107 #  define IRSND_OC2                     0       // OC2
108 #  define IRSND_OC2A                    1       // OC2A
109 #  define IRSND_OC2B                    2       // OC2B
110 #  define IRSND_OC0                     3       // OC0
111 #  define IRSND_OC0A                    4       // OC0A
112 #  define IRSND_OC0B                    5       // OC0B
113
114 #  define IRSND_XMEGA_OC0A              0       // OC0A
115 #  define IRSND_XMEGA_OC0B              1       // OC0B
116 #  define IRSND_XMEGA_OC0C              2       // OC0C
117 #  define IRSND_XMEGA_OC0D              3       // OC0D
118 #  define IRSND_XMEGA_OC1A              4       // OC1A
119 #  define IRSND_XMEGA_OC1B              5       // OC1B
120
121 #elif defined(STELLARIS_ARM_CORTEX_M4)
122
123 #  include "inc/hw_ints.h"
124 #  include "inc/hw_memmap.h"
125 #  include "inc/hw_types.h"
126 #  include "inc/hw_gpio.h"
127 #  include "driverlib/fpu.h"
128 #  include "driverlib/sysctl.h"
129 #  include "driverlib/interrupt.h"
130 #  include "driverlib/gpio.h"
131 #  include "driverlib/rom.h"
132 #  include "driverlib/systick.h"
133 #  include "driverlib/pin_map.h"
134 #  include "driverlib/timer.h"
135 #  define PROGMEM
136 #  define memcpy_P                      memcpy
137 #  define APP_SYSTICKS_PER_SEC          32
138
139 #elif defined(ARM_STM32F10X)
140
141 #  include "stm32f10x_gpio.h"
142 #  include "stm32f10x_rcc.h"
143 #  include "stm32f10x_tim.h"
144 #  include "misc.h"
145 #  define PROGMEM
146 #  define memcpy_P                      memcpy
147
148 #elif defined(SDCC_STM8)
149
150 #  include "stm8s.h"
151 #  define PROGMEM
152 #  define memcpy_P                      memcpy
153 #  define __attribute__(x)
154 #  define uint_fast8_t                  uint8_t
155 #  define uint_fast16_t                 uint16_t
156
157 #elif defined(TEENSY_ARM_CORTEX_M4)
158 #  define PROGMEM
159 #  define memcpy_P                      memcpy
160
161 #elif defined(__xtensa__)
162 #  define PROGMEM
163 #  define memcpy_P                      memcpy
164
165 #elif defined(__MBED__)
166 #  define PROGMEM
167 #  define memcpy_P                      memcpy
168
169 #else
170 #  define PROGMEM
171 #  define memcpy_P                      memcpy
172
173 #endif
174
175 #if defined(PIC_CCS) || defined(PIC_C18)
176 typedef unsigned char                   uint8_t;
177 typedef unsigned short                  uint16_t;
178 typedef unsigned char                   uint_fast8_t;
179 typedef unsigned short                  uint_fast16_t;
180 #endif
181
182 #if defined (PIC_C18)                                                               // PIC C18 or XC8 compiler
183 #  include <p18cxxx.h>                                                              // main PIC18 h file
184 #ifndef __XC8
185 #  include <timers.h>                                                               // timer lib
186 #  include <pwm.h>                                                                  // pwm lib
187 #endif
188 #  define IRSND_PIC_CCP1                1                                           // PIC C18 RC2 = PWM1 module
189 #  define IRSND_PIC_CCP2                2                                           // PIC C18 RC1 = PWM2 module
190 #endif
191
192 #ifndef TRUE
193 #  define TRUE                          1
194 #  define FALSE                         0
195 #endif
196
197 #if IRMP_32_BIT == 1
198
199 typedef struct
200 {
201     uint8_t                             protocol;                                   // protocol, e.g. NEC_PROTOCOL
202     uint16_t                            address;                                    // address
203     uint32_t                            command;                                    // command
204     uint8_t                             flags;                                      // flags, e.g. repetition
205 } IRMP_DATA;
206
207 #else // not IRMP_32_BIT == 1
208
209 #if defined(PIC_C18)
210 #define IRMP_PACKED_STRUCT
211 #else
212 #define IRMP_PACKED_STRUCT              __attribute__ ((__packed__))
213 #endif
214
215 typedef struct IRMP_PACKED_STRUCT
216 {
217     uint8_t                             protocol;                                   // protocol, e.g. NEC_PROTOCOL
218     uint16_t                            address;                                    // address
219     uint16_t                            command;                                    // command
220     uint8_t                             flags;                                      // flags, e.g. repetition
221 } IRMP_DATA;
222
223 #endif // IRMP_32_BIT == 1
224
225 #endif // _IRMPSYSTEM_H_