diff -r 000000000000 -r b74b0e4902c3 main/manual.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/manual.c Sat Oct 20 13:23:15 2018 +0200 @@ -0,0 +1,270 @@ +/** + * @file manual.c + * @brief Manual control functions. + */ + +#include "config.h" + +bool _ManualHLT = false; ///< Use Hot Liquer Tank +bool _ManualMLT = false; ///< Use Mash/Boil kettle +bool loop; + +extern sButton Buttons[MAXBUTTONS]; +extern int Main_Screen; +extern DS18B20_State *ds18b20_state; +extern DRIVER_State *driver_state; +extern SemaphoreHandle_t xSemaphoreDS18B20; +extern SemaphoreHandle_t xSemaphoreDriver; + +#ifdef CONFIG_TEMP_SENSORS_SIMULATOR +extern float Fake_MLT; +extern float Fake_HLT; +#endif + +static const char *TAG = "manual"; + + +/* + * Manual init function that only runs once a new screen + * is entered. + */ +bool Manual_Init(void) +{ + switch (Main_Screen) { + case MAIN_MANUAL_INIT: + ESP_LOGI(TAG, "Start manual mode"); + if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + driver_state->enable = true; + xSemaphoreGive(xSemaphoreDriver); + } + break; + + case MAIN_MANUAL_MAIN: + TopMessage("Handbediening"); + Buttons_Add( 5, 200, 60, 40, "Stop", 0); + Buttons[0].dark = true; + uint8_t i = 1; + if (_ManualMLT) { + MLT_info(71, 26, false); + Buttons_Add( 5, 26, 60, 40, "+sp" , i++); + Buttons_Add(255, 26, 60, 40, "-sp" , i++); + Buttons_Add( 5, 76, 60, 40, "Pomp" , i++); + Buttons_Add(255, 76, 60, 40, "Aan" , i++); + } + if (_ManualHLT) { + HLT_info(71,150, false, false); + Buttons_Add( 5, 150, 60, 40, "+sp" , i++); + Buttons_Add(255, 150, 60, 40, "-sp" , i++); + Buttons_Add(255, 200, 60, 40, "Aan" , i); + } + Buttons_Show(); + break; + + default: + break; + } + + return false; +} + + + +/* + * Manual loop screens, non-blocking. + */ +bool Manual_Loop(void) +{ + switch (Main_Screen) { + case MAIN_MANUAL_INIT: + _ManualHLT = _ManualMLT = false; + Buttons_Add( 40, 100, 80, 40, "Ja", 0); + Buttons_Add(200, 100, 80, 40, "Nee", 1); + Buttons_Show(); + + if ((equipment.SSR2 == SSR2_HLT_SHARE) || (equipment.SSR2 == SSR2_HLT_IND)) { + TopMessage("Spoelwater ketel?"); + SoundPlay(SOUND_Prompt); + loop = true; + while (loop) { + switch (Buttons_Scan()) { + case 0: loop = false; + _ManualHLT = true; + break; + + case 1: loop = false; + _ManualHLT = false; + break; + + default: break; + } + vTaskDelay(20 / portTICK_PERIOD_MS); + } + } + + TopMessage("Maisch/Kook ketel?"); + SoundPlay(SOUND_Prompt); + loop = true; + while (loop) { + switch (Buttons_Scan()) { + case 0: loop = false; + _ManualMLT = true; + break; + + case 1: loop = false; + _ManualMLT = false; + break; + + default: break; + } + vTaskDelay(20 / portTICK_PERIOD_MS); + } + Buttons_Clear(); + + if (! _ManualHLT && ! _ManualMLT) { + ESP_LOGI(TAG, "End manual mode"); + Main_Screen = MAIN_MODE_FREE; + break; + } + if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + /* Set them all, even if not in use now. */ + driver_state->hlt_sp = runtime.ManualHLT; + driver_state->mlt_sp = runtime.ManualMLT; + xSemaphoreGive(xSemaphoreDriver); + } + if (_ManualHLT) { + if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + driver_state->hlt_mode = HLT_MODE_OFF; + xSemaphoreGive(xSemaphoreDriver); + } + } + if (_ManualMLT) { + if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + driver_state->mlt_mode = MLT_MODE_OFF; + xSemaphoreGive(xSemaphoreDriver); + } + } + Main_Screen = MAIN_MANUAL_MAIN; + break; + + case MAIN_MANUAL_MAIN: + if (_ManualMLT) { + MLT_info(71, 26, true); + } + if (_ManualHLT) { + HLT_info(71, 150, true, false); + } + switch (Buttons_Scan()) { + case 0: Main_Screen = MAIN_MODE_FREE; + ESP_LOGI(TAG, "End manual mode"); + if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + runtime.ManualHLT = driver_state->hlt_sp; + runtime.ManualMLT = driver_state->mlt_sp; + driver_state->enable = false; + driver_state->mlt_mode = MLT_MODE_NONE; + driver_state->mlt_sp = 0.0; + driver_state->hlt_mode = HLT_MODE_NONE; + driver_state->hlt_sp = 0.0; + driver_state->pump_run = 0; + xSemaphoreGive(xSemaphoreDriver); + } + write_runtime(); + break; + + case 1: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + if (_ManualMLT) { + driver_state->mlt_sp += 0.25; + } else { + driver_state->hlt_sp += 0.25; + } + xSemaphoreGive(xSemaphoreDriver); + } + break; + + case 2: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + if (_ManualMLT) { + driver_state->mlt_sp -= 0.25; + } else { + driver_state->hlt_sp -= 0.25; + } + xSemaphoreGive(xSemaphoreDriver); + } + break; + + case 3: if (_ManualMLT) { + if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + if (driver_state->pump_run) + driver_state->pump_run = 0; + else + driver_state->pump_run = 1; + xSemaphoreGive(xSemaphoreDriver); + } + } else { + if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + if (driver_state->hlt_mode == HLT_MODE_BANG) { + driver_state->hlt_mode = HLT_MODE_OFF; + Buttons_Add(255, 200, 60, 40, "Aan" , 3); + ESP_LOGI(TAG, "HLT turned off"); + } else { + driver_state->hlt_mode = HLT_MODE_BANG; + Buttons_Add(255, 200, 60, 40, "Uit" , 3); + ESP_LOGI(TAG, "HLT turned on"); + } + xSemaphoreGive(xSemaphoreDriver); + } + Buttons_Show(); + } + break; + + case 4: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + if (driver_state->mlt_mode == MLT_MODE_PID) { + driver_state->mlt_mode = MLT_MODE_OFF; + Buttons_Add(255, 76, 60, 40, "Aan" , 4); + ESP_LOGI(TAG, "MLT turned off"); + } else { + driver_state->mlt_mode = MLT_MODE_PID; + Buttons_Add(255, 76, 60, 40, "Uit" , 4); + ESP_LOGI(TAG, "MLT turned on"); + } + xSemaphoreGive(xSemaphoreDriver); + } + Buttons_Show(); + break; + + case 5: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + driver_state->hlt_sp += 0.25; + xSemaphoreGive(xSemaphoreDriver); + } + break; + + case 6: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + driver_state->hlt_sp -= 0.25; + xSemaphoreGive(xSemaphoreDriver); + } + break; + + case 7: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { + if (driver_state->hlt_mode == HLT_MODE_BANG) { + driver_state->hlt_mode = HLT_MODE_OFF; + Buttons_Add(255, 200, 60, 40, "Aan" , 7); + ESP_LOGI(TAG, "HLT turned off"); + } else { + driver_state->hlt_mode = HLT_MODE_BANG; + Buttons_Add(255, 200, 60, 40, "Uit" , 7); + ESP_LOGI(TAG, "HLT turned on"); + } + xSemaphoreGive(xSemaphoreDriver); + } + Buttons_Show(); + break; + + default: break; + } + break; + + default: + break; + } + + return false; +} +