diff --git a/cpu/esp32/esp-wifi/esp_wifi_netdev.c b/cpu/esp32/esp-wifi/esp_wifi_netdev.c index dfe2b5451e293977c455a29eb82f7a303b1246a9..8516cab0cd7be5bd54394764332c067af154eede 100644 --- a/cpu/esp32/esp-wifi/esp_wifi_netdev.c +++ b/cpu/esp32/esp-wifi/esp_wifi_netdev.c @@ -122,18 +122,28 @@ static esp_err_t IRAM_ATTR _esp_system_event_handler(void *ctx, system_event_t * case SYSTEM_EVENT_STA_CONNECTED: DEBUG("%s WiFi connected\n", __func__); + + /* register RX callback function */ + esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, _esp_wifi_rx_cb); + _esp_wifi_dev.connected = true; _esp_wifi_dev.event = SYSTEM_EVENT_ETH_CONNECTED; _esp_wifi_dev.netdev.event_callback(&_esp_wifi_dev.netdev, NETDEV_EVENT_ISR); + break; case SYSTEM_EVENT_STA_DISCONNECTED: DEBUG("%s WiFi disconnected from ssid %s, reason %d\n", __func__, event->event_info.disconnected.ssid, event->event_info.disconnected.reason); + + /* unregister RX callback function */ + esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, NULL); + _esp_wifi_dev.connected = false; _esp_wifi_dev.event = SYSTEM_EVENT_ETH_DISCONNECTED; _esp_wifi_dev.netdev.event_callback(&_esp_wifi_dev.netdev, NETDEV_EVENT_ISR); + break; default: