Files
wpa_ctrl/jl_wifi_ctrl.h
T
2026-10-30 13:55:31 +04:00

87 lines
2.9 KiB
C

#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