From 0c00bb935a9b76bcc12007924325e2784fdc0189 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 23 Oct 2019 18:57:27 +1100 Subject: [PATCH] AP_Periph: support updating bootloader with FLASH_BOOTLOADER option --- Tools/AP_Periph/Parameters.cpp | 5 +++++ Tools/AP_Periph/Parameters.h | 5 +++++ Tools/AP_Periph/can.cpp | 11 +++++++++++ 3 files changed, 21 insertions(+) diff --git a/Tools/AP_Periph/Parameters.cpp b/Tools/AP_Periph/Parameters.cpp index 56cc3bfe13..8b2bde0066 100644 --- a/Tools/AP_Periph/Parameters.cpp +++ b/Tools/AP_Periph/Parameters.cpp @@ -29,6 +29,11 @@ const AP_Param::Info AP_Periph_FW::var_info[] = { // can node baudrate GSCALAR(can_baudrate, "CAN_BAUDRATE", 1000000), + +#if !defined(HAL_NO_FLASH_SUPPORT) && !defined(HAL_NO_ROMFS_SUPPORT) + // trigger bootloader flash + GSCALAR(flash_bootloader, "FLASH_BOOTLOADER", 0), +#endif #ifdef HAL_PERIPH_ENABLE_BUZZER GSCALAR(buzz_volume, "BUZZER_VOLUME", 100), diff --git a/Tools/AP_Periph/Parameters.h b/Tools/AP_Periph/Parameters.h index dc73d5b09b..ddabfbcd72 100644 --- a/Tools/AP_Periph/Parameters.h +++ b/Tools/AP_Periph/Parameters.h @@ -21,6 +21,7 @@ public: k_param_led_brightness, k_param_airspeed, k_param_rangefinder, + k_param_flash_bootloader, }; AP_Int16 format_version; @@ -33,6 +34,10 @@ public: AP_Int8 led_brightness; #endif +#if !defined(HAL_NO_FLASH_SUPPORT) && !defined(HAL_NO_ROMFS_SUPPORT) + AP_Int8 flash_bootloader; +#endif + Parameters() {} }; diff --git a/Tools/AP_Periph/can.cpp b/Tools/AP_Periph/can.cpp index 553fea2b57..174c7590d2 100644 --- a/Tools/AP_Periph/can.cpp +++ b/Tools/AP_Periph/can.cpp @@ -828,6 +828,17 @@ static void process1HzTasks(uint64_t timestamp_usec) } } +#if !defined(HAL_NO_FLASH_SUPPORT) && !defined(HAL_NO_ROMFS_SUPPORT) + if (periph.g.flash_bootloader.get()) { + periph.g.flash_bootloader.set_and_save_ifchanged(0); + if (hal.util->flash_bootloader()) { + can_printf("Flash bootloader OK\n"); + } else { + can_printf("Flash bootloader FAILED\n"); + } + } +#endif + node_status.mode = UAVCAN_PROTOCOL_NODESTATUS_MODE_OPERATIONAL; }