605 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			605 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | |
|  * Copyright (c) 2006-2023, RT-Thread Development Team
 | |
|  *
 | |
|  * SPDX-License-Identifier: Apache-2.0
 | |
|  *
 | |
|  * Change Logs:
 | |
|  * Date           Author       Notes
 | |
|  * 2018-08-03     tyx          the first version
 | |
|  */
 | |
| 
 | |
| #ifndef __WLAN_DEVICE_H__
 | |
| #define __WLAN_DEVICE_H__
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     RT_WLAN_NONE,
 | |
|     RT_WLAN_STATION,
 | |
|     RT_WLAN_AP,
 | |
|     RT_WLAN_MODE_MAX
 | |
| } rt_wlan_mode_t;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     RT_WLAN_CMD_MODE = 0x10,
 | |
|     RT_WLAN_CMD_SCAN,              /* trigger scanning (list cells) */
 | |
|     RT_WLAN_CMD_JOIN,
 | |
|     RT_WLAN_CMD_SOFTAP,            /* start soft-AP */
 | |
|     RT_WLAN_CMD_DISCONNECT,
 | |
|     RT_WLAN_CMD_AP_STOP,           /* stop soft-AP */
 | |
|     RT_WLAN_CMD_AP_DEAUTH,
 | |
|     RT_WLAN_CMD_SCAN_STOP,
 | |
|     RT_WLAN_CMD_GET_RSSI,          /* get sensitivity (dBm) */
 | |
|     RT_WLAN_CMD_SET_POWERSAVE,
 | |
|     RT_WLAN_CMD_GET_POWERSAVE,
 | |
|     RT_WLAN_CMD_CFG_PROMISC,       /* start/stop minitor */
 | |
|     RT_WLAN_CMD_CFG_FILTER,        /* start/stop frame filter */
 | |
|     RT_WLAN_CMD_CFG_MGNT_FILTER,   /* start/stop management frame filter */
 | |
|     RT_WLAN_CMD_SET_CHANNEL,
 | |
|     RT_WLAN_CMD_GET_CHANNEL,
 | |
|     RT_WLAN_CMD_SET_COUNTRY,
 | |
|     RT_WLAN_CMD_GET_COUNTRY,
 | |
|     RT_WLAN_CMD_SET_MAC,
 | |
|     RT_WLAN_CMD_GET_MAC,
 | |
|     RT_WLAN_CMD_GET_FAST_CONNECT_INFO,
 | |
|     RT_WLAN_CMD_FAST_CONNECT,
 | |
| } rt_wlan_cmd_t;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     RT_WLAN_DEV_EVT_INIT_DONE = 0,
 | |
|     RT_WLAN_DEV_EVT_CONNECT,
 | |
|     RT_WLAN_DEV_EVT_CONNECT_FAIL,
 | |
|     RT_WLAN_DEV_EVT_DISCONNECT,
 | |
|     RT_WLAN_DEV_EVT_AP_START,
 | |
|     RT_WLAN_DEV_EVT_AP_STOP,
 | |
|     RT_WLAN_DEV_EVT_AP_ASSOCIATED,
 | |
|     RT_WLAN_DEV_EVT_AP_DISASSOCIATED,
 | |
|     RT_WLAN_DEV_EVT_AP_ASSOCIATE_FAILED,
 | |
|     RT_WLAN_DEV_EVT_SCAN_REPORT,
 | |
|     RT_WLAN_DEV_EVT_SCAN_DONE,
 | |
|     RT_WLAN_DEV_EVT_MAX,
 | |
| } rt_wlan_dev_event_t;
 | |
| 
 | |
| #define SHARED_ENABLED  0x00008000
 | |
| #define WPA_SECURITY    0x00200000
 | |
| #define WPA2_SECURITY   0x00400000
 | |
| #define WPS_ENABLED     0x10000000
 | |
| #define WEP_ENABLED     0x0001
 | |
| #define TKIP_ENABLED    0x0002
 | |
| #define AES_ENABLED     0x0004
 | |
| #define WSEC_SWFLAG     0x0008
 | |
| 
 | |
| #define RT_WLAN_FLAG_STA_ONLY    (0x1 << 0)
 | |
| #define RT_WLAN_FLAG_AP_ONLY     (0x1 << 1)
 | |
| 
 | |
| #ifndef RT_WLAN_SSID_MAX_LENGTH
 | |
| #define RT_WLAN_SSID_MAX_LENGTH  (32)   /* SSID MAX LEN */
 | |
| #endif
 | |
| 
 | |
