From d02b2f4d0f7550fe2c6fcca46e3547feda4030bf Mon Sep 17 00:00:00 2001 From: Shreyash Bubane Date: Thu, 11 Dec 2025 00:23:09 +0530 Subject: [PATCH] rmaker_app_network: added menuconfig to control app_network_start() return behaviour --- examples/common/rmaker_app_network/Kconfig.projbuild | 7 +++++++ examples/common/rmaker_app_network/app_network.c | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/examples/common/rmaker_app_network/Kconfig.projbuild b/examples/common/rmaker_app_network/Kconfig.projbuild index e0c71a1..1703e47 100644 --- a/examples/common/rmaker_app_network/Kconfig.projbuild +++ b/examples/common/rmaker_app_network/Kconfig.projbuild @@ -74,6 +74,13 @@ menu "ESP RainMaker App Wi-Fi Provisioning" help Provisioning Name Prefix. + config APP_NETWORK_ASYNCHRONOUS_CONNECTION + bool "Asynchronous network connection" + default n + help + If this option is enabled, app_network_start() will perform the network connection asynchronously. + If this option is disabled, app_network_start() will return *after* network connection is established. + config APP_WIFI_PROV_COMPAT bool "Stay compatible with App Wi-Fi component" depends on ESP_RMAKER_NETWORK_OVER_WIFI diff --git a/examples/common/rmaker_app_network/app_network.c b/examples/common/rmaker_app_network/app_network.c index 8dbd4d6..651319f 100644 --- a/examples/common/rmaker_app_network/app_network.c +++ b/examples/common/rmaker_app_network/app_network.c @@ -45,14 +45,16 @@ ESP_EVENT_DEFINE_BASE(APP_NETWORK_EVENT); static const char *TAG = "app_network"; +#if !CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION static const int NETWORK_CONNECTED_EVENT = BIT0; static EventGroupHandle_t network_event_group; +#endif /* CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION */ #define PROV_QR_VERSION "v1" #define PROV_TRANSPORT_SOFTAP "softap" #define PROV_TRANSPORT_BLE "ble" -#define QRCODE_BASE_URL "https://rainmaker.espressif.com/qrcode.html" +#define QRCODE_BASE_URL "https://rainmaker.espressif.com/qrcode.html" #define CREDENTIALS_NAMESPACE "rmaker_creds" #define RANDOM_NVS_KEY "random" @@ -319,14 +321,18 @@ static void network_event_handler(void* arg, esp_event_base_t event_base, int32_ if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; ESP_LOGI(TAG, "Connected with IP Address:" IPSTR, IP2STR(&event->ip_info.ip)); +#if !CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION /* Signal main application to continue execution */ xEventGroupSetBits(network_event_group, NETWORK_CONNECTED_EVENT); +#endif /* CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION */ } #endif /* CONFIG_ESP_RMAKER_NETWORK_OVER_WIFI */ #ifdef CONFIG_ESP_RMAKER_NETWORK_OVER_THREAD if (event_base == OPENTHREAD_EVENT && event_id == OPENTHREAD_EVENT_ATTACHED) { +#if !CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION /* Signal main application to continue execution */ xEventGroupSetBits(network_event_group, NETWORK_CONNECTED_EVENT); +#endif /* CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION */ } #endif /* CONFIG_ESP_RMAKER_NETWORK_OVER_THREAD */ if (event_base == NETWORK_PROV_EVENT && event_id == NETWORK_PROV_END) { @@ -358,7 +364,9 @@ void app_network_init() #ifdef CONFIG_ESP_RMAKER_NETWORK_OVER_THREAD ESP_ERROR_CHECK(thread_init()); #endif +#if !CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION network_event_group = xEventGroupCreate(); +#endif /* CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION */ #ifdef APP_PROV_STOP_ON_CREDS_MISMATCH ESP_ERROR_CHECK(esp_event_handler_register(PROTOCOMM_SECURITY_SESSION_EVENT, ESP_EVENT_ANY_ID, &network_event_handler, NULL)); #endif @@ -448,7 +456,9 @@ esp_err_t app_network_start(app_network_pop_type_t pop_type) custom_mfg_data = NULL; custom_mfg_data_len = 0; } +#if !CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION /* Wait for Network connection */ xEventGroupWaitBits(network_event_group, NETWORK_CONNECTED_EVENT, false, true, portMAX_DELAY); +#endif /* CONFIG_APP_NETWORK_ASYNCHRONOUS_CONNECTION */ return err; }