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)
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
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
47 #if defined(USE_RX_CC2500)
49 #if !defined(USE_RX_SPI)
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
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
81 #ifndef USE_ESC_SENSOR
82 #undef USE_ESC_SENSOR_TELEMETRY
85 // XXX Followup implicit dependencies among DASHBOARD, display_xxx and USE_I2C.
86 // XXX This should eventually be cleaned up.
88 #undef USE_I2C_OLED_DISPLAY
92 #define USE_I2C_OLED_DISPLAY
96 // Remove USE_BARO_BMP280 and USE_BARO_MS5611 if USE_I2C is not defined.
98 #if defined(USE_BARO_BMP280)
99 #undef USE_BARO_BMP280
101 #if defined(USE_BARO_MS5611)
102 #undef USE_BARO_MS5611
106 #if !defined(USE_BARO) && !defined(USE_GPS)
110 #if defined(USE_BARO) && !defined(BARO_EOC_PIN)
111 #define BARO_EOC_PIN NONE
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
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
144 #if !defined(USE_SERIALRX_CRSF)
145 #undef USE_TELEMETRY_CRSF
146 #undef USE_CRSF_LINK_STATISTICS
150 #if !defined(USE_RX_EXPRESSLRS) && !defined(USE_SERIALRX_CRSF)
151 #undef USE_RX_RSSI_DBM
154 #if !defined(USE_SERIALRX_GHST)
155 #undef USE_TELEMETRY_GHST
158 #if !defined(USE_TELEMETRY_CRSF) || !defined(USE_CMS)
159 #undef USE_CRSF_CMS_TELEMETRY
162 #if !defined(USE_TELEMETRY_CRSF)
166 #if !defined(USE_SERIALRX_JETIEXBUS)
167 #undef USE_TELEMETRY_JETIEXBUS
170 #if !defined(USE_TELEMETRY_IBUS)
171 #undef USE_TELEMETRY_IBUS_EXTENDED
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
186 #if !defined(USE_CMS) || !defined(USE_TELEMETRY_SRXL)
187 #undef USE_SPEKTRUM_CMS_TELEMETRY
190 #if defined(USE_SERIALRX_SBUS) || defined(USE_SERIALRX_FPORT)
191 #define USE_SBUS_CHANNELS
194 #if !defined(USE_TELEMETRY_SMARTPORT) && !defined(USE_TELEMETRY_CRSF)
195 #undef USE_MSP_OVER_TELEMETRY
198 #if !defined(USE_RX_MSP) && defined(USE_RX_MSP_OVERRIDE)
199 #undef USE_RX_MSP_OVERRIDE
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
207 #undef USE_VTX_SMARTAUDIO
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
217 // Some target doesn't define USE_ADC which USE_ADC_INTERNAL depends on
219 #undef USE_ADC_INTERNAL
224 #define USE_FLASH_TOOLS
227 #if (defined(USE_FLASH_W25M512) || defined(USE_FLASH_W25Q128FV)) && !defined(USE_FLASH_M25P16)
228 #define USE_FLASH_M25P16
231 #if defined(USE_FLASH_W25M02G) && !defined(USE_FLASH_W25N01G)
232 #define USE_FLASH_W25N01G
235 #if (defined(USE_FLASH_M25P16) || defined(USE_FLASH_W25N01G)) && !defined(USE_FLASH_W25M)
236 #define USE_FLASH_W25M
239 #if defined(USE_FLASH_M25P16) || defined(USE_FLASH_W25M) || defined(USE_FLASH_W25N01G) || defined(USE_FLASH_W25Q128FV)
240 #define USE_FLASH_CHIP
243 #ifndef USE_FLASH_CHIP
247 #if (!defined(USE_SDCARD) && !defined(USE_FLASHFS)) || !defined(USE_BLACKBOX)
251 #if !defined(USE_SDCARD)
252 #undef USE_SDCARD_SDIO
253 #undef USE_SDCARD_SPI
256 #if !defined(USE_VCP)
257 #undef USE_USB_CDC_HID
261 #if defined(USE_USB_CDC_HID) || defined(USE_USB_MSC)
262 #define USE_USB_ADVANCED_PROFILES
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
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
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
279 #if !defined(USE_GYRO_MPU6500) && (defined(USE_GYRO_ICM20601) || defined(USE_GYRO_ICM20602) || defined(USE_GYRO_ICM20608G))
280 #define USE_GYRO_MPU6500
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
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)
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)
295 // CX10 is a special case of SPI RX which requires XN297
296 #if defined(USE_RX_CX10)
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
308 #ifndef SPI_PREINIT_COUNT
309 // 2 x 8 (GYROx2, BARO, MAG, MAX, FLASHx2, RX)
310 #define SPI_PREINIT_COUNT 16
318 #if (!defined(USE_FLASHFS) || !defined(USE_RTC_TIME) || !defined(USE_USB_MSC) || !defined(USE_PERSISTENT_OBJECTS))
319 #undef USE_PERSISTENT_MSC_RTC
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
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
336 #if !defined(USE_LED_STRIP)
337 #undef USE_LED_STRIP_STATUS_MODE
340 #if defined(USE_MAX7456) || defined(USE_FRSKYOSD) || defined(USE_MSP_DISPLAYPORT)
341 #ifndef USE_VIDEO_SYSTEM
342 #define USE_VIDEO_SYSTEM
346 #if defined(USE_LED_STRIP) && !defined(USE_LED_STRIP_STATUS_MODE)
347 #define USE_WS2811_SINGLE_COLOUR
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
356 #undef USE_CMS_FAILSAFE_MENU
360 #undef USE_DSHOT_TELEMETRY
361 #undef USE_DSHOT_BITBANG
364 #ifndef USE_DSHOT_TELEMETRY
365 #undef USE_RPM_FILTER
366 #undef USE_DSHOT_TELEMETRY_STATS
369 #if !defined(USE_BOARD_INFO)
373 #if !defined(USE_ACC)
374 #undef USE_GPS_RESCUE
375 #undef USE_ACRO_TRAINER
378 #if (!defined(USE_GPS_RESCUE) || !defined(USE_CMS_FAILSAFE_MENU))
379 #undef USE_CMS_GPS_RESCUE_MENU
387 #if defined(USE_DMA_SPEC)
388 #define USE_TIMER_DMA
390 #undef USE_TIMER_MGMT
393 #if defined(USE_TIMER_MGMT)
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
406 #ifndef USE_GPS_RESCUE
407 #undef USE_CMS_GPS_RESCUE_MENU
410 // TODO: Remove this once HAL support is fixed for ESCSERIAL
415 #if defined(CONFIG_IN_RAM) || defined(CONFIG_IN_FILE) || defined(CONFIG_IN_EXTERNAL_FLASH) || defined(CONFIG_IN_SDCARD)
417 #define EEPROM_SIZE 4096
419 extern uint8_t eepromData
[EEPROM_SIZE
];
420 #define __config_start (*eepromData)
421 #define __config_end (*ARRAYEND(eepromData))
423 #ifndef CONFIG_IN_FLASH
424 #define CONFIG_IN_FLASH
426 extern uint8_t __config_start
; // configured via linker script when building binaries.
427 extern uint8_t __config_end
;
430 #if defined(USE_EXST) && !defined(RAMBASED)
431 #define USE_FLASH_BOOT_LOADER
434 #if !defined(USE_RPM_FILTER)
438 #ifndef USE_ITERM_RELAX
439 #undef USE_ABSOLUTE_CONTROL
442 #if defined(USE_CUSTOM_DEFAULTS)
443 #define USE_CUSTOM_DEFAULTS_ADDRESS
446 #if defined(USE_RX_EXPRESSLRS) && defined(STM32F411)
447 #define RX_SPI_DEFAULT_PROTOCOL RX_SPI_EXPRESSLRS
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
454 #if defined(USE_RX_EXPRESSLRS)
455 // ELRS depends on CRSF telemetry
456 #if !defined(USE_TELEMETRY)
457 #define USE_TELEMETRY
459 #if !defined(USE_TELEMETRY_CRSF)
460 #define USE_TELEMETRY_CRSF
462 #if !defined(USE_CRSF_LINK_STATISTICS)
463 #define USE_CRSF_LINK_STATISTICS
465 #if !defined(USE_SERIALRX_CRSF)
466 #define USE_SERIALRX_CRSF
470 #if defined(USE_RX_SPI) || defined (USE_SERIALRX_SRXL2)
475 #undef USE_GPS_PLUS_CODES