From 5ee181dc093c359d29ccee6c5e624786782104e2 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Tue, 8 Apr 2014 17:09:29 +0200 Subject: [PATCH] Some logic added --- radio/src/bootloader/boot.cpp | 58 +++++++++++++++++++++++++++++------ radio/src/sdcard.h | 1 + 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/radio/src/bootloader/boot.cpp b/radio/src/bootloader/boot.cpp index f9292cc46..0b095bb7c 100644 --- a/radio/src/bootloader/boot.cpp +++ b/radio/src/bootloader/boot.cpp @@ -99,6 +99,14 @@ enum BootLoaderStates { ST_FLASH_DONE, ST_USB, ST_REBOOT, + ST_BACKUP_EEPROM, + ST_RESTORE_MENU, + ST_EEPROM_CHECK, +}; + +enum MemoryTypes { + MEM_FLASH, + MEM_EEPROM }; /*---------------------------------------------------------------------------- @@ -572,6 +580,8 @@ int menuFlashFile(uint32_t index, uint8_t event) { FRESULT fr; + // TODO if (memoryType == MEM_EEPROM) + lcd_putsLeft(4*FH, "\012Hold [ENT] to start loading" ); if (Valid == 0) { @@ -626,6 +636,7 @@ int main() uint32_t hpos = 0; uint32_t firmwareAddress = FIRMWARE_ADDRESS; uint32_t firmwareWritten = 0; + uint32_t memoryType; #if defined(PCBTARANIS) wdt_reset(); @@ -724,7 +735,7 @@ int main() } if (state == ST_START) { - lcd_putsLeft(2*FH, "\010Load Firmware"); + lcd_putsLeft(2*FH, "\010Write Firmware"); lcd_putsLeft(3*FH, "\010Backup EEPROM"); lcd_putsLeft(4*FH, "\010Restore EEPROM"); lcd_putsLeft(5*FH, "\010Exit"); @@ -737,10 +748,19 @@ int main() vpos == 0 ? vpos = 3 : vpos = vpos-1; } else if (event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { - if (vpos == 0) - state = ST_FLASH_MENU; - else - state = ST_REBOOT; + switch (vpos) { + case 0: + state = ST_FLASH_MENU; + break; + case 1: + state = ST_BACKUP_EEPROM; + break; + case 2: + state = ST_RESTORE_MENU; + break; + default: + state = ST_REBOOT; + } } } @@ -759,19 +779,23 @@ int main() #endif } - if (state == ST_FLASH_MENU) { + if ((state == ST_FLASH_MENU) || (state == ST_RESTORE_MENU)) { sdInit(); + state == ST_RESTORE_MENU ? memoryType = MEM_EEPROM : memoryType = MEM_FLASH; state = ST_DIR_CHECK; } else if (state == ST_DIR_CHECK) { - fr = f_chdir(FIRMWARES_PATH); + if (memoryType == MEM_FLASH) + fr = f_chdir(FIRMWARES_PATH); + else + fr = f_chdir(EEPROMS_PATH); if (fr == FR_OK) { state = ST_OPEN_DIR; } else { - lcd_putsLeft(2*FH, INDENT "No firmware in " FIRMWARES_PATH " directory"); - if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT) || event == EVT_KEY_FIRST(BOOT_KEY_MENU)) { + lcd_putsLeft(2*FH, INDENT "Directory is missing!"); + if (event == EVT_KEY_BREAK(BOOT_KEY_EXIT) || event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { vpos = 0; state = ST_START; } @@ -789,6 +813,17 @@ int main() } } + if (state == ST_BACKUP_EEPROM) { + // TODO Get RTC date/time, dump EEPROM to EEPROMS_PATH/EEPROM_yy-mm-dd-hh-mm-ss.BIN + + lcd_putsLeft(2*FH, INDENT "Backup successful!"); + //lcd_putsLeft(3*FH, filename); + if (event == EVT_KEY_BREAK(BOOT_KEY_EXIT) || event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { + vpos = 0; + state = ST_START; + } + } + if (state == ST_FILE_LIST) { uint32_t limit = 6; if (nameCount < limit) { @@ -851,7 +886,10 @@ int main() #endif else if (event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { // Select file to flash - state = ST_FLASH_CHECK; + if (memoryType == MEM_FLASH) + state = ST_FLASH_CHECK; + else + state = ST_EEPROM_CHECK; Valid = 0; } else if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT)) { diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index 1a216562c..ca7d7f7f7 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -48,6 +48,7 @@ #define BITMAPS_PATH ROOT_PATH "BMP" #define SCRIPTS_PATH ROOT_PATH "SCRIPTS" #define FIRMWARES_PATH ROOT_PATH "FIRMWARES" +#define EEPROMS_PATH ROOT_PATH "EEPROMS" #define MODELS_EXT ".bin" #define LOGS_EXT ".csv"