feat(factory-cli): add Wi-Fi credential management commands
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user