summaryrefslogtreecommitdiff
path: root/components/drivers
diff options
context:
space:
mode:
authortangyuxin <[email protected]>2019-08-14 10:09:27 +0800
committertyx <[email protected]>2019-08-18 20:16:21 +0800
commitd6fb6fec4783d47edb7ad9098d483aea805d56bb (patch)
tree7f093097f7da83b44e4951f71ad1073c25f0e397 /components/drivers
parent3b252d5b9721bb7cc649dad832507937efc1e96c (diff)
[components][drivers][wlan] 1.修复异步调用 dhcp 无法停止的bug 2.支持解挂载 lwip 协议
Diffstat (limited to 'components/drivers')
-rw-r--r--components/drivers/wlan/wlan_lwip.c62
1 files changed, 40 insertions, 22 deletions
diff --git a/components/drivers/wlan/wlan_lwip.c b/components/drivers/wlan/wlan_lwip.c
index 797dd823fb..3c4e4dd598 100644
--- a/components/drivers/wlan/wlan_lwip.c
+++ b/components/drivers/wlan/wlan_lwip.c
@@ -181,14 +181,10 @@ static void netif_set_connected(void *parameter)
netifapi_netif_common(eth_dev->netif, netif_set_link_up, NULL);
#ifdef LWIP_USING_DHCPD
{
- char netif_name[8];
- int i;
+ char netif_name[RT_NAME_MAX];
rt_memset(netif_name, 0, sizeof(netif_name));
- for (i = 0; i < sizeof(eth_dev->netif->name); i++)
- {
- netif_name[i] = eth_dev->netif->name[i];
- }
+ rt_memcpy(netif_name, eth_dev->netif->name, sizeof(eth_dev->netif->name));
dhcpd_start(netif_name);
}
#endif
@@ -196,24 +192,24 @@ static void netif_set_connected(void *parameter)
}
else
{
- if (wlan->mode == RT_WLAN_STATION)
- {
- LOG_D("F:%s L:%d dhcp stop run", __FUNCTION__, __LINE__);
- netifapi_netif_common(eth_dev->netif, netif_set_link_down, NULL);
+ LOG_D("F:%s L:%d set linkdown", __FUNCTION__, __LINE__);
+ netifapi_netif_common(eth_dev->netif, netif_set_link_down, NULL);
+ rt_timer_stop(&lwip_prot->timer);
#ifdef RT_LWIP_DHCP
- {
- ip_addr_t ip_addr = { 0 };
- dhcp_stop(eth_dev->netif);
- netif_set_addr(eth_dev->netif, &ip_addr, &ip_addr, &ip_addr);
- }
-#endif
- rt_timer_stop(&lwip_prot->timer);
+ {
+ ip_addr_t ip_addr = { 0 };
+ dhcp_stop(eth_dev->netif);
+ netif_set_addr(eth_dev->netif, &ip_addr, &ip_addr, &ip_addr);
}
- else if (wlan->mode == RT_WLAN_AP)
+#endif
+#ifdef LWIP_USING_DHCPD
{
- LOG_D("F:%s L:%d dhcpd stop run", __FUNCTION__, __LINE__);
- netifapi_netif_common(eth_dev->netif, netif_set_link_down, NULL);
+ char netif_name[RT_NAME_MAX];
+ rt_memset(netif_name, 0, sizeof(netif_name));
+ rt_memcpy(netif_name, lwip_prot->eth.netif->name, sizeof(lwip_prot->eth.netif->name));
+ dhcpd_stop(netif_name);
}
+#endif
}
}
@@ -421,7 +417,7 @@ const static struct rt_device_ops wlan_lwip_ops =
static struct rt_wlan_prot *rt_wlan_lwip_protocol_register(struct rt_wlan_prot *prot, struct rt_wlan_device *wlan)
{
struct eth_device *eth = RT_NULL;
- static rt_uint8_t id = 0;
+ rt_uint8_t id = 0;
char eth_name[4], timer_name[16];
rt_device_t device = RT_NULL;
struct lwip_prot_des *lwip_prot;
@@ -501,8 +497,30 @@ static struct rt_wlan_prot *rt_wlan_lwip_protocol_register(struct rt_wlan_prot *
static void rt_wlan_lwip_protocol_unregister(struct rt_wlan_prot *prot, struct rt_wlan_device *wlan)
{
- /*TODO*/
+ struct lwip_prot_des *lwip_prot = (struct lwip_prot_des *)prot;
+
LOG_D("F:%s L:%d is run wlan:0x%08x", __FUNCTION__, __LINE__, wlan);
+#if !defined(RT_USING_LWIP141)
+ wlan->prot = RT_NULL;
+ if (lwip_prot == RT_NULL)
+ {
+ return;
+ }
+
+#ifdef LWIP_USING_DHCPD
+ {
+ char netif_name[RT_NAME_MAX];
+ rt_memset(netif_name, 0, sizeof(netif_name));
+ rt_memcpy(netif_name, lwip_prot->eth.netif->name, sizeof(lwip_prot->eth.netif->name));
+ dhcpd_stop(netif_name);
+ }
+#endif
+ eth_device_deinit(&lwip_prot->eth);
+ rt_device_close((rt_device_t)wlan);
+ rt_timer_detach(&lwip_prot->timer);
+ wlan->netdev = RT_NULL;
+ rt_free(lwip_prot);
+#endif
}
static struct rt_wlan_prot_ops ops =