| #ifndef RT_WLAN_BSSID_MAX_LENGTH
 | |
| #define RT_WLAN_BSSID_MAX_LENGTH (6)    /* BSSID MAX LEN (default is 6) */
 | |
| #endif
 | |
| 
 | |
| #ifndef RT_WLAN_PASSWORD_MAX_LENGTH
 | |
| #define RT_WLAN_PASSWORD_MAX_LENGTH   (32)   /* PASSWORD MAX LEN*/
 | |
| #endif
 | |
| 
 | |
| #ifndef RT_WLAN_DEV_EVENT_NUM
 | |
| #define RT_WLAN_DEV_EVENT_NUM  (2)   /* EVENT GROUP MAX NUM */
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * Enumeration of Wi-Fi security modes
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|     SECURITY_OPEN           = 0,                                                /* Open security                           */
 | |
|     SECURITY_WEP_PSK        = WEP_ENABLED,                                      /* WEP Security with open authentication   */
 | |
|     SECURITY_WEP_SHARED     = (WEP_ENABLED | SHARED_ENABLED),                   /* WEP Security with shared authentication */
 | |
|     SECURITY_WPA_TKIP_PSK   = (WPA_SECURITY  | TKIP_ENABLED),                   /* WPA Security with TKIP                  */
 | |
|     SECURITY_WPA_AES_PSK    = (WPA_SECURITY  | AES_ENABLED),                    /* WPA Security with AES                   */
 | |
|     SECURITY_WPA2_AES_PSK   = (WPA2_SECURITY | AES_ENABLED),                    /* WPA2 Security with AES                  */
 | |
|     SECURITY_WPA2_TKIP_PSK  = (WPA2_SECURITY | TKIP_ENABLED),                   /* WPA2 Security with TKIP                 */
 | |
|     SECURITY_WPA2_MIXED_PSK = (WPA2_SECURITY | AES_ENABLED | TKIP_ENABLED),     /* WPA2 Security with AES & TKIP           */
 | |
|     SECURITY_WPS_OPEN       = WPS_ENABLED,                                      /* WPS with open security                  */
 | |
|     SECURITY_WPS_SECURE     = (WPS_ENABLED | AES_ENABLED),                      /* WPS with AES security                   */
 | |
|     SECURITY_UNKNOWN        = -1,                                               /* May be returned by scan function if security is unknown.
 | |
|                                                                                     Do not pass this to the join function! */
 | |
| } rt_wlan_security_t;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     RT_802_11_BAND_5GHZ  =  0,             /* Denotes 5GHz radio band   */
 | |
|     RT_802_11_BAND_2_4GHZ =  1,            /* Denotes 2.4GHz radio band */
 | |
|     RT_802_11_BAND_UNKNOWN = 0x7fffffff,   /* unknown */
 | |
| } rt_802_11_band_t;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     RT_COUNTRY_AFGHANISTAN,
 | |
|     RT_COUNTRY_ALBANIA,
 | |
|     RT_COUNTRY_ALGERIA,
 | |
|     RT_COUNTRY_AMERICAN_SAMOA,
 | |
|     RT_COUNTRY_ANGOLA,
 | |
|     RT_COUNTRY_ANGUILLA,
 | |
|     RT_COUNTRY_ANTIGUA_AND_BARBUDA,
 | |
|     RT_COUNTRY_ARGENTINA,
 | |
|     RT_COUNTRY_ARMENIA,
 | |
|     RT_COUNTRY_ARUBA,
 | |
|     RT_COUNTRY_AUSTRALIA,
 | |
|     RT_COUNTRY_AUSTRIA,
 | |
|     RT_COUNTRY_AZERBAIJAN,
 | |
|     RT_COUNTRY_BAHAMAS,
 | |
|     RT_COUNTRY_BAHRAIN,
 | |
|     RT_COUNTRY_BAKER_ISLAND,
 | |
|     RT_COUNTRY_BANGLADESH,
 | |
|     RT_COUNTRY_BARBADOS,
 | |
|     RT_COUNTRY_BELARUS,
 | |
|     RT_COUNTRY_BELGIUM,
 | |
|     RT_COUNTRY_BELIZE,
 | |
|     RT_COUNTRY_BENIN,
 | |
|     RT_COUNTRY_BERMUDA,
 | |
|     RT_COUNTRY_BHUTAN,
 | |
|     RT_COUNTRY_BOLIVIA,
 | |
|     RT_COUNTRY_BOSNIA_AND_HERZEGOVINA,
 | |
|     RT_COUNTRY_BOTSWANA,
 | |
|     RT_COUNTRY_BRAZIL,
 | |
