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>
diff --git a/ports/esp32/network_lan.c b/ports/esp32/network_lan.c
index 8128eb5..fe3ff6f 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 @@
 
     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 @@
 
     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_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);