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.
 
 
 
zavlaha-kzk/src/screens/screen_settings.c

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, " ");
}