|
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 |