1*10465441SEvalZero /* 2*10465441SEvalZero * COPYRIGHT (C) 2018, Real-Thread Information Technology Ltd 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2014-07-31 aozima the first version 9*10465441SEvalZero * 2014-09-18 aozima update command & response. 10*10465441SEvalZero */ 11*10465441SEvalZero 12*10465441SEvalZero #ifndef SPI_WIFI_H_INCLUDED 13*10465441SEvalZero #define SPI_WIFI_H_INCLUDED 14*10465441SEvalZero 15*10465441SEvalZero #include <stdint.h> 16*10465441SEvalZero 17*10465441SEvalZero // little-endian 18*10465441SEvalZero struct spi_cmd_request 19*10465441SEvalZero { 20*10465441SEvalZero uint32_t flag; 21*10465441SEvalZero uint32_t M2S_len; // master to slave data len. 22*10465441SEvalZero uint32_t magic1; 23*10465441SEvalZero uint32_t magic2; 24*10465441SEvalZero }; 25*10465441SEvalZero 26*10465441SEvalZero #define CMD_MAGIC1 (0x67452301) 27*10465441SEvalZero #define CMD_MAGIC2 (0xEFCDAB89) 28*10465441SEvalZero 29*10465441SEvalZero #define CMD_FLAG_MRDY (0x01) 30*10465441SEvalZero 31*10465441SEvalZero // little-endian 32*10465441SEvalZero struct spi_response 33*10465441SEvalZero { 34*10465441SEvalZero uint32_t flag; 35*10465441SEvalZero uint32_t S2M_len; // slave to master data len. 36*10465441SEvalZero uint32_t magic1; 37*10465441SEvalZero uint32_t magic2; 38*10465441SEvalZero }; 39*10465441SEvalZero 40*10465441SEvalZero #define RESP_FLAG_SRDY (0x01) 41*10465441SEvalZero #define RESP_MAGIC1 (0x98BADCFE) 42*10465441SEvalZero #define RESP_MAGIC2 (0x10325476) 43*10465441SEvalZero 44*10465441SEvalZero /* spi slave configure. */ 45*10465441SEvalZero #define SPI_MAX_DATA_LEN 1520 46*10465441SEvalZero #define SPI_TX_POOL_SIZE 2 47*10465441SEvalZero #define SPI_RX_POOL_SIZE 2 48*10465441SEvalZero 49*10465441SEvalZero typedef enum 50*10465441SEvalZero { 51*10465441SEvalZero data_type_eth_data = 0, 52*10465441SEvalZero data_type_cmd, 53*10465441SEvalZero data_type_resp, 54*10465441SEvalZero data_type_status, 55*10465441SEvalZero } 56*10465441SEvalZero app_data_type_typedef; 57*10465441SEvalZero 58*10465441SEvalZero struct spi_data_packet 59*10465441SEvalZero { 60*10465441SEvalZero uint32_t data_len; 61*10465441SEvalZero uint32_t data_type; 62*10465441SEvalZero char buffer[SPI_MAX_DATA_LEN]; 63*10465441SEvalZero }; 64*10465441SEvalZero 65*10465441SEvalZero /********************************* RW009 **************************************/ 66*10465441SEvalZero 67*10465441SEvalZero /* option */ 68*10465441SEvalZero #define RW009_CMD_TIMEOUT (RT_TICK_PER_SECOND*3) 69*10465441SEvalZero #define SSID_NAME_LENGTH_MAX (32) 70*10465441SEvalZero #define PASSWORD_LENGTH_MAX (64) 71*10465441SEvalZero 72*10465441SEvalZero typedef enum 73*10465441SEvalZero { 74*10465441SEvalZero MODE_STATION=0, 75*10465441SEvalZero MODE_SOFTAP=1, 76*10465441SEvalZero } wifi_mode_t; 77*10465441SEvalZero 78*10465441SEvalZero typedef struct _rw009_ap_info 79*10465441SEvalZero { 80*10465441SEvalZero char ssid[SSID_NAME_LENGTH_MAX]; 81*10465441SEvalZero uint8_t bssid[8]; // 6byte + 2byte PAD. 82*10465441SEvalZero int rssi; /* Receive Signal Strength Indication in dBm. */ 83*10465441SEvalZero uint32_t max_data_rate; /* Maximum data rate in kilobits/s */ 84*10465441SEvalZero uint32_t security; /* Security type */ 85*10465441SEvalZero uint32_t channel; /* Radio channel that the AP beacon was received on */ 86*10465441SEvalZero } rw009_ap_info; 87*10465441SEvalZero 88*10465441SEvalZero typedef struct _rw009_cmd_init 89*10465441SEvalZero { 90*10465441SEvalZero uint32_t mode; 91*10465441SEvalZero } rw009_cmd_init; 92*10465441SEvalZero 93*10465441SEvalZero typedef struct _rw009_resp_init 94*10465441SEvalZero { 95*10465441SEvalZero uint8_t mac[8]; // 6byte + 2byte PAD. 96*10465441SEvalZero uint8_t sn[24]; // serial. 97*10465441SEvalZero char version[16]; // firmware version. 98*10465441SEvalZero } rw009_resp_init; 99*10465441SEvalZero 100*10465441SEvalZero typedef struct _rw009_cmd_easy_join 101*10465441SEvalZero { 102*10465441SEvalZero char ssid[SSID_NAME_LENGTH_MAX]; 103*10465441SEvalZero char passwd[PASSWORD_LENGTH_MAX]; 104*10465441SEvalZero } rw009_cmd_easy_join; 105*10465441SEvalZero 106*10465441SEvalZero typedef struct _rw009_cmd_join 107*10465441SEvalZero { 108*10465441SEvalZero uint8_t bssid[8]; // 6byte + 2byte PAD. 109*10465441SEvalZero char passwd[PASSWORD_LENGTH_MAX]; 110*10465441SEvalZero } rw009_cmd_join; 111*10465441SEvalZero 112*10465441SEvalZero typedef struct _rw009_cmd_rssi 113*10465441SEvalZero { 114*10465441SEvalZero uint8_t bssid[8]; // 6byte + 2byte PAD. 115*10465441SEvalZero } rw009_cmd_rssi; 116*10465441SEvalZero 117*10465441SEvalZero typedef struct _rw009_cmd_softap 118*10465441SEvalZero { 119*10465441SEvalZero char ssid[SSID_NAME_LENGTH_MAX]; 120*10465441SEvalZero char passwd[PASSWORD_LENGTH_MAX]; 121*10465441SEvalZero 122*10465441SEvalZero uint32_t security; /* Security type. */ 123*10465441SEvalZero uint32_t channel; /* Radio channel that the AP beacon was received on */ 124*10465441SEvalZero } rw009_cmd_softap; 125*10465441SEvalZero 126*10465441SEvalZero typedef struct _rw009_resp_join 127*10465441SEvalZero { 128*10465441SEvalZero rw009_ap_info ap_info; 129*10465441SEvalZero } rw009_resp_join; 130*10465441SEvalZero 131*10465441SEvalZero struct rw009_cmd 132*10465441SEvalZero { 133*10465441SEvalZero uint32_t cmd; 134*10465441SEvalZero uint32_t len; 135*10465441SEvalZero 136*10465441SEvalZero /** command body */ 137*10465441SEvalZero union 138*10465441SEvalZero { 139*10465441SEvalZero rw009_cmd_init init; 140*10465441SEvalZero rw009_cmd_easy_join easy_join; 141*10465441SEvalZero rw009_cmd_join join; 142*10465441SEvalZero rw009_cmd_rssi rssi; 143*10465441SEvalZero rw009_cmd_softap softap; 144*10465441SEvalZero } params; 145*10465441SEvalZero }; 146*10465441SEvalZero 147*10465441SEvalZero struct rw009_resp 148*10465441SEvalZero { 149*10465441SEvalZero uint32_t cmd; 150*10465441SEvalZero uint32_t len; 151*10465441SEvalZero 152*10465441SEvalZero int32_t result; // result for CMD. 153*10465441SEvalZero 154*10465441SEvalZero /** resp Body */ 155*10465441SEvalZero union 156*10465441SEvalZero { 157*10465441SEvalZero rw009_resp_init init; 158*10465441SEvalZero rw009_ap_info ap_info; 159*10465441SEvalZero } resp; 160*10465441SEvalZero }; 161*10465441SEvalZero 162*10465441SEvalZero #define RW009_CMD_INIT 128 163*10465441SEvalZero #define RW009_CMD_SCAN 129 164*10465441SEvalZero #define RW009_CMD_JOIN 130 165*10465441SEvalZero #define RW009_CMD_EASY_JOIN 131 166*10465441SEvalZero #define RW009_CMD_RSSI 132 167*10465441SEvalZero #define RW009_CMD_SOFTAP 133 168*10465441SEvalZero 169*10465441SEvalZero /** cond !ADDTHIS*/ 170*10465441SEvalZero #define SHARED_ENABLED 0x00008000 171*10465441SEvalZero #define WPA_SECURITY 0x00200000 172*10465441SEvalZero #define WPA2_SECURITY 0x00400000 173*10465441SEvalZero #define WPS_ENABLED 0x10000000 174*10465441SEvalZero #define WEP_ENABLED 0x0001 175*10465441SEvalZero #define TKIP_ENABLED 0x0002 176*10465441SEvalZero #define AES_ENABLED 0x0004 177*10465441SEvalZero #define WSEC_SWFLAG 0x0008 178*10465441SEvalZero /** endcond */ 179*10465441SEvalZero /** 180*10465441SEvalZero * Enumeration of Wi-Fi security modes 181*10465441SEvalZero */ 182*10465441SEvalZero typedef enum 183*10465441SEvalZero { 184*10465441SEvalZero SECURITY_OPEN = 0, /**< Open security */ 185*10465441SEvalZero SECURITY_WEP_PSK = WEP_ENABLED, /**< WEP Security with open authentication */ 186*10465441SEvalZero SECURITY_WEP_SHARED = ( WEP_ENABLED | SHARED_ENABLED ), /**< WEP Security with shared authentication */ 187*10465441SEvalZero SECURITY_WPA_TKIP_PSK = ( WPA_SECURITY | TKIP_ENABLED ), /**< WPA Security with TKIP */ 188*10465441SEvalZero SECURITY_WPA_AES_PSK = ( WPA_SECURITY | AES_ENABLED ), /**< WPA Security with AES */ 189*10465441SEvalZero SECURITY_WPA2_AES_PSK = ( WPA2_SECURITY | AES_ENABLED ), /**< WPA2 Security with AES */ 190*10465441SEvalZero SECURITY_WPA2_TKIP_PSK = ( WPA2_SECURITY | TKIP_ENABLED ), /**< WPA2 Security with TKIP */ 191*10465441SEvalZero SECURITY_WPA2_MIXED_PSK = ( WPA2_SECURITY | AES_ENABLED | TKIP_ENABLED ), /**< WPA2 Security with AES & TKIP */ 192*10465441SEvalZero 193*10465441SEvalZero SECURITY_WPS_OPEN = WPS_ENABLED, /**< WPS with open security */ 194*10465441SEvalZero SECURITY_WPS_SECURE = (WPS_ENABLED | AES_ENABLED), /**< WPS with AES security */ 195*10465441SEvalZero 196*10465441SEvalZero SECURITY_UNKNOWN = -1, /**< May be returned by scan function if security is unknown. Do not pass this to the join function! */ 197*10465441SEvalZero 198*10465441SEvalZero SECURITY_FORCE_32_BIT = 0x7fffffff /**< Exists only to force wiced_security_t type to 32 bits */ 199*10465441SEvalZero } security_t; 200*10465441SEvalZero 201*10465441SEvalZero /* porting */ 202*10465441SEvalZero extern void spi_wifi_hw_init(void); 203*10465441SEvalZero extern void spi_wifi_int_cmd(rt_bool_t cmd); 204*10465441SEvalZero extern rt_bool_t spi_wifi_is_busy(void); 205*10465441SEvalZero 206*10465441SEvalZero /* export API. */ 207*10465441SEvalZero extern rt_err_t rt_hw_wifi_init(const char *spi_device_name,wifi_mode_t mode); 208*10465441SEvalZero extern int32_t rw009_rssi(void); 209*10465441SEvalZero extern rt_err_t rw009_join(const char * SSID, const char * passwd); 210*10465441SEvalZero extern rt_err_t rw009_softap(const char * SSID, const char * passwd,uint32_t security,uint32_t channel); 211*10465441SEvalZero 212*10465441SEvalZero #endif // SPI_WIFI_H_INCLUDED 213