main/setup.c

changeset 0
b74b0e4902c3
child 1
ad2c8b13eb88
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/setup.c	Sat Oct 20 13:23:15 2018 +0200
@@ -0,0 +1,329 @@
+/**
+ * @file setup.c
+ * @brief Setup functions.
+ */
+
+#include "config.h"
+
+
+extern sButton                  Buttons[MAXBUTTONS];
+extern int                      Main_Screen;
+
+bool UpdateRec = false;
+int  CurrentRec = 1;
+int  Records = 1;
+
+
+static const char               *TAG = "setup";
+
+
+
+/*
+ * Setup init function that only runs once a new screen
+ * is entered.
+ */
+void Setup_Init(void)
+{
+    FILE	*f;
+    size_t	bytes;
+    uint8_t	*dst;
+
+    switch (Main_Screen) {
+
+	case MAIN_TOOLS_SETUP:
+			TopMessage("Setup menu");
+			Buttons_Add( 20, 40,120, 40, "Config", 0);
+			Buttons_Add(180, 40,120, 40, "Apparatuur", 1);
+			Buttons_Add( 20,120,120, 40, "WiFi", 2);
+			Buttons_Add(180,120,120, 40, "Calibratie", 3);
+			Buttons_Add(130, 200, 60, 40, "Ok", 4);
+			Buttons[4].dark = true;
+			Buttons_Show();
+			break;
+
+	case MAIN_TOOLS_SETUP_CONFIG:
+			_bg = TFT_BLACK;
+			TopMessage("Configuratie");
+			TFT_setFont(DEFAULT_FONT, NULL);
+			ShowFloat(2, 28, "Kook temp.", "C", config.BoilTemperature, 2);
+			ShowBool(2, 44, "Vraag mout storten", config.AskAdd);
+			ShowBool(2, 60, "Vraag mout verwijderen", config.AskRemove);
+			ShowBool(2, 76, "Vraag Jodium proef", config.AskIodine);
+			ShowInteger(2, 92, "Jodiumtest wachttijd", " min.", config.IodineTime);
+			ShowText(2, 108, "Hostnaam", config.hostname);
+			ShowText(2, 124, "AP SSID", config.ap_ssid);
+			ShowText(2, 140, "AP pwd", config.ap_pwd);
+			ShowInteger(2, 156, "AP kanaal", NULL, config.ap_channel);
+			ShowBool(2, 172, "AP SSID verborgen", config.ap_ssid_hidden);
+			Buttons_Clear();
+			Buttons_Add(  0, 210, 45, 30, "Ok"  , 0);
+			Buttons_Add(276, 210, 45, 30, "Ed"  , 1);
+			Buttons[0].dark = true;
+			Buttons_Show();
+			break;
+
+	case MAIN_TOOLS_SETUP_CO_EDIT:
+			break;
+
+	case MAIN_TOOLS_SETUP_EQUIPMENT:
+			TopMessage("Apparatuur");
+			f = fopen("/spiffs/etc/equipments.conf", "r");
+			dst = (uint8_t*)&equipment;
+			Records = 0;
+			while ((bytes = fread(dst, 1, sizeof(equipment), f))) {
+			    Records++;
+			}
+			fclose(f);
+			// Load the default record.
+			CurrentRec = config.EquipmentRec;
+			UpdateRec = true;
+			break;
+
+	case MAIN_TOOLS_SETUP_EQ_EDIT:
+			break;
+
+	case MAIN_TOOLS_SETUP_CALIBRATION:
+			Calibration_Init();
+			break;
+
+	default:
+			break;
+    }
+}
+
+
+
+/*
+ * Setup loop screens, non-blocking.
+ */
+void Setup_Loop(void)
+{
+    uint32_t	crc1, crc2;
+    uint8_t	*dst;
+
+    switch (Main_Screen) {
+
+	case MAIN_TOOLS_SETUP:
+			switch (Buttons_Scan()) {
+			    case 0:     Main_Screen = MAIN_TOOLS_SETUP_CONFIG;
+					break;
+
+			    case 1:	Main_Screen = MAIN_TOOLS_SETUP_EQUIPMENT;
+					break;
+
+			    case 2:	Main_Screen = MAIN_TOOLS_SETUP_WIFI;
+					break;
+
+			    case 3:     Main_Screen = MAIN_TOOLS_SETUP_CALIBRATION;
+					break;
+
+			    case 4:     Main_Screen = MAIN_TOOLS;
+					break;
+
+			    default:    break;
+			}
+			break;
+
+	case MAIN_TOOLS_SETUP_CONFIG:
+			switch (Buttons_Scan()) {
+			    case 0:     Main_Screen = MAIN_TOOLS_SETUP;
+					break;
+
+			    case 1:	Main_Screen = MAIN_TOOLS_SETUP_CO_EDIT;
+					break;
+
+			    default:	break;
+			}
+			break;
+
+	case MAIN_TOOLS_SETUP_CO_EDIT:
+			dst = (uint8_t*)&config;
+			crc1 = crc32_le(0, dst, sizeof(config));
+			EditFloat("Kook temperatuur", &config.BoilTemperature, 80, 105, 2);
+			// Round to 0.25 degrees
+			config.BoilTemperature = ((int)(config.BoilTemperature * 4)) / 4.0;
+			EditBool("Vraag mout storten", &config.AskAdd);
+			EditBool("Vraag mout verwijderen", &config.AskRemove);
+			EditBool("Vraag Jodium proef", &config.AskIodine);
+			EditUint8("Jodium test wachttijd", &config.IodineTime, 0, 120);
+			EditText("DHCP hostnaam", config.hostname, 31);
+			EditText("AP SSID", config.ap_ssid, 31);
+			EditTextMin("AP password", config.ap_pwd, 40, 8);
+			EditUint8("AP kanaal", &config.ap_channel, 1, 14);
+			bool hidden = config.ap_ssid_hidden;
+			EditBool("AP SSID verborgen", &hidden);
+			config.ap_ssid_hidden = (uint8_t)hidden;
+
+			crc2 = crc32_le(0, dst, sizeof(config));
+			if ((crc1 != crc2) && Confirm("Gewijzigd, opslaan?", "Ja", "Nee")) {
+			    write_config();
+			} else {
+			    read_config();
+			}
+			Main_Screen = MAIN_TOOLS_SETUP_CONFIG;
+			break;
+
+	case MAIN_TOOLS_SETUP_EQUIPMENT:
+			if (UpdateRec) {
+			    _bg = TFT_BLACK;
+			    TFT_fillScreen(_bg);
+			    TFT_resetclipwin();
+			    TopMessage("Apparatuur");
+			    UpdateRec = false;
+			    read_equipment(CurrentRec);
+			    TFT_setFont(DEFAULT_FONT, NULL);
+			    ShowText(2, 28, "Naam", equipment.Name);
+			    ShowInteger(  2, 44, "Kook vermogen", "%", equipment.BoilPower);
+			    ShowInteger(161, 44, "Maisch verm.", "%", equipment.MashPower);
+			    ShowInteger(  2, 60, "Pomp cyclus", "m", equipment.PumpCycle);
+			    ShowInteger(161, 60, "Pomp rust", "m", equipment.PumpRest);
+			    ShowBool(  2,  76, "Pomp opwarmen", equipment.PumpPreMash);
+			    ShowBool(161,  76, "Pomp maischen", equipment.PumpOnMash);
+			    ShowBool(  2,  92, "Pomp uitmaischen", equipment.PumpMashOut);
+			    ShowBool(161,  92, "Pomp bij koken", equipment.PumpOnBoil);
+			    ShowInteger(2, 108, "Pomp maxtemp.", "C", equipment.PumpMaxTemp);
+			    ShowBool(161, 108, "PID bij mout weg", equipment.PIDPipe);
+			    ShowSSR2(2, 124, equipment.SSR2);
+			    ShowFloat(161, 124, "Spoelwater", NULL, equipment.TempHLT, 2);
+			    ShowDouble(2, 140, "PID P", NULL, equipment.PID_kP, 3);
+			    ShowBool(161, 140, "PID klassiek", equipment.PID_POn);
+			    ShowDouble(2, 156, "PID I", NULL, equipment.PID_kI, 3);
+			    ShowInteger(161, 156, "Sample tijd", "mS", equipment.SampleTime);
+			    ShowDouble(2, 172, "PID D", NULL, equipment.PID_kD, 3);
+			    Buttons_Clear();
+			    Buttons_Add(  0, 210, 45, 30, "Ok"  , 0);
+			    Buttons_Add( 46, 210, 45, 30, "+"   , 1);
+			    if (CurrentRec != config.EquipmentRec)
+			        Buttons_Add( 92, 210, 45, 30, "-", 2);
+			    else
+				Buttons_Add( 92, 210, 45, 30, ""    , 2);
+			    if (CurrentRec > 1)
+			    	Buttons_Add(138, 210, 45, 30, "<", 3);
+			    else
+				Buttons_Add(138, 210, 45, 30, "", 3);
+			    if (CurrentRec < Records)
+			    	Buttons_Add(184, 210, 45, 30, ">", 4);
+			    else
+				Buttons_Add(184, 210, 45, 30, "", 4);
+			    if (CurrentRec != config.EquipmentRec)
+			    	Buttons_Add(230, 210, 45, 30, "Std", 5);
+			    else
+				Buttons_Add(230, 210, 45, 30, "", 5);
+			    Buttons_Add(276, 210, 45, 30, "Ed"  , 6);
+			    Buttons[0].dark = true;
+			    Buttons_Show();
+			}
+			switch (Buttons_Scan()) {
+			    case 0:	Main_Screen = MAIN_TOOLS_SETUP;
+					break;
+
+			    case 1:	memset(&equipment, 0, sizeof(equipment));
+					equipment.Version = 1;
+					equipment.Record = Records + 1;
+					sprintf(equipment.Name, "new eq %d", Records + 1);
+					equipment.BoilPower = 80;
+					equipment.MashPower = 100;
+					equipment.PumpCycle = 8;
+					equipment.PumpRest = 2;
+					equipment.PumpPreMash = true;
+					equipment.PumpOnMash = true;
+					equipment.PumpMashOut = true;
+					equipment.PumpOnBoil = false;
+					equipment.PumpMaxTemp = 80;
+					equipment.PIDPipe = true;
+					equipment.SSR2 = 0;
+					equipment.TempHLT = 85.0;
+					equipment.PID_kP = 150.0;
+					equipment.PID_kI = 1.5;
+					equipment.PID_kD = 15000.0;
+					equipment.PID_POn = PID_P_ON_E;
+					equipment.SampleTime = 5000;
+					append_equipment();
+					Records++;
+					CurrentRec = Records;
+					UpdateRec = true;
+					ESP_LOGI(TAG, "New equipment record %d", equipment.Record);
+					break;
+
+			    case 2:	if ((CurrentRec != config.EquipmentRec) && (Records > 1)) {
+					    delete_equipment(CurrentRec);
+					    Records--;
+					    if (CurrentRec > Records)
+						CurrentRec = Records;
+					    UpdateRec = true;
+					}
+					break;
+
+			    case 3:	if (CurrentRec > 1) {
+					    CurrentRec--;
+					    UpdateRec = true;
+					}
+					break;
+
+			    case 4:	if (CurrentRec < Records) {
+					    CurrentRec++;
+					    UpdateRec = true;
+					}
+					break;
+
+			    case 5:	if (CurrentRec != config.EquipmentRec) {
+					    config.EquipmentRec = CurrentRec;
+					    write_config();
+					    UpdateRec = true;
+					    ESP_LOGI(TAG, "Equipment %d `%s' set as default", CurrentRec, equipment.Name);
+					}
+					break;
+
+			    case 6:	Main_Screen = MAIN_TOOLS_SETUP_EQ_EDIT;
+					break;
+
+			    default:	break;
+			}		
+			break;
+
+	case MAIN_TOOLS_SETUP_EQ_EDIT:
+			dst = (uint8_t*)&equipment;
+			crc1 = crc32_le(0, dst, sizeof(equipment));
+			EditText("Naam", equipment.Name, 31);
+			EditInt("Kook vermogen in %", &equipment.BoilPower, 0, 100);
+			EditInt("Maisch vermogen in %", &equipment.MashPower, 0, 100);
+			EditInt("Pomp cyclus minuten", &equipment.PumpCycle, 5, 15);
+			EditInt("Pomp rust minuten", &equipment.PumpRest, 0, 5);
+			EditBool("Pomp bij opwarmen", &equipment.PumpPreMash);
+			EditBool("Pomp bij maischen", &equipment.PumpOnMash);
+			EditBool("Pomp bij uitmasichen", &equipment.PumpMashOut);
+			EditBool("Pomp tijdens koken", &equipment.PumpOnBoil);
+			EditInt("Pomp max. temperatuur", &equipment.PumpMaxTemp, 60, 105);
+			EditBool("PID by mout verwijderen", &equipment.PIDPipe);
+			EditSSR2(&equipment.SSR2);
+			EditFloat("Spoelwater temp", &equipment.TempHLT, 75, 98, 2);
+			// Round to 0.25 values.
+			equipment.TempHLT = ((int)(equipment.TempHLT * 4)) / 4.0;
+			EditBool("PID klassiek", &equipment.PID_POn);
+			EditDouble("PID P",  &equipment.PID_kP, 20, 2000, 3);
+			EditDouble("PID I",  &equipment.PID_kI, 0, 100, 3);
+			EditDouble("PID D",  &equipment.PID_kD, 0, 50000, 3);
+			EditInt("Sample tijd in mS", &equipment.SampleTime, 1000, 20000);
+			// Round to 250 mSec units.
+			equipment.SampleTime = ((int)(equipment.SampleTime / 250)) * 250;
+
+			crc2 = crc32_le(0, dst, sizeof(equipment));
+			if ((crc1 != crc2) && Confirm("Gewijzigd, opslaan?", "Ja", "Nee")) {
+			    write_equipment(equipment.Record);
+			}
+			Main_Screen = MAIN_TOOLS_SETUP_EQUIPMENT;
+			break;
+
+	case MAIN_TOOLS_SETUP_WIFI:
+			break;
+
+	case MAIN_TOOLS_SETUP_CALIBRATION:
+			Calibration_Loop();
+			Main_Screen = MAIN_TOOLS_SETUP;
+			break;
+
+	default:
+			break;
+    }
+}
+

mercurial