|     RT_COUNTRY_BRITISH_INDIAN_OCEAN_TERRITORY,
 | |
|     RT_COUNTRY_BRUNEI_DARUSSALAM,
 | |
|     RT_COUNTRY_BULGARIA,
 | |
|     RT_COUNTRY_BURKINA_FASO,
 | |
|     RT_COUNTRY_BURUNDI,
 | |
|     RT_COUNTRY_CAMBODIA,
 | |
|     RT_COUNTRY_CAMEROON,
 | |
|     RT_COUNTRY_CANADA,
 | |
|     RT_COUNTRY_CAPE_VERDE,
 | |
|     RT_COUNTRY_CAYMAN_ISLANDS,
 | |
|     RT_COUNTRY_CENTRAL_AFRICAN_REPUBLIC,
 | |
|     RT_COUNTRY_CHAD,
 | |
|     RT_COUNTRY_CHILE,
 | |
|     RT_COUNTRY_CHINA,
 | |
|     RT_COUNTRY_CHRISTMAS_ISLAND,
 | |
|     RT_COUNTRY_COLOMBIA,
 | |
|     RT_COUNTRY_COMOROS,
 | |
|     RT_COUNTRY_CONGO,
 | |
|     RT_COUNTRY_CONGO_THE_DEMOCRATIC_REPUBLIC_OF_THE,
 | |
|     RT_COUNTRY_COSTA_RICA,
 | |
|     RT_COUNTRY_COTE_DIVOIRE,
 | |
|     RT_COUNTRY_CROATIA,
 | |
|     RT_COUNTRY_CUBA,
 | |
|     RT_COUNTRY_CYPRUS,
 | |
|     RT_COUNTRY_CZECH_REPUBLIC,
 | |
|     RT_COUNTRY_DENMARK,
 | |
|     RT_COUNTRY_DJIBOUTI,
 | |
|     RT_COUNTRY_DOMINICA,
 | |
|     RT_COUNTRY_DOMINICAN_REPUBLIC,
 | |
|     RT_COUNTRY_DOWN_UNDER,
 | |
|     RT_COUNTRY_ECUADOR,
 | |
|     RT_COUNTRY_EGYPT,
 | |
|     RT_COUNTRY_EL_SALVADOR,
 | |
|     RT_COUNTRY_EQUATORIAL_GUINEA,
 | |
|     RT_COUNTRY_ERITREA,
 | |
|     RT_COUNTRY_ESTONIA,
 | |
|     RT_COUNTRY_ETHIOPIA,
 | |
|     RT_COUNTRY_FALKLAND_ISLANDS_MALVINAS,
 | |
|     RT_COUNTRY_FAROE_ISLANDS,
 | |
|     RT_COUNTRY_FIJI,
 | |
|     RT_COUNTRY_FINLAND,
 | |
|     RT_COUNTRY_FRANCE,
 | |
|     RT_COUNTRY_FRENCH_GUINA,
 | |
|     RT_COUNTRY_FRENCH_POLYNESIA,
 | |
|     RT_COUNTRY_FRENCH_SOUTHERN_TERRITORIES,
 | |
|     RT_COUNTRY_GABON,
 | |
|     RT_COUNTRY_GAMBIA,
 | |
|     RT_COUNTRY_GEORGIA,
 | |
|     RT_COUNTRY_GERMANY,
 | |
|     RT_COUNTRY_GHANA,
 | |
|     RT_COUNTRY_GIBRALTAR,
 | |
|     RT_COUNTRY_GREECE,
 | |
|     RT_COUNTRY_GRENADA,
 | |
|     RT_COUNTRY_GUADELOUPE,
 | |
|     RT_COUNTRY_GUAM,
 | |
|     RT_COUNTRY_GUATEMALA,
 | |
|     RT_COUNTRY_GUERNSEY,
 | |
|     RT_COUNTRY_GUINEA,
 | |
|     RT_COUNTRY_GUINEA_BISSAU,
 | |
|     RT_COUNTRY_GUYANA,
 | |
|     RT_COUNTRY_HAITI,
 | |
|     RT_COUNTRY_HOLY_SEE_VATICAN_CITY_STATE,
 | |
|     RT_COUNTRY_HONDURAS,
 | |
|     RT_COUNTRY_HONG_KONG,
 | |
|     RT_COUNTRY_HUNGARY,
 | |
|     RT_COUNTRY_ICELAND,
 | |
|     RT_COUNTRY_INDIA,
 | |
|     RT_COUNTRY_INDONESIA,
 | |
