提交 614e4923 编写于 作者: wuyangyong's avatar wuyangyong

Merge pull request #345 from aozima/pulls

update RW009 wifi driver.
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2014-07-31 aozima the first version * 2014-07-31 aozima the first version
* 2014-09-18 aozima update command & response.
*/ */
#ifndef SPI_WIFI_H_INCLUDED #ifndef SPI_WIFI_H_INCLUDED
...@@ -28,7 +29,7 @@ ...@@ -28,7 +29,7 @@
#include <stdint.h> #include <stdint.h>
// little-endian // little-endian
struct cmd_request struct spi_cmd_request
{ {
uint32_t flag; uint32_t flag;
uint32_t M2S_len; // master to slave data len. uint32_t M2S_len; // master to slave data len.
...@@ -42,7 +43,7 @@ struct cmd_request ...@@ -42,7 +43,7 @@ struct cmd_request
#define CMD_FLAG_MRDY (0x01) #define CMD_FLAG_MRDY (0x01)
// little-endian // little-endian
struct response struct spi_response
{ {
uint32_t flag; uint32_t flag;
uint32_t S2M_len; // slave to master data len. uint32_t S2M_len; // slave to master data len.
...@@ -55,20 +56,16 @@ struct response ...@@ -55,20 +56,16 @@ struct response
#define RESP_MAGIC2 (0x10325476) #define RESP_MAGIC2 (0x10325476)
/* spi slave configure. */ /* spi slave configure. */
#define MAX_DATA_LEN 1520 #define SPI_MAX_DATA_LEN 1520
#define SPI_TX_POOL_SIZE 2 #define SPI_TX_POOL_SIZE 2
#define SPI_RX_POOL_SIZE 2 #define SPI_RX_POOL_SIZE 2
// align check
#if (MAX_DATA_LEN & 0x03) != 0
#error MAX_DATA_LEN must ALIGN to 4byte!
#endif
typedef enum typedef enum
{ {
data_type_eth_data = 0, data_type_eth_data = 0,
data_type_cmd, data_type_cmd,
data_type_resp, data_type_resp,
data_type_status,
} }
app_data_type_typedef; app_data_type_typedef;
...@@ -76,52 +73,103 @@ struct spi_data_packet ...@@ -76,52 +73,103 @@ struct spi_data_packet
{ {
uint32_t data_len; uint32_t data_len;
uint32_t data_type; uint32_t data_type;
char buffer[MAX_DATA_LEN]; char buffer[SPI_MAX_DATA_LEN];
}; };
/* tools */ /********************************* RW009 **************************************/
#define node_entry(node, type, member) \
((type *)((char *)(node) - (unsigned long)(&((type *)0)->member)))
#define member_offset(type, member) \
((unsigned long)(&((type *)0)->member))
#define MAX_SPI_PACKET_SIZE (member_offset(struct spi_data_packet, buffer) + MAX_DATA_LEN) /* option */
#define RW009_CMD_TIMEOUT (RT_TICK_PER_SECOND*3)
#define SSID_NAME_LENGTH_MAX (32)
#define PASSWORD_LENGTH_MAX (64)
/********************************* RW009 **************************************/ typedef struct _rw009_ap_info
{
char ssid[SSID_NAME_LENGTH_MAX];
uint8_t bssid[8]; // 6byte + 2byte PAD.
int rssi; /* Receive Signal Strength Indication in dBm. */
uint32_t max_data_rate; /* Maximum data rate in kilobits/s */
uint32_t security; /* Security type */
uint32_t channel; /* Radio channel that the AP beacon was received on */
} rw009_ap_info;
typedef struct _rw009_cmd_init
{
uint32_t mode;
} rw009_cmd_init;
typedef struct _rw009_resp_init
{
uint8_t mac[8]; // 6byte + 2byte PAD.
uint8_t sn[24]; // serial.
char version[16]; // firmware version.
} rw009_resp_init;
typedef struct _rw009_cmd_easy_join
{
char ssid[SSID_NAME_LENGTH_MAX];
char passwd[PASSWORD_LENGTH_MAX];
} rw009_cmd_easy_join;
typedef struct _rw009_cmd_join
{
uint8_t bssid[8]; // 6byte + 2byte PAD.
char passwd[PASSWORD_LENGTH_MAX];
} rw009_cmd_join;
struct spi_wifi_cmd typedef struct _rw009_cmd_rssi
{
uint8_t bssid[8]; // 6byte + 2byte PAD.
} rw009_cmd_rssi;
typedef struct _rw009_resp_join
{
rw009_ap_info ap_info;
} rw009_resp_join;
struct rw009_cmd
{ {
uint32_t cmd; uint32_t cmd;
char buffer[128]; uint32_t len;
/** command body */
union
{
rw009_cmd_init init;
rw009_cmd_easy_join easy_join;
rw009_cmd_join join;
rw009_cmd_rssi rssi;
} params;
}; };
struct spi_wifi_resp struct rw009_resp
{ {
uint32_t cmd; uint32_t cmd;
char buffer[128]; uint32_t len;
int32_t result; // result for CMD.
/** resp Body */
union
{
rw009_resp_init init;
rw009_ap_info ap_info;
} resp;
}; };
#define SPI_WIFI_CMD_INIT 128 //wait #define RW009_CMD_INIT 128
#define SPI_WIFI_CMD_SCAN 129 //no wait #define RW009_CMD_SCAN 129
#define SPI_WIFI_CMD_JOIN 130 //no wait #define RW009_CMD_JOIN 130
#define RW009_CMD_EASY_JOIN 131
#define RW009_CMD_RSSI 132
/* porting */ /* porting */
extern void spi_wifi_hw_init(void); extern void spi_wifi_hw_init(void);
extern void spi_wifi_int_cmd(rt_bool_t cmd); extern void spi_wifi_int_cmd(rt_bool_t cmd);
extern rt_bool_t spi_wifi_is_busy(void); extern rt_bool_t spi_wifi_is_busy(void);
#define SSID_NAME_LENGTH_MAX (32) /* export API. */
#define PASSWORD_LENGTH_MAX (32) extern int32_t rw009_rssi(void);
extern rt_err_t rw009_join(const char * SSID, const char * passwd);
struct cmd_join
{
char ssid[SSID_NAME_LENGTH_MAX];
char passwd[PASSWORD_LENGTH_MAX];
uint8_t bssid[8]; // 6byte + 2byte PAD.
uint32_t channel;
uint32_t security;
};
#endif // SPI_WIFI_H_INCLUDED #endif // SPI_WIFI_H_INCLUDED
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册