87 lines
2.9 KiB
C
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
|