|     RT_COUNTRY_IRAN_ISLAMIC_REPUBLIC_OF,
 | |
|     RT_COUNTRY_IRAQ,
 | |
|     RT_COUNTRY_IRELAND,
 | |
|     RT_COUNTRY_ISRAEL,
 | |
|     RT_COUNTRY_ITALY,
 | |
|     RT_COUNTRY_JAMAICA,
 | |
|     RT_COUNTRY_JAPAN,
 | |
|     RT_COUNTRY_JERSEY,
 | |
|     RT_COUNTRY_JORDAN,
 | |
|     RT_COUNTRY_KAZAKHSTAN,
 | |
|     RT_COUNTRY_KENYA,
 | |
|     RT_COUNTRY_KIRIBATI,
 | |
|     RT_COUNTRY_KOREA_REPUBLIC_OF,
 | |
|     RT_COUNTRY_KOSOVO,
 | |
|     RT_COUNTRY_KUWAIT,
 | |
|     RT_COUNTRY_KYRGYZSTAN,
 | |
|     RT_COUNTRY_LAO_PEOPLES_DEMOCRATIC_REPUBIC,
 | |
|     RT_COUNTRY_LATVIA,
 | |
|     RT_COUNTRY_LEBANON,
 | |
|     RT_COUNTRY_LESOTHO,
 | |
|     RT_COUNTRY_LIBERIA,
 | |
|     RT_COUNTRY_LIBYAN_ARAB_JAMAHIRIYA,
 | |
|     RT_COUNTRY_LIECHTENSTEIN,
 | |
|     RT_COUNTRY_LITHUANIA,
 | |
|     RT_COUNTRY_LUXEMBOURG,
 | |
|     RT_COUNTRY_MACAO,
 | |
|     RT_COUNTRY_MACEDONIA_FORMER_YUGOSLAV_REPUBLIC_OF,
 | |
|     RT_COUNTRY_MADAGASCAR,
 | |
|     RT_COUNTRY_MALAWI,
 | |
|     RT_COUNTRY_MALAYSIA,
 | |
|     RT_COUNTRY_MALDIVES,
 | |
|     RT_COUNTRY_MALI,
 | |
|     RT_COUNTRY_MALTA,
 | |
|     RT_COUNTRY_MAN_ISLE_OF,
 | |
|     RT_COUNTRY_MARTINIQUE,
 | |
|     RT_COUNTRY_MAURITANIA,
 | |
|     RT_COUNTRY_MAURITIUS,
 | |
|     RT_COUNTRY_MAYOTTE,
 | |
|     RT_COUNTRY_MEXICO,
 | |
|     RT_COUNTRY_MICRONESIA_FEDERATED_STATES_OF,
 | |
|     RT_COUNTRY_MOLDOVA_REPUBLIC_OF,
 | |
|     RT_COUNTRY_MONACO,
 | |
|     RT_COUNTRY_MONGOLIA,
 | |
|     RT_COUNTRY_MONTENEGRO,
 | |
|     RT_COUNTRY_MONTSERRAT,
 | |
|     RT_COUNTRY_MOROCCO,
 | |
|     RT_COUNTRY_MOZAMBIQUE,
 | |
|     RT_COUNTRY_MYANMAR,
 | |
|     RT_COUNTRY_NAMIBIA,
 | |
|     RT_COUNTRY_NAURU,
 | |
|     RT_COUNTRY_NEPAL,
 | |
|     RT_COUNTRY_NETHERLANDS,
 | |
|     RT_COUNTRY_NETHERLANDS_ANTILLES,
 | |
|     RT_COUNTRY_NEW_CALEDONIA,
 | |
|     RT_COUNTRY_NEW_ZEALAND,
 | |
|     RT_COUNTRY_NICARAGUA,
 | |
|     RT_COUNTRY_NIGER,
 | |
|     RT_COUNTRY_NIGERIA,
 | |
|     RT_COUNTRY_NORFOLK_ISLAND,
 | |
|     RT_COUNTRY_NORTHERN_MARIANA_ISLANDS,
 | |
|     RT_COUNTRY_NORWAY,
 | |
|     RT_COUNTRY_OMAN,
 | |
|     RT_COUNTRY_PAKISTAN,
 | |
|     RT_COUNTRY_PALAU,
 | |
|     RT_COUNTRY_PANAMA,
 | |
|     RT_COUNTRY_PAPUA_NEW_GUINEA,
 | |
|     RT_COUNTRY_PARAGUAY,
 | |
|     RT_COUNTRY_PERU,
 | |
|     RT_COUNTRY_PHILIPPINES,
 | |
