1 /*---------------------------------------------------------------------------------------------------------------------------------------------------
2 * irmpsystem.h - system specific includes and defines
4 * Copyright (c) 2009-2019 Frank Meyer - frank(at)fli4l.de
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 *---------------------------------------------------------------------------------------------------------------------------------------------------
13 #ifndef _IRMPSYSTEM_H_
14 #define _IRMPSYSTEM_H_
16 #if !defined(_IRMP_H_) && !defined(_IRSND_H_)
17 # error please include only irmp.h or irsnd.h, not irmpsystem.h
20 #if defined(__18CXX) // Microchip PIC C18 compiler
22 #elif defined(__XC8) // PIC XC8 compiler
25 #elif defined(__PCM__) || defined(__PCB__) || defined(__PCH__) // CCS PIC compiler
27 #elif defined(STM32L1XX_MD) || defined(STM32L1XX_MDP) || defined(STM32L1XX_HD) // ARM STM32
28 # include <stm32l1xx.h>
30 # define ARM_STM32L1XX
31 # define F_CPU (SysCtlClockGet())
32 #elif defined(STM32F10X_LD) || defined(STM32F10X_LD_VL) \
33 || defined(STM32F10X_MD) || defined(STM32F10X_MD_VL) \
34 || defined(STM32F10X_HD) || defined(STM32F10X_HD_VL) \
35 || defined(STM32F10X_XL) || defined(STM32F10X_CL) // ARM STM32
36 # include <stm32f10x.h>
38 # define ARM_STM32F10X
39 # define F_CPU (SysCtlClockGet())
40 #elif defined(STM32F4XX) // ARM STM32
41 # include <stm32f4xx.h>
43 # define ARM_STM32F4XX
44 #elif defined(USE_HAL_DRIVER) // ARM STM32 with HAL Library
46 # if defined(_IRSND_H_)
49 # define ARM_STM32_HAL
50 # define F_CPU SystemCoreClock
51 #elif defined(__SDCC_stm8) // STM8
53 #elif defined(TARGET_IS_BLIZZARD_RA2) // TI Stellaris (tested on Stellaris Launchpad with Code Composer Studio)
54 # define STELLARIS_ARM_CORTEX_M4
55 # define F_CPU (SysCtlClockGet())
56 #elif defined(__xtensa__) // ESP8266 (Arduino)
63 # define uint_fast8_t uint8_t
64 # define uint_fast16_t uint16_t
65 #elif defined(TEENSYDUINO) && (defined(__MK20DX256__) || defined(__MK20DX128__)) // Teensy 3.x (tested on Teensy 3.1 in Arduino 1.6.5 / Teensyduino 1.2.5)
66 # include <core_pins.h>
67 # define TEENSY_ARM_CORTEX_M4
68 #elif defined(unix) || defined(WIN32) || defined(__APPLE__) // Unix/Linux or Windows or Apple
69 # define UNIX_OR_WINDOWS
70 #elif defined(__MBED__) // mbed platform
71 // #include "mbed.h" // if mbed.h is used, source must be compiled as cpp
73 #elif defined(IRMP_CHIBIOS_HAL) // ChibiOS HAL
76 # define ATMEL_AVR // ATMEL AVR
81 #ifdef UNIX_OR_WINDOWS // Analyze on Unix/Linux or Windows
84 # define F_CPU 8000000L
89 typedef unsigned char uint8_t;
90 typedef unsigned short uint16_t;
95 #if defined(ATMEL_AVR)
99 # include <util/delay.h>
100 # include <avr/pgmspace.h>
101 # include <avr/interrupt.h>
102 # define IRSND_OC2 0 // OC2
103 # define IRSND_OC2A 1 // OC2A
104 # define IRSND_OC2B 2 // OC2B
105 # define IRSND_OC0 3 // OC0
106 # define IRSND_OC0A 4 // OC0A
107 # define IRSND_OC0B 5 // OC0B
109 # define IRSND_XMEGA_OC0A 0 // OC0A
110 # define IRSND_XMEGA_OC0B 1 // OC0B
111 # define IRSND_XMEGA_OC0C 2 // OC0C
112 # define IRSND_XMEGA_OC0D 3 // OC0D
113 # define IRSND_XMEGA_OC1A 4 // OC1A
114 # define IRSND_XMEGA_OC1B 5 // OC1B
116 #elif defined(STELLARIS_ARM_CORTEX_M4)
118 # include "inc/hw_ints.h"
119 # include "inc/hw_memmap.h"
120 # include "inc/hw_types.h"
121 # include "inc/hw_gpio.h"
122 # include "driverlib/fpu.h"
123 # include "driverlib/sysctl.h"
124 # include "driverlib/interrupt.h"
125 # include "driverlib/gpio.h"
126 # include "driverlib/rom.h"
127 # include "driverlib/systick.h"
128 # include "driverlib/pin_map.h"
129 # include "driverlib/timer.h"
131 # define memcpy_P memcpy
132 # define APP_SYSTICKS_PER_SEC 32
134 #elif defined(ARM_STM32F10X)
136 # include "stm32f10x_gpio.h"
137 # include "stm32f10x_rcc.h"
138 # include "stm32f10x_tim.h"
141 # define memcpy_P memcpy
143 #elif defined(SDCC_STM8)
147 # define memcpy_P memcpy
148 # define __attribute__(x)
149 # define uint_fast8_t uint8_t
150 # define uint_fast16_t uint16_t
152 #elif defined(TEENSY_ARM_CORTEX_M4)
154 # define memcpy_P memcpy
156 #elif defined(__xtensa__)
158 # define memcpy_P memcpy
160 #elif defined(__MBED__)
162 # define memcpy_P memcpy
166 # define memcpy_P memcpy
170 #if defined(PIC_CCS) || defined(PIC_C18)
171 typedef unsigned char uint8_t;
172 typedef unsigned short uint16_t;
173 typedef unsigned char uint_fast8_t;
174 typedef unsigned short uint_fast16_t;
177 #if defined (PIC_C18) // PIC C18 or XC8 compiler
178 # include <p18cxxx.h> // main PIC18 h file
180 # include <timers.h> // timer lib
181 # include <pwm.h> // pwm lib
183 # define IRSND_PIC_CCP1 1 // PIC C18 RC2 = PWM1 module
184 # define IRSND_PIC_CCP2 2 // PIC C18 RC1 = PWM2 module
196 uint8_t protocol; // protocol, e.g. NEC_PROTOCOL
197 uint16_t address; // address
198 uint32_t command; // command
199 uint8_t flags; // flags, e.g. repetition
202 #else // not IRMP_32_BIT == 1
205 #define IRMP_PACKED_STRUCT
207 #define IRMP_PACKED_STRUCT __attribute__ ((__packed__))
210 typedef struct IRMP_PACKED_STRUCT
212 uint8_t protocol; // protocol, e.g. NEC_PROTOCOL
213 uint16_t address; // address
214 uint16_t command; // command
215 uint8_t flags; // flags, e.g. repetition
218 #endif // IRMP_32_BIT == 1
220 #endif // _IRMPSYSTEM_H_