# HG changeset patch # User Michiel Broek # Date 1540063324 -7200 # Node ID 7a03d81c0e0d3a75888039b9e9a6e73aa2affd2a # Parent ad2c8b13eb88a91bde056dc58ca04881af920511 Added database backup and restore. diff -r ad2c8b13eb88 -r 7a03d81c0e0d main/config.h --- a/main/config.h Sat Oct 20 17:09:48 2018 +0200 +++ b/main/config.h Sat Oct 20 21:22:04 2018 +0200 @@ -106,6 +106,9 @@ MAIN_TOOLS_RECIPE, ///< Main recipes screen. MAIN_TOOLS_RECIPE_EDIT, ///< Main recipes editor. MAIN_TOOLS_FILES, ///< Main files. + MAIN_TOOLS_FILES_DIR, ///< Main files directory listings. + MAIN_TOOLS_FILES_RESTORE, ///< Main files restore. + MAIN_TOOLS_FILES_BACKUP, ///< Main files backup. MAIN_TOOLS_UPDATES, ///< Main Updates. MAIN_AUTO_INIT, ///< Automatic start MAIN_AUTO_DELAYSTART, ///< Delayed start diff -r ad2c8b13eb88 -r 7a03d81c0e0d main/files.c --- a/main/files.c Sat Oct 20 17:09:48 2018 +0200 +++ b/main/files.c Sat Oct 20 21:22:04 2018 +0200 @@ -9,6 +9,7 @@ extern sButton Buttons[MAXBUTTONS]; extern int Main_Screen; +static const char *TAG = "files"; /** @@ -59,13 +60,124 @@ +/** + * @brief File copier. + * @param fdir From directory + * @param tdir To directory + * @param fn Filename + */ +void FCopy(char *fdir, char *tdir, char *filename) +{ + char fn[33], tn[33], msg[33]; + int rc; + + snprintf(msg, 32, "Copy %s\r\n", filename); + TFT_print(msg, 0, LASTY); + snprintf(fn, 32, "%s%s", fdir, filename); + snprintf(tn, 32, "%s%s", tdir, filename); + rc = FileCopy(fn, tn); + ESP_LOGI(TAG, "Copy %s to %s rc=%d", fn, tn, rc); +} + + + /* * Files init function, only runs once a new screen is entered. */ void Files_Init(void) { + bool _loop; + DIR *dir; + switch (Main_Screen) { case MAIN_TOOLS_FILES: + TopMessage("Bestanden menu"); + Buttons_Add( 20, 40,120, 40, "Restore", 0); + Buttons_Add(180, 40,120, 40, "Backup", 1); + Buttons_Add( 20,120,120, 40, "Directory", 2); + Buttons_Add(130, 200, 60, 40, "Ok", 3); + Buttons[4].dark = true; + Buttons_Show(); + break; + + case MAIN_TOOLS_FILES_DIR: + break; + + case MAIN_TOOLS_FILES_RESTORE: + case MAIN_TOOLS_FILES_BACKUP: + if (Main_Screen == MAIN_TOOLS_FILES_RESTORE) + TopMessage("Restore database"); + else + TopMessage("Backup database"); + Buttons_Add( 40, 100, 80, 40, "Start", 0); + Buttons_Add(200, 100, 80, 40, "Stop", 1); + Buttons[1].dark = true; + Buttons_Show(); + SoundPlay(SOUND_Prompt); + _loop = true; + while (_loop) { + switch (Buttons_Scan()) { + case 0: + _loop = false; + break; + case 1: + _loop = false; + Main_Screen = MAIN_TOOLS_FILES; + break; + default: + break; + } + vTaskDelay(50 / portTICK_PERIOD_MS); + } + Buttons_Clear(); + if (Main_Screen == MAIN_TOOLS_FILES) + break; + + _fg = TFT_YELLOW; + TFT_setFont(DEJAVU24_FONT, NULL); + if (Main_Screen == MAIN_TOOLS_FILES_RESTORE) { + ESP_LOGI(TAG, "Restore database"); + TFT_setFont(DEJAVU18_FONT, NULL); + TFT_print("Backup:\r\n", 0, 30); + _fg = TFT_CYAN; + FCopy("/sdcard/etc/", "/spiffs/etc/", "config.conf"); + FCopy("/sdcard/etc/", "/spiffs/etc/", "recipe.conf"); + FCopy("/sdcard/etc/", "/spiffs/etc/", "equipments.conf"); + FCopy("/sdcard/etc/", "/spiffs/etc/", "stations.conf"); + FCopy("/sdcard/etc/", "/spiffs/etc/", "runtime.conf"); + _fg = TFT_YELLOW; + TFT_setFont(DEJAVU24_FONT, NULL); + TFT_print("Restore gereed, reset!", CENTER, LASTY + 12); + vTaskDelay(2000 / portTICK_PERIOD_MS); + esp_restart(); + } else { + dir = opendir("/sdcard/etc"); + if (dir == NULL) { + mkdir("/sdcard/etc", 0755); + dir = opendir("/sdcard/etc"); + } + if (dir == NULL) { + TFT_print("SD kaart fout", CENTER, CENTER); + } else { + closedir(dir); + ESP_LOGI(TAG, "Backup database"); + TFT_setFont(DEJAVU18_FONT, NULL); + TFT_print("Backup:\r\n", 0, 30); + _fg = TFT_CYAN; + FCopy("/spiffs/etc/", "/sdcard/etc/", "config.conf"); + FCopy("/spiffs/etc/", "/sdcard/etc/", "recipe.conf"); + FCopy("/spiffs/etc/", "/sdcard/etc/", "equipments.conf"); + FCopy("/spiffs/etc/", "/sdcard/etc/", "stations.conf"); + FCopy("/spiffs/etc/", "/sdcard/etc/", "runtime.conf"); + _fg = TFT_YELLOW; + TFT_setFont(DEJAVU24_FONT, NULL); + TFT_print("Backup gereed.", CENTER, LASTY + 12); + } + } + + Buttons_Add(130, 200, 60, 40, "Ok", 0); + Buttons[0].dark = true; + Buttons_Show(); break; default: break; @@ -82,9 +194,31 @@ switch (Main_Screen) { case MAIN_TOOLS_FILES: + switch (Buttons_Scan()) { + case 0: Main_Screen = MAIN_TOOLS_FILES_RESTORE; + break; + + case 1: Main_Screen = MAIN_TOOLS_FILES_BACKUP; + break; + + case 2: Main_Screen = MAIN_TOOLS_FILES_DIR; + break; + + case 3: Main_Screen = MAIN_TOOLS; + break; + } + break; + + case MAIN_TOOLS_FILES_DIR: Files_Dir("/sdcard/recipe"); Files_Dir("/sdcard/w/log"); - Main_Screen = MAIN_TOOLS; + Main_Screen = MAIN_TOOLS_FILES; + break; + + case MAIN_TOOLS_FILES_RESTORE: + case MAIN_TOOLS_FILES_BACKUP: + if (Buttons_Scan() == 0) + Main_Screen = MAIN_TOOLS_FILES; break; default: break; diff -r ad2c8b13eb88 -r 7a03d81c0e0d main/task_tft.c --- a/main/task_tft.c Sat Oct 20 17:09:48 2018 +0200 +++ b/main/task_tft.c Sat Oct 20 21:22:04 2018 +0200 @@ -609,6 +609,9 @@ break; case MAIN_TOOLS_FILES: + case MAIN_TOOLS_FILES_DIR: + case MAIN_TOOLS_FILES_RESTORE: + case MAIN_TOOLS_FILES_BACKUP: Files_Init(); break; @@ -710,6 +713,9 @@ break; case MAIN_TOOLS_FILES: + case MAIN_TOOLS_FILES_DIR: + case MAIN_TOOLS_FILES_RESTORE: + case MAIN_TOOLS_FILES_BACKUP: Files_Loop(); break;