From 48639c6810dbf88e5b6c07b1f3f3d3ed639f585b Mon Sep 17 00:00:00 2001 From: Peter Barker Date: Thu, 18 Aug 2022 16:45:30 +1000 Subject: [PATCH] AP_HAL_ChibiOS: add SD card support to bootloader --- libraries/AP_HAL_ChibiOS/Scheduler.cpp | 12 ++++++++++- .../hwdef/scripts/chibios_hwdef.py | 20 +++++++++++++++++++ libraries/AP_HAL_ChibiOS/sdcard.cpp | 11 ++++++++-- libraries/AP_HAL_ChibiOS/sdcard.h | 2 ++ 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/libraries/AP_HAL_ChibiOS/Scheduler.cpp b/libraries/AP_HAL_ChibiOS/Scheduler.cpp index e646af24a8..8f0d65abd3 100644 --- a/libraries/AP_HAL_ChibiOS/Scheduler.cpp +++ b/libraries/AP_HAL_ChibiOS/Scheduler.cpp @@ -14,6 +14,15 @@ * * Code by Andrew Tridgell and Siddharth Bharat Purohit */ + +#include + +#ifndef HAL_SCHEDULER_ENABLED +#define HAL_SCHEDULER_ENABLED 1 +#endif + +#if HAL_SCHEDULER_ENABLED + #include #include @@ -788,5 +797,6 @@ void Scheduler::check_stack_free(void) } #endif // CH_DBG_ENABLE_STACK_CHECK == TRUE - #endif // CH_CFG_USE_DYNAMIC + +#endif // HAL_SCHEDULER_ENABLED diff --git a/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py b/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py index 55d5f8d525..f253f1cd7d 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py +++ b/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py @@ -1109,7 +1109,9 @@ def write_mcu_config(f): #define HAL_USE_I2C FALSE #define HAL_USE_PWM FALSE #define HAL_NO_UARTDRIVER +#ifndef CH_CFG_USE_DYNAMIC #define CH_CFG_USE_DYNAMIC FALSE +#endif #define HAL_USE_EMPTY_STORAGE 1 #ifndef HAL_STORAGE_SIZE #define HAL_STORAGE_SIZE 16384 @@ -1136,11 +1138,19 @@ def write_mcu_config(f): #endif #define HAL_NO_ROMFS_SUPPORT TRUE #define CH_CFG_USE_TM FALSE +#ifndef CH_CFG_USE_REGISTRY #define CH_CFG_USE_REGISTRY FALSE +#endif +#ifndef CH_CFG_USE_WAITEXIT #define CH_CFG_USE_WAITEXIT FALSE +#endif +#ifndef CH_CFG_USE_MEMPOOLS #define CH_CFG_USE_MEMPOOLS FALSE +#endif #define CH_DBG_FILL_THREADS FALSE +#ifndef CH_CFG_USE_MUTEXES #define CH_CFG_USE_MUTEXES FALSE +#endif #define CH_CFG_USE_EVENTS FALSE #define CH_CFG_USE_EVENTS_TIMEOUT FALSE #define HAL_USE_EMPTY_STORAGE 1 @@ -1149,14 +1159,22 @@ def write_mcu_config(f): #endif #define HAL_USE_RTC FALSE #define DISABLE_SERIAL_ESC_COMM TRUE +#ifndef CH_CFG_USE_DYNAMIC #define CH_CFG_USE_DYNAMIC FALSE +#endif #define DISABLE_WATCHDOG 1 ''') if not env_vars['EXT_FLASH_SIZE_MB'] and not args.signed_fw: f.write(''' +#ifndef CH_CFG_USE_MEMCORE #define CH_CFG_USE_MEMCORE FALSE +#endif +#ifndef CH_CFG_USE_SEMAPHORES #define CH_CFG_USE_SEMAPHORES FALSE +#endif +#ifndef CH_CFG_USE_HEAP #define CH_CFG_USE_HEAP FALSE +#endif ''') if env_vars.get('ROMFS_UNCOMPRESSED', False): f.write('#define HAL_ROMFS_UNCOMPRESSED\n') @@ -3014,6 +3032,8 @@ def add_bootloader_defaults(f): // AP_Bootloader defaults #define HAL_DSHOT_ALARM_ENABLED 0 +#define HAL_LOGGING_ENABLED 0 +#define HAL_SCHEDULER_ENABLED 0 // bootloaders *definitely* don't use the FFT library: #ifndef HAL_GYROFFT_ENABLED diff --git a/libraries/AP_HAL_ChibiOS/sdcard.cpp b/libraries/AP_HAL_ChibiOS/sdcard.cpp index fcb756e069..efc50ce481 100644 --- a/libraries/AP_HAL_ChibiOS/sdcard.cpp +++ b/libraries/AP_HAL_ChibiOS/sdcard.cpp @@ -17,6 +17,7 @@ #include #include "SPIDevice.h" #include "sdcard.h" +#include "bouncebuffer.h" #include "hwdef/common/spi_hook.h" #include #include @@ -26,9 +27,11 @@ extern const AP_HAL::HAL& hal; #ifdef USE_POSIX static FATFS SDC_FS; // FATFS object -static bool sdcard_running; +#ifndef HAL_BOOTLOADER_BUILD static HAL_Semaphore sem; #endif +static bool sdcard_running; +#endif #if HAL_USE_SDC static SDCConfig sdcconfig = { @@ -52,9 +55,13 @@ static SPIConfig highspeed; bool sdcard_init() { #ifdef USE_POSIX +#ifndef HAL_BOOTLOADER_BUILD WITH_SEMAPHORE(sem); uint8_t sd_slowdown = AP_BoardConfig::get_sdcard_slowdown(); +#else + uint8_t sd_slowdown = 0; // maybe take from a define? +#endif #if HAL_USE_SDC #if STM32_SDC_USE_SDMMC2 == TRUE @@ -134,7 +141,7 @@ bool sdcard_init() } #endif sdcard_running = false; -#endif +#endif // USE_POSIX return false; } diff --git a/libraries/AP_HAL_ChibiOS/sdcard.h b/libraries/AP_HAL_ChibiOS/sdcard.h index b0bd4ab1e2..b64466f099 100644 --- a/libraries/AP_HAL_ChibiOS/sdcard.h +++ b/libraries/AP_HAL_ChibiOS/sdcard.h @@ -15,6 +15,8 @@ */ #pragma once +#include + bool sdcard_init(); void sdcard_stop(); bool sdcard_retry();