diff --git a/radio/src/gui/colorlcd/libopenui.h b/radio/src/gui/colorlcd/libopenui.h index 5cb0422bf..367c821f6 100644 --- a/radio/src/gui/colorlcd/libopenui.h +++ b/radio/src/gui/colorlcd/libopenui.h @@ -71,6 +71,7 @@ inline void POPUP_INFORMATION(const char * message) { auto popup = createPopupInformation(message); while (popup->getParent()) { + WDG_RESET(); MainWindow::instance()->run(false); } } @@ -82,6 +83,7 @@ inline void POPUP_WARNING(const char * message, const char * info = nullptr) popup->setInfoText(std::string(info)); } while (popup->getParent()) { + WDG_RESET(); MainWindow::instance()->run(false); } } diff --git a/radio/src/gui/colorlcd/message_dialog.cpp b/radio/src/gui/colorlcd/message_dialog.cpp index 2c1cfe992..8d5c4571f 100644 --- a/radio/src/gui/colorlcd/message_dialog.cpp +++ b/radio/src/gui/colorlcd/message_dialog.cpp @@ -34,6 +34,7 @@ MessageDialog::MessageDialog(Window* parent, const char* title, width(), PAGE_LINE_HEIGHT}, info, 0, CENTERED); setCloseWhenClickOutside(true); + setFocus(); } #if defined(HARDWARE_KEYS) diff --git a/radio/src/gui/colorlcd/message_dialog.h b/radio/src/gui/colorlcd/message_dialog.h index f2429638c..ed2fcf1d2 100644 --- a/radio/src/gui/colorlcd/message_dialog.h +++ b/radio/src/gui/colorlcd/message_dialog.h @@ -36,6 +36,13 @@ class MessageDialog: public Dialog { StaticText * messageWidget; StaticText * infoWidget; +#if defined(DEBUG_WINDOWS) + std::string getName() const override + { + return "MessageDialog"; + } +#endif + #if defined(HARDWARE_KEYS) void onEvent(event_t event) override; #endif diff --git a/radio/src/gui/colorlcd/radio_sdmanager.cpp b/radio/src/gui/colorlcd/radio_sdmanager.cpp index 646b726a4..633b6be79 100644 --- a/radio/src/gui/colorlcd/radio_sdmanager.cpp +++ b/radio/src/gui/colorlcd/radio_sdmanager.cpp @@ -97,6 +97,7 @@ class FlashDialog: public FullScreenDialog device(device), progress(this, {LCD_W / 2 - 50, LCD_H / 2, 100, 15}) { + setFocus(); } void deleteLater(bool detach = true, bool trash = true) override @@ -105,17 +106,20 @@ class FlashDialog: public FullScreenDialog return; progress.deleteLater(true, false); - FullScreenDialog::deleteLater(detach, trash); } void flash(const char * filename) { - device.flashFirmware(filename, [=](const char * title, const char * message, int count, int total) -> void { - setMessage(message); - progress.setValue(total > 0 ? count * 100 / total : 0); - MainWindow::instance()->run(false); - }); + TRACE("flashing '%s'", filename); + device.flashFirmware( + filename, + [=](const char *title, const char *message, int count, + int total) -> void { + setMessage(message); + progress.setValue(total > 0 ? count * 100 / total : 0); + MainWindow::instance()->run(false); + }); deleteLater(); } @@ -188,9 +192,11 @@ void RadioSdManagerPage::build(FormWindow * window) if (information.readMultiFirmwareInformation(name.data()) == nullptr) { #if defined(INTERNAL_MODULE_MULTI) menu->addLine(STR_FLASH_INTERNAL_MULTI, [=]() { - MultiDeviceFirmwareUpdate deviceFirmwareUpdate(INTERNAL_MODULE, MULTI_TYPE_MULTIMODULE); - auto dialog = new FlashDialog(deviceFirmwareUpdate); - dialog->flash(getFullPath(name)); + MultiDeviceFirmwareUpdate deviceFirmwareUpdate( + INTERNAL_MODULE, MULTI_TYPE_MULTIMODULE); + auto dialog = new FlashDialog( + deviceFirmwareUpdate); + dialog->flash(getFullPath(name)); }); #endif menu->addLine(STR_FLASH_EXTERNAL_MULTI, [=]() { @@ -219,29 +225,33 @@ void RadioSdManagerPage::build(FormWindow * window) if (!READ_ONLY() && !strcasecmp(ext, FIRMWARE_EXT)) { if (isBootloader(name.data())) { menu->addLine(STR_FLASH_BOOTLOADER, [=]() { - BootloaderFirmwareUpdate bootloaderFirmwareUpdate; - auto dialog = new FlashDialog(bootloaderFirmwareUpdate); - dialog->flash(getFullPath(name)); + BootloaderFirmwareUpdate bootloaderFirmwareUpdate; + auto dialog = new FlashDialog( + bootloaderFirmwareUpdate); + dialog->flash(getFullPath(name)); + TRACE("### finished flashing ###"); }); } - } - else if (!READ_ONLY() && !strcasecmp(ext, SPORT_FIRMWARE_EXT)) { + } else if (!READ_ONLY() && !strcasecmp(ext, SPORT_FIRMWARE_EXT)) { if (HAS_SPORT_UPDATE_CONNECTOR()) { menu->addLine(STR_FLASH_EXTERNAL_DEVICE, [=]() { - FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(SPORT_MODULE); - auto dialog = new FlashDialog(deviceFirmwareUpdate); - dialog->flash(getFullPath(name)); + FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(SPORT_MODULE); + auto dialog = new FlashDialog( + deviceFirmwareUpdate); + dialog->flash(getFullPath(name)); }); } menu->addLine(STR_FLASH_INTERNAL_MODULE, [=]() { - FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(INTERNAL_MODULE); - auto dialog = new FlashDialog(deviceFirmwareUpdate); - dialog->flash(getFullPath(name)); + FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(INTERNAL_MODULE); + auto dialog = new FlashDialog( + deviceFirmwareUpdate); + dialog->flash(getFullPath(name)); }); menu->addLine(STR_FLASH_EXTERNAL_MODULE, [=]() { - FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(EXTERNAL_MODULE); - auto dialog = new FlashDialog(deviceFirmwareUpdate); - dialog->flash(getFullPath(name)); + FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(EXTERNAL_MODULE); + auto dialog = new FlashDialog( + deviceFirmwareUpdate); + dialog->flash(getFullPath(name)); }); } #if defined(LUA) diff --git a/radio/src/io/bootloader_flash.cpp b/radio/src/io/bootloader_flash.cpp index b39f0f094..12b45e448 100644 --- a/radio/src/io/bootloader_flash.cpp +++ b/radio/src/io/bootloader_flash.cpp @@ -58,6 +58,11 @@ void BootloaderFirmwareUpdate::flashFirmware(const char * filename, ProgressHand unlockFlash(); } + UINT flash_size = file.obj.objsize; + if (flash_size > BOOTLOADER_SIZE) { + flash_size = BOOTLOADER_SIZE; + } + for (int i = 0; i < BOOTLOADER_SIZE; i += 1024) { watchdogSuspend(1000/*10s*/); @@ -79,7 +84,7 @@ void BootloaderFirmwareUpdate::flashFirmware(const char * filename, ProgressHand for (UINT j = 0; j < count; j += FLASH_PAGESIZE) { flashWrite(CONVERT_UINT_PTR(FIRMWARE_ADDRESS + i + j), CONVERT_UINT_PTR(buffer + j)); } - progressHandler("Bootloader", STR_WRITING, i, file.obj.objsize); + progressHandler("Bootloader", STR_WRITING, i, flash_size); // Reached end-of-file if (f_eof(&file)) break; diff --git a/radio/src/io/frsky_firmware_update.cpp b/radio/src/io/frsky_firmware_update.cpp index 6ae866c7a..9b08b831d 100644 --- a/radio/src/io/frsky_firmware_update.cpp +++ b/radio/src/io/frsky_firmware_update.cpp @@ -514,8 +514,7 @@ const char * FrskyDeviceFirmwareUpdate::flashFirmware(const char * filename, Pro if (result) { POPUP_WARNING(STR_FIRMWARE_UPDATE_ERROR, result); - } - else { + } else { POPUP_INFORMATION(STR_FIRMWARE_UPDATE_SUCCESS); } diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index a6317dc61..a32bed11d 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -706,7 +706,7 @@ void lockFlash() void flashWrite(uint32_t *address, const uint32_t *buffer) { - simuSleep(100); + simuSleep(10); } uint32_t isBootloaderStart(const uint8_t * block) diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index c072dca43..0b995317a 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit c072dca43c232ab23c95035ec7b879cf84a64810 +Subproject commit 0b995317a5f8fa2c62c9d693418141d1649619e5