Sun, 24 Nov 2019 16:44:00 +0100
Version 0.3.7. The WiFi task uses the new event handlers. Cooling temperature top is now 45 instead of 30 degreees for pitching Kveik. One extra cosmetic message during OTA update.
/** * @file files.c * @brief Files management. */ #include "config.h" extern sButton Buttons[MAXBUTTONS]; extern int Main_Screen; static const char *TAG = "files"; /** * @brief Show files directory * @param path The path from which to list */ void Files_Dir(char *path) { char filename[272], tmp[42]; uint16_t y = 28; DIR *dir; struct dirent *de; struct stat st; _bg = TFT_BLACK; TFT_fillScreen(_bg); TopMessage(path); _fg = TFT_WHITE; TFT_setFont(DEFAULT_FONT, NULL); if ((dir = opendir(path))) { de = readdir(dir); while (de) { TFT_print(de->d_name, 2, y); sprintf(filename, "%s/%s", path, de->d_name); if (stat(filename, &st) == 0) { sprintf(tmp, "%ld", st.st_size); TFT_print(tmp, RIGHT, y); } de = readdir(dir); y += 16; } closedir(dir); } Buttons_Add(130, 200, 60, 40, (char *)"Ok", 0); Buttons[0].dark = true; Buttons_Show(); while (true) { if (Buttons_Scan() == 0) { Buttons_Clear(); return; } vTaskDelay(50 / portTICK_PERIOD_MS); } } /** * @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((char *)"Bestanden menu"); Buttons_Add( 20, 40,120, 40, (char *)"Restore", 0); Buttons_Add(180, 40,120, 40, (char *)"Backup", 1); Buttons_Add( 20,120,120, 40, (char *)"Directory", 2); Buttons_Add(130, 200, 60, 40, (char *)"Ok", 3); Buttons[3].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((char *)"Restore database"); else TopMessage((char *)"Backup database"); Buttons_Add( 40, 100, 80, 40, (char *)"Start", 0); Buttons_Add(200, 100, 80, 40, (char *)"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((char *)"Backup:\r\n", 0, 30); _fg = TFT_CYAN; FCopy((char *)"/sdcard/etc/", (char *)"/spiffs/etc/", (char *)"config.conf"); FCopy((char *)"/sdcard/etc/", (char *)"/spiffs/etc/", (char *)"recipe.conf"); FCopy((char *)"/sdcard/etc/", (char *)"/spiffs/etc/", (char *)"equipments.conf"); FCopy((char *)"/sdcard/etc/", (char *)"/spiffs/etc/", (char *)"stations.conf"); FCopy((char *)"/sdcard/etc/", (char *)"/spiffs/etc/", (char *)"runtime.conf"); _fg = TFT_YELLOW; TFT_setFont(DEJAVU24_FONT, NULL); TFT_print((char *)"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((char *)"SD kaart fout", CENTER, CENTER); } else { closedir(dir); ESP_LOGI(TAG, "Backup database"); TFT_setFont(DEJAVU18_FONT, NULL); TFT_print((char *)"Backup:\r\n", 0, 30); _fg = TFT_CYAN; FCopy((char *)"/spiffs/etc/", (char *)"/sdcard/etc/", (char *)"config.conf"); FCopy((char *)"/spiffs/etc/", (char *)"/sdcard/etc/", (char *)"recipe.conf"); FCopy((char *)"/spiffs/etc/", (char *)"/sdcard/etc/", (char *)"equipments.conf"); FCopy((char *)"/spiffs/etc/", (char *)"/sdcard/etc/", (char *)"stations.conf"); FCopy((char *)"/spiffs/etc/", (char *)"/sdcard/etc/", (char *)"runtime.conf"); _fg = TFT_YELLOW; TFT_setFont(DEJAVU24_FONT, NULL); TFT_print((char *)"Backup gereed.", CENTER, LASTY + 12); } } Buttons_Add(130, 200, 60, 40, (char *)"Ok", 0); Buttons[0].dark = true; Buttons_Show(); break; default: break; } } /* * Recipes management loop, non-blocking. */ void Files_Loop(void) { 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((char *)"/sdcard/recipe"); Files_Dir((char *)"/sdcard/w/log"); 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; } }