Files
banban/ql-kernel/threadx/common/include/quec_api_wifi.h
T

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