main/config.c

changeset 87
47253f294a9f
parent 82
7d17e2cb31a8
child 95
c02e12e9c884
equal deleted inserted replaced
86:8d0287a1a9e1 87:47253f294a9f
19 19
20 size_t bytes = fwrite(dst, 1, sizeof(config), f); 20 size_t bytes = fwrite(dst, 1, sizeof(config), f);
21 fclose(f); 21 fclose(f);
22 if (bytes != sizeof(config)) { 22 if (bytes != sizeof(config)) {
23 ESP_LOGE(TAG, "/spiffs/etc/config.conf written %d/%d bytes", bytes, sizeof(config)); 23 ESP_LOGE(TAG, "/spiffs/etc/config.conf written %d/%d bytes", bytes, sizeof(config));
24 } else {
25 ESP_LOGD(TAG, "/spiffs/etc/config.conf written %d bytes", bytes);
26 } 24 }
27 } 25 }
28 26
29 27
30 28
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)
338 385
339 size_t bytes = fwrite(dst, 1, sizeof(runtime), f); 386 size_t bytes = fwrite(dst, 1, sizeof(runtime), f);
340 fclose(f); 387 fclose(f);
341 if (bytes != sizeof(runtime)) { 388 if (bytes != sizeof(runtime)) {
342 ESP_LOGE(TAG, "/spiffs/etc/runtime.conf written %d/%d bytes", bytes, sizeof(runtime)); 389 ESP_LOGE(TAG, "/spiffs/etc/runtime.conf written %d/%d bytes", bytes, sizeof(runtime));
343 } else {
344 ESP_LOGD(TAG, "/spiffs/etc/runtime.conf written %d bytes", bytes);
345 } 390 }
346 } 391 }
347 392
348 393
349 394
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);

mercurial