|     RT_COUNTRY_POLAND,
 | |
|     RT_COUNTRY_PORTUGAL,
 | |
|     RT_COUNTRY_PUETO_RICO,
 | |
|     RT_COUNTRY_QATAR,
 | |
|     RT_COUNTRY_REUNION,
 | |
|     RT_COUNTRY_ROMANIA,
 | |
|     RT_COUNTRY_RUSSIAN_FEDERATION,
 | |
|     RT_COUNTRY_RWANDA,
 | |
|     RT_COUNTRY_SAINT_KITTS_AND_NEVIS,
 | |
|     RT_COUNTRY_SAINT_LUCIA,
 | |
|     RT_COUNTRY_SAINT_PIERRE_AND_MIQUELON,
 | |
|     RT_COUNTRY_SAINT_VINCENT_AND_THE_GRENADINES,
 | |
|     RT_COUNTRY_SAMOA,
 | |
|     RT_COUNTRY_SANIT_MARTIN_SINT_MARTEEN,
 | |
|     RT_COUNTRY_SAO_TOME_AND_PRINCIPE,
 | |
|     RT_COUNTRY_SAUDI_ARABIA,
 | |
|     RT_COUNTRY_SENEGAL,
 | |
|     RT_COUNTRY_SERBIA,
 | |
|     RT_COUNTRY_SEYCHELLES,
 | |
|     RT_COUNTRY_SIERRA_LEONE,
 | |
|     RT_COUNTRY_SINGAPORE,
 | |
|     RT_COUNTRY_SLOVAKIA,
 | |
|     RT_COUNTRY_SLOVENIA,
 | |
|     RT_COUNTRY_SOLOMON_ISLANDS,
 | |
|     RT_COUNTRY_SOMALIA,
 | |
|     RT_COUNTRY_SOUTH_AFRICA,
 | |
|     RT_COUNTRY_SPAIN,
 | |
|     RT_COUNTRY_SRI_LANKA,
 | |
|     RT_COUNTRY_SURINAME,
 | |
|     RT_COUNTRY_SWAZILAND,
 | |
|     RT_COUNTRY_SWEDEN,
 | |
|     RT_COUNTRY_SWITZERLAND,
 | |
|     RT_COUNTRY_SYRIAN_ARAB_REPUBLIC,
 | |
|     RT_COUNTRY_TAIWAN_PROVINCE_OF_CHINA,
 | |
|     RT_COUNTRY_TAJIKISTAN,
 | |
|     RT_COUNTRY_TANZANIA_UNITED_REPUBLIC_OF,
 | |
|     RT_COUNTRY_THAILAND,
 | |
|     RT_COUNTRY_TOGO,
 | |
|     RT_COUNTRY_TONGA,
 | |
|     RT_COUNTRY_TRINIDAD_AND_TOBAGO,
 | |
|     RT_COUNTRY_TUNISIA,
 | |
|     RT_COUNTRY_TURKEY,
 | |
|     RT_COUNTRY_TURKMENISTAN,
 | |
|     RT_COUNTRY_TURKS_AND_CAICOS_ISLANDS,
 | |
|     RT_COUNTRY_TUVALU,
 | |
|     RT_COUNTRY_UGANDA,
 | |
|     RT_COUNTRY_UKRAINE,
 | |
|     RT_COUNTRY_UNITED_ARAB_EMIRATES,
 | |
|     RT_COUNTRY_UNITED_KINGDOM,
 | |
|     RT_COUNTRY_UNITED_STATES,
 | |
|     RT_COUNTRY_UNITED_STATES_REV4,
 | |
|     RT_COUNTRY_UNITED_STATES_NO_DFS,
 | |
|     RT_COUNTRY_UNITED_STATES_MINOR_OUTLYING_ISLANDS,
 | |
|     RT_COUNTRY_URUGUAY,
 | |
|     RT_COUNTRY_UZBEKISTAN,
 | |
|     RT_COUNTRY_VANUATU,
 | |
|     RT_COUNTRY_VENEZUELA,
 | |
|     RT_COUNTRY_VIET_NAM,
 | |
|     RT_COUNTRY_VIRGIN_ISLANDS_BRITISH,
 | |
|     RT_COUNTRY_VIRGIN_ISLANDS_US,
 | |
|     RT_COUNTRY_WALLIS_AND_FUTUNA,
 | |
|     RT_COUNTRY_WEST_BANK,
 | |
|     RT_COUNTRY_WESTERN_SAHARA,
 | |
|     RT_COUNTRY_WORLD_WIDE_XX,
 | |
