main/config.c

changeset 87
47253f294a9f
parent 82
7d17e2cb31a8
child 95
c02e12e9c884
--- 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");

mercurial