#ifndef JL_WIFI_CTRL_H #define JL_WIFI_CTRL_H #ifdef __cplusplus extern "C" { #endif #include "wpa_ctrl.h" #include "includes.h" #include "common.h" #define JL_WIFI_CTRL_SSID_MAX 33 typedef enum { JL_WIFI_CTRL_STATE_UNKNOWN = -1, JL_WIFI_CTRL_STATE_COMPLETED = 0, JL_WIFI_CTRL_STATE_DISCONNECTED = 1, JL_WIFI_CTRL_STATE_SCANNING = 2, JL_WIFI_CTRL_STATE_ASSOCIATED = 3, JL_WIFI_CTRL_STATE_4WAY_HANDSHAKE = 4, JL_WIFI_CTRL_STATE_INACTIVE = 5, } jl_wifi_ctrl_state_t; typedef struct { bool valid; /* false = wpa_supplicant unreachable */ jl_wifi_ctrl_state_t state; char ssid[JL_WIFI_CTRL_SSID_MAX]; int id_bss; char ip_address[64]; char mac_address[32]; } jl_wifi_ctrl_status_t; typedef struct { char bssid[18]; int freq; int level; bool wpa2; char ssid[JL_WIFI_CTRL_SSID_MAX]; } jl_wifi_ctrl_scan_result_t; typedef enum { JL_WIFI_EVT_NONE = 0, JL_WIFI_EVT_SCAN_RESULTS = 1u << 0, JL_WIFI_EVT_CONNECTED = 1u << 1, JL_WIFI_EVT_DISCONNECTED = 1u << 2, JL_WIFI_EVT_TERMINATING = 1u << 3, /* wpa_supplicant gave up on the configured network after repeated * 4-way-handshake failures (CTRL-EVENT-SSID-TEMP-DISABLED) - the * reliable "wrong PSK" signal. Do NOT infer this from momentarily * observing wpa_state=4WAY_HANDSHAKE via STATUS polling: that state is * a normal transient step of every successful connection too. */ JL_WIFI_EVT_AUTH_FAILED = 1u << 4, } jl_wifi_ctrl_event_t; /* Call periodically (e.g. every 100ms lv_task tick). Non-blocking: manages * connect/reconnect (internally rate-limited) and drains the attach/monitor * socket. */ void jl_wifi_ctrl_poll(void); /* Event bits accumulated since the last call; clears them. */ uint32_t jl_wifi_ctrl_events_get_and_clear(void); bool jl_wifi_ctrl_status_get(jl_wifi_ctrl_status_t* out); bool jl_wifi_ctrl_enable_network(int id); bool jl_wifi_ctrl_disable_network(int id); bool jl_wifi_ctrl_reconnect(void); bool jl_wifi_ctrl_disconnect(void); /* ADD_NETWORK if LIST_NETWORKS has no id 0 (factory empty network={} * is often ignored by wpa, so SET_NETWORK 0 FAIL). */ bool jl_wifi_ctrl_ensure_network0(void); int jl_wifi_ctrl_add_network(void); bool jl_wifi_ctrl_set_network_ssid_hex(int id, const char* ssid_hex); bool jl_wifi_ctrl_set_network_psk(int id, const char* psk_plaintext); /* scan_ssid=1 makes wpa_supplicant actively probe for this SSID by name * during scans instead of only listening for beacons - required to find * and connect to networks that don't broadcast their SSID. */ bool jl_wifi_ctrl_set_network_scan_ssid(int id, bool enable); bool jl_wifi_ctrl_save_config(void); bool jl_wifi_ctrl_scan(void); int jl_wifi_ctrl_scan_results_get(jl_wifi_ctrl_scan_result_t* out, int max); #ifdef __cplusplus } #endif #endif //JL_WIFI_CTRL_H