|
@@ -126,6 +126,7 @@ static void resp_handler(struct rw009_wifi *wifi_device, struct rw009_resp *resp
|
|
|
//dump
|
|
|
if(1)
|
|
|
{
|
|
|
+#ifdef WIFI_DEBUG_ON
|
|
|
rw009_ap_info *ap_info = &resp->resp.ap_info;
|
|
|
WIFI_DEBUG("SCAN SSID:%-32.32s\n", ap_info->ssid);
|
|
|
WIFI_DEBUG("SCAN BSSID:%02X-%02X-%02X-%02X-%02X-%02X\n",
|
|
@@ -139,6 +140,7 @@ static void resp_handler(struct rw009_wifi *wifi_device, struct rw009_resp *resp
|
|
|
WIFI_DEBUG("SCAN rate:%dMbps\n", ap_info->max_data_rate/1000);
|
|
|
WIFI_DEBUG("SCAN channel:%d\n", ap_info->channel);
|
|
|
WIFI_DEBUG("SCAN security:%08X\n\n", ap_info->security);
|
|
|
+#endif /* WIFI_DEBUG_ON */
|
|
|
}
|
|
|
|
|
|
wifi_device->ap_scan_count++;
|
|
@@ -148,7 +150,6 @@ static void resp_handler(struct rw009_wifi *wifi_device, struct rw009_resp *resp
|
|
|
return; /* wait for next ap */
|
|
|
}
|
|
|
break;
|
|
|
-
|
|
|
case RW009_CMD_JOIN:
|
|
|
case RW009_CMD_EASY_JOIN:
|
|
|
WIFI_DEBUG("resp_handler RW009_CMD_EASY_JOIN\n");
|
|
@@ -170,6 +171,7 @@ static void resp_handler(struct rw009_wifi *wifi_device, struct rw009_resp *resp
|
|
|
//dupm
|
|
|
if(1)
|
|
|
{
|
|
|
+#ifdef WIFI_DEBUG_ON
|
|
|
rw009_ap_info *ap_info = &resp->resp.ap_info;
|
|
|
WIFI_DEBUG("JOIN SSID:%-32.32s\n", ap_info->ssid);
|
|
|
WIFI_DEBUG("JOIN BSSID:%02X-%02X-%02X-%02X-%02X-%02X\n",
|
|
@@ -183,17 +185,34 @@ static void resp_handler(struct rw009_wifi *wifi_device, struct rw009_resp *resp
|
|
|
WIFI_DEBUG("JOIN rate:%dMbps\n", ap_info->max_data_rate/1000);
|
|
|
WIFI_DEBUG("JOIN channel:%d\n", ap_info->channel);
|
|
|
WIFI_DEBUG("JOIN security:%08X\n\n", ap_info->security);
|
|
|
+#endif /* WIFI_DEBUG_ON */
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case RW009_CMD_RSSI:
|
|
|
// TODO: client RSSI.
|
|
|
+ {
|
|
|
+ rw009_ap_info *ap_info = &resp->resp.ap_info;
|
|
|
+ wifi_device->ap_info.rssi = ap_info->rssi;
|
|
|
+ WIFI_DEBUG("current RSSI: %d\n", wifi_device->ap_info.rssi);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case RW009_CMD_SOFTAP:
|
|
|
+ {
|
|
|
+ if( resp->result == 0 )
|
|
|
{
|
|
|
- rw009_ap_info *ap_info = &resp->resp.ap_info;
|
|
|
- wifi_device->ap_info.rssi = ap_info->rssi;
|
|
|
- WIFI_DEBUG("current RSSI: %d\n", wifi_device->ap_info.rssi);
|
|
|
+ ;
|
|
|
+ wifi_device->active = 1;
|
|
|
+ eth_device_linkchange(&wifi_device->parent, RT_TRUE);
|
|
|
}
|
|
|
- break;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ WIFI_DEBUG("RW009_CMD_EASY_JOIN result: %d\n", resp->result );
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
|
|
|
default:
|
|
|
WIFI_DEBUG("resp_handler %d\n", resp->cmd);
|
|
@@ -258,6 +277,10 @@ static rt_err_t rw009_cmd(struct rw009_wifi *wifi_device, uint32_t cmd, void *ar
|
|
|
{
|
|
|
wifi_cmd->len = sizeof(rw009_cmd_rssi);
|
|
|
}
|
|
|
+ else if( cmd == RW009_CMD_SOFTAP )
|
|
|
+ {
|
|
|
+ wifi_cmd->len = sizeof(rw009_cmd_softap);
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
WIFI_DEBUG("unkown RW009 CMD %d\n", cmd);
|
|
@@ -603,7 +626,7 @@ static void spi_wifi_data_thread_entry(void *parameter)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-rt_err_t rt_hw_wifi_init(const char *spi_device_name)
|
|
|
+rt_err_t rt_hw_wifi_init(const char *spi_device_name, wifi_mode_t mode)
|
|
|
{
|
|
|
/* align and struct size check. */
|
|
|
RT_ASSERT( (SPI_MAX_DATA_LEN & 0x03) == 0);
|
|
@@ -689,10 +712,12 @@ rt_err_t rt_hw_wifi_init(const char *spi_device_name)
|
|
|
|
|
|
/* init: get mac address */
|
|
|
{
|
|
|
+ rw009_cmd_init init;
|
|
|
+ init.mode = mode;
|
|
|
WIFI_DEBUG("wifi_control RW009_CMD_INIT\n");
|
|
|
rw009_wifi_control((rt_device_t)&rw009_wifi_device,
|
|
|
RW009_CMD_INIT,
|
|
|
- (void *)1); // 0: firmware, 1: STA, 2:AP
|
|
|
+ (void *)&init); // 0: firmware, 1: STA, 2:AP
|
|
|
|
|
|
}
|
|
|
|
|
@@ -736,6 +761,28 @@ rt_err_t rw009_join(const char * SSID, const char * passwd)
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+rt_err_t rw009_softap(const char * SSID, const char * passwd,uint32_t security,uint32_t channel)
|
|
|
+{
|
|
|
+ rt_err_t result;
|
|
|
+ rt_device_t wifi_device;
|
|
|
+ rw009_cmd_softap softap;
|
|
|
+
|
|
|
+ wifi_device = rt_device_find("w0");
|
|
|
+ if(wifi_device == RT_NULL)
|
|
|
+ return -RT_ENOSYS;
|
|
|
+
|
|
|
+ strncpy( softap.ssid, SSID, sizeof(softap.ssid) );
|
|
|
+ strncpy( softap.passwd, passwd, sizeof(softap.passwd) );
|
|
|
+
|
|
|
+ softap.security = security;
|
|
|
+ softap.channel = channel;
|
|
|
+ result = rt_device_control(wifi_device,
|
|
|
+ RW009_CMD_SOFTAP,
|
|
|
+ (void *)&softap);
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
int32_t rw009_rssi(void)
|
|
|
{
|
|
|
rt_err_t result;
|