main/config.c

changeset 74
34da2d2b12d5
parent 60
07a1a07fdc8c
child 77
15dc572a7fcb
equal deleted inserted replaced
73:c18d2951e8d7 74:34da2d2b12d5
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
127 { 128 {
128 FILE *f; 129 FILE *f;
129 uint8_t *dst = (uint8_t *)&wifiStation; 130 uint8_t *dst = (uint8_t *)&wifiStation;
130 131
131 if (read_station(SSID) >= 0) { 132 if (read_station(SSID) >= 0) {
132 ESP_LOGE(TAG, "add_station %s already excists", SSID); 133 ESP_LOGE(TAG, "add_station %s already exists", SSID);
133 return -1; 134 return -1;
134 } 135 }
135 136
136 f = fopen("/spiffs/etc/stations.conf", "a+"); 137 f = fopen("/spiffs/stations.conf", "a+");
137 if (f == NULL) { 138 if (f == NULL) {
138 ESP_LOGE(TAG, "write /spiffs/etc/stations.conf failed"); 139 ESP_LOGE(TAG, "write /spiffs/stations.conf failed");
139 return -1; 140 return -1;
140 } 141 }
141 memset(dst, 0, sizeof(wifiStation)); 142 memset(dst, 0, sizeof(wifiStation));
142 sprintf(wifiStation.SSID, "%s", (char *)SSID); 143 sprintf(wifiStation.SSID, "%s", (char *)SSID);
143 sprintf(wifiStation.Password, "%s", (char *)Password); 144 sprintf(wifiStation.Password, "%s", (char *)Password);
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 }
198 { 200 {
199 FILE *n, *o; 201 FILE *n, *o;
200 uint8_t *dst; 202 uint8_t *dst;
201 size_t bytes; 203 size_t bytes;
202 204
203 n = fopen("/spiffs/etc/stations.new", "a"); 205 n = fopen("/spiffs/stations.new", "a");
204 if (n == NULL) { 206 if (n == NULL) {
205 ESP_LOGE(TAG, "cannot create /spiffs/etc/stations.new"); 207 ESP_LOGE(TAG, "cannot create /spiffs/stations.new");
206 return; 208 return;
207 } 209 }
208 o = fopen("/spiffs/etc/stations.conf", "r"); 210 o = fopen("/spiffs/stations.conf", "r");
209 if (o == NULL) { 211 if (o == NULL) {
210 ESP_LOGE(TAG, "cannot open spiffs/etc/stations.conf for reading"); 212 ESP_LOGE(TAG, "cannot open spiffs/stations.conf for reading");
211 fclose(n); 213 fclose(n);
212 return; 214 return;
213 } 215 }
214 216
215 dst = (uint8_t*)&wifiStation; 217 dst = (uint8_t*)&wifiStation;
225 } 227 }
226 } 228 }
227 fclose(o); 229 fclose(o);
228 fclose(n); 230 fclose(n);
229 231
230 rename("/spiffs/etc/stations.conf", "/spiffs/etc/stations.old"); 232 rename("/spiffs/stations.conf", "/spiffs/stations.old");
231 rename("/spiffs/etc/stations.new", "/spiffs/etc/stations.conf"); 233 rename("/spiffs/stations.new", "/spiffs/stations.conf");
232 unlink("/spiffs/etc/stations.old"); 234 unlink("/spiffs/stations.old");
233 } 235 }
234 236

mercurial