diff -r 000000000000 -r b74b0e4902c3 main/setup.c --- /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; + } +} +