blob: babf0c323f474d25d1970d9a2dbe0f5c2bd74392 [file] [log] [blame]
/*******************************************************
*
* @brief: Add wifi api
* @details: add liblynq-qser-wifi api
* @author: wz.wang
* @date: 2024.3.15
* @version: V1.0
* @copyright:Copyright (c) MobileTek
*
*********************************************/
/*
#ifndef LYNQ_QSER_WIFI
#define LYNQ_QSER_WIFI
#ifdef __cplusplus
extern "C" {
#endif
*/
typedef enum {
LYNQ_ERROR = -1,
LYNQ_ERR_SUCCESS = 0,
LYNQ_ERR_FAIL,
LYNQ_ERR_NO_MEMORY,
LYNQ_ERR_BADPARAM,
LYNQ_ERR_NOT_SUPPORT,
LYNQ_ERR_NOT_READY,
LYNQ_ERR_NO_DEVICE,
LYNQ_ERR_NO_MAC,
LYNQ_ERR_IPC,
LYNQ_ERR_SOC,
LYNQ_ERR_CONDITION,
LYNQ_ERR_BUSY,
LYNQ_ERR_FIRMWARE_CRASH
} lynq_wifi_err_code;
typedef enum {
LYNQ_WIFI_AP_INDEX_AP0 = 0, /* Index 0 of AP/AP-STA/AP-AP Mode */
LYNQ_WIFI_AP_INDEX_AP1 /* Index 1 of AP/AP-STA/AP-AP Mode */
} lynq_wifi_ap_index_e;
typedef enum
{
LYNQ_WIFI_MODE_MIN = -1,
LYNQ_WIFI_MODE_80211B = 0,
LYNQ_WIFI_MODE_80211BG,
LYNQ_WIFI_MODE_80211BGN,
LYNQ_WIFI_MODE_80211A,
LYNQ_WIFI_MODE_80211AN,
LYNQ_WIFI_MODE_80211AC,
LYNQ_WIFI_MODE_80211BGNAX_2G,
LYNQ_WIFI_AP_MODE_MAX
} lynq_wifi_mode_type_e;
typedef enum LYNQ_WIFI_BANDWIDTH_ENUM
{
LYNQ_WIFI_BANDWIDTH_MIN = -1,
LYNQ_WIFI_BANDWIDTH_HT20 = 0,
LYNQ_WIFI_BANDWIDTH_HT40,
LYNQ_WIFI_BANDWIDTH_HT80,
LYNQ_WIFI_BANDWIDTH_MAX
} lynq_wifi_bandwidth_type_e;
typedef enum
{
LYNQ_WIFI_AUTH_MIN = -1,
LYNQ_WIFI_AUTH_OPEN = 0,
LYNQ_WIFI_AUTH_WPA_PSK,
LYNQ_WIFI_AUTH_WPA2_PSK, //AES
LYNQ_WIFI_AUTH_WPA_WPA2_PSK_BOTH, //TKIP & AES
LYNQ_WIFI_AUTH_WPA3_PSK, //AES
LYNQ_WIFI_AUTH_WPA2_WPA3_PSK_BOTH, //AES
LYNQ_WIFI_AUTH_MAX
} lynq_wifi_auth_e;
typedef enum
{
LYNQ_WIFI_WORK_MODE_AP0 ,
LYNQ_WIFI_WORK_MODE_AP1
} lynq_wifi_work_mode_e;
typedef enum {
LYNQ_WIFI_EVENT_ENABLE_STATUS = 0, //打开 AP 的回调和 STA 模式连接状态的回调
LYNQ_WIFI_EVENT_DISABLE_STATUS, //关闭 AP 的回调和 STA 模式连接状态的回调
LYNQ_WIFI_EVENT_AP_STATION, //输入未使用
LYNQ_WIFI_EVENT_AP_STA_STATUS, //输入未使用
LYNQ_WIFI_EVENT_STA_STATUS, //输入未使用
} lynq_wifi_event_type_e;
typedef enum {
LYNQ_WIFI_AP_STATUS_NONE = 0, //初始状态
LYNQ_WIFI_AP_STATUS_IDLE, //打印两次,表示 AP 已关闭
LYNQ_WIFI_AP_STATUS_ENABLING, //AP 正在开启中
LYNQ_WIFI_AP_STATUS_ENABLED, //AP 已开启
LYNQ_WIFI_AP_STATUS_DISABLING, //已移除
LYNQ_WIFI_AP_STATUS_ERROR //操作异常
} lynq_wifi_status_e;
typedef enum
{
LYNQ_WIFI_AUTH_WPA_PAIRWISE_MIN = -1,
LYNQ_WIFI_AUTH_WPA_PAIRWISE_AUTO = 0, //TKIP & AES
LYNQ_WIFI_AUTH_WPA_PAIRWISE_TKIP, //TKIP
LYNQ_WIFI_AUTH_WPA_PAIRWISE_AES, //AES
LYNQ_WIFI_AUTH_WPA_PAIRWISE_MAX
} lynq_wifi_auth_wpa_psk_e;
typedef enum
{
LYNQ_WIFI_STA_STATUS_NONE, //初始状态
LYNQ_WIFI_STA_STATUS_IDLE, //STA 已关闭
LYNQ_WIFI_STA_STATUS_CONNECTING, //STA 正在连接热点中
LYNQ_WIFI_STA_STATUS_ASSOCIATED, //STA 已连上热点,正在分配 IP 中
LYNQ_WIFI_STA_STATUS_CONNECTED, //STA 已连上热点,完成 IP 分配
LYNQ_WIFI_STA_STATUS_DISCONNECTED, //STA 已从热点断开
LYNQ_WIFI_STA_STATUS_ERROR //连接报错
} lynq_wifi_sta_status_e;
typedef enum
{
LYNQ_WIFI_REASON_CODE_NONE, //无特殊原因
LYNQ_WIFI_REASON_CODE_WRONG_KEY, //热点的密码错误
LYNQ_WIFI_REASON_CODE_AUTH_FAILED, //与热点认证失败
LYNQ_WIFI_REASON_CODE_CONN_FAILED, //与热点连接失败
LYNQ_WIFI_REASON_CODE_SET_FAILED, //热点的认证等设置错误
LYNQ_WIFI_REASON_CODE_DHCP_FAILED //与热点的 DHCP 失败
} lynq_wifi_reason_code_e;
typedef enum
{
LYNQ_WIFI_MAC_ACL_RULE_NONE,
LYNQ_WIFI_MAC_ACL_RULE_WHITE_LIST,
LYNQ_WIFI_MAC_ACL_RULE_BLACK_LIST
} lynq_wifi_mac_acl_rule_e;
typedef struct
{
char addr[16]; //连接的 sta 设备 IPv4 的地址
char macaddr[18]; //连接的 sta 设备 MAC 的地址
char name[20]; //连接的 sta 设备名称
char ifname[18]; //对应 AP 核的 wlan 设备
int uptime; //sta 设备连接的时间,单位:秒
} lynq_lanhost_t;
typedef struct
{
int array_len; //打印连接设备的个数
lynq_lanhost_t array[32]; //具体的 sta 信息,参考 lynq_lanhost_t 结构体
} lynq_lanhost_ts;
typedef struct
{
lynq_wifi_auth_e auth; //安全模式。
lynq_wifi_auth_wpa_psk_e pairwise; //加密方式。
char passwd[64+1]; //密码
int group_rekey; //组密钥重新协商间隔。
}lynq_wifi_ap_auth_t;
typedef struct
{
char bssid[18];//接入点的 mac
char essid[33]; //接入点的 SSID
int signal; //信号强度(dbm)
unsigned char signal_level; //接入点的信号格(0-4)
int frequency; //工作频点(Hz)
unsigned char channel; //接入点的信道
lynq_wifi_auth_e auth; //接入点的认证信息,参考 lynq_wifi_auth_e 结构体说明
lynq_wifi_auth_wpa_psk_e cipher; //接入点的加密类型,参考lynq_wifi_auth_wpa_psk_e结构体说明
}lynq_wifi_sta_scan_info_t;
typedef struct
{
char ssid[33];
lynq_wifi_auth_e auth; //安全模式,参考表后说明
lynq_wifi_auth_wpa_psk_e pairwise; //加密方式
char passwd[64 + 1]; //密码
} lynq_wifi_sta_param_t;
typedef struct
{
char addr[16]; //IPv4 地址
char netmask[16]; //子网掩码
unsigned char subnet_bits; //子网掩码的位数,比如 255.255.255.0 是 24
char gateway[16]; //网关
char dnsp[16]; //主要的 DNS
char dnss[16]; //次要的 DNS
} lynq_wifi_net_addr_t;
typedef struct
{
char addr[48]; //IPv6 地址
char prefix[48]; //IPv6 子网掩码
unsigned char prefix_bits; //IPv6 子网掩码的位数
char gateway[48]; //IPv6 网关
char dnsp[48]; //IPv6 主要的 DNS
char dnss[48]; //IPv6 次要的 DNS
} lynq_wifi_net_addr6_t;
typedef struct
{
//lynq_wifi_station_status_e sta_status; //用于兼容回调 STA 模式的状态获取,API 获取时不被赋值
lynq_wifi_sta_status_e status; //sta 的几种状态,参考表后
char ifname[32]; //作为 sta 设备时名字
char ap_bssid[18]; //连接的热点 MAC 地址
//int rssi;
unsigned char signal_level; //信号格,目前暂未支持
unsigned char has_addr; //判断是否是 IPv4 地址
lynq_wifi_net_addr_t addr[48]; // 需 先 判 断has_addr 是否为 1,具体参考 lynq_wifi_net_addr_t 结构体说明。
unsigned char has_addr6; //判断是否是 IPv6 地址
lynq_wifi_net_addr6_t addr6; // 需 先 判 断has_addr6 是否为 1,具体参考 lynq_wifi_net_addr6_t结构体说明
lynq_wifi_reason_code_e reason_code; //错误原因,参考表后
} lynq_wifi_sta_status_t;
typedef struct {
unsigned long long rx_packets; //对应 ifconfig wlan0-vxd 的 RX packets
unsigned long long rx_bytes; //对应 ifconfig wlan0-vxd 的 RX bytes
unsigned long long rx_errors; //对应 ifconfig wlan0-vxd 的 RX errors
unsigned long long rx_dropped; //对应 ifconfig wlan0-vxd 的 RX dropped
unsigned long long tx_packets; //对应 ifconfig wlan0-vxd 的 TX packets
unsigned long long tx_bytes; //对应 ifconfig wlan0-vxd 的 TX bytes
unsigned long long tx_errors; //对应 ifconfig wlan0-vxd 的 TX errors
unsigned long long tx_dropped; //对应 ifconfig wlan0-vxd 的 TX dropped
} lynq_wifi_pkt_stats_t;
typedef struct {
int cnt; //搜索到的热点总数
lynq_wifi_sta_scan_info_t info[50]; //存储的热点信息
} lynq_wifi_sta_scan_list_t;
typedef struct {
lynq_wifi_event_type_e id;//事件说明。参考表后结构体说明
lynq_wifi_status_e status; //需要id为LYNQ_WIFI_EVENT_AP_STATION时,参考表后结构体说明
//lynq_wifi_station_status_e sta_status; //需要id为LYNQ_WIFI_EVENT_STA_STATUS时,STA模式下连接和断开的热点的值
lynq_wifi_sta_status_t sta_status_all;//需要id为LYNQ_WIFI_EVENT_STA_STATUS时获取具体的值
} lynq_wifi_event_s;
typedef struct
{
lynq_wifi_status_e status; //AP状态,详细参考表后
char ifname[32]; //网口名
char bssid[18]; //AP的bssid
}lynq_wifi_ap_status_t;
typedef void (*lynq_wifi_event_handle)(lynq_wifi_event_s *event, void *arg);
typedef void (*lynq_wifi_event_handle_sta)(lynq_wifi_sta_scan_list_t *event);
int qser_wifi_enable(void);
int qser_wifi_disable(void);
int qser_wifi_work_mode_set(lynq_wifi_work_mode_e type);
int qser_wifi_work_mode_get(lynq_wifi_work_mode_e *type);
int qser_wifi_ap_ssid_set(lynq_wifi_ap_index_e idx, const char *ssid);
int qser_wifi_ap_ssid_get(lynq_wifi_ap_index_e idx, char *ssid);
int qser_wifi_ap_ssid_hide_set(lynq_wifi_ap_index_e idx,bool hide);
int qser_wifi_ap_ssid_hide_get(lynq_wifi_ap_index_e idx,bool* hide);
int qser_wifi_ap_mode_set(lynq_wifi_ap_index_e idx, lynq_wifi_mode_type_e mode);
int qser_wifi_ap_mode_get(lynq_wifi_ap_index_e idx, lynq_wifi_mode_type_e* mode);
int qser_wifi_ap_bandwidth_set(lynq_wifi_ap_index_e idx, lynq_wifi_bandwidth_type_e bandwidth);
int qser_wifi_ap_bandwidth_get(lynq_wifi_ap_index_e idx, lynq_wifi_bandwidth_type_e *bandwidth);
int qser_wifi_ap_channel_set(lynq_wifi_ap_index_e idx,const char* country_code, int channel);
int qser_wifi_ap_channel_get(lynq_wifi_ap_index_e idx,char* country_code, int* channel);
int qser_wifi_ap_auth_set(lynq_wifi_ap_index_e idx, lynq_wifi_auth_e auth_mode, const char * auth_passwd);
int qser_wifi_ap_auth_get(lynq_wifi_ap_index_e idx, lynq_wifi_auth_e *auth_mode, char * auth_passwd);
int qser_wifi_ap_auth_get_s(lynq_wifi_ap_index_e idx, lynq_wifi_ap_auth_t* auth_mode);
int qser_wifi_ap_max_sta_set(lynq_wifi_ap_index_e idx, int max_sta_num);
int qser_wifi_ap_max_sta_get(lynq_wifi_ap_index_e idx, int* max_sta_num);
int qser_wifi_ap_start(lynq_wifi_ap_index_e idx);
int qser_wifi_ap_stop(lynq_wifi_ap_index_e idx);
int qser_wifi_ap_restart(lynq_wifi_ap_index_e idx);
int qser_wifi_sta_param_set(lynq_wifi_sta_param_t *param_stat);
int qser_wifi_sta_param_get(lynq_wifi_sta_param_t *param_stat);
int qser_wifi_sta_start(void);
int qser_wifi_sta_stop(void);
int qser_wifi_sta_get_status(lynq_wifi_sta_status_t *status_stat);
int qser_wifi_register_handle(lynq_wifi_event_handle event_handle, lynq_wifi_event_handle_sta event_handle_sta, void *arg);
int qser_wifi_sta_start_scan(void);