Don't bundle flash drivers and flash fs/tools together. (#12252)
[betaflight.git] / src / main / target / common_post.h
blob971059f57012a4d04d8332957ba420cf423a3b84
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 #pragma once
23 #include "build/version.h"
27 The purpose of this file is to enable / disable any firmware "gates" for features and drivers
28 that require hardware resources that are either available or not available after the target.h
29 has been processed.
31 It should also be used to define anything that should be defined (and is required), but is not
32 already, to some sort of defaults.
34 CLOUD_BUILD and CORE_BUILD should not be referenced here.
36 NOTE: for 4.5 we will be removing any conditions related to specific MCU types, instead
37 these should be defined in the target.h or in a file that is imported by target.h (in the
38 case of common settings for a given MCU group)
43 BEGIN HARDWARE INCLUSIONS
45 Simplified options for the moment, i.e. adding USE_MAG or USE_BARO and the entire driver suite is added.
46 In the future we can move to specific drivers being added only - to save flash space.
49 #if defined(USE_MAG) && !defined(USE_FAKE_MAG)
50 #define USE_MAG_DATA_READY_SIGNAL
51 #define USE_MAG_HMC5883
52 #define USE_MAG_SPI_HMC5883
53 #define USE_MAG_QMC5883
54 #define USE_MAG_LIS3MDL
55 #define USE_MAG_AK8963
56 #define USE_MAG_MPU925X_AK8963
57 #define USE_MAG_SPI_AK8963
58 #define USE_MAG_AK8975
59 #endif
61 #if defined(USE_RX_CC2500)
63 #if !defined(USE_RX_SPI)
64 #define USE_RX_SPI
65 #endif
67 #define USE_RX_CC2500_SPI_PA_LNA
68 #define USE_RX_CC2500_SPI_DIVERSITY
70 #define USE_RX_SFHSS_SPI
71 #define USE_RX_REDPINE_SPI
73 #define USE_RX_FRSKY_SPI_D
74 #define USE_RX_FRSKY_SPI_X
75 #define USE_RX_FRSKY_SPI
76 #define USE_RX_FRSKY_SPI_TELEMETRY
78 #define USE_RX_FLYSKY
79 #define USE_RX_FLYSKY_SPI_LED
80 #define USE_RX_SPEKTRUM
81 #define USE_RX_SPEKTRUM_TELEMETRY
83 #endif // defined(USE_RX_CC2500)
85 /* END HARDWARE INCLUSIONS */
87 #if defined(USE_VTX_RTC6705_SOFTSPI)
88 #define USE_VTX_RTC6705
89 #endif
91 #ifndef USE_DSHOT
92 #undef USE_ESC_SENSOR
93 #endif
95 #ifndef USE_ESC_SENSOR
96 #undef USE_ESC_SENSOR_TELEMETRY
97 #endif
99 // XXX Followup implicit dependencies among DASHBOARD, display_xxx and USE_I2C.
100 // XXX This should eventually be cleaned up.
101 #ifndef USE_I2C
102 #undef USE_I2C_OLED_DISPLAY
103 #undef USE_DASHBOARD
104 #else
105 #ifdef USE_DASHBOARD
106 #define USE_I2C_OLED_DISPLAY
107 #endif
108 #endif
110 // Remove USE_BARO_BMP280 and USE_BARO_MS5611 if USE_I2C is not defined.
111 #if !defined(USE_I2C)
112 #if defined(USE_BARO_BMP280)
113 #undef USE_BARO_BMP280
114 #endif
115 #if defined(USE_BARO_MS5611)
116 #undef USE_BARO_MS5611
117 #endif
118 #endif
120 #if !defined(USE_BARO) && !defined(USE_GPS)
121 #undef USE_VARIO
122 #endif
124 #if defined(USE_BARO) && !defined(BARO_EOC_PIN)
125 #define BARO_EOC_PIN NONE
126 #endif
128 #if !defined(USE_SERIALRX)
129 #undef USE_SERIALRX_CRSF
130 #undef USE_SERIALRX_IBUS
131 #undef USE_SERIALRX_JETIEXBUS
132 #undef USE_SERIALRX_SBUS
133 #undef USE_SERIALRX_SPEKTRUM
134 #undef USE_SERIALRX_SUMD
135 #undef USE_SERIALRX_SUMH
136 #undef USE_SERIALRX_XBUS
137 #undef USE_SERIALRX_FPORT
138 #endif
140 #if !defined(USE_TELEMETRY)
141 #undef USE_TELEMETRY_CRSF
142 #undef USE_TELEMETRY_GHST
143 #undef USE_TELEMETRY_FRSKY_HUB
144 #undef USE_TELEMETRY_HOTT
145 #undef USE_TELEMETRY_IBUS
146 #undef USE_TELEMETRY_IBUS_EXTENDED
147 #undef USE_TELEMETRY_JETIEXBUS
148 #undef USE_TELEMETRY_LTM
149 #undef USE_TELEMETRY_MAVLINK
150 #undef USE_TELEMETRY_SMARTPORT
151 #undef USE_TELEMETRY_SRXL
153 #ifdef USE_SERIALRX_FPORT
154 #define USE_TELEMETRY
155 #endif
156 #endif
158 #if !defined(USE_SERIALRX_CRSF)
159 #undef USE_TELEMETRY_CRSF
160 #undef USE_CRSF_LINK_STATISTICS
161 #undef USE_CRSF_V3
162 #endif
164 #if !defined(USE_RX_EXPRESSLRS) && !defined(USE_SERIALRX_CRSF)
165 #undef USE_RX_RSSI_DBM
166 #endif
168 #if !defined(USE_SERIALRX_GHST)
169 #undef USE_TELEMETRY_GHST
170 #endif
172 #if !defined(USE_TELEMETRY_CRSF) || !defined(USE_CMS)
173 #undef USE_CRSF_CMS_TELEMETRY
174 #endif
176 #if !defined(USE_TELEMETRY_CRSF)
177 #undef USE_CRSF_V3
178 #endif
180 #if !defined(USE_SERIALRX_JETIEXBUS)
181 #undef USE_TELEMETRY_JETIEXBUS
182 #endif
184 #if !defined(USE_TELEMETRY_IBUS)
185 #undef USE_TELEMETRY_IBUS_EXTENDED
186 #endif
188 // If USE_SERIALRX_SPEKTRUM was dropped by a target, drop all related options
189 #ifndef USE_SERIALRX_SPEKTRUM
190 #undef USE_SPEKTRUM_BIND
191 #undef USE_SPEKTRUM_BIND_PLUG
192 #undef USE_SPEKTRUM_REAL_RSSI
193 #undef USE_SPEKTRUM_FAKE_RSSI
194 #undef USE_SPEKTRUM_RSSI_PERCENT_CONVERSION
195 #undef USE_SPEKTRUM_VTX_CONTROL
196 #undef USE_SPEKTRUM_VTX_TELEMETRY
197 #undef USE_TELEMETRY_SRXL
198 #endif
200 #if !defined(USE_CMS) || !defined(USE_TELEMETRY_SRXL)
201 #undef USE_SPEKTRUM_CMS_TELEMETRY
202 #endif
204 #if defined(USE_SERIALRX_SBUS) || defined(USE_SERIALRX_FPORT)
205 #define USE_SBUS_CHANNELS
206 #endif
208 #if !defined(USE_TELEMETRY_SMARTPORT) && !defined(USE_TELEMETRY_CRSF) && !defined(USE_TELEMETRY_GHST)
209 #undef USE_MSP_OVER_TELEMETRY
210 #endif
212 #if !defined(USE_RX_MSP) && defined(USE_RX_MSP_OVERRIDE)
213 #undef USE_RX_MSP_OVERRIDE
214 #endif
216 /* If either VTX_CONTROL or VTX_COMMON is undefined then remove common code and device drivers */
217 #if !defined(USE_VTX_COMMON) || !defined(USE_VTX_CONTROL)
218 #undef USE_VTX_COMMON
219 #undef USE_VTX_CONTROL
220 #undef USE_VTX_TRAMP
221 #undef USE_VTX_SMARTAUDIO
222 #undef USE_VTX_TABLE
223 #undef USE_VTX_MSP
224 #endif
226 // Burst dshot to default off if not configured explicitly by target
227 #ifndef ENABLE_DSHOT_DMAR
228 #define ENABLE_DSHOT_DMAR DSHOT_DMAR_OFF
229 #endif
231 // Some target doesn't define USE_ADC which USE_ADC_INTERNAL depends on
232 #ifndef USE_ADC
233 #undef USE_ADC_INTERNAL
234 #endif
236 #ifdef USE_FLASH
237 #define USE_FLASH_TOOLS
238 #define USE_FLASHFS
239 #endif
241 #if (defined(USE_FLASH_W25M512) || defined(USE_FLASH_W25Q128FV)) && !defined(USE_FLASH_M25P16)
242 #define USE_FLASH_M25P16
243 #endif
245 #if defined(USE_FLASH_W25M02G) && !defined(USE_FLASH_W25N01G)
246 #define USE_FLASH_W25N01G
247 #endif
249 #if (defined(USE_FLASH_M25P16) || defined(USE_FLASH_W25N01G)) && !defined(USE_FLASH_W25M)
250 #define USE_FLASH_W25M
251 #endif
253 #if defined(USE_FLASH_M25P16) || defined(USE_FLASH_W25M) || defined(USE_FLASH_W25N01G) || defined(USE_FLASH_W25Q128FV)
254 #define USE_FLASH_CHIP
255 #endif
257 #ifndef USE_FLASH_CHIP
258 #undef USE_FLASH_TOOLS
259 #undef USE_FLASHFS
260 #endif
262 #if (!defined(USE_SDCARD) && !defined(USE_FLASHFS)) || !defined(USE_BLACKBOX)
263 #undef USE_USB_MSC
264 #endif
266 #if !defined(USE_SDCARD)
267 #undef USE_SDCARD_SDIO
268 #undef USE_SDCARD_SPI
269 #endif
271 #if !defined(USE_VCP)
272 #undef USE_USB_CDC_HID
273 #undef USE_USB_MSC
274 #endif
276 #if defined(USE_USB_CDC_HID) || defined(USE_USB_MSC)
277 #define USE_USB_ADVANCED_PROFILES
278 #endif
280 #if !defined(USE_OSD)
281 #undef USE_RX_LINK_QUALITY_INFO
282 #undef USE_OSD_PROFILES
283 #undef USE_OSD_STICK_OVERLAY
284 #undef USE_RX_LINK_UPLINK_POWER
285 #endif
287 // Older ACC/GYRO sensors use MPU6500 driver
288 #if !defined(USE_ACC_MPU6500) && (defined(USE_ACC_ICM20601) || defined(USE_ACC_ICM20602) || defined(USE_ACC_ICM20608G))
289 #define USE_ACC_MPU6500
290 #endif
291 #if !defined(USE_ACC_SPI_MPU6500) && (defined(USE_ACC_SPI_MPU9250) || defined(USE_ACC_SPI_ICM20601) || defined(USE_ACC_SPI_ICM20602) || defined(USE_ACC_SPI_ICM20608G))
292 #define USE_ACC_SPI_MPU6500
293 #endif
294 #if !defined(USE_GYRO_MPU6500) && (defined(USE_GYRO_ICM20601) || defined(USE_GYRO_ICM20602) || defined(USE_GYRO_ICM20608G))
295 #define USE_GYRO_MPU6500
296 #endif
297 #if !defined(USE_GYRO_SPI_MPU6500) && (defined(USE_GYRO_SPI_ICM20601) || defined(USE_GYRO_SPI_ICM20602) || defined(USE_GYRO_SPI_ICM20608G))
298 #define USE_GYRO_SPI_MPU6500
299 #endif
301 // Generate USE_SPI_GYRO or USE_I2C_GYRO
302 #if defined(USE_GYRO_L3G4200D) || defined(USE_GYRO_MPU3050) || defined(USE_GYRO_MPU6000) || defined(USE_GYRO_MPU6050) || defined(USE_GYRO_MPU6500)
303 #define USE_I2C_GYRO
304 #endif
306 #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)
307 #define USE_SPI_GYRO
308 #endif
310 // CX10 is a special case of SPI RX which requires XN297
311 #if defined(USE_RX_CX10)
312 #define USE_RX_XN297
313 #endif
315 // Setup crystal frequency on F4 for backward compatibility
316 // Should be set to zero for generic targets to ensure USB is working
317 // when unconfigured for targets with non-standard crystal.
318 // Can be set at runtime with with CLI parameter 'system_hse_value'.
319 #define SYSTEM_HSE_VALUE 0
321 // Number of pins that needs pre-init
322 #ifdef USE_SPI
323 #ifndef SPI_PREINIT_COUNT
324 // 2 x 8 (GYROx2, BARO, MAG, MAX, FLASHx2, RX)
325 #define SPI_PREINIT_COUNT 16
326 #endif
327 #endif
329 #ifndef USE_BLACKBOX
330 #undef USE_USB_MSC
331 #endif
333 #if (!defined(USE_FLASHFS) || !defined(USE_RTC_TIME) || !defined(USE_USB_MSC) || !defined(USE_PERSISTENT_OBJECTS))
334 #undef USE_PERSISTENT_MSC_RTC
335 #endif
337 #if !defined(USE_SERIAL_4WAY_BLHELI_BOOTLOADER) && !defined(USE_SERIAL_4WAY_SK_BOOTLOADER)
338 #undef USE_SERIAL_4WAY_BLHELI_INTERFACE
339 #elif !defined(USE_SERIAL_4WAY_BLHELI_INTERFACE) && (defined(USE_SERIAL_4WAY_BLHELI_BOOTLOADER) || defined(USE_SERIAL_4WAY_SK_BOOTLOADER))
340 #ifndef USE_SERIAL_4WAY_BLHELI_INTERFACE
341 #define USE_SERIAL_4WAY_BLHELI_INTERFACE
342 #endif
343 #endif
345 #if defined(USE_RX_PWM) || defined(USE_DSHOT) || defined(USE_LED_STRIP) || defined(USE_TRANSPONDER) || defined(USE_BEEPER) || defined(USE_SERIAL_4WAY_BLHELI_INTERFACE)
346 #ifndef USE_PWM_OUTPUT
347 #define USE_PWM_OUTPUT
348 #endif
349 #endif
351 #if !defined(USE_LED_STRIP)
352 #undef USE_LED_STRIP_STATUS_MODE
353 #endif
355 #if defined(USE_MAX7456) || defined(USE_FRSKYOSD) || defined(USE_MSP_DISPLAYPORT)
356 #ifndef USE_VIDEO_SYSTEM
357 #define USE_VIDEO_SYSTEM
358 #endif
359 #endif
361 #if defined(USE_LED_STRIP) && !defined(USE_LED_STRIP_STATUS_MODE)
362 #define USE_WS2811_SINGLE_COLOUR
363 #endif
365 #if defined(SIMULATOR_BUILD) || defined(UNIT_TEST)
366 // This feature uses 'arm_math.h', which does not exist for x86.
367 #undef USE_DYN_NOTCH_FILTER
368 #endif
370 #ifndef USE_CMS
371 #undef USE_CMS_FAILSAFE_MENU
372 #endif
374 #ifndef USE_DSHOT
375 #undef USE_DSHOT_TELEMETRY
376 #undef USE_DSHOT_BITBANG
377 #endif
379 #ifndef USE_DSHOT_TELEMETRY
380 #undef USE_RPM_FILTER
381 #undef USE_DSHOT_TELEMETRY_STATS
382 #endif
384 #if !defined(USE_BOARD_INFO)
385 #undef USE_SIGNATURE
386 #endif
388 #if !defined(USE_ACC)
389 #undef USE_GPS_RESCUE
390 #undef USE_ACRO_TRAINER
391 #endif
393 #if (!defined(USE_GPS_RESCUE) || !defined(USE_CMS_FAILSAFE_MENU))
394 #undef USE_CMS_GPS_RESCUE_MENU
395 #endif
397 #ifndef USE_BEEPER
398 #undef BEEPER_PIN
399 #undef BEEPER_PWM_HZ
400 #endif
402 #if defined(USE_DMA_SPEC)
403 #define USE_TIMER_DMA
404 #else
405 #undef USE_TIMER_MGMT
406 #endif
408 #if defined(USE_TIMER_MGMT)
409 #undef USED_TIMERS
410 #endif
412 #if !defined(USE_RANGEFINDER)
413 #undef USE_RANGEFINDER_HCSR04
414 #undef USE_RANGEFINDER_SRF10
415 #undef USE_RANGEFINDER_HCSR04_I2C
416 #undef USE_RANGEFINDER_VL53L0X
417 #undef USE_RANGEFINDER_UIB
418 #undef USE_RANGEFINDER_TF
419 #endif
421 #ifndef USE_GPS_RESCUE
422 #undef USE_CMS_GPS_RESCUE_MENU
423 #endif
425 // TODO: Remove this once HAL support is fixed for ESCSERIAL
426 #ifdef STM32F7
427 #undef USE_ESCSERIAL
428 #endif
430 #if defined(CONFIG_IN_RAM) || defined(CONFIG_IN_FILE) || defined(CONFIG_IN_EXTERNAL_FLASH) || defined(CONFIG_IN_SDCARD)
431 #ifndef EEPROM_SIZE
432 #define EEPROM_SIZE 4096
433 #endif
434 extern uint8_t eepromData[EEPROM_SIZE];
435 #define __config_start (*eepromData)
436 #define __config_end (*ARRAYEND(eepromData))
437 #else
438 #ifndef CONFIG_IN_FLASH
439 #define CONFIG_IN_FLASH
440 #endif
441 extern uint8_t __config_start; // configured via linker script when building binaries.
442 extern uint8_t __config_end;
443 #endif
445 #if defined(USE_EXST) && !defined(RAMBASED)
446 #define USE_FLASH_BOOT_LOADER
447 #endif
449 #if !defined(USE_RPM_FILTER)
450 #undef USE_DYN_IDLE
451 #endif
453 #ifndef USE_ITERM_RELAX
454 #undef USE_ABSOLUTE_CONTROL
455 #endif
457 #if defined(USE_CUSTOM_DEFAULTS)
458 #define USE_CUSTOM_DEFAULTS_ADDRESS
459 #endif
461 #if defined(USE_RX_EXPRESSLRS) && defined(STM32F411)
462 #define RX_SPI_DEFAULT_PROTOCOL RX_SPI_EXPRESSLRS
463 #endif
465 #if defined(USE_RX_EXPRESSLRS) && !defined(RX_EXPRESSLRS_TIMER_INSTANCE) && (defined(STM32F411) || defined(STM32F405) || defined(STM32F745) || defined(STM32H7))
466 #define RX_EXPRESSLRS_TIMER_INSTANCE TIM5
467 #endif
469 #if defined(USE_RX_EXPRESSLRS)
470 // ELRS depends on CRSF telemetry
471 #if !defined(USE_TELEMETRY)
472 #define USE_TELEMETRY
473 #endif
474 #if !defined(USE_TELEMETRY_CRSF)
475 #define USE_TELEMETRY_CRSF
476 #endif
477 #if !defined(USE_CRSF_LINK_STATISTICS)
478 #define USE_CRSF_LINK_STATISTICS
479 #endif
480 #if !defined(USE_SERIALRX_CRSF)
481 #define USE_SERIALRX_CRSF
482 #endif
483 #endif
485 #if defined(USE_RX_SPI) || defined (USE_SERIALRX_SRXL2)
486 #define USE_RX_BIND
487 #endif
489 #ifndef USE_GPS
490 #undef USE_GPS_PLUS_CODES
491 #endif