tcpip_adapter: fix set static ip fail and remove the dhcp_check timer

This commit is contained in:
yuanjm
2021-04-27 14:39:50 +08:00
parent 8b6329dedb
commit e59e48fd6d

View File

@ -74,7 +74,6 @@ static esp_err_t tcpip_adapter_reset_ip_info(tcpip_adapter_if_t tcpip_if);
static esp_err_t tcpip_adapter_start_ip_lost_timer(tcpip_adapter_if_t tcpip_if);
static void tcpip_adapter_dhcpc_cb(struct netif *netif);
static void tcpip_adapter_ip_lost_timer(void *arg);
static void tcpip_adapter_dhcpc_done(TimerHandle_t arg);
static bool tcpip_inited = false;
static const char* TAG = "tcpip_adapter";
@ -85,9 +84,25 @@ ESP_EVENT_DEFINE_BASE(IP_EVENT);
err_t ethernetif_init(struct netif* netif);
void system_station_got_ip_set();
static int dhcp_fail_time = 0;
static tcpip_adapter_ip_info_t esp_ip[TCPIP_ADAPTER_IF_MAX];
static TimerHandle_t *dhcp_check_timer;
static void tcpip_adapter_set_wifi_ps(bool flag)
{
static bool is_ps_set = false;
if (flag) {
if (!is_ps_set) {
ESP_LOGD(TAG, "enable wifi ps");
esp_wifi_ps_lock();
is_ps_set = true;
}
} else {
if (is_ps_set) {
ESP_LOGD(TAG, "disable wifi ps");
esp_wifi_ps_unlock();
is_ps_set = false;
}
}
}
static void tcpip_adapter_dhcps_cb(u8_t client_ip[4])
{
@ -192,11 +207,6 @@ void tcpip_adapter_init(void)
IP4_ADDR(&esp_ip[TCPIP_ADAPTER_IF_AP].ip, 192, 168 , 4, 1);
IP4_ADDR(&esp_ip[TCPIP_ADAPTER_IF_AP].gw, 192, 168 , 4, 1);
IP4_ADDR(&esp_ip[TCPIP_ADAPTER_IF_AP].netmask, 255, 255 , 255, 0);
dhcp_check_timer = xTimerCreate("check_dhcp", 500 / portTICK_RATE_MS, true, NULL, tcpip_adapter_dhcpc_done);
if (!dhcp_check_timer) {
ESP_LOGI(TAG, "TCPIP adapter timer create error");
}
}
}
@ -287,56 +297,6 @@ static int tcpip_adapter_sta_recv_cb(void *buffer, uint16_t len, void *eb)
return tcpip_adapter_recv_cb(esp_netif[ESP_IF_WIFI_STA], buffer, len, eb);
}
static void tcpip_adapter_dhcpc_done(TimerHandle_t xTimer)
{
bool unlock_ps = true;
struct dhcp *clientdhcp = netif_dhcp_data(esp_netif[TCPIP_ADAPTER_IF_STA]) ;
struct netif *netif = esp_netif[TCPIP_ADAPTER_IF_STA];
if (!netif) {
ESP_LOGD(TAG, "null netif=%p", netif);
return;
}
#if LWIP_IPV4 && LWIP_AUTOIP
struct autoip *autoip = netif_autoip_data(netif);
#endif
xTimerStop(dhcp_check_timer, 0);
if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_STA])) {
if ((clientdhcp && clientdhcp->state == DHCP_STATE_BOUND)
#if LWIP_IPV4 && LWIP_AUTOIP
|| (autoip && autoip->state == AUTOIP_STATE_ANNOUNCING)
#endif
) {
/*send event here*/
tcpip_adapter_dhcpc_cb(esp_netif[TCPIP_ADAPTER_IF_STA]);
ESP_LOGD(TAG,"ip:" IPSTR ",mask:" IPSTR ",gw:" IPSTR "\n", IP2STR(ip_2_ip4(&(esp_netif[0]->ip_addr))),
IP2STR(ip_2_ip4(&(esp_netif[0]->netmask))), IP2STR(ip_2_ip4(&(esp_netif[0]->gw))));
dhcp_fail_time = 0;
} else if (dhcp_fail_time < (CONFIG_IP_LOST_TIMER_INTERVAL * 1000 / 500)) {
ESP_LOGD(TAG,"dhcpc time(ms): %d\n", dhcp_fail_time * 500);
dhcp_fail_time ++;
xTimerReset(dhcp_check_timer, 0);
unlock_ps = false;
} else {
dhcp_fail_time = 0;
ESP_LOGD(TAG,"ERROR dhcp get ip error\n");
}
} else {
dhcp_fail_time = 0;
tcpip_adapter_release_dhcp(esp_netif[TCPIP_ADAPTER_IF_STA]);
dhcpc_status[TCPIP_ADAPTER_IF_STA] = TCPIP_ADAPTER_DHCP_INIT;
tcpip_adapter_reset_ip_info(TCPIP_ADAPTER_IF_STA);
}
if (unlock_ps) {
esp_wifi_ps_unlock();
}
}
static esp_err_t tcpip_adapter_update_default_netif(void)
{
if ((esp_netif[TCPIP_ADAPTER_IF_STA] != NULL) && netif_is_up(esp_netif[TCPIP_ADAPTER_IF_STA])) {
@ -1073,6 +1033,7 @@ static void tcpip_adapter_dhcpc_cb(struct netif *netif)
}
}
tcpip_adapter_set_wifi_ps(false);
return;
}
@ -1171,16 +1132,13 @@ esp_err_t tcpip_adapter_dhcpc_start(tcpip_adapter_if_t tcpip_if)
return ESP_OK;
}
esp_wifi_ps_lock();
tcpip_adapter_set_wifi_ps(true);
if (tcpip_adapter_start_dhcp(p_netif) != ERR_OK) {
esp_wifi_ps_unlock();
tcpip_adapter_set_wifi_ps(false);
ESP_LOGD(TAG, "dhcp client start failed");
return ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED;
}
dhcp_fail_time = 0;
xTimerReset(dhcp_check_timer, portMAX_DELAY);
ESP_LOGD(TAG, "dhcp client start successfully");
dhcpc_status[tcpip_if] = TCPIP_ADAPTER_DHCP_STARTED;
return ESP_OK;