Sat, 04 May 2019 21:18:51 +0200
Websocket interface is working for the main screen and manual mode.
0 | 1 | /** |
2 | * @file manual.c | |
3 | * @brief Manual control functions. | |
4 | */ | |
5 | ||
6 | #include "config.h" | |
7 | ||
8 | bool _ManualHLT = false; ///< Use Hot Liquer Tank | |
9 | bool _ManualMLT = false; ///< Use Mash/Boil kettle | |
10 | bool loop; | |
11 | ||
12 | extern sButton Buttons[MAXBUTTONS]; | |
13 | extern int Main_Screen; | |
14 | extern DS18B20_State *ds18b20_state; | |
15 | extern DRIVER_State *driver_state; | |
16 | extern SemaphoreHandle_t xSemaphoreDS18B20; | |
17 | extern SemaphoreHandle_t xSemaphoreDriver; | |
18 | ||
19 | #ifdef CONFIG_TEMP_SENSORS_SIMULATOR | |
20 | extern float Fake_MLT; | |
21 | extern float Fake_HLT; | |
22 | #endif | |
23 | ||
24 | static const char *TAG = "manual"; | |
25 | ||
26 | ||
27 | /* | |
28 | * Manual init function that only runs once a new screen | |
29 | * is entered. | |
30 | */ | |
31 | bool Manual_Init(void) | |
32 | { | |
33 | switch (Main_Screen) { | |
34 | case MAIN_MANUAL_INIT: | |
35 | ESP_LOGI(TAG, "Start manual mode"); | |
36 | if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
37 | driver_state->enable = true; | |
38 | xSemaphoreGive(xSemaphoreDriver); | |
39 | } | |
40 | break; | |
41 | ||
42 | case MAIN_MANUAL_MAIN: | |
43 | TopMessage("Handbediening"); | |
44 | Buttons_Add( 5, 200, 60, 40, "Stop", 0); | |
45 | Buttons[0].dark = true; | |
46 | uint8_t i = 1; | |
47 | if (_ManualMLT) { | |
48 | MLT_info(71, 26, false); | |
49 | Buttons_Add( 5, 26, 60, 40, "+sp" , i++); | |
50 | Buttons_Add(255, 26, 60, 40, "-sp" , i++); | |
51 | Buttons_Add( 5, 76, 60, 40, "Pomp" , i++); | |
52 | Buttons_Add(255, 76, 60, 40, "Aan" , i++); | |
53 | } | |
54 | if (_ManualHLT) { | |
55 | HLT_info(71,150, false, false); | |
56 | Buttons_Add( 5, 150, 60, 40, "+sp" , i++); | |
57 | Buttons_Add(255, 150, 60, 40, "-sp" , i++); | |
58 | Buttons_Add(255, 200, 60, 40, "Aan" , i); | |
59 | } | |
60 | Buttons_Show(); | |
61 | break; | |
62 | ||
63 | default: | |
64 | break; | |
65 | } | |
66 | ||
67 | return false; | |
68 | } | |
69 | ||
70 | ||
71 | ||
72 | /* | |
73 | * Manual loop screens, non-blocking. | |
74 | */ | |
75 | bool Manual_Loop(void) | |
76 | { | |
77 | switch (Main_Screen) { | |
78 | case MAIN_MANUAL_INIT: | |
79 | _ManualHLT = _ManualMLT = false; | |
80 | Buttons_Add( 40, 100, 80, 40, "Ja", 0); | |
81 | Buttons_Add(200, 100, 80, 40, "Nee", 1); | |
82 | Buttons_Show(); | |
83 | ||
84 | if ((equipment.SSR2 == SSR2_HLT_SHARE) || (equipment.SSR2 == SSR2_HLT_IND)) { | |
85 | TopMessage("Spoelwater ketel?"); | |
86 | SoundPlay(SOUND_Prompt); | |
87 | loop = true; | |
88 | while (loop) { | |
89 | switch (Buttons_Scan()) { | |
90 | case 0: loop = false; | |
91 | _ManualHLT = true; | |
92 | break; | |
93 | ||
94 | case 1: loop = false; | |
95 | _ManualHLT = false; | |
96 | break; | |
97 | ||
98 | default: break; | |
99 | } | |
100 | vTaskDelay(20 / portTICK_PERIOD_MS); | |
101 | } | |
102 | } | |
103 | ||
104 | TopMessage("Maisch/Kook ketel?"); | |
105 | SoundPlay(SOUND_Prompt); | |
106 | loop = true; | |
107 | while (loop) { | |
108 | switch (Buttons_Scan()) { | |
109 | case 0: loop = false; | |
110 | _ManualMLT = true; | |
111 | break; | |
112 | ||
113 | case 1: loop = false; | |
114 | _ManualMLT = false; | |
115 | break; | |
116 | ||
117 | default: break; | |
118 | } | |
119 | vTaskDelay(20 / portTICK_PERIOD_MS); | |
120 | } | |
121 | Buttons_Clear(); | |
122 | ||
123 | if (! _ManualHLT && ! _ManualMLT) { | |
124 | ESP_LOGI(TAG, "End manual mode"); | |
125 | Main_Screen = MAIN_MODE_FREE; | |
126 | break; | |
127 | } | |
128 | if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
129 | /* Set them all, even if not in use now. */ | |
130 | driver_state->hlt_sp = runtime.ManualHLT; | |
131 | driver_state->mlt_sp = runtime.ManualMLT; | |
132 | xSemaphoreGive(xSemaphoreDriver); | |
133 | } | |
134 | if (_ManualHLT) { | |
135 | if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
136 | driver_state->hlt_mode = HLT_MODE_OFF; | |
137 | xSemaphoreGive(xSemaphoreDriver); | |
138 | } | |
139 | } | |
140 | if (_ManualMLT) { | |
141 | if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
142 | driver_state->mlt_mode = MLT_MODE_OFF; | |
143 | xSemaphoreGive(xSemaphoreDriver); | |
144 | } | |
145 | } | |
146 | Main_Screen = MAIN_MANUAL_MAIN; | |
147 | break; | |
148 | ||
149 | case MAIN_MANUAL_MAIN: | |
150 | if (_ManualMLT) { | |
151 | MLT_info(71, 26, true); | |
152 | } | |
153 | if (_ManualHLT) { | |
154 | HLT_info(71, 150, true, false); | |
155 | } | |
156 | switch (Buttons_Scan()) { | |
157 | case 0: Main_Screen = MAIN_MODE_FREE; | |
158 | ESP_LOGI(TAG, "End manual mode"); | |
159 | if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
160 | runtime.ManualHLT = driver_state->hlt_sp; | |
161 | runtime.ManualMLT = driver_state->mlt_sp; | |
162 | driver_state->enable = false; | |
163 | driver_state->mlt_mode = MLT_MODE_NONE; | |
164 | driver_state->mlt_sp = 0.0; | |
165 | driver_state->hlt_mode = HLT_MODE_NONE; | |
166 | driver_state->hlt_sp = 0.0; | |
167 | driver_state->pump_run = 0; | |
168 | xSemaphoreGive(xSemaphoreDriver); | |
169 | } | |
170 | write_runtime(); | |
171 | break; | |
172 | ||
173 | case 1: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
174 | if (_ManualMLT) { | |
175 | driver_state->mlt_sp += 0.25; | |
176 | } else { | |
177 | driver_state->hlt_sp += 0.25; | |
178 | } | |
179 | xSemaphoreGive(xSemaphoreDriver); | |
180 | } | |
181 | break; | |
182 | ||
183 | case 2: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
184 | if (_ManualMLT) { | |
185 | driver_state->mlt_sp -= 0.25; | |
186 | } else { | |
187 | driver_state->hlt_sp -= 0.25; | |
188 | } | |
189 | xSemaphoreGive(xSemaphoreDriver); | |
190 | } | |
191 | break; | |
192 | ||
193 | case 3: if (_ManualMLT) { | |
194 | if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
195 | if (driver_state->pump_run) | |
196 | driver_state->pump_run = 0; | |
197 | else | |
198 | driver_state->pump_run = 1; | |
199 | xSemaphoreGive(xSemaphoreDriver); | |
200 | } | |
201 | } else { | |
202 | if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
203 | if (driver_state->hlt_mode == HLT_MODE_BANG) { | |
204 | driver_state->hlt_mode = HLT_MODE_OFF; | |
205 | Buttons_Add(255, 200, 60, 40, "Aan" , 3); | |
206 | ESP_LOGI(TAG, "HLT turned off"); | |
207 | } else { | |
208 | driver_state->hlt_mode = HLT_MODE_BANG; | |
209 | Buttons_Add(255, 200, 60, 40, "Uit" , 3); | |
210 | ESP_LOGI(TAG, "HLT turned on"); | |
211 | } | |
212 | xSemaphoreGive(xSemaphoreDriver); | |
213 | } | |
214 | Buttons_Show(); | |
215 | } | |
216 | break; | |
217 | ||
218 | case 4: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
219 | if (driver_state->mlt_mode == MLT_MODE_PID) { | |
220 | driver_state->mlt_mode = MLT_MODE_OFF; | |
221 | Buttons_Add(255, 76, 60, 40, "Aan" , 4); | |
222 | ESP_LOGI(TAG, "MLT turned off"); | |
223 | } else { | |
224 | driver_state->mlt_mode = MLT_MODE_PID; | |
225 | Buttons_Add(255, 76, 60, 40, "Uit" , 4); | |
226 | ESP_LOGI(TAG, "MLT turned on"); | |
227 | } | |
228 | xSemaphoreGive(xSemaphoreDriver); | |
229 | } | |
230 | Buttons_Show(); | |
231 | break; | |
232 | ||
233 | case 5: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
234 | driver_state->hlt_sp += 0.25; | |
235 | xSemaphoreGive(xSemaphoreDriver); | |
236 | } | |
237 | break; | |
238 | ||
239 | case 6: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
240 | driver_state->hlt_sp -= 0.25; | |
241 | xSemaphoreGive(xSemaphoreDriver); | |
242 | } | |
243 | break; | |
244 | ||
245 | case 7: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { | |
246 | if (driver_state->hlt_mode == HLT_MODE_BANG) { | |
247 | driver_state->hlt_mode = HLT_MODE_OFF; | |
248 | Buttons_Add(255, 200, 60, 40, "Aan" , 7); | |
249 | ESP_LOGI(TAG, "HLT turned off"); | |
250 | } else { | |
251 | driver_state->hlt_mode = HLT_MODE_BANG; | |
252 | Buttons_Add(255, 200, 60, 40, "Uit" , 7); | |
253 | ESP_LOGI(TAG, "HLT turned on"); | |
254 | } | |
255 | xSemaphoreGive(xSemaphoreDriver); | |
256 | } | |
257 | Buttons_Show(); | |
258 | break; | |
259 | ||
260 | default: break; | |
261 | } | |
262 | break; | |
263 | ||
264 | default: | |
265 | break; | |
266 | } | |
267 | ||
268 | return false; | |
269 | } | |
270 |