diff --git a/esp32_device/main/ethernet.c b/esp32_device/main/ethernet.c index fc702aa..423e2b5 100644 --- a/esp32_device/main/ethernet.c +++ b/esp32_device/main/ethernet.c @@ -14,6 +14,8 @@ static const char *TAG = "ethernet"; +static bool network_ready = false; + /** Event handler for Ethernet events */ static void eth_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) @@ -32,12 +34,14 @@ static void eth_event_handler(void *arg, esp_event_base_t event_base, break; case ETHERNET_EVENT_DISCONNECTED: ESP_LOGI(TAG, "Ethernet Link Down"); + network_ready = false; break; case ETHERNET_EVENT_START: ESP_LOGI(TAG, "Ethernet Started"); break; case ETHERNET_EVENT_STOP: ESP_LOGI(TAG, "Ethernet Stopped"); + network_ready = false; break; default: break; @@ -57,6 +61,8 @@ static void got_ip_event_handler(void *arg, esp_event_base_t event_base, ESP_LOGI(TAG, "ETHMASK:" IPSTR, IP2STR(&ip_info->netmask)); ESP_LOGI(TAG, "ETHGW:" IPSTR, IP2STR(&ip_info->gw)); ESP_LOGI(TAG, "~~~~~~~~~~~"); + + network_ready = true; } void ethernet_init() @@ -126,4 +132,26 @@ void ethernet_init() // Register user defined event handers ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, ð_event_handler, NULL)); ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &got_ip_event_handler, NULL)); +} + +bool ethernet_is_ready() +{ + return network_ready; +} + +void ethernet_wait_for_network() +{ + for (size_t i = 0; i < 1000 && !network_ready; i++) + { + ESP_LOGI(TAG, "Wait for network %d / 1000", i); + system_sleep(1); + } + + if (!network_ready) + { + ESP_LOGE(TAG, "Failed to acquire network, will reboot!"); + reboot(); + } + + ESP_LOGI(TAG, "Network is now available"); } \ No newline at end of file diff --git a/esp32_device/main/ethernet.h b/esp32_device/main/ethernet.h index f7cc4c7..78ce21e 100644 --- a/esp32_device/main/ethernet.h +++ b/esp32_device/main/ethernet.h @@ -4,6 +4,8 @@ #pragma once +#include "stdbool.h" + #ifdef __cplusplus extern "C" { @@ -15,9 +17,14 @@ extern "C" void ethernet_init(); /** - * De-initialize Ethernet connection + * Check if Ethernet connection is ready or not */ - void ethernet_deinit(); + bool ethernet_is_ready(); + + /** + * Wait for network connection to become ready + */ + void ethernet_wait_for_network(); #ifdef __cplusplus } diff --git a/esp32_device/main/main.c b/esp32_device/main/main.c index c4bd149..1114d7f 100755 --- a/esp32_device/main/main.c +++ b/esp32_device/main/main.c @@ -45,13 +45,14 @@ void app_main(void) ESP_LOGI(TAG, "Initialize network\n"); ethernet_init(); + ethernet_wait_for_network(); ESP_LOGI(TAG, "Check secure origin\n"); char *sec_orig = unsecure_api_get_secure_origin(); assert(sec_orig != NULL); printf("Res = %s\n", sec_orig); - system_sleep(20); + system_sleep(120); reboot(); }