You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
5.0 KiB
151 lines
5.0 KiB
/**
|
|
* 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, " ");
|
|
}
|
|
|