main/files.c

Sun, 18 Jul 2021 11:25:55 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 18 Jul 2021 11:25:55 +0200
changeset 109
72af8958b469
parent 87
47253f294a9f
permissions
-rw-r--r--

Version 0.3.17. Made the Hendi PWM change official.

/**
 * @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;

    EditerTop(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;
    }
}

mercurial