MSP VTX device (#2007)
[ExpressLRS.git] / src / include / targets.h
blob8fe5dbafed4ee2bcc0154a3474dcb21caf0f8467
1 #pragma once
2 #if !defined TARGET_NATIVE
3 #include <Arduino.h>
4 #endif
6 #define UNDEF_PIN (-1)
8 /// General Features ///
9 #define LED_MAX_BRIGHTNESS 50 //0..255 for max led brightness
11 /////////////////////////
13 #define WORD_ALIGNED_ATTR __attribute__((aligned(4)))
15 #ifdef PLATFORM_STM32
16 /* ICACHE_RAM_ATTR1 is always linked into RAM */
17 #define ICACHE_RAM_ATTR1 __section(".ram_code")
18 /* ICACHE_RAM_ATTR2 is linked into RAM only if enough space */
19 #if RAM_CODE_LIMITED
20 #define ICACHE_RAM_ATTR2
21 #else
22 #define ICACHE_RAM_ATTR2 __section(".ram_code")
23 #endif
24 #define ICACHE_RAM_ATTR //nothing//
25 #else
26 #undef ICACHE_RAM_ATTR //fix to allow both esp32 and esp8266 to use ICACHE_RAM_ATTR for mapping to IRAM
27 #define ICACHE_RAM_ATTR IRAM_ATTR
28 #endif
30 #if defined(TARGET_NATIVE)
31 #define IRAM_ATTR
32 #include "native.h"
33 #endif
35 #ifndef DMA_ATTR
36 #define DMA_ATTR
37 #endif
40 * Features
41 * define features based on pins before defining pins as UNDEF_PIN
43 #if defined(GPIO_PIN_FAN_EN)
44 #define HAS_FAN
45 #endif
46 #if defined(USE_OLED_I2C) || defined(USE_OLED_SPI) || defined(USE_OLED_SPI_SMALL) || defined(HAS_TFT_SCREEN)
47 #define HAS_SCREEN
48 #endif
49 #if defined(GPIO_PIN_SPI_VTX_NSS)
50 #if !defined(HAS_VTX_SPI)
51 #define HAS_VTX_SPI
52 #define HAS_MSP_VTX
53 #define OPT_HAS_VTX_SPI true
54 #endif
55 #else
56 #define OPT_HAS_VTX_SPI false
57 #endif
59 #ifndef USE_TX_BACKPACK
60 #define OPT_USE_TX_BACKPACK false
61 #elif !defined(OPT_USE_TX_BACKPACK)
62 #define OPT_USE_TX_BACKPACK true
63 #endif
65 #ifndef HAS_THERMAL
66 #define OPT_HAS_THERMAL false
67 #elif !defined(OPT_HAS_THERMAL)
68 #define OPT_HAS_THERMAL true
69 #endif
71 #ifndef HAS_GSENSOR
72 #define OPT_HAS_GSENSOR false
73 #elif !defined(OPT_HAS_GSENSOR)
74 #define OPT_HAS_GSENSOR true
75 #endif
77 #if defined(GPIO_PIN_SDA) && defined(GPIO_PIN_SCL)
78 #define USE_I2C
79 #else
80 #define GPIO_PIN_SDA UNDEF_PIN
81 #define GPIO_PIN_SCL UNDEF_PIN
82 #endif
84 #ifndef GPIO_PIN_BUFFER_OE
85 #define GPIO_PIN_BUFFER_OE UNDEF_PIN
86 #endif
87 #ifndef GPIO_PIN_SCK
88 #define GPIO_PIN_SCK UNDEF_PIN
89 #endif
90 #ifndef GPIO_PIN_NSS_2
91 #define GPIO_PIN_NSS_2 UNDEF_PIN
92 #endif
93 #ifndef GPIO_PIN_RST
94 #define GPIO_PIN_RST UNDEF_PIN
95 #endif
96 #ifndef GPIO_PIN_BUSY
97 #define GPIO_PIN_BUSY UNDEF_PIN
98 #endif
99 #ifndef GPIO_PIN_BUSY_2
100 #define GPIO_PIN_BUSY_2 UNDEF_PIN
101 #endif
102 #ifndef GPIO_PIN_DIO0
103 #define GPIO_PIN_DIO0 UNDEF_PIN
104 #endif
105 #ifndef GPIO_PIN_DIO0_2
106 #define GPIO_PIN_DIO0_2 UNDEF_PIN
107 #endif
108 #ifndef GPIO_PIN_DIO1
109 #define GPIO_PIN_DIO1 UNDEF_PIN
110 #endif
111 #ifndef GPIO_PIN_DIO1_2
112 #define GPIO_PIN_DIO1_2 UNDEF_PIN
113 #endif
114 #ifndef GPIO_PIN_DIO2
115 #define GPIO_PIN_DIO2 UNDEF_PIN
116 #endif
117 #ifndef GPIO_PIN_PA_ENABLE
118 #define GPIO_PIN_PA_ENABLE UNDEF_PIN
119 #endif
120 #ifndef GPIO_PIN_RX_ENABLE
121 #define GPIO_PIN_RX_ENABLE UNDEF_PIN
122 #endif
123 #ifndef GPIO_PIN_RX_ENABLE_2
124 #define GPIO_PIN_RX_ENABLE_2 UNDEF_PIN
125 #endif
126 #ifndef GPIO_PIN_TX_ENABLE
127 #define GPIO_PIN_TX_ENABLE UNDEF_PIN
128 #endif
129 #ifndef GPIO_PIN_TX_ENABLE_2
130 #define GPIO_PIN_TX_ENABLE_2 UNDEF_PIN
131 #endif
132 #ifndef GPIO_PIN_ANT_CTRL
133 #define GPIO_PIN_ANT_CTRL UNDEF_PIN
134 #endif
135 #ifndef GPIO_PIN_ANT_CTRL_COMPL
136 #define GPIO_PIN_ANT_CTRL_COMPL UNDEF_PIN
137 #endif
138 #ifndef GPIO_PIN_RFamp_APC1
139 #define GPIO_PIN_RFamp_APC1 UNDEF_PIN
140 #endif
141 #ifndef GPIO_PIN_RFamp_APC2
142 #define GPIO_PIN_RFamp_APC2 UNDEF_PIN
143 #endif
144 #ifndef POWER_OUTPUT_FIXED
145 #define POWER_OUTPUT_FIXED -99
146 #endif
147 #ifndef GPIO_PIN_FAN_EN
148 #define GPIO_PIN_FAN_EN UNDEF_PIN
149 #endif
150 #ifndef GPIO_PIN_FAN_PWM
151 #define GPIO_PIN_FAN_PWM UNDEF_PIN
152 #endif
153 #ifndef GPIO_PIN_FAN_TACHO
154 #define GPIO_PIN_FAN_TACHO UNDEF_PIN
155 #endif
156 #ifndef GPIO_PIN_OLED_MOSI
157 #define GPIO_PIN_OLED_MOSI UNDEF_PIN
158 #endif
159 #ifndef GPIO_PIN_OLED_CS
160 #define GPIO_PIN_OLED_CS UNDEF_PIN
161 #endif
162 #ifndef GPIO_PIN_OLED_DC
163 #define GPIO_PIN_OLED_DC UNDEF_PIN
164 #endif
167 #ifndef GPIO_PIN_FIVE_WAY_INPUT1
168 #define GPIO_PIN_FIVE_WAY_INPUT1 UNDEF_PIN
169 #endif
170 #ifndef GPIO_PIN_FIVE_WAY_INPUT2
171 #define GPIO_PIN_FIVE_WAY_INPUT2 UNDEF_PIN
172 #endif
173 #ifndef GPIO_PIN_FIVE_WAY_INPUT3
174 #define GPIO_PIN_FIVE_WAY_INPUT3 UNDEF_PIN
175 #endif
178 #ifndef GPIO_PIN_OLED_SCK
179 #define GPIO_PIN_OLED_SCK GPIO_PIN_SCL
180 #endif
181 #ifndef GPIO_PIN_OLED_SDA
182 #define GPIO_PIN_OLED_SDA GPIO_PIN_SDA
183 #endif
185 #if !defined(BACKPACK_LOGGING_BAUD)
186 #define BACKPACK_LOGGING_BAUD 460800
187 #endif
188 #ifndef GPIO_PIN_BACKPACK_BOOT
189 #define GPIO_PIN_BACKPACK_BOOT UNDEF_PIN
190 #endif
192 #ifndef GPIO_PIN_SPI_VTX_NSS
193 #define GPIO_PIN_SPI_VTX_NSS UNDEF_PIN
194 #endif
197 #if defined(TARGET_TX)
198 #if defined(PLATFORM_ESP32)
199 #ifndef GPIO_PIN_DEBUG_RX
200 #define GPIO_PIN_DEBUG_RX 3
201 #endif
202 #ifndef GPIO_PIN_DEBUG_TX
203 #define GPIO_PIN_DEBUG_TX 1
204 #endif
205 #elif defined(PLATFORM_ESP8266)
206 #ifndef GPIO_PIN_DEBUG_RX
207 #define GPIO_PIN_DEBUG_RX UNDEF_PIN
208 #endif
209 #ifndef GPIO_PIN_DEBUG_TX
210 #define GPIO_PIN_DEBUG_TX UNDEF_PIN
211 #endif
212 #endif
213 #if !defined(TARGET_UNIFIED_TX)
214 #if defined(DEBUG_LOG) || defined(DEBUG_LOG_VERBOSE) || defined(USE_TX_BACKPACK)
215 #if GPIO_PIN_RCSIGNAL_TX == GPIO_PIN_DEBUG_TX || GPIO_PIN_RCSIGNAL_TX == GPIO_PIN_DEBUG_RX
216 #error "Cannot debug out the RC signal port!"
217 #endif
218 #if !defined(GPIO_PIN_DEBUG_RX) || !defined(GPIO_PIN_DEBUG_TX) || GPIO_PIN_DEBUG_RX == UNDEF_PIN || GPIO_PIN_DEBUG_TX == UNDEF_PIN
219 #error "When using DEBUG_LOG, DEBUG_LOG_VERBOSE or USE_TX_BACKPACK you must define both GPIO_PIN_DEBUG_RX and GPIO_PIN_DEBUG_TX"
220 #endif
221 #endif
222 #endif
223 #else // TARGET_RX
224 #ifndef GPIO_PIN_RCSIGNAL_TX_SBUS
225 #define GPIO_PIN_RCSIGNAL_TX_SBUS UNDEF_PIN
226 #endif
227 #ifndef GPIO_PIN_RCSIGNAL_RX_SBUS
228 #define GPIO_PIN_RCSIGNAL_RX_SBUS UNDEF_PIN
229 #endif
230 #if defined(PLATFORM_ESP8266)
231 #ifndef GPIO_PIN_DEBUG_RX
232 #define GPIO_PIN_DEBUG_RX 3
233 #endif
234 #ifndef GPIO_PIN_DEBUG_TX
235 #define GPIO_PIN_DEBUG_TX 1
236 #endif
237 #endif
238 #endif
240 #if defined(DEBUG_CRSF_NO_OUTPUT)
241 #define OPT_CRSF_RCVR_NO_SERIAL true
242 #elif defined(TARGET_UNIFIED_RX)
243 extern bool pwmSerialDefined;
245 #define OPT_CRSF_RCVR_NO_SERIAL (GPIO_PIN_RCSIGNAL_RX == UNDEF_PIN && GPIO_PIN_RCSIGNAL_TX == UNDEF_PIN && !pwmSerialDefined)
246 #else
247 #define OPT_CRSF_RCVR_NO_SERIAL false
248 #endif
250 #if defined(USE_ANALOG_VBAT) && !defined(GPIO_ANALOG_VBAT)
251 #define GPIO_ANALOG_VBAT A0
252 #if !defined(ANALOG_VBAT_SCALE)
253 #define ANALOG_VBAT_SCALE 1
254 #endif
255 #endif
257 #if defined(RADIO_SX128X)
258 #define Regulatory_Domain_ISM_2400 1
259 // ISM 2400 band is in use => undefine other requlatory domain defines
260 #undef Regulatory_Domain_AU_915
261 #undef Regulatory_Domain_EU_868
262 #undef Regulatory_Domain_IN_866
263 #undef Regulatory_Domain_FCC_915
264 #undef Regulatory_Domain_AU_433
265 #undef Regulatory_Domain_EU_433
267 #elif defined(RADIO_SX127X)
268 #if !(defined(Regulatory_Domain_AU_915) || defined(Regulatory_Domain_FCC_915) || \
269 defined(Regulatory_Domain_EU_868) || defined(Regulatory_Domain_IN_866) || \
270 defined(Regulatory_Domain_AU_433) || defined(Regulatory_Domain_EU_433) || \
271 defined(UNIT_TEST))
272 #error "Regulatory_Domain is not defined for 900MHz device. Check user_defines.txt!"
273 #endif
274 #else
275 #error "Either RADIO_SX127X or RADIO_SX128X must be defined!"
276 #endif
278 #if defined(TARGET_UNIFIED_TX) || defined(TARGET_UNIFIED_RX)
279 #include "hardware.h"
280 #endif