diff --git a/radio/src/bluetooth.cpp b/radio/src/bluetooth.cpp index ebcd4fa4c..1215393b7 100644 --- a/radio/src/bluetooth.cpp +++ b/radio/src/bluetooth.cpp @@ -754,7 +754,7 @@ const char * Bluetooth::doFlashFirmware(const char * filename) } } -void Bluetooth::flashFirmware(const char * filename) +const char * Bluetooth::flashFirmware(const char * filename) { drawProgressScreen(getBasename(filename), STR_MODULE_RESET, 0, 0); @@ -791,4 +791,6 @@ void Bluetooth::flashFirmware(const char * filename) state = BLUETOOTH_STATE_OFF; resumePulses(); + + return result; } diff --git a/radio/src/bluetooth.h b/radio/src/bluetooth.h index 84ae04507..9229b720e 100644 --- a/radio/src/bluetooth.h +++ b/radio/src/bluetooth.h @@ -57,7 +57,7 @@ class Bluetooth void forwardTelemetry(const uint8_t * packet); void wakeup(); - void flashFirmware(const char * filename); + const char * flashFirmware(const char * filename); volatile uint8_t state; char localAddr[LEN_BLUETOOTH_ADDR+1]; diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 765cc3b03..857bba8fb 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1802,9 +1802,22 @@ void opentxInit() #if defined(AUTOUPDATE) if (f_stat(AUTOUPDATE_FILENAME, nullptr) == FR_OK) { - FrskyChipFirmwareUpdate device; - if (device.flashFirmware(AUTOUPDATE_FILENAME, false) == nullptr) - f_unlink(AUTOUPDATE_FILENAME); + FrSkyFirmwareInformation information; + if (readFirmwareInformation(AUTOUPDATE_FILENAME, information) == nullptr) { +#if defined(BLUETOOTH) + if (information.productFamily == FIRMWARE_FAMILY_BLUETOOTH_CHIP) { + if (bluetooth.flashFirmware(AUTOUPDATE_FILENAME) == nullptr) + f_unlink(AUTOUPDATE_FILENAME); + } +#endif +#if defined(HARDWARE_POWER_MANAGEMENT_UNIT) + if (information.productFamily == FIRMWARE_FAMILY_POWER_MANAGEMENT_UNIT) { + FrskyChipFirmwareUpdate device; + if (device.flashFirmware(AUTOUPDATE_FILENAME, false) == nullptr) + f_unlink(AUTOUPDATE_FILENAME); + } +#endif + } } #endif