feat(factory-cli): add Wi-Fi credential management commands

This commit is contained in:
chenjintao
2026-08-25 14:09:25 +08:00
parent 63df9f91b3
commit 140e90447c
8 changed files with 362 additions and 13 deletions
+8
View File
@@ -359,6 +359,14 @@ esp_err_t platform_behavior_play_prompt_file(const char *path);
void platform_wifi_portal_set_behavior_hooks(const platform_wifi_behavior_hooks_t *hooks);
esp_err_t platform_wifi_portal_init_defaults(const char *seed_ssid, const char *seed_password);
bool platform_wifi_portal_has_saved_credentials(void);
/**
* Copy saved SSIDs in persistent priority order without exposing passwords.
* `out_ssids` contains `capacity` rows of `ssid_stride` bytes.
*/
esp_err_t platform_wifi_portal_get_saved_ssids(char *out_ssids,
size_t ssid_stride,
size_t capacity,
size_t *out_count);
bool platform_wifi_portal_sta_is_connected(void);
/** Apply standby modem power save, or restore the configured active policy. */
esp_err_t platform_wifi_portal_set_light_standby(bool standby);
@@ -2,6 +2,7 @@
#include "esp_err.h"
#include <stdbool.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
@@ -26,6 +27,17 @@ esp_err_t wifi_portal_init_defaults(const char *seed_ssid, const char *seed_pass
*/
bool wifi_portal_has_saved_credentials(void);
/**
* @brief Copy saved SSIDs in persistent priority order.
*
* Passwords are intentionally not exposed. `out_ssids` contains `capacity`
* rows of `ssid_stride` bytes. `out_count` receives the total saved count.
*/
esp_err_t wifi_portal_get_saved_ssids(char *out_ssids,
size_t ssid_stride,
size_t capacity,
size_t *out_count);
/**
* @brief Check whether the STA interface is connected (has an IP).
*
@@ -128,6 +128,17 @@ bool platform_wifi_portal_has_saved_credentials(void)
return wifi_portal_has_saved_credentials();
}
esp_err_t platform_wifi_portal_get_saved_ssids(char *out_ssids,
size_t ssid_stride,
size_t capacity,
size_t *out_count)
{
return wifi_portal_get_saved_ssids(out_ssids,
ssid_stride,
capacity,
out_count);
}
bool platform_wifi_portal_sta_is_connected(void)
{
return wifi_portal_sta_is_connected();
@@ -298,6 +298,34 @@ bool wifi_portal_has_saved_credentials(void)
return !SsidManager::GetInstance().GetSsidList().empty();
}
esp_err_t wifi_portal_get_saved_ssids(char *out_ssids,
size_t ssid_stride,
size_t capacity,
size_t *out_count)
{
if (out_count == nullptr ||
(capacity > 0U && (out_ssids == nullptr || ssid_stride < 33U))) {
return ESP_ERR_INVALID_ARG;
}
install_wifi_storage_hooks();
ESP_RETURN_ON_ERROR(wifi_portal_lock(), TAG, "Failed to lock Wi-Fi portal");
PortalUnlockGuard guard;
const auto &ssid_list = SsidManager::GetInstance().GetSsidList();
*out_count = ssid_list.size();
if (ssid_list.size() > capacity) {
return ESP_ERR_INVALID_SIZE;
}
for (size_t i = 0; i < ssid_list.size(); ++i) {
strlcpy(out_ssids + (i * ssid_stride),
ssid_list[i].ssid.c_str(),
ssid_stride);
}
return ESP_OK;
}
bool wifi_portal_sta_is_connected(void)
{
if (!s_wifi_manager_initialized) {