Fri, 17 May 2019 15:43:31 +0200
Code cleanup.
/** * @file setup.c * @brief Setup functions. */ #include "config.h" extern sButton Buttons[MAXBUTTONS]; extern int Main_Screen; bool UpdateRec = false; ///< Update record flag int CurrentRec = 1; ///< Current record int Records = 1; ///< Total records. 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 uitmaischen", &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; } }