250 lines
8.2 KiB
C
Raw Normal View History

2025-10-10 16:07:00 +08:00
#ifndef _WIFI_AT_H_
#define _WIFI_AT_H_
#include "atsvr_core.h"
#include "../../../include/os/os.h"
#include "wifi_types.h"
//AT WIFI related macros are defined in "AT_WLAN_XXX" format
#ifndef AT_WLAN_STATION_UP
#define AT_WLAN_STATION_UP 1
#endif
#ifndef AT_WLAN_STATION_DOWN
#define AT_WLAN_STATION_DOWN 0
#endif
#ifndef AT_WLAN_SOFTAP_UP
#define AT_WLAN_SOFTAP_UP 1
#endif
#ifndef AT_WLAN_SOFTAP_DOWN
#define AT_WLAN_SOFTAP_DOWN 0
#endif
#ifndef AT_WLAN_STA_DHCP_GET
#define AT_WLAN_STA_DHCP_GET 1
#endif
#ifndef AT_WLAN_STA_DHCP_NOT_GET
#define AT_WLAN_STA_DHCP_NOT_GET 0
#endif
#define AT_WLAN_RESERVED 0
#define AT_WLAN_MAX_SSID_LEN 32
#define AT_WLAN_DEFAULT_IP "192.168.19.1"
#define AT_WLAN_DEFAULT_GW "192.168.19.1"
#define AT_WLAN_DEFAULT_MASK "255.255.255.0"
#define AT_WLAN_DEFAULT_DNS "192.168.19.1"
#define AT_WLAN_STA_DEFAULT_IP "192.168.0.19"
#define AT_WLAN_STA_DEFAULT_GW "192.168.0.19"
#define AT_WLAN_STA_DEFAULT_MASK "255.255.255.0"
#define AT_WLAN_STA_DEFAULT_DNS "192.168.0.1"
#ifndef AT_WLAN_EVT_SCAN_DONE
#define AT_WLAN_EVT_SCAN_DONE "EVT:WLAN STA SCAN_DONE\r\n"
#endif
#ifndef AT_WLAN_EVT_CONNECTED
#define AT_WLAN_EVT_CONNECTED "EVT:WLAN STA CONNECTED\r\n"
#endif
#ifndef AT_WLAN_EVT_DISCONNECTED
#define AT_WLAN_EVT_DISCONNECTED "EVT:WLAN STA DISCONNECTED\r\n"
#endif
#ifndef AT_WLAN_EVT_SAP_CONNECTED
#define AT_WLAN_EVT_SAP_CONNECTED "EVT:WLAN SAP CONNECTED\r\n"
#endif
#ifndef AT_WLAN_EVT_SAP_DISCONNECTED
#define AT_WLAN_EVT_SAP_DISCONNECTED "EVT:WLAN SAP DISCONNECTED\r\n"
#endif
#ifndef AT_WLAN_EVT_STA_GOT_IP
#define AT_WLAN_EVT_STA_GOT_IP "EVT:BK STA GOT IP\r\n"
#endif
#ifndef AT_WLAN_EVT_STA_LOSS_DHCP
#define AT_WLAN_EVT_STA_LOSS_DHCP "EVT:BK STA LOSS DHCP\r\n"
#endif
#ifndef AT_WLAN_EVT_GOT_IP
#define AT_WLAN_EVT_GOT_IP "EVT:BK STA GOT IP\r\n"
#endif
#ifndef AT_WLAN_EVT_TCP_DISCONNECTED
#define AT_WLAN_EVT_TCP_DISCONNECTED "EVT:TCP DISCONNECTED,%d\r\n"
#endif
#ifndef AT_WLAN_EVT_TCP_CONNECTED
#define AT_WLAN_EVT_TCP_CONNECTED "CMDRSP:TCP CONNECTED,%d\r\n"
#endif
#define AT_WLAN_SCAN_TIMEOUT_MS (5000)
#define AT_WLAN_STA_TIMEOUT_MS (20000)
#define AT_WLAN_SAP_TIMEOUT_MS (4000)
#define AT_WLAN_MAX_SSID_LEN 32
#define BK_AT_WLAN_ERROR_CASE(x) case x: return(#x+12)
typedef enum{
AT_WLAN_STA_SCAN_DONE,
AT_WLAN_STA_DISCONNECT,
AT_WLAN_STA_CONNECTED,
AT_WLAN_STA_GOT_IP,
AT_WLAN_LOSS_DHCP,
AT_WLAN_SAP_DISCONNECT,
AT_WLAN_SAP_CONNECTED,
AT_WLAN_MAX,
}AT_WLAN_EVT_T;
typedef enum {
AT_WLAN_SCAN_NO_USE = 0,
AT_WLAN_SCAN_DUR = 1,
AT_WLAN_SCAN_TYPE,
AT_WLAN_SCAN_CNT,
AT_WLAN_SCAN_MAX,
}AT_WLAN_SCAN_ATTR_T;
static inline const char *at_wlan_error_code_string(wifi_err_reason_t type)
{
switch(type){
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_RESERVED);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_UNSPECIFIED);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_PREV_AUTH_NOT_VALID);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_DEAUTH_LEAVING);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_DISASSOC_DUE_TO_INACTIVITY) ;
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_DISASSOC_AP_BUSY);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_CLASS2_FRAME_FROM_NONAUTH_STA);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_DISASSOC_STA_HAS_LEFT);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_STA_REQ_ASSOC_WITHOUT_AUTH);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_PWR_CAPABILITY_NOT_VALID);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_SUPPORTED_CHANNEL_NOT_VALID);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_BSS_TRANSITION_DISASSOC);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_INVALID_IE);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MICHAEL_MIC_FAILURE);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_IE_IN_4WAY_DIFFERS);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_GROUP_CIPHER_NOT_VALID);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_PAIRWISE_CIPHER_NOT_VALID);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_AKMP_NOT_VALID);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_UNSUPPORTED_RSN_IE_VERSION);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_INVALID_RSN_IE_CAPAB);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_IEEE_802_1X_AUTH_FAILED);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_CIPHER_SUITE_REJECTED);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_TDLS_TEARDOWN_UNREACHABLE);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_TDLS_TEARDOWN_UNSPECIFIED);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_SSP_REQUESTED_DISASSOC);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_NO_SSP_ROAMING_AGREEMENT);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_BAD_CIPHER_OR_AKM);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_NOT_AUTHORIZED_THIS_LOCATION);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_SERVICE_CHANGE_PRECLUDES_TS);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_UNSPECIFIED_QOS_REASON);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_NOT_ENOUGH_BANDWIDTH);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_DISASSOC_LOW_ACK);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_EXCEEDED_TXOP);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_STA_LEAVING);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_END_TS_BA_DLS);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_UNKNOWN_TS_BA);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_TIMEOUT);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_PEERKEY_MISMATCH);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_AUTHORIZED_ACCESS_LIMIT_REACHED);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_EXTERNAL_SERVICE_REQUIREMENTS);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_INVALID_FT_ACTION_FRAME_COUNT);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_INVALID_PMKID);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_INVALID_MDE);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_INVALID_FTE);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_PEERING_CANCELLED);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_MAX_PEERS);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_CONFIG_POLICY_VIOLATION);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_CLOSE_RCVD);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_MAX_RETRIES);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_CONFIRM_TIMEOUT);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_INVALID_GTK);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_INCONSISTENT_PARAMS);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_INVALID_SECURITY_CAP);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_PATH_ERROR_NO_PROXY_INFO);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_PATH_ERROR_NO_FORWARDING_INFO);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_PATH_ERROR_DEST_UNREACHABLE);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_CHANNEL_SWITCH_REGULATORY_REQ);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MESH_CHANNEL_SWITCH_UNSPECIFIED);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_BEACON_LOST);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_NO_AP_FOUND);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_WRONG_PASSWORD);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_DISCONNECT_BY_APP);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_DHCP_TIMEOUT);
BK_AT_WLAN_ERROR_CASE(WIFI_REASON_MAX);
}
return "Unsupported Reason\r\n";
}
typedef struct{
int scan_time; //use for 120ms scan
unsigned dhcp : 1;
unsigned station_status : 1;
unsigned reserved1 : 1;
unsigned reserved2 : 1;
unsigned scan_start : 1;
unsigned scan_done : 1;
unsigned reserved3 : 1;
unsigned reserved4 : 1;
int disconenct_reason;
bool local_generated;
int hpad_sta_cnt;
unsigned softap_status : 1;
unsigned reserved5 : 1;
unsigned reserved6 : 1;
unsigned reserved7 : 1;
unsigned char static_ip[16];
unsigned char static_maks[16];
unsigned char static_gate[16];
unsigned char static_dns1[16];
unsigned char static_dns2[16];
unsigned char softap_ip[16];
unsigned char softap_mask[16];
unsigned char softap_gate[16];
unsigned char softap_dns[16];
}at_wlan_status_t;
typedef struct
{
bool sta_use_sema;
bool sap_use_sema;
bool scan_use_sema;
beken_semaphore_t at_wlan_scan_print_sema;
beken_semaphore_t at_wlan_scan_sema;
beken_semaphore_t sta_protection;//test
beken_semaphore_t sap_protection;//test
}at_wlan_cfg_t;
extern void wifi_at_cmd_init(void);
extern int at_wlan_event_handler(atsvr_msg_t *msg);
#endif