/** @file ql_api_wifi.h @brief This file provides the definitions for wifi, and declares the API functions. */ /*============================================================================ Copyright (c) 2020 Quectel Wireless Solution, Co., Ltd. All Rights Reserved. Quectel Wireless Solution Proprietary and Confidential. =============================================================================*/ /*=========================================================================== EDIT HISTORY FOR MODULE This section contains comments describing changes made to the module. Notice that changes are listed in reverse chronological order. WHEN WHO WHAT, WHERE, WHY ---------- ------------ ---------------------------------------------------- =============================================================================*/ #ifndef QUEC_API_WIFI_H #define QUEC_API_WIFI_H #include #include "pbuf.h" #include "err.h" #include "ip_addr.h" #include "quec_list.h" #include "netif.h" #include "quec_rtos.h" #ifdef __cplusplus extern "C" { #endif /*======================================================================== * Marco Definition *========================================================================*/ #define QUEC_WIFI_SSID_MAX_LEN 32 #define QUEC_WIFI_PASSWORD_MAX_LEN 64 #define QUEC_WIFI_IPV4_MAX_LEN 16 #define QUEC_WIFI_CLIENT_NAME 32 #define LWIP_NETIF_IP_TYPE_MAX (2) #define LWIP_NETIF_DNS_MAX (2) #define QUEC_WIFI_ETH_FRAME_SIZE_MIN_WITH_NO_FCS (60) #ifndef ETHARP_HWADDR_LEN #define ETHARP_HWADDR_LEN 6 #endif /*======================================================================== * Enumeration Definition *========================================================================*/ typedef enum { QUEC_WIFI_SUCCESS = 0, QUEC_WIFI_EXECUTE_ERR = 1, QUEC_WIFI_INVALID_PARAM_ERR, QUEC_WIFI_INVALID_PARAM_LEN_ERR, QUEC_WIFI_NO_MEM_ERR, QUEC_WIFI_MEM_ADDR_NULL_ERR, QUEC_WIFI_INVALID_IP_ERR, QUEC_WIFI_INVALID_GW_ERR, QUEC_WIFI_INVALID_NETMASK_ERR, QUEC_WIFI_INVALID_DNS_ERR, QUEC_WIFI_INVALID_DHCP_ERR, QUEC_WIFI_INVALID_MAC_ERR, QUEC_WIFI_INVALID_CID_ERR, QUEC_WIFI_STATE_ERR, QUEC_WIFI_INVALID_PREFER_ROUTE_ERR, QUEC_WIFI_INVALID_MODE_ERR, QUEC_WIFI_NAT_LAN_CREATED_ERR, QUEC_WIFI_NAT_WAN_EXIST, QUEC_WIFI_REPEAT_CREATED_ERR, } quec_wifi_errcode_e; typedef enum { QUEC_WIFI_ROUTE_PREFER_NONE, QUEC_WIFI_ROUTE_PREFER_WIFI, QUEC_WIFI_ROUTE_PREFER_PDN, QUEC_WIFI_ROUTE_PREFER_MAX, } quec_wifi_route_prefer_e; typedef enum { QUEC_WIFI_MODE_STA, QUEC_WIFI_MODE_AP, QUEC_WIFI_MODE_MAX, } quec_wifi_mode_e; // Wi-Fi options typedef enum { QUEC_WIFI_OPT_IP = 0, // val_len: sizeof(ip4_addr_t),static ip QUEC_WIFI_OPT_GW, // val_len: sizeof(ip4_addr_t),static gateway QUEC_WIFI_OPT_NETMASK, // val_len: sizeof(ip4_addr_t),static netmask QUEC_WIFI_OPT_DNS, // val_len: sizeof(quec_wifi_dns_s),static dns QUEC_WIFI_OPT_DHCP, // val_len: sizeof(uint8_t) QUEC_WIFI_OPT_MAC, // val_len: 6,MAC address. QUEC_WIFI_OPT_STATE, // val_len: sizeof(quec_wifi_state_e),netcard status QUEC_WIFI_OPT_CID, // val_len: sizeof(quec_wifi_cid_s),wifi cid QUEC_WIFI_OPT_ROUTE_PREFER, // val_len: sizeof(quec_wifi_route_prefer_e) QUEC_WIFI_OPT_MODE, // val_len: sizeof(quec_wifi_mode_e),set wifi mode. QUEC_WIFI_OPT_ID, // val_len: sizeof(uint8_t),this ID determines the operate netcard. QUEC_WIFI_OPT_ID_BY_TYPE, // val_len: sizeof(quec_wifi_id_s),get specify ID by type,see quec_wifi_id_s. QUEC_WIFI_OPT_MAX, } quec_wifi_opt_e; typedef enum { QUEC_WIFI_STATE_NONE = 0, // wifinet initialization state QUEC_WIFI_STATE_CONNECTING, // wifinet connecting QUEC_WIFI_STATE_CONNECTED, // wifinet connected QUEC_WIFI_STATE_DISCONNECT, // wifi disconnect QUEC_WIFI_STATE_MAX, } quec_wifi_state_e; typedef enum { QUEC_WIFI_TYPE_MAC, /* ctx is parsed as uint8_t [6]*/ QUEC_WIFI_TYPE_IP, /* ctx is parsed as ip4_addr_t */ } quec_wifi_type_e; typedef enum { QUEC_WIFI_INTERNAL_TYPE_MAC, QUEC_WIFI_INTERNAL_TYPE_IP, QUEC_WIFI_INTERNAL_TYPE_ID, QUEC_WIFI_INTERNAL_TYPE_FIRST, } quec_wifi_internal_type_e; /*======================================================================== * Type Definition *========================================================================*/ typedef void (*quec_wifi_status_notify_cb)(void *ctx); typedef int (*quec_wifi_linkoutput_cb)(void *ctx,quec_wifi_mode_e mode); typedef struct { unsigned int data_len; unsigned char *data; } quec_wifi_msg_info_s; typedef struct { uint8_t sim_id; int cid; uint8_t enable; } quec_wifi_cid_s; typedef struct { ip_addr_t dns_server[LWIP_NETIF_IP_TYPE_MAX][LWIP_NETIF_DNS_MAX]; } quec_wifi_dns_s; typedef struct { quec_wifi_type_e type; /* Input. */ /* See quec_wifi_type_e.The input ctx depends on type.*/ void *ctx; /* Input. */ /* Find operate ID by type. If type == QUEC_WIFI_TYPE_MAC It will match the mac with ctx to find the exist ID; If type == QUEC_WIFI_TYPE_IP It will match the ip with ctx to find the exist ID; if type == QUEC_WIFI_TYPE_NO_USED It should be NULL; */ quec_wifi_mode_e mode; /* Input. */ uint8_t id; /* Output. */ } quec_wifi_id_s; #pragma pack(1) typedef struct { quec_wifi_state_e state; /* This type is compatible with FC41D. */ struct { quec_wifi_mode_e mode; uint8_t id; } interface; /* Identify the unique device. */ } quec_wifi_status_notify_ctx_s; #pragma pack() typedef struct { struct list_head head; uint8_t num; } quec_wifi_netif_list_head_s; typedef struct { struct list_head list; struct netif user; /* Used for saving user's configuration.Independent of the running netif. */ char client_name[QUEC_WIFI_CLIENT_NAME]; struct netif *netif; char dhcp; } quec_wifi_netif_s; typedef struct { /* Netif. */ struct { quec_wifi_cid_s sim_cid; char dhcp; /* Save the dhcp configuration. Once the quec_wifi_netif_s has been destroyed,use this saved dhcp status for the new creation. */ } sta; struct { quec_wifi_cid_s sim_cid; uint8_t max_clients; char dhcp; /* Save the dhcp configuration. Once the quec_wifi_netif_s has been destroyed,use this saved dhcp status for the new creation. */ } ap; quec_wifi_netif_list_head_s netif_list; /* Manager. */ uint8_t id; /* To match the exist netif. */ quec_wifi_mode_e mode; quec_wifi_route_prefer_e prefer; quec_wifi_status_notify_cb notify_cb; quec_wifi_linkoutput_cb output_cb; quec_mutex_t mutex; char mac[6]; } quec_wifi_manager_s; /*======================================================================== * function Definition *========================================================================*/ uint8_t quec_wifi_get_mode(void); quec_wifi_errcode_e quec_wifi_api_init(void); quec_wifi_manager_s *quec_wifi_get_manager(void); quec_wifi_errcode_e quec_wifi_wlan_find_netif_info_by_type(quec_wifi_mode_e mode, quec_wifi_internal_type_e type, void *ctx, quec_wifi_netif_s **netif_info); quec_wifi_errcode_e quec_wifi_wlan_netif_destory_lan(uint8_t *mac); quec_wifi_errcode_e quec_wifi_wlan_netif_destory_lan_by_id(void * argv); quec_wifi_errcode_e quec_wifi_wlan_destory_by_id(void *argv); quec_wifi_errcode_e quec_wifi_wlan_lan_destroy(void *argv); err_t quec_wifi_data_input_to_wan_netif(struct netif *netif, struct pbuf *p, uint8_t *data, uint32_t len); /***************************************************************** * Function: quec_wifi_opt_set * * Description: Set Wi-Fi option.See quec_wifi_opt_e. * * Parameters: * quec_wifi_opt_e [in] Option type.See quec_wifi_opt_e. * val [in] The address of input parameter. * val_len [in] The length of input parameter.See quec_wifi_opt_e. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_opt_set(quec_wifi_opt_e opt, void *val, int val_len); /***************************************************************** * Function: quec_wifi_opt_get * * Description: Get Wi-Fi option.See quec_wifi_opt_e. * * Parameters: * quec_wifi_opt_e [in] Option type.See quec_wifi_opt_e. * val [Out] The address of output parameter. * val_len [in] The length of output parameter. * [out] Some options will return a valid "val_len".See quec_wifi_opt_e. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_opt_get(quec_wifi_opt_e opt, void *val, int *val_len); /***************************************************************** * Function: quec_wifi_status_notify_cb_register * * Description: Register Wi-Fi status notification callback. * * Parameters: * cb [in] Wi-Fi status notification callback. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_status_notify_cb_register(quec_wifi_status_notify_cb cb); /***************************************************************** * Function: quec_wifi_sta_ip_start * * Description: Start Wi-Fi STA dhcp or set Wi-Fi STA static IP information from the parameter of quec_wifi_opt_set. * * Parameters: * argv [in] No defined yet. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_sta_ip_start(void *argv); /***************************************************************** * Function: quec_wifi_sta_ip_down * * Description: Stop Wi-Fi STA dhcp and set Wi-Fi STA down. * * Parameters: * argv [in] No defined yet. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_sta_ip_down(void *argv); /***************************************************************** * Function: quec_wifi_uap_ip_start * * Description: Start Wi-Fi AP. * * Parameters: * argv [in] No defined yet. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_uap_ip_start(void *argv); /***************************************************************** * Function: quec_wifi_uap_ip_down * * Description: Stop Wi-Fi AP. * * Parameters: * argv [in] No defined yet. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_uap_ip_down(void *argv); /***************************************************************** * Function: quec_wifi_wlan_create * * Description: Create Wi-Fi netcard. * * Parameters: * argv [in] Netcard MAC.Handle as char mac[6] * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_wlan_create(void *argv); /***************************************************************** * Function: quec_wifi_wlan_destroy * * Description: Destroy Wi-Fi netcard. * * Parameters: * argv [in] No defined yet. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_wlan_destroy(void *argv); /***************************************************************** * Function: quec_wifi_wlan_destory_lan_by_id * * Description: Destroy Wi-Fi AP netcard. * * Parameters: * argv [in] wifi netif id. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_wlan_destory_lan_by_id(void * argv); /***************************************************************** * Function: quec_wifi_linkoutput_cb_register * * Description: Register the link layer output callback for LWIP. * * Parameters: * quec_wifi_linkoutput_cb [in] Link layer output callback for LWIP. * Callback is called when a raw link packet is ready to be transmitted. * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_linkoutput_cb_register(quec_wifi_linkoutput_cb cb); /***************************************************************** * Function: quec_wifi_data_input * * Description: Input Wi-Fi data streams to LWIP. * * Parameters: * data [in] Input data * len [in] Input data length * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_data_input(uint8_t *data, uint32_t len); /***************************************************************** * Function: quec_wifi_fgm842d_data_input * * Description: Input Wi-Fi data streams to LWIP. * * Parameters: * p [in] Input data * * Return: * 0 success * other error code * *****************************************************************/ quec_wifi_errcode_e quec_wifi_fgm842d_data_input(struct pbuf *p); #ifdef __cplusplus } /*"C" */ #endif #endif