58 sprintf(config.uuid, "c0ffeeee-dead-beef-cafe-%02x%02x%02x%02x%02x%02x", |
56 sprintf(config.uuid, "c0ffeeee-dead-beef-cafe-%02x%02x%02x%02x%02x%02x", |
59 mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
57 mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
60 write_config(); |
58 write_config(); |
61 } else { |
59 } else { |
62 dst = (uint8_t*)&config; |
60 dst = (uint8_t*)&config; |
63 size_t bytes = fread(dst, 1, sizeof(config), f); |
61 fread(dst, 1, sizeof(config), f); |
64 fclose(f); |
62 fclose(f); |
65 ESP_LOGD(TAG, "/spiffs/etc/config.conf read %d bytes", bytes); |
63 } |
66 if (config.AskIodine && ! config.IodineTime) { |
64 } |
67 config.IodineTime = 30; |
65 |
68 write_config(); |
66 |
69 } |
67 |
70 if (strlen(config.uuid) !=36) { |
68 void append_equipment() |
71 esp_efuse_mac_get_default(mac_addr); |
69 { |
72 sprintf(config.uuid, "c0ffeeee-dead-beef-cafe-%02x%02x%02x%02x%02x%02x", |
70 return; |
73 mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
|
74 write_config(); |
|
75 } |
|
76 } |
|
77 } |
|
78 |
|
79 |
|
80 |
|
81 void append_equipment() { |
|
82 uint8_t *dst = (uint8_t *)&equipment; |
71 uint8_t *dst = (uint8_t *)&equipment; |
83 FILE *f = fopen("/spiffs/etc/equipments.conf", "a"); |
72 FILE *f = fopen("/spiffs/etc/equipments.conf", "a"); |
84 |
73 |
85 if (f == NULL) { |
74 if (f == NULL) { |
86 ESP_LOGE(TAG, "append /spiffs/etc/equipments.conf failed"); |
75 ESP_LOGE(TAG, "append /spiffs/etc/equipments.conf failed"); |
87 return; |
76 return; |
88 } |
77 } |
89 |
78 |
90 size_t bytes = fwrite(dst, 1, sizeof(equipment), f); |
79 size_t bytes = fwrite(dst, 1, equipment_hdr.recsize, f); |
91 fclose(f); |
80 fclose(f); |
92 ESP_LOGI(TAG, "/spiffs/etc/equipments.conf appended %d bytes", bytes); |
81 ESP_LOGI(TAG, "/spiffs/etc/equipments.conf appended %d bytes", bytes); |
93 } |
82 } |
94 |
83 |
95 |
84 |
96 |
85 |
97 void read_equipment(int RecNo) { |
86 void read_equipment(int RecNo) |
98 uint8_t *dst; |
87 { |
99 FILE *f = fopen("/spiffs/etc/equipments.conf", "r"); |
88 size_t bytes; |
100 |
89 uint8_t *dst; |
|
90 FILE *f = fopen("/spiffs/etc/equipments.conf", "r"); |
|
91 |
101 if (f == NULL) { |
92 if (f == NULL) { |
102 // No configuration yet, create it. |
93 // No configuration yet, create it. |
103 equipment.Version = 1; |
94 dst = (uint8_t*)&equipment_hdr; |
104 equipment.Record = 1; |
95 memset(dst, 0, sizeof(equipment_hdr)); |
|
96 equipment_hdr.version = EQUIPMENT_VERSION; |
|
97 equipment_hdr.hdrsize = sizeof(equipment_hdr); |
|
98 equipment_hdr.recsize = sizeof(equipment); |
|
99 f = fopen("/spiffs/etc/equipments.conf", "w"); |
|
100 bytes = fwrite(dst, 1, sizeof(equipment_hdr), f); |
|
101 if (bytes != sizeof(equipment_hdr)) { |
|
102 ESP_LOGE(TAG, "/spiffs/etc/equipment.conf write header, %d/%d bytes", bytes, sizeof(equipment_hdr)); |
|
103 } |
|
104 dst = (uint8_t*)&equipment; |
|
105 memset(dst, 0, sizeof(equipment)); |
|
106 equipment.MLT_watt = 2000; |
|
107 equipment.HLT_watt = 2000; |
105 sprintf(equipment.Name, "default"); |
108 sprintf(equipment.Name, "default"); |
106 equipment.BoilPower = 80; |
109 equipment.BoilPower = 80; |
107 equipment.MashPower = 100; |
110 equipment.MashPower = 100; |
108 equipment.PumpCycle = 8; |
111 equipment.PumpCycle = 8; |
109 equipment.PumpRest = 2; |
112 equipment.PumpRest = 2; |
117 equipment.TempHLT = 85.0; |
120 equipment.TempHLT = 85.0; |
118 equipment.PID_kP = 200.0; |
121 equipment.PID_kP = 200.0; |
119 equipment.PID_kI = 2.0; |
122 equipment.PID_kI = 2.0; |
120 equipment.PID_kD = 1.5; |
123 equipment.PID_kD = 1.5; |
121 equipment.SampleTime = 3000; |
124 equipment.SampleTime = 3000; |
122 append_equipment(); |
125 bytes = fwrite(dst, 1, sizeof(equipment), f); |
|
126 fclose(f); |
123 } else { |
127 } else { |
|
128 /* |
|
129 * Try to read the new header |
|
130 */ |
|
131 dst = (uint8_t*)&equipment_hdr; |
|
132 fseek(f, 0, SEEK_SET); |
|
133 bytes = fread(dst, 1, sizeof(equipment_hdr), f); |
|
134 if (bytes != sizeof(equipment_hdr)) { |
|
135 ESP_LOGE(TAG, "/spiffs/etc/equipments.conf read header, %d/%d bytes", bytes, sizeof(equipment_hdr)); |
|
136 fclose(f); |
|
137 return; |
|
138 } |
|
139 #if 0 |
|
140 if (equipment_hdr.version < EQUIPMENT_VERSION) { |
|
141 FILE *nf = fopen("/spiffs/etc/equipments.new", "w"); |
|
142 |
|
143 ESP_LOGW(TAG, "/spiffs/etc/equipments.conf version %d, new %d", equipment_hdr.version, EQUIPMENT_VERSION); |
|
144 dst = (uint8_t*)&equipment_hdr; |
|
145 memset(dst, 0, sizeof(equipment_hdr)); |
|
146 equipment_hdr.version = EQUIPMENT_VERSION; |
|
147 equipment_hdr.hdrsize = sizeof(equipment_hdr); |
|
148 equipment_hdr.recsize = sizeof(equipment); |
|
149 bytes = fwrite(dst, 1, sizeof(equipment_hdr), nf); |
|
150 |
|
151 fseek(f, 0, SEEK_SET); |
|
152 dst = (uint8_t*)&recipe; |
|
153 while ((bytes = fread(dst, 1, equipment_hdr.recsize, f))) { |
|
154 // Upgrade data here |
|
155 bytes = fwrite(dst, 1, sizeof(equipment), nf); |
|
156 if (bytes != sizeof(equipment)) { |
|
157 ESP_LOGE(TAG, "/spiffs/etc/equipments.new write data, %d/%d bytes", bytes, sizeof(equipment)); |
|
158 } |
|
159 } |
|
160 // Update the header with new sizes |
|
161 fclose(nf); |
|
162 fclose(f); |
|
163 rename("/spiffs/etc/equipments.conf", "/spiffs/etc/equipments.old"); |
|
164 rename("/spiffs/etc/equipments.new", "/spiffs/etc/equipments.conf"); |
|
165 unlink("/spiffs/etc/equipments.old"); |
|
166 f = fopen("/spiffs/etc/equipments.conf", "r"); |
|
167 } |
|
168 #endif |
124 dst = (uint8_t*)&equipment; |
169 dst = (uint8_t*)&equipment; |
125 while (1) { |
170 fseek(f, (RecNo - 1) * equipment_hdr.recsize + equipment_hdr.hdrsize, SEEK_SET); |
126 size_t bytes = fread(dst, 1, sizeof(equipment), f); |
171 bytes = fread(dst, 1, equipment_hdr.recsize, f); |
127 if (bytes && equipment.Record == RecNo) { |
|
128 fclose(f); |
|
129 ESP_LOGD(TAG, "/spiffs/etc/equipments.conf read %d bytes, record %d: %s", bytes, RecNo, equipment.Name); |
|
130 return; |
|
131 } |
|
132 if (bytes == 0) |
|
133 break; |
|
134 } |
|
135 fclose(f); |
172 fclose(f); |
136 ESP_LOGE(TAG, "/spiffs/etc/equipments.conf read error, record %d not found", RecNo); |
173 if (bytes != equipment_hdr.recsize) { |
|
174 ESP_LOGE(TAG, "/spiffs/etc/equipments.conf read record %d, %d/%d bytes", RecNo, bytes, equipment_hdr.recsize); |
|
175 } else { |
|
176 ESP_LOGD(TAG, "/spiffs/etc/equipments.conf read %d bytes, record %d: %s", bytes, RecNo, equipment.Name); |
|
177 } |
137 } |
178 } |
138 } |
179 } |
139 |
180 |
140 |
181 |
141 |
182 |
147 f = fopen("/spiffs/etc/equipments.conf", "r+"); |
188 f = fopen("/spiffs/etc/equipments.conf", "r+"); |
148 if (f == NULL) { |
189 if (f == NULL) { |
149 ESP_LOGE(TAG, "write /spiffs/etc/equipments.conf failed"); |
190 ESP_LOGE(TAG, "write /spiffs/etc/equipments.conf failed"); |
150 return; |
191 return; |
151 } |
192 } |
152 fseek(f, (RecNo - 1) * sizeof(equipment), SEEK_SET); |
193 fseek(f, (RecNo - 1) * equipment_hdr.recsize + equipment_hdr.hdrsize, SEEK_SET); |
153 size_t bytes = fwrite(dst, 1, sizeof(equipment), f); |
194 size_t bytes = fwrite(dst, 1, equipment_hdr.recsize, f); |
154 fclose(f); |
195 fclose(f); |
155 ESP_LOGI(TAG, "/spiffs/etc/equipments.conf update record %d, %d bytes", RecNo, bytes); |
196 if (bytes != equipment_hdr.recsize) |
|
197 ESP_LOGE(TAG, "/spiffs/etc/equipments.conf write record %d, %d/%d bytes", RecNo, bytes, equipment_hdr.recsize); |
|
198 else |
|
199 ESP_LOGI(TAG, "/spiffs/etc/equipments.conf update record %d, %d bytes", RecNo, bytes); |
156 } |
200 } |
157 |
201 |
158 |
202 |
159 |
203 |
160 void delete_equipment(int RecNo) |
204 void delete_equipment(int RecNo) |
161 { |
205 { |
162 int RecNow = 1; |
206 return; |
|
207 int RecRead = 1, RecWrite = 1; |
163 FILE *n, *o; |
208 FILE *n, *o; |
164 uint8_t *dst; |
209 uint8_t *dst; |
165 size_t bytes; |
210 size_t bytes; |
166 |
211 |
167 n = fopen("/spiffs/etc/equipments.new", "a"); |
212 n = fopen("/spiffs/etc/equipments.new", "a"); |
174 ESP_LOGE(TAG, "cannot open spiffs/etc/equipments.conf for reading"); |
219 ESP_LOGE(TAG, "cannot open spiffs/etc/equipments.conf for reading"); |
175 fclose(n); |
220 fclose(n); |
176 return; |
221 return; |
177 } |
222 } |
178 |
223 |
|
224 dst = (uint8_t*)&equipment_hdr; |
|
225 fread(dst, 1, equipment_hdr.hdrsize, o); |
|
226 fwrite(dst, 1, equipment_hdr.hdrsize, n); |
|
227 |
179 dst = (uint8_t*)&equipment; |
228 dst = (uint8_t*)&equipment; |
180 while (true) { |
229 while (true) { |
181 bytes = fread(dst, 1, sizeof(equipment), o); |
230 bytes = fread(dst, 1, equipment_hdr.recsize, o); |
182 if (bytes == 0) |
231 if (bytes == 0) |
183 break; |
232 break; |
184 |
233 |
185 if (equipment.Record == RecNo) { |
234 if (RecRead != RecNo) { |
186 // Record to delete, don't copy |
235 // Record to copy |
187 printf("Ditch %d\n", RecNo); |
236 if ((config.EquipmentRec == RecRead) && (config.EquipmentRec != RecWrite)) { |
188 } else { |
|
189 if ((config.EquipmentRec == equipment.Record) && (config.EquipmentRec != RecNow)) { |
|
190 // We need to change the default record. |
237 // We need to change the default record. |
191 config.EquipmentRec = RecNow; |
238 config.EquipmentRec = RecWrite; |
192 write_config(); |
239 write_config(); |
193 } |
240 } |
194 printf("Copy %d to %d\n", equipment.Record, RecNow); |
241 fwrite(dst, 1, equipment_hdr.recsize, n); |
195 equipment.Record = RecNow; |
242 RecWrite++; |
196 fwrite(dst, 1, sizeof(equipment), n); |
243 } |
197 RecNow++; |
244 RecRead++; |
198 } |
|
199 } |
245 } |
200 fclose(o); |
246 fclose(o); |
201 fclose(n); |
247 fclose(n); |
202 |
248 |
203 rename("/spiffs/etc/equipments.conf", "/spiffs/etc/equipments.old"); |
249 rename("/spiffs/etc/equipments.conf", "/spiffs/etc/equipments.old"); |
204 rename("/spiffs/etc/equipments.new", "/spiffs/etc/equipments.conf"); |
250 rename("/spiffs/etc/equipments.new", "/spiffs/etc/equipments.conf"); |
205 unlink("/spiffs/etc/equipments.old"); |
251 unlink("/spiffs/etc/equipments.old"); |
|
252 ESP_LOGI(TAG, "Deleted equipment %d", RecNo); |
206 } |
253 } |
207 |
254 |
208 |
255 |
209 |
256 |
210 int add_station(uint8_t *SSID, uint8_t *Password) |
257 int add_station(uint8_t *SSID, uint8_t *Password) |
364 runtime.BrewStart = (time_t)0; |
409 runtime.BrewStart = (time_t)0; |
365 runtime.Logfile[0] = '\0'; |
410 runtime.Logfile[0] = '\0'; |
366 runtime.PumpCooling = false; |
411 runtime.PumpCooling = false; |
367 runtime.TimeBrewing = 0; |
412 runtime.TimeBrewing = 0; |
368 runtime.MashStep = 0; |
413 runtime.MashStep = 0; |
|
414 runtime.MLT_usage = 0; |
|
415 runtime.HLT_usage = 0; |
369 write_runtime(); |
416 write_runtime(); |
370 } else { |
417 } else { |
371 dst = (uint8_t*)&runtime; |
418 dst = (uint8_t*)&runtime; |
372 size_t bytes = fread(dst, 1, sizeof(runtime), f); |
419 size_t bytes = fread(dst, 1, sizeof(runtime), f); |
373 fclose(f); |
420 fclose(f); |
374 if (bytes != sizeof(runtime)) { |
421 if (bytes != sizeof(runtime)) { |
375 ESP_LOGE(TAG, "/spiffs/etc/runtime.conf read %d/%d bytes", bytes, sizeof(runtime)); |
422 ESP_LOGE(TAG, "/spiffs/etc/runtime.conf read %d/%d bytes", bytes, sizeof(runtime)); |
376 runtime.MashStep = 0; |
423 runtime.MLT_usage = 0; |
377 runtime.MaltAdded = false; |
424 runtime.HLT_usage = 0; |
378 } |
425 } |
379 #if 0 |
426 #if 0 |
380 printf("Auto started %s\n", runtime.AutoModeStarted ? "yes":"no"); |
427 printf("Auto started %s\n", runtime.AutoModeStarted ? "yes":"no"); |
381 printf("Stage resume %d\n", runtime.StageResume); |
428 printf("Stage resume %d\n", runtime.StageResume); |
382 printf("Stage time left %d\n", runtime.StageTimeLeft); |
429 printf("Stage time left %d\n", runtime.StageTimeLeft); |