457 lines
14 KiB
C
457 lines
14 KiB
C
/**
|
|
@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 <stdint.h>
|
|
#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
|