8 |
8 |
9 static const char *TAG = "config"; |
9 static const char *TAG = "config"; |
10 |
10 |
11 unit_t units[3]; ///< Pressure test units |
11 unit_t units[3]; ///< Pressure test units |
12 SemaphoreHandle_t xSemaphoreUnits = NULL; ///< Semaphore Units records |
12 SemaphoreHandle_t xSemaphoreUnits = NULL; ///< Semaphore Units records |
13 |
13 wifiStation_t wifiStation; |
|
14 strConfig_t config; |
14 |
15 |
15 |
16 |
16 void write_config() { |
17 void write_config() { |
17 uint8_t *dst = (uint8_t *)&config; |
18 uint8_t *dst = (uint8_t *)&config; |
18 FILE *f = fopen("/spiffs/etc/config.conf", "w+"); |
19 FILE *f = fopen("/spiffs/config.conf", "w+"); |
19 |
20 |
20 if (f == NULL) { |
21 if (f == NULL) { |
21 ESP_LOGE(TAG, "write /spiffs/etc/config.conf failed"); |
22 ESP_LOGE(TAG, "write /spiffs/config.conf failed"); |
22 return; |
23 return; |
23 } |
24 } |
24 |
25 |
25 size_t bytes = fwrite(dst, 1, sizeof(config), f); |
26 size_t bytes = fwrite(dst, 1, sizeof(config), f); |
26 fclose(f); |
27 fclose(f); |
27 if (bytes != sizeof(config)) { |
28 if (bytes != sizeof(config)) { |
28 ESP_LOGE(TAG, "/spiffs/etc/config.conf written %d/%d bytes", bytes, sizeof(config)); |
29 ESP_LOGE(TAG, "/spiffs/config.conf written %d/%d bytes", bytes, sizeof(config)); |
29 } else { |
30 } else { |
30 ESP_LOGD(TAG, "/spiffs/etc/config.conf written %d bytes", bytes); |
31 ESP_LOGD(TAG, "/spiffs/config.conf written %d bytes", bytes); |
31 } |
32 } |
32 } |
33 } |
33 |
34 |
34 |
35 |
35 |
36 |
36 void read_config() { |
37 void read_config() { |
37 uint8_t *dst; |
38 uint8_t *dst; |
38 uint8_t mac_addr[8] = {0}; |
39 uint8_t mac_addr[8] = {0}; |
39 FILE *f = fopen("/spiffs/etc/config.conf", "r"); |
40 FILE *f = fopen("/spiffs/config.conf", "r"); |
40 |
41 |
41 if (f == NULL) { |
42 if (f == NULL) { |
42 // No configuration yet, create it. |
43 // No configuration yet, create it. |
43 esp_efuse_mac_get_default(mac_addr); |
44 esp_efuse_mac_get_default(mac_addr); |
44 config.Version = 1; |
45 config.Version = 1; |
45 sprintf(config.hostname, "co2meter-%02x%02x%02x", mac_addr[3], mac_addr[4], mac_addr[5]); |
46 sprintf(config.hostname, "co2meter-%02x%02x%02x", mac_addr[3], mac_addr[4], mac_addr[5]); |
46 config.mqtt_server[0] = '\0'; |
47 config.mqtt_server[0] = '\0'; |
47 config.mqtt_port = 1883; |
48 config.mqtt_port = 1883; |
48 config.mqtt_user[0] = '\0'; |
49 config.mqtt_user[0] = '\0'; |
49 config.mqtt_pwd[0] = '\0'; |
50 config.mqtt_pwd[0] = '\0'; |
50 sprintf(config.uuid, "c0ffeeee-dead-beef-cafe-%02x%02x%02x%02x%02x%02x", |
51 sprintf(config.uuid, "c0ffeeee-dead-beef-cafe-%02x%02x%02x%02x%02x%02x", |
51 mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
52 mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
52 write_config(); |
53 write_config(); |
53 } else { |
54 } else { |
54 dst = (uint8_t*)&config; |
55 dst = (uint8_t*)&config; |
55 size_t bytes = fread(dst, 1, sizeof(config), f); |
56 size_t bytes = fread(dst, 1, sizeof(config), f); |
56 fclose(f); |
57 fclose(f); |
57 ESP_LOGD(TAG, "/spiffs/etc/config.conf read %d bytes", bytes); |
58 ESP_LOGD(TAG, "/spiffs/config.conf read %d bytes", bytes); |
58 } |
59 } |
59 } |
60 } |
60 |
61 |
61 |
62 |
62 |
63 |
63 void write_units() { |
64 void write_units() { |
64 uint8_t *dst = (uint8_t *)&units; |
65 uint8_t *dst = (uint8_t *)&units; |
65 FILE *f = fopen("/spiffs/etc/units.conf", "r+"); |
66 FILE *f = fopen("/spiffs/units.conf", "r+"); |
66 |
67 |
67 if (f == NULL) { |
68 if (f == NULL) { |
68 ESP_LOGE(TAG, "write /spiffs/etc/units.conf failed"); |
69 ESP_LOGE(TAG, "write /spiffs/units.conf failed"); |
69 return; |
70 return; |
70 } |
71 } |
71 size_t bytes = fwrite(dst, 1, sizeof(units), f); |
72 size_t bytes = fwrite(dst, 1, sizeof(units), f); |
72 fclose(f); |
73 fclose(f); |
73 if (bytes != sizeof(units)) { |
74 if (bytes != sizeof(units)) { |
74 ESP_LOGE(TAG, "/spiffs/etc/units.conf written %d/%d bytes", bytes, sizeof(units)); |
75 ESP_LOGE(TAG, "/spiffs/units.conf written %d/%d bytes", bytes, sizeof(units)); |
75 } else { |
76 } else { |
76 ESP_LOGD(TAG, "/spiffs/etc/units.conf written %d bytes", bytes); |
77 ESP_LOGD(TAG, "/spiffs/units.conf written %d bytes", bytes); |
77 } |
78 } |
78 } |
79 } |
79 |
80 |
80 |
81 |
81 |
82 |
82 void read_units() { |
83 void read_units() { |
83 uint8_t *dst = (uint8_t *)&units; |
84 uint8_t *dst = (uint8_t *)&units; |
84 uint8_t mac_addr[8] = {0}; |
85 uint8_t mac_addr[8] = {0}; |
85 size_t bytes; |
86 size_t bytes; |
86 FILE *f = fopen("/spiffs/etc/units.conf", "r"); |
87 FILE *f = fopen("/spiffs/units.conf", "r"); |
87 |
88 |
88 if (f == NULL) { |
89 if (f == NULL) { |
89 // No units yet, create them. |
90 // No units yet, create them. |
90 ESP_LOGE(TAG, "/spiffs/etc/units.conf not found, create new"); |
91 ESP_LOGE(TAG, "/spiffs/units.conf not found, create new"); |
91 goto u_error; |
92 goto u_error; |
92 } else { |
93 } else { |
93 bytes = fread(dst, 1, sizeof(units), f); |
94 bytes = fread(dst, 1, sizeof(units), f); |
94 fclose(f); |
95 fclose(f); |
95 if (bytes != sizeof(units)) { |
96 if (bytes != sizeof(units)) { |
96 ESP_LOGE(TAG, "/spiffs/etc/units.conf read %d of %d bytes", bytes, sizeof(units)); |
97 ESP_LOGE(TAG, "/spiffs/units.conf read %d of %d bytes", bytes, sizeof(units)); |
97 goto u_error; |
98 goto u_error; |
98 } |
99 } |
99 ESP_LOGI(TAG, "/spiffs/etc/units.conf read %d bytes", bytes); |
100 ESP_LOGI(TAG, "/spiffs/units.conf read %d bytes", bytes); |
100 for (int i = 0; i < 3; i++) |
101 for (int i = 0; i < 3; i++) |
101 ESP_LOGI(TAG, "%d %s %d %4d %3d", i, units[i].alias, units[i].pressure_channel, units[i].pressure_voltage, units[i].pressure_zero); |
102 ESP_LOGI(TAG, "%d %s %d %4lu %3lu", i, units[i].alias, units[i].pressure_channel, units[i].pressure_voltage, units[i].pressure_zero); |
102 } |
103 } |
103 return; |
104 return; |
104 |
105 |
105 u_error: |
106 u_error: |
106 esp_efuse_mac_get_default(mac_addr); |
107 esp_efuse_mac_get_default(mac_addr); |
109 sprintf(units[i].uuid, "c0ffeeee-dead-beef-caf%d-%02x%02x%02x%02x%02x%02x", i & 3, |
110 sprintf(units[i].uuid, "c0ffeeee-dead-beef-caf%d-%02x%02x%02x%02x%02x%02x", i & 3, |
110 mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
111 mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
111 sprintf(units[i].alias, "unit%d", (i + 1) & 3); |
112 sprintf(units[i].alias, "unit%d", (i + 1) & 3); |
112 units[i].pressure_zero = 110; |
113 units[i].pressure_zero = 110; |
113 } |
114 } |
114 f = fopen("/spiffs/etc/units.conf", "w+"); |
115 f = fopen("/spiffs/units.conf", "w+"); |
115 bytes = fwrite(dst, 1, sizeof(units), f); |
116 bytes = fwrite(dst, 1, sizeof(units), f); |
116 fclose(f); |
117 fclose(f); |
117 if (bytes != sizeof(units)) { |
118 if (bytes != sizeof(units)) { |
118 ESP_LOGE(TAG, "/spiffs/etc/units.conf written %d/%d bytes", bytes, sizeof(units)); |
119 ESP_LOGE(TAG, "/spiffs/units.conf written %d/%d bytes", bytes, sizeof(units)); |
119 } else { |
120 } else { |
120 ESP_LOGI(TAG, "/spiffs/etc/units.conf written %d bytes", bytes); |
121 ESP_LOGI(TAG, "/spiffs/units.conf written %d bytes", bytes); |
121 } |
122 } |
122 } |
123 } |
123 |
124 |
124 |
125 |
125 |
126 |
162 ESP_LOGI(TAG, "read_station(NULL)"); |
163 ESP_LOGI(TAG, "read_station(NULL)"); |
163 return -1; |
164 return -1; |
164 } |
165 } |
165 |
166 |
166 memset(dst, 0, sizeof(wifiStation)); |
167 memset(dst, 0, sizeof(wifiStation)); |
167 f = fopen("/spiffs/etc/stations.conf", "r+"); |
168 f = fopen("/spiffs/stations.conf", "r+"); |
168 if (f == NULL) { |
169 if (f == NULL) { |
169 f = fopen("/spiffs/etc/stations.conf", "w+"); |
170 f = fopen("/spiffs/stations.conf", "w+"); |
170 fclose(f); |
171 fclose(f); |
171 ESP_LOGI(TAG, "/spiffs/etc/stations.conf created, return -1"); |
172 ESP_LOGI(TAG, "/spiffs/stations.conf created, return -1"); |
172 return -1; |
173 return -1; |
173 } |
174 } |
174 |
175 |
175 rc = 0; |
176 rc = 0; |
176 fseek(f, 0, SEEK_SET); |
177 fseek(f, 0, SEEK_SET); |
177 |
178 |
178 while (1) { |
179 while (1) { |
179 bytes = fread(dst, 1, sizeof(wifiStation), f); |
180 bytes = fread(dst, 1, sizeof(wifiStation), f); |
|
181 ESP_LOGI(TAG, " read_station bytes %d size %d", bytes, sizeof(wifiStation)); |
180 if (bytes < sizeof(wifiStation)) { |
182 if (bytes < sizeof(wifiStation)) { |
181 fclose(f); |
183 fclose(f); |
182 memset(dst, 0, sizeof(wifiStation)); |
184 memset(dst, 0, sizeof(wifiStation)); |
183 return -1; |
185 return -1; |
184 } |
186 } |