diff options
author | Glenn Moloney <glenn.moloney@gmail.com> | 2023-07-01 13:54:44 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2023-07-13 11:49:14 +1000 |
commit | dbced75b48d2fed969e4ee430a50cadf858eb4bf (patch) | |
tree | 5b184db3552b61e062908a63f742772dd3ff1a6d /ports/esp32/network_lan.c | |
parent | 2c67671651651363fc6f89a334508d0029758eef (diff) |
esp32/network_wlan: Wait for STA/AP START/STOP event in wlan.active.
This is a fix for commit bccbaa92b1fc6237f0f49a7f07cc194835fbf4e3:
- Should only wait for WIFI_EVENT_STA_START when invoked on the STA_IF
interface.
- The WIFI_EVENT_STA_START event is generated every time the STA_IF
interface is set active(True) and it was previously inactive, ie. not
only after calling esp_wifi_start().
- Also wait for WIFI_EVENT_STA_STOP when deactivating the interface.
- Also wait for relevant AP events.
Fixes issue #11910.
Signed-off-by: Glenn Moloney <glenn.moloney@gmail.com>
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'ports/esp32/network_lan.c')
-rw-r--r-- | ports/esp32/network_lan.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/ports/esp32/network_lan.c b/ports/esp32/network_lan.c index 8128eb5e1..fe3ff6f77 100644 --- a/ports/esp32/network_lan.c +++ b/ports/esp32/network_lan.c @@ -48,7 +48,6 @@ typedef struct _lan_if_obj_t { base_if_obj_t base; bool initialized; - bool active; int8_t mdc_pin; int8_t mdio_pin; int8_t phy_power_pin; @@ -295,7 +294,7 @@ STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar esp_err_t esp_err = esp_eth_driver_install(&config, &self->eth_handle); if (esp_err == ESP_OK) { - self->active = false; + self->base.active = false; self->initialized = true; } else { if (esp_err == ESP_ERR_INVALID_ARG) { @@ -322,19 +321,19 @@ STATIC mp_obj_t lan_active(size_t n_args, const mp_obj_t *args) { if (n_args > 1) { if (mp_obj_is_true(args[1])) { - self->active = (esp_eth_start(self->eth_handle) == ESP_OK); - if (!self->active) { + self->base.active = (esp_eth_start(self->eth_handle) == ESP_OK); + if (!self->base.active) { mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("ethernet enable failed")); } } else { - self->active = !(esp_eth_stop(self->eth_handle) == ESP_OK); - if (self->active) { + self->base.active = !(esp_eth_stop(self->eth_handle) == ESP_OK); + if (self->base.active) { mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("ethernet disable failed")); } } } - return mp_obj_new_bool(self->active); + return mp_obj_new_bool(self->base.active); } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(lan_active_obj, 1, 2, lan_active); @@ -345,7 +344,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(lan_status_obj, lan_status); STATIC mp_obj_t lan_isconnected(mp_obj_t self_in) { lan_if_obj_t *self = MP_OBJ_TO_PTR(self_in); - return self->active ? mp_obj_new_bool(self->phy->get_link(self->phy) == ETH_LINK_UP) : mp_const_false; + return self->base.active ? mp_obj_new_bool(self->phy->get_link(self->phy) == ETH_LINK_UP) : mp_const_false; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(lan_isconnected_obj, lan_isconnected); |