diff --git a/radio/src/.gitignore b/radio/src/.gitignore index 5bf38bf1f5..e2ec3ddcd3 100644 --- a/radio/src/.gitignore +++ b/radio/src/.gitignore @@ -20,3 +20,4 @@ /traces /MODELS /FIRMWARES +/EEPROMS diff --git a/radio/src/Makefile b/radio/src/Makefile index 056f04db04..110f03c041 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -949,7 +949,7 @@ endif ifeq ($(SDCARD), YES) CPPDEFS += -DSDCARD - CPPSRC += logs.cpp + CPPSRC += logs.cpp strhelpers.cpp endif RUN_FROM_FLASH = 1 diff --git a/radio/src/bootloader/Makefile b/radio/src/bootloader/Makefile index 0e178100f8..1e5fa07307 100644 --- a/radio/src/bootloader/Makefile +++ b/radio/src/bootloader/Makefile @@ -169,6 +169,7 @@ CPPSRC = ../targets/taranis/lcd_driver.cpp \ ../lcd.cpp \ ../keys.cpp \ ../fonts.cpp \ + ../strhelpers.cpp \ boot.cpp # List ASM source files here diff --git a/radio/src/bootloader/boot.cpp b/radio/src/bootloader/boot.cpp index aa23562668..f5906bf555 100644 --- a/radio/src/bootloader/boot.cpp +++ b/radio/src/bootloader/boot.cpp @@ -91,7 +91,6 @@ enum BootLoaderStates { ST_FLASH_CHECK, ST_FLASHING, ST_FLASH_DONE, - ST_BACKUP_EEPROM, ST_RESTORE_MENU, ST_USB, ST_REBOOT, @@ -112,6 +111,8 @@ uint32_t firmwareWritten = 0; uint32_t eepromAddress = 0; uint32_t eepromWritten = 0; +TCHAR backupFilename[60]; + uint32_t Master_frequency; volatile uint8_t Tenms; uint8_t EE_timer; @@ -278,13 +279,6 @@ void hw_delay(uint16_t time) } #endif -char * cpystr(char * dest, const char * source) -{ - while ((*dest++ = *source++)) - ; - return dest - 1; -} - FRESULT readBinDir(DIR *dj, FILINFO *fno) { FRESULT fr; @@ -297,7 +291,7 @@ FRESULT readBinDir(DIR *dj, FILINFO *fno) break; } if (*fno->lfname == 0) { - cpystr(fno->lfname, fno->fname); // Copy 8.3 name + strAppend(fno->lfname, fno->fname); // Copy 8.3 name } int32_t len = strlen(fno->lfname) - 4; if (len < 0) { @@ -360,7 +354,7 @@ const char *getBinaryPath() FRESULT openBinaryFile(uint32_t index) { TCHAR filename[60]; - cpystr(cpystr(cpystr(filename, getBinaryPath()), "/"), Filenames[index]); + strAppend(strAppend(strAppend(filename, getBinaryPath()), "/"), Filenames[index]); f_open(&FlashFile, filename, FA_READ); if (memoryType == MEM_FLASH) f_lseek(&FlashFile, BOOTLOADER_SIZE); @@ -443,9 +437,6 @@ void writeEepromBlock() int main() { uint8_t index = 0; -#if defined(PCBTARANIS) - uint8_t TenCount = 2; -#endif uint8_t maxhsize = DISPLAY_CHAR_WIDTH; FRESULT fr; uint32_t state = ST_START; @@ -517,7 +508,6 @@ int main() wdt_reset(); if (Tenms) { - wdt_reset(); // Retrigger hardware watchdog if (EE_timer) { if (--EE_timer == 0) { @@ -544,16 +534,15 @@ int main() if (state == ST_START) { lcd_putsLeft(2*FH, "\010Write Firmware"); - lcd_putsLeft(3*FH, "\010Backup EEPROM"); - lcd_putsLeft(4*FH, "\010Restore EEPROM"); - lcd_putsLeft(5*FH, "\010Exit"); + lcd_putsLeft(3*FH, "\010Restore EEPROM"); + lcd_putsLeft(4*FH, "\010Exit"); lcd_invert_line(2+vpos); lcd_putsLeft(7*FH, INDENT "Or plug in a USB cable for mass storage"); if (event == EVT_KEY_FIRST(BOOT_KEY_DOWN)) { - vpos == 3 ? vpos = 0 : vpos = vpos+1; + vpos == 2 ? vpos = 0 : vpos = vpos+1; } else if (event == EVT_KEY_FIRST(BOOT_KEY_UP)) { - vpos == 0 ? vpos = 3 : vpos = vpos-1; + vpos == 0 ? vpos = 2 : vpos = vpos-1; } else if (event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { switch (vpos) { @@ -561,9 +550,6 @@ int main() state = ST_FLASH_MENU; break; case 1: - state = ST_BACKUP_EEPROM; - break; - case 2: state = ST_RESTORE_MENU; break; default: @@ -614,16 +600,6 @@ 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) { @@ -759,10 +735,7 @@ int main() state = ST_REBOOT; } - if (--TenCount == 0) { - TenCount = 2; - lcdRefresh(); - } + lcdRefresh(); if (PowerUpDelay < 20) { // 200 mS PowerUpDelay += 1; diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp index 329e598704..6e90a8ec3d 100644 --- a/radio/src/gui/menu_general.cpp +++ b/radio/src/gui/menu_general.cpp @@ -685,6 +685,55 @@ inline bool isFilenameLower(bool isfile, const char * fn, const char * line) return (!isfile && line[SD_SCREEN_FILE_LENGTH+1]) || (isfile==(bool)line[SD_SCREEN_FILE_LENGTH+1] && strcasecmp(fn, line) < 0); } +#if defined(PCBTARANIS) +void backupEeprom() +{ + char filename[60]; + uint8_t buffer[1024]; + FIL file; + + lcd_clear(); + lcd_putsLeft(4*FH, STR_WRITING); + lcd_rect(3, 6*FH+4, 204, 7); + lcdRefresh(); + + eeCheck(true); + + // create the directory if needed... + DIR folder; + FRESULT result = f_opendir(&folder, EEPROMS_PATH); + if (result != FR_OK) { + if (result == FR_NO_PATH) + result = f_mkdir(EEPROMS_PATH); + if (result != FR_OK) { + POPUP_WARNING(SDCARD_ERROR(result)); + return; + } + } + + // prepare the filename... + char * tmp = strAppend(filename, EEPROMS_PATH "/eeprom"); + tmp = strAppendDate(tmp, true); + strAppend(tmp, EEPROM_EXT); + + // open the file for writing... + f_open(&file, filename, FA_WRITE | FA_CREATE_ALWAYS); + + for (int i=0; i + +char * strAppend(char * dest, const char * source) +{ + while ((*dest++ = *source++)) + ; + return dest - 1; +} + +#if defined(RTCLOCK) +#include "rtc.h" + +char * strAppendDate(char * str, bool time) +{ + str[0] = '-'; + struct gtm utm; + gettime(&utm); + div_t qr = div(utm.tm_year+1900, 10); + str[4] = '0' + qr.rem; + qr = div(qr.quot, 10); + str[3] = '0' + qr.rem; + qr = div(qr.quot, 10); + str[2] = '0' + qr.rem; + str[1] = '0' + qr.quot; + str[5] = '-'; + qr = div(utm.tm_mon+1, 10); + str[7] = '0' + qr.rem; + str[6] = '0' + qr.quot; + str[8] = '-'; + qr = div(utm.tm_mday, 10); + str[10] = '0' + qr.rem; + str[9] = '0' + qr.quot; + + if (time) { + str[11] = '-'; + div_t qr = div(utm.tm_hour, 10); + str[13] = '0' + qr.rem; + str[12] = '0' + qr.quot; + str[14] = '-'; + qr = div(utm.tm_min, 10); + str[16] = '0' + qr.rem; + str[15] = '0' + qr.quot; + str[17] = '-'; + qr = div(utm.tm_sec, 10); + str[19] = '0' + qr.rem; + str[18] = '0' + qr.quot; + str[20] = '\0'; + return &str[20]; + } + else { + str[11] = '\0'; + return &str[11]; + } +} + +#endif diff --git a/radio/src/targets/taranis/usbd_storage_msd.cpp b/radio/src/targets/taranis/usbd_storage_msd.cpp index 042538b495..81b073ee06 100644 --- a/radio/src/targets/taranis/usbd_storage_msd.cpp +++ b/radio/src/targets/taranis/usbd_storage_msd.cpp @@ -697,7 +697,7 @@ int32_t fat12Read( uint8_t *buffer, uint16_t sector, uint16_t count ) memcpy(buffer, g_DIRroot, BLOCKSIZE ) ; } else if (sector < 3 + (EESIZE/BLOCKSIZE)) { - eeprom_read_block (buffer, (sector-3)*BLOCKSIZE, BLOCKSIZE); + eeprom_read_block(buffer, (sector-3)*BLOCKSIZE, BLOCKSIZE); } else if (sector < 3 + (EESIZE/BLOCKSIZE) + (FLASHSIZE/BLOCKSIZE)) { uint32_t address;