This commit is contained in:
Bertrand Songis
2021-02-11 17:50:43 +01:00
parent 4948f98f06
commit 4a2e20815f
7 changed files with 40 additions and 56 deletions
+1 -2
View File
@@ -185,8 +185,7 @@ enum BeeperMode {
enum ModuleIndex {
INTERNAL_MODULE,
EXTERNAL_MODULE,
SPORT_MODULE,
BOOTLOADER_MODULE,
SPORT_MODULE
};
enum TrainerMode {
+14 -19
View File
@@ -91,9 +91,9 @@ template <class T>
class FlashDialog: public FullScreenDialog
{
public:
explicit FlashDialog(ModuleIndex module):
explicit FlashDialog(const T & device):
FullScreenDialog(WARNING_TYPE_INFO, "Flash device"),
device(module),
device(device),
progress(this, {LCD_W / 2 - 50, LCD_H / 2, 100, 15})
{
}
@@ -123,17 +123,6 @@ class FlashDialog: public FullScreenDialog
Progress progress;
};
template <class T>
class MultiFlashDialog: public FlashDialog<T>
{
public:
explicit MultiFlashDialog(ModuleIndex module, MultiModuleType type):
FlashDialog<T>(module)
{
FlashDialog<T>::device.setType(type);
}
};
void RadioSdManagerPage::build(FormWindow * window)
{
FormGridLayout grid;
@@ -203,7 +192,8 @@ void RadioSdManagerPage::build(FormWindow * window)
});
#endif
menu->addLine(STR_FLASH_EXTERNAL_MULTI, [=]() {
auto dialog = new MultiFlashDialog<MultiDeviceFirmwareUpdate>(EXTERNAL_MODULE, MULTI_TYPE_MULTIMODULE);
MultiDeviceFirmwareUpdate deviceFirmwareUpdate(EXTERNAL_MODULE, MULTI_TYPE_MULTIMODULE);
auto dialog = new FlashDialog<MultiDeviceFirmwareUpdate>(deviceFirmwareUpdate);
dialog->flash(getFullPath(name));
});
}
@@ -211,7 +201,8 @@ void RadioSdManagerPage::build(FormWindow * window)
#endif
else if (!READ_ONLY() && !strcasecmp(ext, ELRS_FIRMWARE_EXT)) {
menu->addLine(STR_FLASH_EXTERNAL_ELRS, [=]() {
auto dialog = new MultiFlashDialog<MultiDeviceFirmwareUpdate>(EXTERNAL_MODULE, MULTI_TYPE_ELRS);
MultiDeviceFirmwareUpdate deviceFirmwareUpdate(EXTERNAL_MODULE, MULTI_TYPE_ELRS);
auto dialog = new FlashDialog<MultiDeviceFirmwareUpdate>(deviceFirmwareUpdate);
dialog->flash(getFullPath(name));
});
}
@@ -226,7 +217,8 @@ void RadioSdManagerPage::build(FormWindow * window)
if (!READ_ONLY() && !strcasecmp(ext, FIRMWARE_EXT)) {
if (isBootloader(name.data())) {
menu->addLine(STR_FLASH_BOOTLOADER, [=]() {
auto dialog = new FlashDialog<BootloaderDeviceFirmwareUpdate>(BOOTLOADER_MODULE);
BootloaderFirmwareUpdate bootloaderFirmwareUpdate;
auto dialog = new FlashDialog<BootloaderFirmwareUpdate>(bootloaderFirmwareUpdate);
dialog->flash(getFullPath(name));
});
}
@@ -234,16 +226,19 @@ void RadioSdManagerPage::build(FormWindow * window)
else if (!READ_ONLY() && !strcasecmp(ext, SPORT_FIRMWARE_EXT)) {
if (HAS_SPORT_UPDATE_CONNECTOR()) {
menu->addLine(STR_FLASH_EXTERNAL_DEVICE, [=]() {
auto dialog = new FlashDialog<FrskyDeviceFirmwareUpdate>(SPORT_MODULE);
FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(SPORT_MODULE);
auto dialog = new FlashDialog<FrskyDeviceFirmwareUpdate>(deviceFirmwareUpdate);
dialog->flash(getFullPath(name));
});
}
menu->addLine(STR_FLASH_INTERNAL_MODULE, [=]() {
auto dialog = new FlashDialog<FrskyDeviceFirmwareUpdate>(INTERNAL_MODULE);
FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(INTERNAL_MODULE);
auto dialog = new FlashDialog<FrskyDeviceFirmwareUpdate>(deviceFirmwareUpdate);
dialog->flash(getFullPath(name));
});
menu->addLine(STR_FLASH_EXTERNAL_MODULE, [=]() {
auto dialog = new FlashDialog<FrskyDeviceFirmwareUpdate>(EXTERNAL_MODULE);
FrskyDeviceFirmwareUpdate deviceFirmwareUpdate(EXTERNAL_MODULE);
auto dialog = new FlashDialog<FrskyDeviceFirmwareUpdate>(deviceFirmwareUpdate);
dialog->flash(getFullPath(name));
});
}
@@ -204,8 +204,8 @@ void onSdManagerMenu(const char * result)
#if defined(PCBTARANIS)
else if (result == STR_FLASH_BOOTLOADER) {
getSelectionFullPath(lfn);
BootloaderDeviceFirmwareUpdate device(BOOTLOADER_MODULE);
device.flashFirmware(lfn, drawProgressScreen);
BootloaderFirmwareUpdate bootloader;
bootloader.flashFirmware(lfn, drawProgressScreen);
}
else if (result == STR_FLASH_INTERNAL_MODULE) {
getSelectionFullPath(lfn);
@@ -233,13 +233,13 @@ void onSdManagerMenu(const char * result)
#endif
else if (result == STR_FLASH_EXTERNAL_MULTI) {
getSelectionFullPath(lfn);
MultiDeviceFirmwareUpdate device(EXTERNAL_MODULE);
device.flashFirmware(lfn, MULTI_TYPE_MULTIMODULE, drawProgressScreen);
MultiDeviceFirmwareUpdate device(EXTERNAL_MODULE, MULTI_TYPE_MULTIMODULE);
device.flashFirmware(lfn, drawProgressScreen);
}
else if (result == STR_FLASH_EXTERNAL_ELRS) {
getSelectionFullPath(lfn);
MultiDeviceFirmwareUpdate device(EXTERNAL_MODULE);
device.flashFirmware(lfn, MULTI_TYPE_ELRS, drawProgressScreen);
MultiDeviceFirmwareUpdate device(EXTERNAL_MODULE, MULTI_TYPE_ELRS);
device.flashFirmware(lfn, drawProgressScreen);
}
#endif
#if defined(BLUETOOTH)
+1 -1
View File
@@ -35,7 +35,7 @@ bool isBootloader(const char * filename)
return isBootloaderStart(buffer);
}
void BootloaderDeviceFirmwareUpdate::flashFirmware(const char *filename, ProgressHandler progressHandler)
void BootloaderFirmwareUpdate::flashFirmware(const char * filename, ProgressHandler progressHandler)
{
FIL file;
uint8_t buffer[1024];
+2 -13
View File
@@ -18,23 +18,12 @@
* GNU General Public License for more details.
*/
#ifndef _BOOTLOADER_FLASH_H_
#define _BOOTLOADER_FLASH_H_
#pragma once
bool isBootloader(const char * filename);
class BootloaderDeviceFirmwareUpdate
class BootloaderFirmwareUpdate
{
public:
explicit BootloaderDeviceFirmwareUpdate(ModuleIndex module):
module(module)
{
}
void flashFirmware(const char * filename, ProgressHandler progressHandler);
protected:
ModuleIndex module;
};
#endif // _BOOTLOADER_FLASH_H_
+15 -14
View File
@@ -34,15 +34,18 @@
For example: REM multi-stm-bcsid-01020176
*/
class MultiFirmwareInformation {
class MultiFirmwareInformation
{
public:
enum MultiFirmwareBoardType {
enum MultiFirmwareBoardType
{
FIRMWARE_MULTI_AVR = 0,
FIRMWARE_MULTI_STM,
FIRMWARE_MULTI_ORX,
};
enum MultiFirmwareTelemetryType {
enum MultiFirmwareTelemetryType
{
FIRMWARE_MULTI_TELEM_NONE = 0,
FIRMWARE_MULTI_TELEM_MULTI_STATUS, // erSkyTX
FIRMWARE_MULTI_TELEM_MULTI_TELEMETRY, // OpenTX
@@ -70,12 +73,12 @@ class MultiFirmwareInformation {
bool isMultiInternalFirmware() const
{
return (boardType == FIRMWARE_MULTI_STM && optibootSupport == true && bootloaderCheck == true && telemetryType == FIRMWARE_MULTI_TELEM_MULTI_TELEMETRY);
return (boardType == FIRMWARE_MULTI_STM && optibootSupport && bootloaderCheck && telemetryType == FIRMWARE_MULTI_TELEM_MULTI_TELEMETRY);
}
bool isMultiExternalFirmware() const
{
return ((telemetryInversion == true || boardType == FIRMWARE_MULTI_STM ) && optibootSupport == true && bootloaderCheck == true && telemetryType == FIRMWARE_MULTI_TELEM_MULTI_TELEMETRY);
return ((telemetryInversion || boardType == FIRMWARE_MULTI_STM ) && optibootSupport && bootloaderCheck && telemetryType == FIRMWARE_MULTI_TELEM_MULTI_TELEMETRY);
}
const char * readMultiFirmwareInformation(const char * filename);
@@ -100,23 +103,21 @@ class MultiFirmwareInformation {
const char * readV2Signature(const char * buffer);
};
enum MultiModuleType {
enum MultiModuleType
{
MULTI_TYPE_MULTIMODULE = 0,
MULTI_TYPE_ELRS,
};
class MultiDeviceFirmwareUpdate {
class MultiDeviceFirmwareUpdate
{
public:
explicit MultiDeviceFirmwareUpdate(ModuleIndex module):
module(module)
explicit MultiDeviceFirmwareUpdate(ModuleIndex module, MultiModuleType type):
module(module),
type(type)
{
}
void setType(MultiModuleType value)
{
type = value;
}
bool flashFirmware(const char * filename, ProgressHandler progressHandler);
protected: