main/setup.c

changeset 0
b74b0e4902c3
child 1
ad2c8b13eb88
equal deleted inserted replaced
-1:000000000000 0:b74b0e4902c3
1 /**
2 * @file setup.c
3 * @brief Setup functions.
4 */
5
6 #include "config.h"
7
8
9 extern sButton Buttons[MAXBUTTONS];
10 extern int Main_Screen;
11
12 bool UpdateRec = false;
13 int CurrentRec = 1;
14 int Records = 1;
15
16
17 static const char *TAG = "setup";
18
19
20
21 /*
22 * Setup init function that only runs once a new screen
23 * is entered.
24 */
25 void Setup_Init(void)
26 {
27 FILE *f;
28 size_t bytes;
29 uint8_t *dst;
30
31 switch (Main_Screen) {
32
33 case MAIN_TOOLS_SETUP:
34 TopMessage("Setup menu");
35 Buttons_Add( 20, 40,120, 40, "Config", 0);
36 Buttons_Add(180, 40,120, 40, "Apparatuur", 1);
37 Buttons_Add( 20,120,120, 40, "WiFi", 2);
38 Buttons_Add(180,120,120, 40, "Calibratie", 3);
39 Buttons_Add(130, 200, 60, 40, "Ok", 4);
40 Buttons[4].dark = true;
41 Buttons_Show();
42 break;
43
44 case MAIN_TOOLS_SETUP_CONFIG:
45 _bg = TFT_BLACK;
46 TopMessage("Configuratie");
47 TFT_setFont(DEFAULT_FONT, NULL);
48 ShowFloat(2, 28, "Kook temp.", "C", config.BoilTemperature, 2);
49 ShowBool(2, 44, "Vraag mout storten", config.AskAdd);
50 ShowBool(2, 60, "Vraag mout verwijderen", config.AskRemove);
51 ShowBool(2, 76, "Vraag Jodium proef", config.AskIodine);
52 ShowInteger(2, 92, "Jodiumtest wachttijd", " min.", config.IodineTime);
53 ShowText(2, 108, "Hostnaam", config.hostname);
54 ShowText(2, 124, "AP SSID", config.ap_ssid);
55 ShowText(2, 140, "AP pwd", config.ap_pwd);
56 ShowInteger(2, 156, "AP kanaal", NULL, config.ap_channel);
57 ShowBool(2, 172, "AP SSID verborgen", config.ap_ssid_hidden);
58 Buttons_Clear();
59 Buttons_Add( 0, 210, 45, 30, "Ok" , 0);
60 Buttons_Add(276, 210, 45, 30, "Ed" , 1);
61 Buttons[0].dark = true;
62 Buttons_Show();
63 break;
64
65 case MAIN_TOOLS_SETUP_CO_EDIT:
66 break;
67
68 case MAIN_TOOLS_SETUP_EQUIPMENT:
69 TopMessage("Apparatuur");
70 f = fopen("/spiffs/etc/equipments.conf", "r");
71 dst = (uint8_t*)&equipment;
72 Records = 0;
73 while ((bytes = fread(dst, 1, sizeof(equipment), f))) {
74 Records++;
75 }
76 fclose(f);
77 // Load the default record.
78 CurrentRec = config.EquipmentRec;
79 UpdateRec = true;
80 break;
81
82 case MAIN_TOOLS_SETUP_EQ_EDIT:
83 break;
84
85 case MAIN_TOOLS_SETUP_CALIBRATION:
86 Calibration_Init();
87 break;
88
89 default:
90 break;
91 }
92 }
93
94
95
96 /*
97 * Setup loop screens, non-blocking.
98 */
99 void Setup_Loop(void)
100 {
101 uint32_t crc1, crc2;
102 uint8_t *dst;
103
104 switch (Main_Screen) {
105
106 case MAIN_TOOLS_SETUP:
107 switch (Buttons_Scan()) {
108 case 0: Main_Screen = MAIN_TOOLS_SETUP_CONFIG;
109 break;
110
111 case 1: Main_Screen = MAIN_TOOLS_SETUP_EQUIPMENT;
112 break;
113
114 case 2: Main_Screen = MAIN_TOOLS_SETUP_WIFI;
115 break;
116
117 case 3: Main_Screen = MAIN_TOOLS_SETUP_CALIBRATION;
118 break;
119
120 case 4: Main_Screen = MAIN_TOOLS;
121 break;
122
123 default: break;
124 }
125 break;
126
127 case MAIN_TOOLS_SETUP_CONFIG:
128 switch (Buttons_Scan()) {
129 case 0: Main_Screen = MAIN_TOOLS_SETUP;
130 break;
131
132 case 1: Main_Screen = MAIN_TOOLS_SETUP_CO_EDIT;
133 break;
134
135 default: break;
136 }
137 break;
138
139 case MAIN_TOOLS_SETUP_CO_EDIT:
140 dst = (uint8_t*)&config;
141 crc1 = crc32_le(0, dst, sizeof(config));
142 EditFloat("Kook temperatuur", &config.BoilTemperature, 80, 105, 2);
143 // Round to 0.25 degrees
144 config.BoilTemperature = ((int)(config.BoilTemperature * 4)) / 4.0;
145 EditBool("Vraag mout storten", &config.AskAdd);
146 EditBool("Vraag mout verwijderen", &config.AskRemove);
147 EditBool("Vraag Jodium proef", &config.AskIodine);
148 EditUint8("Jodium test wachttijd", &config.IodineTime, 0, 120);
149 EditText("DHCP hostnaam", config.hostname, 31);
150 EditText("AP SSID", config.ap_ssid, 31);
151 EditTextMin("AP password", config.ap_pwd, 40, 8);
152 EditUint8("AP kanaal", &config.ap_channel, 1, 14);
153 bool hidden = config.ap_ssid_hidden;
154 EditBool("AP SSID verborgen", &hidden);
155 config.ap_ssid_hidden = (uint8_t)hidden;
156
157 crc2 = crc32_le(0, dst, sizeof(config));
158 if ((crc1 != crc2) && Confirm("Gewijzigd, opslaan?", "Ja", "Nee")) {
159 write_config();
160 } else {
161 read_config();
162 }
163 Main_Screen = MAIN_TOOLS_SETUP_CONFIG;
164 break;
165
166 case MAIN_TOOLS_SETUP_EQUIPMENT:
167 if (UpdateRec) {
168 _bg = TFT_BLACK;
169 TFT_fillScreen(_bg);
170 TFT_resetclipwin();
171 TopMessage("Apparatuur");
172 UpdateRec = false;
173 read_equipment(CurrentRec);
174 TFT_setFont(DEFAULT_FONT, NULL);
175 ShowText(2, 28, "Naam", equipment.Name);
176 ShowInteger( 2, 44, "Kook vermogen", "%", equipment.BoilPower);
177 ShowInteger(161, 44, "Maisch verm.", "%", equipment.MashPower);
178 ShowInteger( 2, 60, "Pomp cyclus", "m", equipment.PumpCycle);
179 ShowInteger(161, 60, "Pomp rust", "m", equipment.PumpRest);
180 ShowBool( 2, 76, "Pomp opwarmen", equipment.PumpPreMash);
181 ShowBool(161, 76, "Pomp maischen", equipment.PumpOnMash);
182 ShowBool( 2, 92, "Pomp uitmaischen", equipment.PumpMashOut);
183 ShowBool(161, 92, "Pomp bij koken", equipment.PumpOnBoil);
184 ShowInteger(2, 108, "Pomp maxtemp.", "C", equipment.PumpMaxTemp);
185 ShowBool(161, 108, "PID bij mout weg", equipment.PIDPipe);
186 ShowSSR2(2, 124, equipment.SSR2);
187 ShowFloat(161, 124, "Spoelwater", NULL, equipment.TempHLT, 2);
188 ShowDouble(2, 140, "PID P", NULL, equipment.PID_kP, 3);
189 ShowBool(161, 140, "PID klassiek", equipment.PID_POn);
190 ShowDouble(2, 156, "PID I", NULL, equipment.PID_kI, 3);
191 ShowInteger(161, 156, "Sample tijd", "mS", equipment.SampleTime);
192 ShowDouble(2, 172, "PID D", NULL, equipment.PID_kD, 3);
193 Buttons_Clear();
194 Buttons_Add( 0, 210, 45, 30, "Ok" , 0);
195 Buttons_Add( 46, 210, 45, 30, "+" , 1);
196 if (CurrentRec != config.EquipmentRec)
197 Buttons_Add( 92, 210, 45, 30, "-", 2);
198 else
199 Buttons_Add( 92, 210, 45, 30, "" , 2);
200 if (CurrentRec > 1)
201 Buttons_Add(138, 210, 45, 30, "<", 3);
202 else
203 Buttons_Add(138, 210, 45, 30, "", 3);
204 if (CurrentRec < Records)
205 Buttons_Add(184, 210, 45, 30, ">", 4);
206 else
207 Buttons_Add(184, 210, 45, 30, "", 4);
208 if (CurrentRec != config.EquipmentRec)
209 Buttons_Add(230, 210, 45, 30, "Std", 5);
210 else
211 Buttons_Add(230, 210, 45, 30, "", 5);
212 Buttons_Add(276, 210, 45, 30, "Ed" , 6);
213 Buttons[0].dark = true;
214 Buttons_Show();
215 }
216 switch (Buttons_Scan()) {
217 case 0: Main_Screen = MAIN_TOOLS_SETUP;
218 break;
219
220 case 1: memset(&equipment, 0, sizeof(equipment));
221 equipment.Version = 1;
222 equipment.Record = Records + 1;
223 sprintf(equipment.Name, "new eq %d", Records + 1);
224 equipment.BoilPower = 80;
225 equipment.MashPower = 100;
226 equipment.PumpCycle = 8;
227 equipment.PumpRest = 2;
228 equipment.PumpPreMash = true;
229 equipment.PumpOnMash = true;
230 equipment.PumpMashOut = true;
231 equipment.PumpOnBoil = false;
232 equipment.PumpMaxTemp = 80;
233 equipment.PIDPipe = true;
234 equipment.SSR2 = 0;
235 equipment.TempHLT = 85.0;
236 equipment.PID_kP = 150.0;
237 equipment.PID_kI = 1.5;
238 equipment.PID_kD = 15000.0;
239 equipment.PID_POn = PID_P_ON_E;
240 equipment.SampleTime = 5000;
241 append_equipment();
242 Records++;
243 CurrentRec = Records;
244 UpdateRec = true;
245 ESP_LOGI(TAG, "New equipment record %d", equipment.Record);
246 break;
247
248 case 2: if ((CurrentRec != config.EquipmentRec) && (Records > 1)) {
249 delete_equipment(CurrentRec);
250 Records--;
251 if (CurrentRec > Records)
252 CurrentRec = Records;
253 UpdateRec = true;
254 }
255 break;
256
257 case 3: if (CurrentRec > 1) {
258 CurrentRec--;
259 UpdateRec = true;
260 }
261 break;
262
263 case 4: if (CurrentRec < Records) {
264 CurrentRec++;
265 UpdateRec = true;
266 }
267 break;
268
269 case 5: if (CurrentRec != config.EquipmentRec) {
270 config.EquipmentRec = CurrentRec;
271 write_config();
272 UpdateRec = true;
273 ESP_LOGI(TAG, "Equipment %d `%s' set as default", CurrentRec, equipment.Name);
274 }
275 break;
276
277 case 6: Main_Screen = MAIN_TOOLS_SETUP_EQ_EDIT;
278 break;
279
280 default: break;
281 }
282 break;
283
284 case MAIN_TOOLS_SETUP_EQ_EDIT:
285 dst = (uint8_t*)&equipment;
286 crc1 = crc32_le(0, dst, sizeof(equipment));
287 EditText("Naam", equipment.Name, 31);
288 EditInt("Kook vermogen in %", &equipment.BoilPower, 0, 100);
289 EditInt("Maisch vermogen in %", &equipment.MashPower, 0, 100);
290 EditInt("Pomp cyclus minuten", &equipment.PumpCycle, 5, 15);
291 EditInt("Pomp rust minuten", &equipment.PumpRest, 0, 5);
292 EditBool("Pomp bij opwarmen", &equipment.PumpPreMash);
293 EditBool("Pomp bij maischen", &equipment.PumpOnMash);
294 EditBool("Pomp bij uitmasichen", &equipment.PumpMashOut);
295 EditBool("Pomp tijdens koken", &equipment.PumpOnBoil);
296 EditInt("Pomp max. temperatuur", &equipment.PumpMaxTemp, 60, 105);
297 EditBool("PID by mout verwijderen", &equipment.PIDPipe);
298 EditSSR2(&equipment.SSR2);
299 EditFloat("Spoelwater temp", &equipment.TempHLT, 75, 98, 2);
300 // Round to 0.25 values.
301 equipment.TempHLT = ((int)(equipment.TempHLT * 4)) / 4.0;
302 EditBool("PID klassiek", &equipment.PID_POn);
303 EditDouble("PID P", &equipment.PID_kP, 20, 2000, 3);
304 EditDouble("PID I", &equipment.PID_kI, 0, 100, 3);
305 EditDouble("PID D", &equipment.PID_kD, 0, 50000, 3);
306 EditInt("Sample tijd in mS", &equipment.SampleTime, 1000, 20000);
307 // Round to 250 mSec units.
308 equipment.SampleTime = ((int)(equipment.SampleTime / 250)) * 250;
309
310 crc2 = crc32_le(0, dst, sizeof(equipment));
311 if ((crc1 != crc2) && Confirm("Gewijzigd, opslaan?", "Ja", "Nee")) {
312 write_equipment(equipment.Record);
313 }
314 Main_Screen = MAIN_TOOLS_SETUP_EQUIPMENT;
315 break;
316
317 case MAIN_TOOLS_SETUP_WIFI:
318 break;
319
320 case MAIN_TOOLS_SETUP_CALIBRATION:
321 Calibration_Loop();
322 Main_Screen = MAIN_TOOLS_SETUP;
323 break;
324
325 default:
326 break;
327 }
328 }
329

mercurial