diff options
Diffstat (limited to 'main/config.c')
| -rw-r--r-- | main/config.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/main/config.c b/main/config.c index 6753f40..32ae30e 100644 --- a/main/config.c +++ b/main/config.c | |||
| @@ -320,3 +320,60 @@ void tollgate_config_derive_unique(tollgate_config_t *cfg) | |||
| 320 | ESP_LOGI(TAG, "Unique config derived from nsec: SSID='%s', AP_IP=%s", | 320 | ESP_LOGI(TAG, "Unique config derived from nsec: SSID='%s', AP_IP=%s", |
| 321 | cfg->ap_ssid, cfg->ap_ip_str); | 321 | cfg->ap_ssid, cfg->ap_ip_str); |
| 322 | } | 322 | } |
| 323 | |||
| 324 | esp_err_t tollgate_config_add_wifi(const char *ssid, const char *password) { | ||
| 325 | if (!ssid || !password) return ESP_ERR_INVALID_ARG; | ||
| 326 | if (g_config.network_count >= TOLLGATE_MAX_WIFI_NETWORKS) return ESP_ERR_NO_MEM; | ||
| 327 | |||
| 328 | strncpy(g_config.networks[g_config.network_count].ssid, ssid, | ||
| 329 | sizeof(g_config.networks[g_config.network_count].ssid) - 1); | ||
| 330 | strncpy(g_config.networks[g_config.network_count].password, password, | ||
| 331 | sizeof(g_config.networks[g_config.network_count].password) - 1); | ||
| 332 | g_config.network_count++; | ||
| 333 | |||
| 334 | cJSON *root = cJSON_CreateObject(); | ||
| 335 | cJSON *nsec = cJSON_CreateString(g_config.nsec); | ||
| 336 | cJSON_AddItemToObject(root, "nsec", nsec); | ||
| 337 | |||
| 338 | cJSON *networks = cJSON_CreateArray(); | ||
| 339 | for (int i = 0; i < g_config.network_count; i++) { | ||
| 340 | cJSON *net = cJSON_CreateObject(); | ||
| 341 | cJSON_AddStringToObject(net, "ssid", g_config.networks[i].ssid); | ||
| 342 | cJSON_AddStringToObject(net, "password", g_config.networks[i].password); | ||
| 343 | cJSON_AddItemToArray(networks, net); | ||
| 344 | } | ||
| 345 | cJSON_AddItemToObject(root, "wifi_networks", networks); | ||
| 346 | |||
| 347 | if (g_config.ap_password[0]) | ||
| 348 | cJSON_AddStringToObject(root, "ap_password", g_config.ap_password); | ||
| 349 | cJSON_AddStringToObject(root, "mint_url", g_config.mint_url); | ||
| 350 | cJSON_AddNumberToObject(root, "price_per_step", g_config.price_per_step); | ||
| 351 | cJSON_AddNumberToObject(root, "step_size_ms", g_config.step_size_ms); | ||
| 352 | |||
| 353 | if (g_config.metric[0]) | ||
| 354 | cJSON_AddStringToObject(root, "metric", g_config.metric); | ||
| 355 | |||
| 356 | cJSON_AddStringToObject(root, "nostr_geohash", g_config.nostr_geohash); | ||
| 357 | |||
| 358 | cJSON *relays = cJSON_CreateArray(); | ||
| 359 | for (int i = 0; i < g_config.nostr_relay_count; i++) { | ||
| 360 | cJSON_AddItemToArray(relays, cJSON_CreateString(g_config.nostr_relays[i])); | ||
| 361 | } | ||
| 362 | cJSON_AddItemToObject(root, "nostr_relays", relays); | ||
| 363 | cJSON_AddNumberToObject(root, "nostr_publish_interval_s", g_config.nostr_publish_interval_s); | ||
| 364 | |||
| 365 | char *json_str = cJSON_Print(root); | ||
| 366 | cJSON_Delete(root); | ||
| 367 | |||
| 368 | FILE *f = fopen("/spiffs/config.json", "w"); | ||
| 369 | if (!f) { | ||
| 370 | free(json_str); | ||
| 371 | return ESP_FAIL; | ||
| 372 | } | ||
| 373 | fputs(json_str, f); | ||
| 374 | fclose(f); | ||
| 375 | free(json_str); | ||
| 376 | |||
| 377 | ESP_LOGI(TAG, "Added WiFi network '%s' to config (total: %d)", ssid, g_config.network_count); | ||
| 378 | return ESP_OK; | ||
| 379 | } | ||