Missing define to activate TABLE_VIDEO_SYSTEM (#12200)
[betaflight.git] / src / main / target / common_post.h
blob1d060319c055f3cd25b6afc81e1d0f36eeea9eea
1 /*
2 * This file is part of Cleanflight and Betaflight.
4 * Cleanflight and Betaflight are free software. You can redistribute
5 * this software and/or modify this software under the terms of the
6 * GNU General Public License as published by the Free Software
7 * Foundation, either version 3 of the License, or (at your option)
8 * any later version.
10 * Cleanflight and Betaflight are distributed in the hope that they
11 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 * See the GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this software.
18 * If not, see <http://www.gnu.org/licenses/>.
21 // Touch up configuration
23 #pragma once
25 #include "build/version.h"
29 BEGIN HARDWARE INCLUSIONS
31 Simplified options for the moment, i.e. adding USE_MAG or USE_BARO and the entire driver suite is added.
32 In the future we can move to specific drivers being added only - to save flash space.
35 #if defined(USE_MAG) && !defined(USE_FAKE_MAG)
36 #define USE_MAG_DATA_READY_SIGNAL
37 #define USE_MAG_HMC5883
38 #define USE_MAG_SPI_HMC5883
39 #define USE_MAG_QMC5883
40 #define USE_MAG_LIS3MDL
41 #define USE_MAG_AK8963
42 #define USE_MAG_MPU925X_AK8963
43 #define USE_MAG_SPI_AK8963
44 #define USE_MAG_AK8975
45 #endif
47 #if defined(USE_RX_CC2500)
49 #if !defined(USE_RX_SPI)
50 #define USE_RX_SPI
51 #endif
53 #define USE_RX_CC2500_SPI_PA_LNA
54 #define USE_RX_CC2500_SPI_DIVERSITY
56 #define USE_RX_SFHSS_SPI
57 #define USE_RX_REDPINE_SPI
59 #define USE_RX_FRSKY_SPI_D
60 #define USE_RX_FRSKY_SPI_X
61 #define USE_RX_FRSKY_SPI
62 #define USE_RX_FRSKY_SPI_TELEMETRY
64 #define USE_RX_FLYSKY
65 #define USE_RX_FLYSKY_SPI_LED
66 #define USE_RX_SPEKTRUM
67 #define USE_RX_SPEKTRUM_TELEMETRY
69 #endif // defined(USE_RX_CC2500)
71 /* END HARDWARE INCLUSIONS */
73 #if defined(USE_VTX_RTC6705_SOFTSPI)
74 #define USE_VTX_RTC6705
75 #endif
77 #ifndef USE_DSHOT
78 #undef USE_ESC_SENSOR
79 #endif
81 #ifndef USE_ESC_SENSOR
82 #undef USE_ESC_SENSOR_TELEMETRY
83 #endif
85 // XXX Followup implicit dependencies among DASHBOARD, display_xxx and USE_I2C.
86 // XXX This should eventually be cleaned up.
87 #ifndef USE_I2C
88 #undef USE_I2C_OLED_DISPLAY
89 #undef USE_DASHBOARD
90 #else
91 #ifdef USE_DASHBOARD
92 #define USE_I2C_OLED_DISPLAY
93 #endif
94 #endif
96 // Remove USE_BARO_BMP280 and USE_BARO_MS5611 if USE_I2C is not defined.
97 #if !defined(USE_I2C)
98 #if defined(USE_BARO_BMP280)
99 #undef USE_BARO_BMP280
100 #endif
101 #if defined(USE_BARO_MS5611)
102 #undef USE_BARO_MS5611
103 #endif
104 #endif
106 #if !defined(USE_BARO) && !defined(USE_GPS)
107 #undef USE_VARIO
108 #endif
110 #if defined(USE_BARO) && !defined(BARO_EOC_PIN)
111 #define BARO_EOC_PIN NONE
112 #endif
114 #if !defined(USE_SERIALRX)
115 #undef USE_SERIALRX_CRSF
116 #undef USE_SERIALRX_IBUS
117 #undef USE_SERIALRX_JETIEXBUS
118 #undef USE_SERIALRX_SBUS
119 #undef USE_SERIALRX_SPEKTRUM
120 #undef USE_SERIALRX_SUMD
121 #undef USE_SERIALRX_SUMH
122 #undef USE_SERIALRX_XBUS
123 #undef USE_SERIALRX_FPORT
124 #endif
126 #if !defined(USE_TELEMETRY)
127 #undef USE_TELEMETRY_CRSF
128 #undef USE_TELEMETRY_GHST
129 #undef USE_TELEMETRY_FRSKY_HUB
130 #undef USE_TELEMETRY_HOTT
131 #undef USE_TELEMETRY_IBUS
132 #undef USE_TELEMETRY_IBUS_EXTENDED
133 #undef USE_TELEMETRY_JETIEXBUS
134 #undef USE_TELEMETRY_LTM
135 #undef USE_TELEMETRY_MAVLINK
136 #undef USE_TELEMETRY_SMARTPORT
137 #undef USE_TELEMETRY_SRXL
139 #ifdef USE_SERIALRX_FPORT
140 #define USE_TELEMETRY
141 #endif
142 #endif
144 #if !defined(USE_SERIALRX_CRSF)
145 #undef USE_TELEMETRY_CRSF
146 #undef USE_CRSF_LINK_STATISTICS
147 #undef USE_CRSF_V3
148 #endif
150 #if !defined(USE_RX_EXPRESSLRS) && !defined(USE_SERIALRX_CRSF)
151 #undef USE_RX_RSSI_DBM
152 #endif
154 #if !defined(USE_SERIALRX_GHST)
155 #undef USE_TELEMETRY_GHST
156 #endif
158 #if !defined(USE_TELEMETRY_CRSF) || !defined(USE_CMS)
159 #undef USE_CRSF_CMS_TELEMETRY
160 #endif
162 #if !defined(USE_TELEMETRY_CRSF)
163 #undef USE_CRSF_V3
164 #endif
166 #if !defined(USE_SERIALRX_JETIEXBUS)
167 #undef USE_TELEMETRY_JETIEXBUS
168 #endif
170 #if !defined(USE_TELEMETRY_IBUS)
171 #undef USE_TELEMETRY_IBUS_EXTENDED
172 #endif
174 // If USE_SERIALRX_SPEKTRUM was dropped by a target, drop all related options
175 #ifndef USE_SERIALRX_SPEKTRUM
176 #undef USE_SPEKTRUM_BIND
177 #undef USE_SPEKTRUM_BIND_PLUG
178 #undef USE_SPEKTRUM_REAL_RSSI
179 #undef USE_SPEKTRUM_FAKE_RSSI
180 #undef USE_SPEKTRUM_RSSI_PERCENT_CONVERSION
181 #undef USE_SPEKTRUM_VTX_CONTROL
182 #undef USE_SPEKTRUM_VTX_TELEMETRY
183 #undef USE_TELEMETRY_SRXL
184 #endif
186 #if !defined(USE_CMS) || !defined(USE_TELEMETRY_SRXL)
187 #undef USE_SPEKTRUM_CMS_TELEMETRY
188 #endif
190 #if defined(USE_SERIALRX_SBUS) || defined(USE_SERIALRX_FPORT)
191 #define USE_SBUS_CHANNELS
192 #endif
194 #if !defined(USE_TELEMETRY_SMARTPORT) && !defined(USE_TELEMETRY_CRSF)
195 #undef USE_MSP_OVER_TELEMETRY
196 #endif
198 #if !defined(USE_RX_MSP) && defined(USE_RX_MSP_OVERRIDE)
199 #undef USE_RX_MSP_OVERRIDE
200 #endif
202 /* If either VTX_CONTROL or VTX_COMMON is undefined then remove common code and device drivers */
203 #if !defined(USE_VTX_COMMON) || !defined(USE_VTX_CONTROL)
204 #undef USE_VTX_COMMON
205 #undef USE_VTX_CONTROL
206 #undef USE_VTX_TRAMP
207 #undef USE_VTX_SMARTAUDIO
208 #undef USE_VTX_TABLE
209 #undef USE_VTX_MSP
210 #endif
212 // Burst dshot to default off if not configured explicitly by target
213 #ifndef ENABLE_DSHOT_DMAR
214 #define ENABLE_DSHOT_DMAR DSHOT_DMAR_OFF
215 #endif
217 // Some target doesn't define USE_ADC which USE_ADC_INTERNAL depends on
218 #ifndef USE_ADC
219 #undef USE_ADC_INTERNAL
220 #endif
222 #ifdef USE_FLASH
223 #define USE_FLASHFS
224 #define USE_FLASH_TOOLS
225 #endif
227 #if (defined(USE_FLASH_W25M512) || defined(USE_FLASH_W25Q128FV)) && !defined(USE_FLASH_M25P16)
228 #define USE_FLASH_M25P16
229 #endif
231 #if defined(USE_FLASH_W25M02G) && !defined(USE_FLASH_W25N01G)
232 #define USE_FLASH_W25N01G
233 #endif
235 #if (defined(USE_FLASH_M25P16) || defined(USE_FLASH_W25N01G)) && !defined(USE_FLASH_W25M)
236 #define USE_FLASH_W25M
237 #endif
239 #if defined(USE_FLASH_M25P16) || defined(USE_FLASH_W25M) || defined(USE_FLASH_W25N01G) || defined(USE_FLASH_W25Q128FV)
240 #define USE_FLASH_CHIP
241 #endif
243 #ifndef USE_FLASH_CHIP
244 #undef USE_FLASHFS
245 #endif
247 #if (!defined(USE_SDCARD) && !defined(USE_FLASHFS)) || !defined(USE_BLACKBOX)
248 #undef USE_USB_MSC
249 #endif
251 #if !defined(USE_SDCARD)
252 #undef USE_SDCARD_SDIO
253 #undef USE_SDCARD_SPI
254 #endif
256 #if !defined(USE_VCP)
257 #undef USE_USB_CDC_HID
258 #undef USE_USB_MSC
259 #endif
261 #if defined(USE_USB_CDC_HID) || defined(USE_USB_MSC)
262 #define USE_USB_ADVANCED_PROFILES
263 #endif
265 #if !defined(USE_OSD)
266 #undef USE_RX_LINK_QUALITY_INFO
267 #undef USE_OSD_PROFILES
268 #undef USE_OSD_STICK_OVERLAY
269 #undef USE_RX_LINK_UPLINK_POWER
270 #endif
272 // Older ACC/GYRO sensors use MPU6500 driver
273 #if !defined(USE_ACC_MPU6500) && (defined(USE_ACC_ICM20601) || defined(USE_ACC_ICM20602) || defined(USE_ACC_ICM20608G))
274 #define USE_ACC_MPU6500
275 #endif
276 #if !defined(USE_ACC_SPI_MPU6500) && (defined(USE_ACC_SPI_ICM20601) || defined(USE_ACC_SPI_ICM20602) || defined(USE_ACC_SPI_ICM20608G))
277 #define USE_ACC_SPI_MPU6500
278 #endif
279 #if !defined(USE_GYRO_MPU6500) && (defined(USE_GYRO_ICM20601) || defined(USE_GYRO_ICM20602) || defined(USE_GYRO_ICM20608G))
280 #define USE_GYRO_MPU6500
281 #endif
282 #if !defined(USE_GYRO_SPI_MPU6500) && (defined(USE_GYRO_SPI_ICM20601) || defined(USE_GYRO_SPI_ICM20602) || defined(USE_GYRO_SPI_ICM20608G))
283 #define USE_GYRO_SPI_MPU6500
284 #endif
286 // Generate USE_SPI_GYRO or USE_I2C_GYRO
287 #if defined(USE_GYRO_L3G4200D) || defined(USE_GYRO_MPU3050) || defined(USE_GYRO_MPU6000) || defined(USE_GYRO_MPU6050) || defined(USE_GYRO_MPU6500)
288 #define USE_I2C_GYRO
289 #endif
291 #if defined(USE_GYRO_SPI_ICM20689) || defined(USE_GYRO_SPI_MPU6000) || defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_MPU9250) || defined(USE_GYRO_L3GD20) || defined(USE_GYRO_SPI_ICM42605) || defined(USE_GYRO_SPI_ICM42688P) || defined(USE_ACCGYRO_BMI270)
292 #define USE_SPI_GYRO
293 #endif
295 // CX10 is a special case of SPI RX which requires XN297
296 #if defined(USE_RX_CX10)
297 #define USE_RX_XN297
298 #endif
300 // Setup crystal frequency on F4 for backward compatibility
301 // Should be set to zero for generic targets to ensure USB is working
302 // when unconfigured for targets with non-standard crystal.
303 // Can be set at runtime with with CLI parameter 'system_hse_value'.
304 #define SYSTEM_HSE_VALUE 0
306 // Number of pins that needs pre-init
307 #ifdef USE_SPI
308 #ifndef SPI_PREINIT_COUNT
309 // 2 x 8 (GYROx2, BARO, MAG, MAX, FLASHx2, RX)
310 #define SPI_PREINIT_COUNT 16
311 #endif
312 #endif
314 #ifndef USE_BLACKBOX
315 #undef USE_USB_MSC
316 #endif
318 #if (!defined(USE_FLASHFS) || !defined(USE_RTC_TIME) || !defined(USE_USB_MSC) || !defined(USE_PERSISTENT_OBJECTS))
319 #undef USE_PERSISTENT_MSC_RTC
320 #endif
322 #if !defined(USE_SERIAL_4WAY_BLHELI_BOOTLOADER) && !defined(USE_SERIAL_4WAY_SK_BOOTLOADER)
323 #undef USE_SERIAL_4WAY_BLHELI_INTERFACE
324 #elif !defined(USE_SERIAL_4WAY_BLHELI_INTERFACE) && (defined(USE_SERIAL_4WAY_BLHELI_BOOTLOADER) || defined(USE_SERIAL_4WAY_SK_BOOTLOADER))
325 #ifndef USE_SERIAL_4WAY_BLHELI_INTERFACE
326 #define USE_SERIAL_4WAY_BLHELI_INTERFACE
327 #endif
328 #endif
330 #if defined(USE_RX_PWM) || defined(USE_DSHOT) || defined(USE_LED_STRIP) || defined(USE_TRANSPONDER) || defined(USE_BEEPER) || defined(USE_SERIAL_4WAY_BLHELI_INTERFACE)
331 #ifndef USE_PWM_OUTPUT
332 #define USE_PWM_OUTPUT
333 #endif
334 #endif
336 #if !defined(USE_LED_STRIP)
337 #undef USE_LED_STRIP_STATUS_MODE
338 #endif
340 #if defined(USE_MAX7456) || defined(USE_FRSKYOSD) || defined(USE_MSP_DISPLAYPORT)
341 #ifndef USE_VIDEO_SYSTEM
342 #define USE_VIDEO_SYSTEM
343 #endif
344 #endif
346 #if defined(USE_LED_STRIP) && !defined(USE_LED_STRIP_STATUS_MODE)
347 #define USE_WS2811_SINGLE_COLOUR
348 #endif
350 #if defined(SIMULATOR_BUILD) || defined(UNIT_TEST)
351 // This feature uses 'arm_math.h', which does not exist for x86.
352 #undef USE_DYN_NOTCH_FILTER
353 #endif
355 #ifndef USE_CMS
356 #undef USE_CMS_FAILSAFE_MENU
357 #endif
359 #ifndef USE_DSHOT
360 #undef USE_DSHOT_TELEMETRY
361 #undef USE_DSHOT_BITBANG
362 #endif
364 #ifndef USE_DSHOT_TELEMETRY
365 #undef USE_RPM_FILTER
366 #undef USE_DSHOT_TELEMETRY_STATS
367 #endif
369 #if !defined(USE_BOARD_INFO)
370 #undef USE_SIGNATURE
371 #endif
373 #if !defined(USE_ACC)
374 #undef USE_GPS_RESCUE
375 #undef USE_ACRO_TRAINER
376 #endif
378 #if (!defined(USE_GPS_RESCUE) || !defined(USE_CMS_FAILSAFE_MENU))
379 #undef USE_CMS_GPS_RESCUE_MENU
380 #endif
382 #ifndef USE_BEEPER
383 #undef BEEPER_PIN
384 #undef BEEPER_PWM_HZ
385 #endif
387 #if defined(USE_DMA_SPEC)
388 #define USE_TIMER_DMA
389 #else
390 #undef USE_TIMER_MGMT
391 #endif
393 #if defined(USE_TIMER_MGMT)
394 #undef USED_TIMERS
395 #endif
397 #if !defined(USE_RANGEFINDER)
398 #undef USE_RANGEFINDER_HCSR04
399 #undef USE_RANGEFINDER_SRF10
400 #undef USE_RANGEFINDER_HCSR04_I2C
401 #undef USE_RANGEFINDER_VL53L0X
402 #undef USE_RANGEFINDER_UIB
403 #undef USE_RANGEFINDER_TF
404 #endif
406 #ifndef USE_GPS_RESCUE
407 #undef USE_CMS_GPS_RESCUE_MENU
408 #endif
410 // TODO: Remove this once HAL support is fixed for ESCSERIAL
411 #ifdef STM32F7
412 #undef USE_ESCSERIAL
413 #endif
415 #if defined(CONFIG_IN_RAM) || defined(CONFIG_IN_FILE) || defined(CONFIG_IN_EXTERNAL_FLASH) || defined(CONFIG_IN_SDCARD)
416 #ifndef EEPROM_SIZE
417 #define EEPROM_SIZE 4096
418 #endif
419 extern uint8_t eepromData[EEPROM_SIZE];
420 #define __config_start (*eepromData)
421 #define __config_end (*ARRAYEND(eepromData))
422 #else
423 #ifndef CONFIG_IN_FLASH
424 #define CONFIG_IN_FLASH
425 #endif
426 extern uint8_t __config_start; // configured via linker script when building binaries.
427 extern uint8_t __config_end;
428 #endif
430 #if defined(USE_EXST) && !defined(RAMBASED)
431 #define USE_FLASH_BOOT_LOADER
432 #endif
434 #if !defined(USE_RPM_FILTER)
435 #undef USE_DYN_IDLE
436 #endif
438 #ifndef USE_ITERM_RELAX
439 #undef USE_ABSOLUTE_CONTROL
440 #endif
442 #if defined(USE_CUSTOM_DEFAULTS)
443 #define USE_CUSTOM_DEFAULTS_ADDRESS
444 #endif
446 #if defined(USE_RX_EXPRESSLRS) && defined(STM32F411)
447 #define RX_SPI_DEFAULT_PROTOCOL RX_SPI_EXPRESSLRS
448 #endif
450 #if defined(USE_RX_EXPRESSLRS) && !defined(RX_EXPRESSLRS_TIMER_INSTANCE) && (defined(STM32F411) || defined(STM32F405) || defined(STM32F745) || defined(STM32H7))
451 #define RX_EXPRESSLRS_TIMER_INSTANCE TIM5
452 #endif
454 #if defined(USE_RX_EXPRESSLRS)
455 // ELRS depends on CRSF telemetry
456 #if !defined(USE_TELEMETRY)
457 #define USE_TELEMETRY
458 #endif
459 #if !defined(USE_TELEMETRY_CRSF)
460 #define USE_TELEMETRY_CRSF
461 #endif
462 #if !defined(USE_CRSF_LINK_STATISTICS)
463 #define USE_CRSF_LINK_STATISTICS
464 #endif
465 #if !defined(USE_SERIALRX_CRSF)
466 #define USE_SERIALRX_CRSF
467 #endif
468 #endif
470 #if defined(USE_RX_SPI) || defined (USE_SERIALRX_SRXL2)
471 #define USE_RX_BIND
472 #endif
474 #ifndef USE_GPS
475 #undef USE_GPS_PLUS_CODES
476 #endif