/** * TODO file description */ // // Created by MightyPork on 2023/04/09. // #include <stdio.h> #include <string.h> #include "app_gui.h" #include "gui_event.h" #include "ds_rtc.h" #include "app_io.h" #include "app_config.h" static int page = 1; #define PAGECOUNT 3 struct AppConfig settings_scratch; /** Clear the top 3 lines in the LCD - this fixes some problems with utf8 allocations * (char still held by a line later overwritten) */ static void clear_menu_lines(); void screen_settings(GuiEvent event) { switch (event) { case GUI_EVENT_SCREEN_INIT: page = 1; memcpy(&settings_scratch, &app_config, APPCONFIG_SIZE); break; case GUI_EVENT_PAINT: switch (page) { case 1: snprintf(sbuf, sbuf_len, "1. Program=%s", settings_scratch.scheduler_enable ? "ZAP" : "VYP"); LcdBuffer_Write(&lcd, 0, 0, sbuf); LcdBuffer_Write(&lcd, 1, 0, "2. Upravit program"); LcdBuffer_Write(&lcd, 2, 0, "3. Nastavit čas"); break; case 2: LcdBuffer_Write(&lcd, 0, 0, "1. Délka zálivky"); LcdBuffer_Write(&lcd, 1, 0, "2. Kompenzace tlaku"); snprintf(sbuf, sbuf_len, "3. Suché dny (%d)", settings_scratch.scheduler_dry_days); LcdBuffer_Write(&lcd, 2, 0, sbuf); break; case 3: snprintf(sbuf, sbuf_len, "1. Blok.vlhkostí=%s", settings_scratch.moisture_enable ? "ZAP" : "VYP"); LcdBuffer_Write(&lcd, 0, 0, sbuf); LcdBuffer_Write(&lcd, 1, 0, "2. Kalibrace vlhkom."); snprintf(sbuf, sbuf_len, "3. Práh vlh.=%d%%", settings_scratch.moisture_threshold_percent); LcdBuffer_Write(&lcd, 2, 0, sbuf); break; } snprintf(sbuf, sbuf_len, "⊛←%d/%d→¤ 🅳Zruš 🅰Ulož", page, PAGECOUNT); LcdBuffer_Write(&lcd, 3, 0, sbuf); break; case GUI_EVENT_KEY_B: case GUI_EVENT_KEY_STAR: if (page > 1) { page--; clear_menu_lines(); request_paint(); } break; case GUI_EVENT_KEY_C: case GUI_EVENT_KEY_HASH: if (page < PAGECOUNT) { page++; clear_menu_lines(); request_paint(); } break; case GUI_EVENT_KEY_A: // SAVE memcpy(&app_config, &settings_scratch, APPCONFIG_SIZE); appconfig_save(); switch_screen(screen_home, true); break; case GUI_EVENT_KEY_D: // CANCEL switch_screen(screen_home, true); break; default: switch (page) { case 1: switch (event) { case GUI_EVENT_KEY_1: // Program Zap/VYP settings_scratch.scheduler_enable ^= 1; request_paint(); break; case GUI_EVENT_KEY_2: // Upravit program switch_to_subscreen(screen_program_prehled); break; case GUI_EVENT_KEY_3: // Nastavit cas switch_to_subscreen(screen_set_time); break; } break; case 2: switch (event) { case GUI_EVENT_KEY_1: // Délka zálivky switch_to_subscreen(screen_delka_zalivky); break; case GUI_EVENT_KEY_2: // Kompenzace tlaku switch_to_subscreen(screen_kompenzace_tlaku); break; case GUI_EVENT_KEY_3: // Nastavit suche dny switch_to_subscreen(screen_suche_dny); break; } break; case 3: switch (event) { case GUI_EVENT_KEY_1: // Blokace vlhkosti Zap/VYP settings_scratch.moisture_enable ^= 1; request_paint(); break; case GUI_EVENT_KEY_2: // Kalibrace vlhkomeru switch_to_subscreen(screen_moisture_calib); break; case GUI_EVENT_KEY_3: // Nastavit prah switch_to_subscreen(screen_set_moisture_threshold); break; } break; } } } static void clear_menu_lines() { LcdBuffer_Write(&lcd, 0, 0, " "); LcdBuffer_Write(&lcd, 1, 0, " "); LcdBuffer_Write(&lcd, 2, 0, " "); }