|     RT_COUNTRY_YEMEN,
 | |
|     RT_COUNTRY_ZAMBIA,
 | |
|     RT_COUNTRY_ZIMBABWE,
 | |
|     RT_COUNTRY_UNKNOWN
 | |
| } rt_country_code_t;
 | |
| 
 | |
| struct rt_wlan_device;
 | |
| struct rt_wlan_buff;
 | |
| 
 | |
| typedef void (*rt_wlan_dev_event_handler)(struct rt_wlan_device *device, rt_wlan_dev_event_t event, struct rt_wlan_buff *buff, void *parameter);
 | |
| 
 | |
| typedef void (*rt_wlan_pormisc_callback_t)(struct rt_wlan_device *device, void *data, int len);
 | |
| 
 | |
| typedef void (*rt_wlan_mgnt_filter_callback_t)(struct rt_wlan_device *device, void *data, int len);
 | |
| 
 | |
| struct rt_wlan_ssid
 | |
| {
 | |
|     rt_uint8_t len;
 | |
|     rt_uint8_t val[RT_WLAN_SSID_MAX_LENGTH + 1];
 | |
| };
 | |
| typedef struct rt_wlan_ssid rt_wlan_ssid_t;
 | |
| 
 | |
| struct rt_wlan_key
 | |
| {
 | |
|     rt_uint8_t len;
 | |
|     rt_uint8_t val[RT_WLAN_PASSWORD_MAX_LENGTH + 1];
 | |
| };
 | |
| typedef struct rt_wlan_key rt_wlan_key_t;
 | |
| 
 | |
| #define INVALID_INFO(_info)       do {    \
 | |
|                                         rt_memset((_info), 0, sizeof(struct rt_wlan_info)); \
 | |
|                                         (_info)->band = RT_802_11_BAND_UNKNOWN; \
 | |
|                                         (_info)->security = SECURITY_UNKNOWN; \
 | |
|                                         (_info)->channel = -1; \
 | |
|                                     } while(0)
 | |
| 
 | |
| #define SSID_SET(_info, _ssid)    do {    \
 | |
|                                         rt_strncpy((char *)(_info)->ssid.val, (_ssid), RT_WLAN_SSID_MAX_LENGTH); \
 | |
|                                         (_info)->ssid.len = rt_strlen((char *)(_info)->ssid.val); \
 | |
|                                     } while(0)
 | |
| 
 | |
| struct rt_wlan_info
 | |
| {
 | |
|     /* security type */
 | |
|     rt_wlan_security_t security;
 | |
|     /* 2.4G/5G */
 | |
|     rt_802_11_band_t band;
 | |
|     /* maximal data rate */
 | |
|     rt_uint32_t datarate;
 | |
|     /* radio channel */
 | |
|     rt_int16_t channel;
 | |
|     /* signal strength */
 | |
|     rt_int16_t  rssi;
 | |
|     /* ssid */
 | |
|     rt_wlan_ssid_t ssid;
 | |
|     /* hwaddr */
 | |
|     rt_uint8_t bssid[RT_WLAN_BSSID_MAX_LENGTH];
 | |
|     rt_uint8_t hidden;
 | |
| };
 | |
| 
 | |
| struct rt_wlan_buff
 | |
| {
 | |
|     void *data;
 | |
|     rt_int32_t len;
 | |
| };
 | |
| 
 | |
| struct rt_filter_pattern
 | |
| {
 | |
|     rt_uint16_t offset;     /* Offset in bytes to start filtering (referenced to the start of the ethernet packet) */
 | |
|     rt_uint16_t mask_size;  /* Size of the mask in bytes */
 | |
|     rt_uint8_t *mask;       /* Pattern mask bytes to be ANDed with the pattern eg. "\xff00" (must be in network byte order) */
 | |
|     rt_uint8_t *pattern;    /* Pattern bytes used to filter eg. "\x0800"  (must be in network byte order) */
 | |
| };
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     RT_POSITIVE_MATCHING  = 0, /* Receive the data matching with this pattern and discard the other data  */
 | |
|     RT_NEGATIVE_MATCHING  = 1  /* Discard the data matching with this pattern and receive the other data */
 | |
| } rt_filter_rule_t;
 | |
| 
 | |
| struct rt_wlan_filter
 | |
| {
 | |
|     struct rt_filter_pattern patt;
 | |
|     rt_filter_rule_t rule;
 | |
|     rt_uint8_t enable;
 | |
| };
 | |
| 
 | |
| struct rt_wlan_dev_event_desc
 | |
