blob: babf0c323f474d25d1970d9a2dbe0f5c2bd74392 [file] [log] [blame]
b.liud440f9f2025-04-18 10:44:31 +08001/*******************************************************
2*
3* @brief: Add wifi api
4* @details: add liblynq-qser-wifi api
5* @author: wz.wang
6* @date: 2024.3.15
7* @version: V1.0
8* @copyright:Copyright (c) MobileTek
9*
10*********************************************/
11/*
12#ifndef LYNQ_QSER_WIFI
13#define LYNQ_QSER_WIFI
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18*/
19
20typedef enum {
21 LYNQ_ERROR = -1,
22 LYNQ_ERR_SUCCESS = 0,
23 LYNQ_ERR_FAIL,
24 LYNQ_ERR_NO_MEMORY,
25 LYNQ_ERR_BADPARAM,
26 LYNQ_ERR_NOT_SUPPORT,
27 LYNQ_ERR_NOT_READY,
28 LYNQ_ERR_NO_DEVICE,
29 LYNQ_ERR_NO_MAC,
30 LYNQ_ERR_IPC,
31 LYNQ_ERR_SOC,
32 LYNQ_ERR_CONDITION,
33 LYNQ_ERR_BUSY,
34 LYNQ_ERR_FIRMWARE_CRASH
35} lynq_wifi_err_code;
36
37
38typedef enum {
39 LYNQ_WIFI_AP_INDEX_AP0 = 0, /* Index 0 of AP/AP-STA/AP-AP Mode */
40 LYNQ_WIFI_AP_INDEX_AP1 /* Index 1 of AP/AP-STA/AP-AP Mode */
41} lynq_wifi_ap_index_e;
42
43typedef enum
44{
45 LYNQ_WIFI_MODE_MIN = -1,
46 LYNQ_WIFI_MODE_80211B = 0,
47 LYNQ_WIFI_MODE_80211BG,
48 LYNQ_WIFI_MODE_80211BGN,
49 LYNQ_WIFI_MODE_80211A,
50 LYNQ_WIFI_MODE_80211AN,
51 LYNQ_WIFI_MODE_80211AC,
52 LYNQ_WIFI_MODE_80211BGNAX_2G,
53 LYNQ_WIFI_AP_MODE_MAX
54} lynq_wifi_mode_type_e;
55
56typedef enum LYNQ_WIFI_BANDWIDTH_ENUM
57{
58 LYNQ_WIFI_BANDWIDTH_MIN = -1,
59 LYNQ_WIFI_BANDWIDTH_HT20 = 0,
60 LYNQ_WIFI_BANDWIDTH_HT40,
61 LYNQ_WIFI_BANDWIDTH_HT80,
62 LYNQ_WIFI_BANDWIDTH_MAX
63} lynq_wifi_bandwidth_type_e;
64
65typedef enum
66{
67 LYNQ_WIFI_AUTH_MIN = -1,
68 LYNQ_WIFI_AUTH_OPEN = 0,
69 LYNQ_WIFI_AUTH_WPA_PSK,
70 LYNQ_WIFI_AUTH_WPA2_PSK, //AES
71 LYNQ_WIFI_AUTH_WPA_WPA2_PSK_BOTH, //TKIP & AES
72 LYNQ_WIFI_AUTH_WPA3_PSK, //AES
73 LYNQ_WIFI_AUTH_WPA2_WPA3_PSK_BOTH, //AES
74 LYNQ_WIFI_AUTH_MAX
75} lynq_wifi_auth_e;
76
77typedef enum
78{
79 LYNQ_WIFI_WORK_MODE_AP0 ,
80 LYNQ_WIFI_WORK_MODE_AP1
81
82} lynq_wifi_work_mode_e;
83
84typedef enum {
85LYNQ_WIFI_EVENT_ENABLE_STATUS = 0, //打开 AP 的回调和 STA 模式连接状态的回调
86LYNQ_WIFI_EVENT_DISABLE_STATUS, //关闭 AP 的回调和 STA 模式连接状态的回调
87LYNQ_WIFI_EVENT_AP_STATION, //输入未使用
88LYNQ_WIFI_EVENT_AP_STA_STATUS, //输入未使用
89LYNQ_WIFI_EVENT_STA_STATUS, //输入未使用
90} lynq_wifi_event_type_e;
91
92typedef enum {
93LYNQ_WIFI_AP_STATUS_NONE = 0, //初始状态
94LYNQ_WIFI_AP_STATUS_IDLE, //打印两次,表示 AP 已关闭
95LYNQ_WIFI_AP_STATUS_ENABLING, //AP 正在开启中
96LYNQ_WIFI_AP_STATUS_ENABLED, //AP 已开启
97LYNQ_WIFI_AP_STATUS_DISABLING, //已移除
98LYNQ_WIFI_AP_STATUS_ERROR //操作异常
99} lynq_wifi_status_e;
100
101typedef enum
102{
103LYNQ_WIFI_AUTH_WPA_PAIRWISE_MIN = -1,
104LYNQ_WIFI_AUTH_WPA_PAIRWISE_AUTO = 0, //TKIP & AES
105LYNQ_WIFI_AUTH_WPA_PAIRWISE_TKIP, //TKIP
106LYNQ_WIFI_AUTH_WPA_PAIRWISE_AES, //AES
107LYNQ_WIFI_AUTH_WPA_PAIRWISE_MAX
108} lynq_wifi_auth_wpa_psk_e;
109
110typedef enum
111{
112LYNQ_WIFI_STA_STATUS_NONE, //初始状态
113LYNQ_WIFI_STA_STATUS_IDLE, //STA 已关闭
114LYNQ_WIFI_STA_STATUS_CONNECTING, //STA 正在连接热点中
115LYNQ_WIFI_STA_STATUS_ASSOCIATED, //STA 已连上热点,正在分配 IP 中
116LYNQ_WIFI_STA_STATUS_CONNECTED, //STA 已连上热点,完成 IP 分配
117LYNQ_WIFI_STA_STATUS_DISCONNECTED, //STA 已从热点断开
118LYNQ_WIFI_STA_STATUS_ERROR //连接报错
119} lynq_wifi_sta_status_e;
120
121typedef enum
122{
123LYNQ_WIFI_REASON_CODE_NONE, //无特殊原因
124LYNQ_WIFI_REASON_CODE_WRONG_KEY, //热点的密码错误
125LYNQ_WIFI_REASON_CODE_AUTH_FAILED, //与热点认证失败
126LYNQ_WIFI_REASON_CODE_CONN_FAILED, //与热点连接失败
127LYNQ_WIFI_REASON_CODE_SET_FAILED, //热点的认证等设置错误
128LYNQ_WIFI_REASON_CODE_DHCP_FAILED //与热点的 DHCP 失败
129} lynq_wifi_reason_code_e;
130
131typedef enum
132{
133LYNQ_WIFI_MAC_ACL_RULE_NONE,
134LYNQ_WIFI_MAC_ACL_RULE_WHITE_LIST,
135LYNQ_WIFI_MAC_ACL_RULE_BLACK_LIST
136} lynq_wifi_mac_acl_rule_e;
137
138typedef struct
139{
140char addr[16]; //连接的 sta 设备 IPv4 的地址
141char macaddr[18]; //连接的 sta 设备 MAC 的地址
142char name[20]; //连接的 sta 设备名称
143char ifname[18]; //对应 AP 核的 wlan 设备
144int uptime; //sta 设备连接的时间,单位:秒
145} lynq_lanhost_t;
146
147
148typedef struct
149{
150 int array_len; //打印连接设备的个数
151 lynq_lanhost_t array[32]; //具体的 sta 信息,参考 lynq_lanhost_t 结构体
152} lynq_lanhost_ts;
153
154typedef struct
155{
156lynq_wifi_auth_e auth; //安全模式。
157lynq_wifi_auth_wpa_psk_e pairwise; //加密方式。
158char passwd[64+1]; //密码
159int group_rekey; //组密钥重新协商间隔。
160}lynq_wifi_ap_auth_t;
161
162
163
164
165
166typedef struct
167{
168char bssid[18];//接入点的 mac
169char essid[33]; //接入点的 SSID
170int signal; //信号强度(dbm)
171unsigned char signal_level; //接入点的信号格(0-4)
172int frequency; //工作频点(Hz)
173unsigned char channel; //接入点的信道
174lynq_wifi_auth_e auth; //接入点的认证信息,参考 lynq_wifi_auth_e 结构体说明
175lynq_wifi_auth_wpa_psk_e cipher; //接入点的加密类型,参考lynq_wifi_auth_wpa_psk_e结构体说明
176}lynq_wifi_sta_scan_info_t;
177
178
179typedef struct
180{
181char ssid[33];
182lynq_wifi_auth_e auth; //安全模式,参考表后说明
183lynq_wifi_auth_wpa_psk_e pairwise; //加密方式
184char passwd[64 + 1]; //密码
185} lynq_wifi_sta_param_t;
186
187typedef struct
188{
189char addr[16]; //IPv4 地址
190char netmask[16]; //子网掩码
191unsigned char subnet_bits; //子网掩码的位数,比如 255.255.255.0 是 24
192char gateway[16]; //网关
193char dnsp[16]; //主要的 DNS
194char dnss[16]; //次要的 DNS
195} lynq_wifi_net_addr_t;
196
197typedef struct
198{
199char addr[48]; //IPv6 地址
200char prefix[48]; //IPv6 子网掩码
201unsigned char prefix_bits; //IPv6 子网掩码的位数
202char gateway[48]; //IPv6 网关
203char dnsp[48]; //IPv6 主要的 DNS
204char dnss[48]; //IPv6 次要的 DNS
205} lynq_wifi_net_addr6_t;
206
207
208typedef struct
209{
210//lynq_wifi_station_status_e sta_status; //用于兼容回调 STA 模式的状态获取,API 获取时不被赋值
211lynq_wifi_sta_status_e status; //sta 的几种状态,参考表后
212char ifname[32]; //作为 sta 设备时名字
213char ap_bssid[18]; //连接的热点 MAC 地址
214//int rssi;
215unsigned char signal_level; //信号格,目前暂未支持
216unsigned char has_addr; //判断是否是 IPv4 地址
217lynq_wifi_net_addr_t addr[48]; // 需 先 判 断has_addr 是否为 1,具体参考 lynq_wifi_net_addr_t 结构体说明。
218unsigned char has_addr6; //判断是否是 IPv6 地址
219lynq_wifi_net_addr6_t addr6; // 需 先 判 断has_addr6 是否为 1,具体参考 lynq_wifi_net_addr6_t结构体说明
220lynq_wifi_reason_code_e reason_code; //错误原因,参考表后
221} lynq_wifi_sta_status_t;
222
223
224typedef struct {
225unsigned long long rx_packets; //对应 ifconfig wlan0-vxd 的 RX packets
226unsigned long long rx_bytes; //对应 ifconfig wlan0-vxd 的 RX bytes
227unsigned long long rx_errors; //对应 ifconfig wlan0-vxd 的 RX errors
228unsigned long long rx_dropped; //对应 ifconfig wlan0-vxd 的 RX dropped
229unsigned long long tx_packets; //对应 ifconfig wlan0-vxd 的 TX packets
230unsigned long long tx_bytes; //对应 ifconfig wlan0-vxd 的 TX bytes
231unsigned long long tx_errors; //对应 ifconfig wlan0-vxd 的 TX errors
232unsigned long long tx_dropped; //对应 ifconfig wlan0-vxd 的 TX dropped
233} lynq_wifi_pkt_stats_t;
234
235
236typedef struct {
237 int cnt; //搜索到的热点总数
238 lynq_wifi_sta_scan_info_t info[50]; //存储的热点信息
239} lynq_wifi_sta_scan_list_t;
240
241
242typedef struct {
243 lynq_wifi_event_type_e id;//事件说明。参考表后结构体说明
244 lynq_wifi_status_e status; //需要id为LYNQ_WIFI_EVENT_AP_STATION时,参考表后结构体说明
245 //lynq_wifi_station_status_e sta_status; //需要id为LYNQ_WIFI_EVENT_STA_STATUS时,STA模式下连接和断开的热点的值
246 lynq_wifi_sta_status_t sta_status_all;//需要id为LYNQ_WIFI_EVENT_STA_STATUS时获取具体的值
247} lynq_wifi_event_s;
248
249typedef struct
250{
251 lynq_wifi_status_e status; //AP状态,详细参考表后
252 char ifname[32]; //网口名
253 char bssid[18]; //AP的bssid
254}lynq_wifi_ap_status_t;
255
256
257
258
259typedef void (*lynq_wifi_event_handle)(lynq_wifi_event_s *event, void *arg);
260typedef void (*lynq_wifi_event_handle_sta)(lynq_wifi_sta_scan_list_t *event);
261
262
263
264int qser_wifi_enable(void);
265int qser_wifi_disable(void);
266int qser_wifi_work_mode_set(lynq_wifi_work_mode_e type);
267int qser_wifi_work_mode_get(lynq_wifi_work_mode_e *type);
268int qser_wifi_ap_ssid_set(lynq_wifi_ap_index_e idx, const char *ssid);
269int qser_wifi_ap_ssid_get(lynq_wifi_ap_index_e idx, char *ssid);
270int qser_wifi_ap_ssid_hide_set(lynq_wifi_ap_index_e idx,bool hide);
271int qser_wifi_ap_ssid_hide_get(lynq_wifi_ap_index_e idx,bool* hide);
272int qser_wifi_ap_mode_set(lynq_wifi_ap_index_e idx, lynq_wifi_mode_type_e mode);
273int qser_wifi_ap_mode_get(lynq_wifi_ap_index_e idx, lynq_wifi_mode_type_e* mode);
274int qser_wifi_ap_bandwidth_set(lynq_wifi_ap_index_e idx, lynq_wifi_bandwidth_type_e bandwidth);
275int qser_wifi_ap_bandwidth_get(lynq_wifi_ap_index_e idx, lynq_wifi_bandwidth_type_e *bandwidth);
276int qser_wifi_ap_channel_set(lynq_wifi_ap_index_e idx,const char* country_code, int channel);
277int qser_wifi_ap_channel_get(lynq_wifi_ap_index_e idx,char* country_code, int* channel);
278int qser_wifi_ap_auth_set(lynq_wifi_ap_index_e idx, lynq_wifi_auth_e auth_mode, const char * auth_passwd);
279int qser_wifi_ap_auth_get(lynq_wifi_ap_index_e idx, lynq_wifi_auth_e *auth_mode, char * auth_passwd);
280int qser_wifi_ap_auth_get_s(lynq_wifi_ap_index_e idx, lynq_wifi_ap_auth_t* auth_mode);
281int qser_wifi_ap_max_sta_set(lynq_wifi_ap_index_e idx, int max_sta_num);
282int qser_wifi_ap_max_sta_get(lynq_wifi_ap_index_e idx, int* max_sta_num);
283int qser_wifi_ap_start(lynq_wifi_ap_index_e idx);
284int qser_wifi_ap_stop(lynq_wifi_ap_index_e idx);
285int qser_wifi_ap_restart(lynq_wifi_ap_index_e idx);
286
287
288int qser_wifi_sta_param_set(lynq_wifi_sta_param_t *param_stat);
289int qser_wifi_sta_param_get(lynq_wifi_sta_param_t *param_stat);
290int qser_wifi_sta_start(void);
291int qser_wifi_sta_stop(void);
292int qser_wifi_sta_get_status(lynq_wifi_sta_status_t *status_stat);
293int qser_wifi_register_handle(lynq_wifi_event_handle event_handle, lynq_wifi_event_handle_sta event_handle_sta, void *arg);
294int qser_wifi_sta_start_scan(void);
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312