1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2018-7-10      tyx          the first version
9  */
10 
11 #ifndef __DRV_WLAN_H__
12 #define __DRV_WLAN_H__
13 
14 typedef enum
15 {
16     RTHW_MODE_NONE = 0,
17     RTHW_MODE_STA,
18     RTHW_MODE_AP,
19     RTHW_MODE_STA_AP,
20     RTHW_MODE_PROMISC,
21     RTHW_MODE_P2P
22 }rthw_mode_t;
23 
24 #define SHARED_ENABLED  0x00008000
25 #define WPA_SECURITY    0x00200000
26 #define WPA2_SECURITY   0x00400000
27 #define WPS_ENABLED     0x10000000
28 #define WEP_ENABLED     0x0001
29 #define TKIP_ENABLED    0x0002
30 #define AES_ENABLED     0x0004
31 #define WSEC_SWFLAG     0x0008
32 
33 typedef enum {
34     RTHW_SECURITY_OPEN           = 0,                                                /**< Open security                           */
35     RTHW_SECURITY_WEP_PSK        = WEP_ENABLED,                                      /**< WEP Security with open authentication   */
36     RTHW_SECURITY_WEP_SHARED     = ( WEP_ENABLED | SHARED_ENABLED ),                 /**< WEP Security with shared authentication */
37     RTHW_SECURITY_WPA_TKIP_PSK   = ( WPA_SECURITY  | TKIP_ENABLED ),                 /**< WPA Security with TKIP                  */
38     RTHW_SECURITY_WPA_AES_PSK    = ( WPA_SECURITY  | AES_ENABLED ),                  /**< WPA Security with AES                   */
39     RTHW_SECURITY_WPA2_AES_PSK   = ( WPA2_SECURITY | AES_ENABLED ),                  /**< WPA2 Security with AES                  */
40     RTHW_SECURITY_WPA2_TKIP_PSK  = ( WPA2_SECURITY | TKIP_ENABLED ),                 /**< WPA2 Security with TKIP                 */
41     RTHW_SECURITY_WPA2_MIXED_PSK = ( WPA2_SECURITY | AES_ENABLED | TKIP_ENABLED ),   /**< WPA2 Security with AES & TKIP           */
42     RTHW_SECURITY_WPA_WPA2_MIXED = ( WPA_SECURITY  | WPA2_SECURITY ),                /**< WPA/WPA2 Security                       */
43 
44     RTHW_SECURITY_WPS_OPEN       = WPS_ENABLED,                                      /**< WPS with open security                  */
45     RTHW_SECURITY_WPS_SECURE     = (WPS_ENABLED | AES_ENABLED),                      /**< WPS with AES security                   */
46 
47     RTHW_SECURITY_UNKNOWN        = -1,                                               /**< May be returned by scan function if security is unknown. Do not pass this to the join function! */
48 
49     RTHW_SECURITY_FORCE_32_BIT   = 0x7fffffff                                        /**< Exists only to force rtw_security_t type to 32 bits */
50 } rthw_security_t;
51 
52 typedef enum {
53     RTHW_WIFI_EVENT_CONNECT = 0,
54     RTHW_WIFI_EVENT_DISCONNECT = 1,
55     RTHW_WIFI_EVENT_FOURWAY_HANDSHAKE_DONE = 2,
56     RTHW_WIFI_EVENT_SCAN_RESULT_REPORT = 3,
57     RTHW_WIFI_EVENT_SCAN_DONE = 4,
58     RTHW_WIFI_EVENT_RECONNECTION_FAIL = 5,
59     RTHW_WIFI_EVENT_SEND_ACTION_DONE = 6,
60     RTHW_WIFI_EVENT_RX_MGNT = 7,
61     RTHW_WIFI_EVENT_STA_ASSOC = 8,
62     RTHW_WIFI_EVENT_STA_DISASSOC = 9,
63     RTHW_WIFI_EVENT_STA_WPS_START = 10,
64     RTHW_WIFI_EVENT_WPS_FINISH = 11,
65     RTHW_WIFI_EVENT_EAPOL_START = 12,
66     RTHW_WIFI_EVENT_EAPOL_RECVD = 13,
67     RTHW_WIFI_EVENT_NO_NETWORK = 14,
68     RTHW_WIFI_EVENT_BEACON_AFTER_DHCP = 15,
69     RTHW_WIFI_EVENT_MAX,
70 }rthw_event_indicate_t;
71 
72 typedef enum {
73     RTHW_802_11_BAND_5GHZ   = 0, /**< Denotes 5GHz radio band   */
74     RTHW_802_11_BAND_2_4GHZ = 1  /**< Denotes 2.4GHz radio band */
75 } rthw_802_11_band_t;
76 
77 struct rthw_wlan_info
78 {
79     char *ssid;
80     rt_uint8_t *bssid;
81     rthw_802_11_band_t band;
82     rt_uint32_t datarate;
83     rt_uint16_t channel;
84     rt_int16_t  rssi;
85     rthw_security_t security;
86 };
87 
88 typedef void (*scan_callback_fn)(struct rthw_wlan_info *info, void *user_data);
89 typedef void (*rthw_wlan_monitor_callback_t)(rt_uint8_t *data, int len, void *user_data);
90 
91 rthw_mode_t rthw_wifi_mode_get(void);
92 int rthw_wifi_stop(void);
93 int rthw_wifi_start(rthw_mode_t mode);
94 int rthw_wifi_connect(char *ssid, int ssid_len, char *password, int pass_len, rthw_security_t security_type);
95 int rthw_wifi_connect_bssid(char *bssid, char *ssid, int ssid_len, char *password, int pass_len, rthw_security_t security_type);
96 int rthw_wifi_ap_start(char *ssid, char *password, int channel);
97 int rthw_wifi_rssi_get(void);
98 void rthw_wifi_channel_set(int channel);
99 int rthw_wifi_channel_get(void);
100 int rthw_wifi_sta_disconnect(void);
101 int rthw_wifi_ap_disconnect(void);
102 int rthw_wifi_scan(scan_callback_fn fun, void *data);
103 void rthw_wifi_monitor_enable(int enable);
104 void rthw_wifi_monitor_callback_set(rthw_wlan_monitor_callback_t callback);
105 #endif
106