| {
 | |
|     rt_wlan_dev_event_handler handler;
 | |
|     void *parameter;
 | |
| };
 | |
| 
 | |
| struct rt_wlan_device
 | |
| {
 | |
|     struct rt_device device;
 | |
|     rt_wlan_mode_t mode;
 | |
|     struct rt_mutex lock;
 | |
|     struct rt_wlan_dev_event_desc handler_table[RT_WLAN_DEV_EVT_MAX][RT_WLAN_DEV_EVENT_NUM];
 | |
|     rt_wlan_pormisc_callback_t pormisc_callback;
 | |
|     rt_wlan_mgnt_filter_callback_t mgnt_filter_callback;
 | |
|     const struct rt_wlan_dev_ops *ops;
 | |
|     rt_uint32_t flags;
 | |
|     struct netdev *netdev;
 | |
|     void *prot;
 | |
|     void *user_data;
 | |
| };
 | |
| 
 | |
| struct rt_sta_info
 | |
| {
 | |
|     rt_wlan_ssid_t ssid;
 | |
|     rt_wlan_key_t key;
 | |
|     rt_uint8_t bssid[6];
 | |
|     rt_uint16_t channel;
 | |
|     rt_wlan_security_t security;
 | |
| };
 | |
| 
 | |
| struct rt_ap_info
 | |
| {
 | |
|     rt_wlan_ssid_t ssid;
 | |
|     rt_wlan_key_t key;
 | |
|     rt_bool_t hidden;
 | |
|     rt_uint16_t channel;
 | |
|     rt_wlan_security_t security;
 | |
| };
 | |
| 
 | |
| struct rt_scan_info
 | |
| {
 | |
|     rt_wlan_ssid_t ssid;
 | |
|     rt_uint8_t bssid[6];
 | |
|     rt_int16_t channel_min;
 | |
|     rt_int16_t channel_max;
 | |
|     rt_bool_t passive;
 | |
| };
 | |
| 
 | |
| struct rt_wlan_dev_ops
 | |
