diff -r 8d0287a1a9e1 -r 47253f294a9f main/config.c --- a/main/config.c Sun Jun 07 22:30:07 2020 +0200 +++ b/main/config.c Wed Jun 10 09:43:51 2020 +0200 @@ -21,8 +21,6 @@ fclose(f); if (bytes != sizeof(config)) { ESP_LOGE(TAG, "/spiffs/etc/config.conf written %d/%d bytes", bytes, sizeof(config)); - } else { - ESP_LOGD(TAG, "/spiffs/etc/config.conf written %d bytes", bytes); } } @@ -60,25 +58,16 @@ write_config(); } else { dst = (uint8_t*)&config; - size_t bytes = fread(dst, 1, sizeof(config), f); + fread(dst, 1, sizeof(config), f); fclose(f); - ESP_LOGD(TAG, "/spiffs/etc/config.conf read %d bytes", bytes); - if (config.AskIodine && ! config.IodineTime) { - config.IodineTime = 30; - write_config(); - } - if (strlen(config.uuid) !=36) { - esp_efuse_mac_get_default(mac_addr); - sprintf(config.uuid, "c0ffeeee-dead-beef-cafe-%02x%02x%02x%02x%02x%02x", - mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); - write_config(); - } } } -void append_equipment() { +void append_equipment() +{ +return; uint8_t *dst = (uint8_t *)&equipment; FILE *f = fopen("/spiffs/etc/equipments.conf", "a"); @@ -87,21 +76,35 @@ return; } - size_t bytes = fwrite(dst, 1, sizeof(equipment), f); + size_t bytes = fwrite(dst, 1, equipment_hdr.recsize, f); fclose(f); ESP_LOGI(TAG, "/spiffs/etc/equipments.conf appended %d bytes", bytes); } -void read_equipment(int RecNo) { - uint8_t *dst; - FILE *f = fopen("/spiffs/etc/equipments.conf", "r"); - +void read_equipment(int RecNo) +{ + size_t bytes; + uint8_t *dst; + FILE *f = fopen("/spiffs/etc/equipments.conf", "r"); + if (f == NULL) { // No configuration yet, create it. - equipment.Version = 1; - equipment.Record = 1; + dst = (uint8_t*)&equipment_hdr; + memset(dst, 0, sizeof(equipment_hdr)); + equipment_hdr.version = EQUIPMENT_VERSION; + equipment_hdr.hdrsize = sizeof(equipment_hdr); + equipment_hdr.recsize = sizeof(equipment); + f = fopen("/spiffs/etc/equipments.conf", "w"); + bytes = fwrite(dst, 1, sizeof(equipment_hdr), f); + if (bytes != sizeof(equipment_hdr)) { + ESP_LOGE(TAG, "/spiffs/etc/equipment.conf write header, %d/%d bytes", bytes, sizeof(equipment_hdr)); + } + dst = (uint8_t*)&equipment; + memset(dst, 0, sizeof(equipment)); + equipment.MLT_watt = 2000; + equipment.HLT_watt = 2000; sprintf(equipment.Name, "default"); equipment.BoilPower = 80; equipment.MashPower = 100; @@ -119,21 +122,59 @@ equipment.PID_kI = 2.0; equipment.PID_kD = 1.5; equipment.SampleTime = 3000; - append_equipment(); + bytes = fwrite(dst, 1, sizeof(equipment), f); + fclose(f); } else { + /* + * Try to read the new header + */ + dst = (uint8_t*)&equipment_hdr; + fseek(f, 0, SEEK_SET); + bytes = fread(dst, 1, sizeof(equipment_hdr), f); + if (bytes != sizeof(equipment_hdr)) { + ESP_LOGE(TAG, "/spiffs/etc/equipments.conf read header, %d/%d bytes", bytes, sizeof(equipment_hdr)); + fclose(f); + return; + } +#if 0 + if (equipment_hdr.version < EQUIPMENT_VERSION) { + FILE *nf = fopen("/spiffs/etc/equipments.new", "w"); + + ESP_LOGW(TAG, "/spiffs/etc/equipments.conf version %d, new %d", equipment_hdr.version, EQUIPMENT_VERSION); + dst = (uint8_t*)&equipment_hdr; + memset(dst, 0, sizeof(equipment_hdr)); + equipment_hdr.version = EQUIPMENT_VERSION; + equipment_hdr.hdrsize = sizeof(equipment_hdr); + equipment_hdr.recsize = sizeof(equipment); + bytes = fwrite(dst, 1, sizeof(equipment_hdr), nf); + + fseek(f, 0, SEEK_SET); + dst = (uint8_t*)&recipe; + while ((bytes = fread(dst, 1, equipment_hdr.recsize, f))) { + // Upgrade data here + bytes = fwrite(dst, 1, sizeof(equipment), nf); + if (bytes != sizeof(equipment)) { + ESP_LOGE(TAG, "/spiffs/etc/equipments.new write data, %d/%d bytes", bytes, sizeof(equipment)); + } + } + // Update the header with new sizes + fclose(nf); + fclose(f); + rename("/spiffs/etc/equipments.conf", "/spiffs/etc/equipments.old"); + rename("/spiffs/etc/equipments.new", "/spiffs/etc/equipments.conf"); + unlink("/spiffs/etc/equipments.old"); + f = fopen("/spiffs/etc/equipments.conf", "r"); + } +#endif dst = (uint8_t*)&equipment; - while (1) { - size_t bytes = fread(dst, 1, sizeof(equipment), f); - if (bytes && equipment.Record == RecNo) { - fclose(f); - ESP_LOGD(TAG, "/spiffs/etc/equipments.conf read %d bytes, record %d: %s", bytes, RecNo, equipment.Name); - return; - } - if (bytes == 0) - break; + fseek(f, (RecNo - 1) * equipment_hdr.recsize + equipment_hdr.hdrsize, SEEK_SET); + bytes = fread(dst, 1, equipment_hdr.recsize, f); + fclose(f); + if (bytes != equipment_hdr.recsize) { + ESP_LOGE(TAG, "/spiffs/etc/equipments.conf read record %d, %d/%d bytes", RecNo, bytes, equipment_hdr.recsize); + } else { + ESP_LOGD(TAG, "/spiffs/etc/equipments.conf read %d bytes, record %d: %s", bytes, RecNo, equipment.Name); } - fclose(f); - ESP_LOGE(TAG, "/spiffs/etc/equipments.conf read error, record %d not found", RecNo); } } @@ -149,17 +190,21 @@ ESP_LOGE(TAG, "write /spiffs/etc/equipments.conf failed"); return; } - fseek(f, (RecNo - 1) * sizeof(equipment), SEEK_SET); - size_t bytes = fwrite(dst, 1, sizeof(equipment), f); + fseek(f, (RecNo - 1) * equipment_hdr.recsize + equipment_hdr.hdrsize, SEEK_SET); + size_t bytes = fwrite(dst, 1, equipment_hdr.recsize, f); fclose(f); - ESP_LOGI(TAG, "/spiffs/etc/equipments.conf update record %d, %d bytes", RecNo, bytes); + if (bytes != equipment_hdr.recsize) + ESP_LOGE(TAG, "/spiffs/etc/equipments.conf write record %d, %d/%d bytes", RecNo, bytes, equipment_hdr.recsize); + else + ESP_LOGI(TAG, "/spiffs/etc/equipments.conf update record %d, %d bytes", RecNo, bytes); } void delete_equipment(int RecNo) { - int RecNow = 1; +return; + int RecRead = 1, RecWrite = 1; FILE *n, *o; uint8_t *dst; size_t bytes; @@ -176,26 +221,27 @@ return; } + dst = (uint8_t*)&equipment_hdr; + fread(dst, 1, equipment_hdr.hdrsize, o); + fwrite(dst, 1, equipment_hdr.hdrsize, n); + dst = (uint8_t*)&equipment; while (true) { - bytes = fread(dst, 1, sizeof(equipment), o); + bytes = fread(dst, 1, equipment_hdr.recsize, o); if (bytes == 0) break; - if (equipment.Record == RecNo) { - // Record to delete, don't copy - printf("Ditch %d\n", RecNo); - } else { - if ((config.EquipmentRec == equipment.Record) && (config.EquipmentRec != RecNow)) { + if (RecRead != RecNo) { + // Record to copy + if ((config.EquipmentRec == RecRead) && (config.EquipmentRec != RecWrite)) { // We need to change the default record. - config.EquipmentRec = RecNow; + config.EquipmentRec = RecWrite; write_config(); } - printf("Copy %d to %d\n", equipment.Record, RecNow); - equipment.Record = RecNow; - fwrite(dst, 1, sizeof(equipment), n); - RecNow++; + fwrite(dst, 1, equipment_hdr.recsize, n); + RecWrite++; } + RecRead++; } fclose(o); fclose(n); @@ -203,6 +249,7 @@ rename("/spiffs/etc/equipments.conf", "/spiffs/etc/equipments.old"); rename("/spiffs/etc/equipments.new", "/spiffs/etc/equipments.conf"); unlink("/spiffs/etc/equipments.old"); + ESP_LOGI(TAG, "Deleted equipment %d", RecNo); } @@ -340,8 +387,6 @@ fclose(f); if (bytes != sizeof(runtime)) { ESP_LOGE(TAG, "/spiffs/etc/runtime.conf written %d/%d bytes", bytes, sizeof(runtime)); - } else { - ESP_LOGD(TAG, "/spiffs/etc/runtime.conf written %d bytes", bytes); } } @@ -366,6 +411,8 @@ runtime.PumpCooling = false; runtime.TimeBrewing = 0; runtime.MashStep = 0; + runtime.MLT_usage = 0; + runtime.HLT_usage = 0; write_runtime(); } else { dst = (uint8_t*)&runtime; @@ -373,8 +420,8 @@ fclose(f); if (bytes != sizeof(runtime)) { ESP_LOGE(TAG, "/spiffs/etc/runtime.conf read %d/%d bytes", bytes, sizeof(runtime)); - runtime.MashStep = 0; - runtime.MaltAdded = false; + runtime.MLT_usage = 0; + runtime.HLT_usage = 0; } #if 0 printf("Auto started %s\n", runtime.AutoModeStarted ? "yes":"no");