feat: restore NVS runtime config with CLI commands (NVS > build-time priority)
Bring back two-layer configuration: build-time defaults from mimi_secrets.h with runtime NVS overrides via serial CLI. NVS values take highest priority so a pre-flashed board can be reconfigured anywhere with just a USB cable. Restored CLI commands: wifi_set, set_tg_token, set_api_key, set_model, set_proxy, clear_proxy, set_search_key. Added new commands: config_show (displays all config with sensitive fields masked), config_reset (clears all NVS overrides), and help (lists all commands). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "esp_log.h"
|
||||
#include "nvs.h"
|
||||
#include "esp_tls.h"
|
||||
#include "esp_crt_bundle.h"
|
||||
|
||||
@@ -25,11 +26,27 @@ static uint16_t s_proxy_port = 0;
|
||||
|
||||
esp_err_t http_proxy_init(void)
|
||||
{
|
||||
/* Start with build-time defaults */
|
||||
if (MIMI_SECRET_PROXY_HOST[0] != '\0' && MIMI_SECRET_PROXY_PORT[0] != '\0') {
|
||||
strncpy(s_proxy_host, MIMI_SECRET_PROXY_HOST, sizeof(s_proxy_host) - 1);
|
||||
s_proxy_port = (uint16_t)atoi(MIMI_SECRET_PROXY_PORT);
|
||||
}
|
||||
|
||||
/* NVS overrides take highest priority (set via CLI) */
|
||||
nvs_handle_t nvs;
|
||||
if (nvs_open(MIMI_NVS_PROXY, NVS_READONLY, &nvs) == ESP_OK) {
|
||||
char tmp[64] = {0};
|
||||
size_t len = sizeof(tmp);
|
||||
if (nvs_get_str(nvs, MIMI_NVS_KEY_PROXY_HOST, tmp, &len) == ESP_OK && tmp[0]) {
|
||||
strncpy(s_proxy_host, tmp, sizeof(s_proxy_host) - 1);
|
||||
uint16_t port = 0;
|
||||
if (nvs_get_u16(nvs, MIMI_NVS_KEY_PROXY_PORT, &port) == ESP_OK && port) {
|
||||
s_proxy_port = port;
|
||||
}
|
||||
}
|
||||
nvs_close(nvs);
|
||||
}
|
||||
|
||||
if (s_proxy_host[0] && s_proxy_port) {
|
||||
ESP_LOGI(TAG, "Proxy configured: %s:%d", s_proxy_host, s_proxy_port);
|
||||
} else {
|
||||
@@ -38,6 +55,36 @@ esp_err_t http_proxy_init(void)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t http_proxy_set(const char *host, uint16_t port)
|
||||
{
|
||||
nvs_handle_t nvs;
|
||||
ESP_ERROR_CHECK(nvs_open(MIMI_NVS_PROXY, NVS_READWRITE, &nvs));
|
||||
ESP_ERROR_CHECK(nvs_set_str(nvs, MIMI_NVS_KEY_PROXY_HOST, host));
|
||||
ESP_ERROR_CHECK(nvs_set_u16(nvs, MIMI_NVS_KEY_PROXY_PORT, port));
|
||||
ESP_ERROR_CHECK(nvs_commit(nvs));
|
||||
nvs_close(nvs);
|
||||
|
||||
strncpy(s_proxy_host, host, sizeof(s_proxy_host) - 1);
|
||||
s_proxy_port = port;
|
||||
ESP_LOGI(TAG, "Proxy set to %s:%d", s_proxy_host, s_proxy_port);
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t http_proxy_clear(void)
|
||||
{
|
||||
nvs_handle_t nvs;
|
||||
ESP_ERROR_CHECK(nvs_open(MIMI_NVS_PROXY, NVS_READWRITE, &nvs));
|
||||
nvs_erase_key(nvs, MIMI_NVS_KEY_PROXY_HOST);
|
||||
nvs_erase_key(nvs, MIMI_NVS_KEY_PROXY_PORT);
|
||||
nvs_commit(nvs);
|
||||
nvs_close(nvs);
|
||||
|
||||
s_proxy_host[0] = '\0';
|
||||
s_proxy_port = 0;
|
||||
ESP_LOGI(TAG, "Proxy cleared");
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
bool http_proxy_is_enabled(void)
|
||||
{
|
||||
return s_proxy_host[0] != '\0' && s_proxy_port != 0;
|
||||
|
||||
Reference in New Issue
Block a user