main/manual.c

changeset 0
b74b0e4902c3
child 54
7b134c27fadb
--- /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;
+}
+

mercurial