| {
 | |
|     rt_err_t (*wlan_init)(struct rt_wlan_device *wlan);
 | |
|     rt_err_t (*wlan_mode)(struct rt_wlan_device *wlan, rt_wlan_mode_t mode);
 | |
|     rt_err_t (*wlan_scan)(struct rt_wlan_device *wlan, struct rt_scan_info *scan_info);
 | |
|     rt_err_t (*wlan_join)(struct rt_wlan_device *wlan, struct rt_sta_info *sta_info);
 | |
|     rt_err_t (*wlan_softap)(struct rt_wlan_device *wlan, struct rt_ap_info *ap_info);
 | |
|     rt_err_t (*wlan_disconnect)(struct rt_wlan_device *wlan);
 | |
|     rt_err_t (*wlan_ap_stop)(struct rt_wlan_device *wlan);
 | |
|     rt_err_t (*wlan_ap_deauth)(struct rt_wlan_device *wlan, rt_uint8_t mac[]);
 | |
|     rt_err_t (*wlan_scan_stop)(struct rt_wlan_device *wlan);
 | |
|     int (*wlan_get_rssi)(struct rt_wlan_device *wlan);
 | |
|     rt_err_t (*wlan_set_powersave)(struct rt_wlan_device *wlan, int level);
 | |
|     int (*wlan_get_powersave)(struct rt_wlan_device *wlan);
 | |
|     rt_err_t (*wlan_cfg_promisc)(struct rt_wlan_device *wlan, rt_bool_t start);
 | |
|     rt_err_t (*wlan_cfg_filter)(struct rt_wlan_device *wlan, struct rt_wlan_filter *filter);
 | |
|     rt_err_t (*wlan_cfg_mgnt_filter)(struct rt_wlan_device *wlan, rt_bool_t start);
 | |
|     rt_err_t (*wlan_set_channel)(struct rt_wlan_device *wlan, int channel);
 | |
|     int (*wlan_get_channel)(struct rt_wlan_device *wlan);
 | |
|     rt_err_t (*wlan_set_country)(struct rt_wlan_device *wlan, rt_country_code_t country_code);
 | |
|     rt_country_code_t (*wlan_get_country)(struct rt_wlan_device *wlan);
 | |
|     rt_err_t (*wlan_set_mac)(struct rt_wlan_device *wlan, rt_uint8_t mac[]);
 | |
|     rt_err_t (*wlan_get_mac)(struct rt_wlan_device *wlan, rt_uint8_t mac[]);
 | |
|     int (*wlan_recv)(struct rt_wlan_device *wlan, void *buff, int len);
 | |
|     int (*wlan_send)(struct rt_wlan_device *wlan, void *buff, int len);
 | |
|     int (*wlan_send_raw_frame)(struct rt_wlan_device *wlan, void *buff, int len);
 | |
|     int (*wlan_get_fast_info)(void *data);
 | |
|     rt_err_t (*wlan_fast_connect)(void *data,rt_int32_t len);
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * wlan device init
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_init(struct rt_wlan_device *device, rt_wlan_mode_t mode);
 | |
| 
 | |
| /*
 | |
|  * wlan device station interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_connect(struct rt_wlan_device *device, struct rt_wlan_info *info, const char *password, int password_len);
 | |
| rt_err_t rt_wlan_dev_fast_connect(struct rt_wlan_device *device, struct rt_wlan_info *info, const char *password, int password_len);
 | |
| rt_err_t rt_wlan_dev_disconnect(struct rt_wlan_device *device);
 | |
| int rt_wlan_dev_get_rssi(struct rt_wlan_device *device);
 | |
| 
 | |
| /*
 | |
|  * wlan device ap interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_ap_start(struct rt_wlan_device *device, struct rt_wlan_info *info, const char *password, int password_len);
 | |
| rt_err_t rt_wlan_dev_ap_stop(struct rt_wlan_device *device);
 | |
| rt_err_t rt_wlan_dev_ap_deauth(struct rt_wlan_device *device, rt_uint8_t mac[6]);
 | |
| 
 | |
| /*
 | |
|  * wlan device scan interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_scan(struct rt_wlan_device *device, struct rt_wlan_info *info);
 | |
| rt_err_t rt_wlan_dev_scan_stop(struct rt_wlan_device *device);
 | |
| 
 | |
| /*
 | |
|  * wlan device mac interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_get_mac(struct rt_wlan_device *device, rt_uint8_t mac[6]);
 | |
| rt_err_t rt_wlan_dev_set_mac(struct rt_wlan_device *device, rt_uint8_t mac[6]);
 | |
| 
 | |
| /*
 | |
|  * wlan device powersave interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_set_powersave(struct rt_wlan_device *device, int level);
 | |
| int rt_wlan_dev_get_powersave(struct rt_wlan_device *device);
 | |
| 
 | |
| /*
 | |
|  * wlan device event interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_register_event_handler(struct rt_wlan_device *device, rt_wlan_dev_event_t event, rt_wlan_dev_event_handler handler, void *parameter);
 | |
| rt_err_t rt_wlan_dev_unregister_event_handler(struct rt_wlan_device *device, rt_wlan_dev_event_t event, rt_wlan_dev_event_handler handler);
 | |
| void rt_wlan_dev_indicate_event_handle(struct rt_wlan_device *device, rt_wlan_dev_event_t event, struct rt_wlan_buff *buff);
 | |
| 
 | |
| /*
 | |
|  * wlan device promisc interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_enter_promisc(struct rt_wlan_device *device);
 | |
| rt_err_t rt_wlan_dev_exit_promisc(struct rt_wlan_device *device);
 | |
| rt_err_t rt_wlan_dev_set_promisc_callback(struct rt_wlan_device *device, rt_wlan_pormisc_callback_t callback);
 | |
| void rt_wlan_dev_promisc_handler(struct rt_wlan_device *device, void *data, int len);
 | |
| 
 | |
| /*
 | |
|  * wlan device filter interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_cfg_filter(struct rt_wlan_device *device, struct rt_wlan_filter *filter);
 | |
| 
 | |
| /*
 | |
|  * wlan device channel interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_set_channel(struct rt_wlan_device *device, int channel);
 | |
| int rt_wlan_dev_get_channel(struct rt_wlan_device *device);
 | |
| 
 | |
| /*
 | |
|  * wlan device country interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_set_country(struct rt_wlan_device *device, rt_country_code_t country_code);
 | |
| rt_country_code_t rt_wlan_dev_get_country(struct rt_wlan_device *device);
 | |
| 
 | |
| /*
 | |
|  * wlan device datat transfer interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_report_data(struct rt_wlan_device *device, void *buff, int len);
 | |
| // void rt_wlan_dev_data_ready(struct rt_wlan_device *device, int len);
 | |
| 
 | |
| /*
 | |
|  * wlan device register interface
 | |
|  */
 | |
| rt_err_t rt_wlan_dev_register(struct rt_wlan_device *wlan, const char *name,
 | |
|     const struct rt_wlan_dev_ops *ops, rt_uint32_t flag, void *user_data);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif
 |