Implements first-boot Wi-Fi setup with no companion app required: a SoftAP + captive portal (DNS wildcard redirect, DHCP option 114, HTTP form) lets the user submit Wi-Fi credentials from any browser. On submit, credentials are saved to NVS and the device switches to STA mode; on subsequent boots it reconnects automatically via stored credentials. dns_server.c/.h are vendored from ESP-IDF's official captive_portal example (Unlicense/CC0). Requests both link-local and global IPv6 addresses once the STA connection has an IPv4 address (not on WIFI_EVENT_STA_CONNECTED -- esp_netif_create_ip6_linklocal() reliably fails there because esp-netif's own handler, which marks the lwIP netif "up", hasn't run yet due to event-handler registration order). Verified end-to-end on real ESP32-C6 hardware: SoftAP comes up, credential submission works, STA reconnects on reboot, and both a link-local and a router-assigned global IPv6 address are obtained via SLAAC. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
22 lines
687 B
C++
22 lines
687 B
C++
#include "commissioning.h"
|
|
#include "esp_log.h"
|
|
|
|
namespace {
|
|
constexpr const char *TAG = "kvida_os";
|
|
}
|
|
|
|
extern "C" void app_main(void)
|
|
{
|
|
ESP_LOGI(TAG, "kvida-os starting");
|
|
|
|
// First boot / no stored Wi-Fi credentials -> fall straight into
|
|
// commissioning (nothing to protect yet, so no physical-interaction
|
|
// gate needed here). Re-entering commissioning on an already-configured
|
|
// device should require a physical trigger (e.g. the user button) per
|
|
// AGENTS.md's security principle -- not wired up yet since `drivers`
|
|
// doesn't have a real button implementation.
|
|
if (!kvida::try_stored_credentials()) {
|
|
kvida::start_commissioning();
|
|
}
|
|
}
|