// Wi-Fi station-mode connection management, using the credentials in // device_config.h. // // IMPORTANT hardware note: the ESP32-P4 SoC has no integrated 2.4GHz radio. // Confirmed against the actual target hardware (Waveshare // ESP32-P4-Module-DEV-KIT, chip ESP32-P4NRW32): it pairs the P4 with an // onboard ESP32-C6 co-processor over a fixed 7-pin SDIO link, and Wi-Fi is // brought up via the `espressif/esp_wifi_remote` + `espressif/esp_hosted` // managed components (declared in main/idf_component.yml, configured in // sdkconfig.defaults). Those components provide a drop-in-compatible // esp_wifi_*/esp_netif_* API — this file's esp_wifi_init()/esp_wifi_start() // calls are unchanged from what they'd be on a Wi-Fi-native chip; only the // component manifest and sdkconfig differ, not this code. See README.md's // Wi-Fi section for the reserved SDIO pins (14-19, 54) and sdkconfig.defaults // for the exact config values — still unverified against real hardware // (nobody in this build has the physical board), but now backed by a // specific, sourced hardware architecture rather than a general caveat. #pragma once #include #include "esp_err.h" #include "freertos/FreeRTOS.h" #ifdef __cplusplus extern "C" { #endif // Initializes NVS (required by esp_wifi), the default netif, the event // loop, and esp_wifi in station mode, then starts connecting using // DEVICE_WIFI_SSID / DEVICE_WIFI_PASSWORD from device_config.h. Registers // an internal event handler that retries on disconnect with a capped // backoff. Call once from app_main() before starting the telemetry task. esp_err_t wifi_manager_start(void); // Blocks (efficiently, via an internal FreeRTOS event group) until the // station has an IP address, or until `timeout_ticks` elapses. // Returns ESP_OK once connected, ESP_ERR_TIMEOUT otherwise. esp_err_t wifi_manager_wait_connected(TickType_t timeout_ticks); // True if the station currently holds an IP (i.e. the last known state is // "connected"), for callers that want a non-blocking check (e.g. the // telemetry task deciding whether to bother building a request this cycle). bool wifi_manager_is_connected(void); #ifdef __cplusplus } #endif