#ifndef NH_CTRL_API_H #define NH_CTRL_API_H #include "nh_shared_if.h" #define NH_CTRL_API_MAC_LENGTH 17 typedef enum { NH_CTRL_WIFI_MODE_NONE, NH_CTRL_WIFI_MODE_STA, NH_CTRL_WIFI_MODE_AP, NH_CTRL_WIFI_MODE_APSTA, } nh_ctrl_wifi_mode_t; typedef enum { NH_CTRL_API_ENC_MODE_OPEN, NH_CTRL_API_ENC_MODE_WEP, NH_CTRL_API_ENC_MODE_WPA_PSK, NH_CTRL_API_ENC_MODE_WPA2_PSK, NH_CTRL_API_ENC_MODE_WPA_WPA2_PSK, NH_CTRL_API_ENC_MODE_WPA2_ENT, NH_CTRL_API_ENC_MODE_WPA3_PSK, NH_CTRL_API_ENC_MODE_WPA2_WPA3_PSK, } nh_ctrl_ap_enc_mode_t; typedef enum { NH_CTRL_CONNECT_SUCCESS = 0x00U, NH_CTRL_CONNECT_NO_AP_FOUND = 0x02U, NH_CTRL_CONNECT_INVALID_PASSWORD = 0x03U, NH_CTRL_CONNECT_FAILURE = 0xFFU, } nh_ctrl_conn_status_t; typedef struct { char *ssid; char *bssid; int rssi; uint32_t channel; nh_ctrl_ap_enc_mode_t encryption_mode; } nh_ctrl_ap_scan_item_t; typedef struct { char *ssid; char *bssid; char *password; bool wpa3_supported; int32_t listen_interval; } nh_ctrl_ap_conn_params_t; typedef struct { nh_ctrl_conn_status_t status; char *mac_addr; } nh_ctrl_ap_conn_result_t; typedef void (*nh_ctrl_api_ap_scan_list_cb_t)(void *handle, nh_ctrl_ap_scan_item_t *item); typedef void (*nh_ctrl_api_event_cb_init_t)(void *handle); typedef struct { nh_ctrl_api_event_cb_init_t init; } nh_ctrl_api_cb_t; typedef struct { nh_shared_if_t *shared_if; nh_osa_t *osa; nh_ctrl_api_cb_t cb; void *user_data; /* Private states */ nh_osa_semaphore_t p_sem_req; nh_osa_semaphore_t p_sem_resp; uint8_t *p_buf_rx; uint32_t p_buf_rx_len; } nh_ctrl_api_t; nh_ret_t nh_ctrl_api_init(nh_ctrl_api_t *api); void nh_ctrl_api_task(nh_ctrl_api_t *api); nh_ret_t nh_ctrl_api_get_mac_address(nh_ctrl_api_t *api, uint8_t *mac_addr, nh_ctrl_wifi_mode_t mode); nh_ret_t nh_ctrl_api_get_ap_scan_list(nh_ctrl_api_t *api, nh_ctrl_api_ap_scan_list_cb_t cb); nh_ret_t nh_ctrl_api_connect_ap(nh_ctrl_api_t *api, nh_ctrl_ap_conn_params_t *params, nh_ctrl_ap_conn_result_t *result); #endif // NH_CTRL_API_H