From f9dc846a0f53c05e1fc117b3eebb59903115414b Mon Sep 17 00:00:00 2001 From: Piyush Shah Date: Fri, 16 Sep 2022 01:05:00 +0530 Subject: [PATCH] esp_rmaker_core: Changes as per the change in the behaviour of MQTT connect API The MQTT connect API is no more blocking. Logic was added in the rmaker task to replicate that blocking behaviour so that there is no change in behaviour for the RainMaker functionality. --- .../esp_rainmaker/src/core/esp_rmaker_core.c | 33 ++++++++++++++----- components/rmaker_common | 2 +- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/components/esp_rainmaker/src/core/esp_rmaker_core.c b/components/esp_rainmaker/src/core/esp_rmaker_core.c index 5d7a802..9ff6559 100644 --- a/components/esp_rainmaker/src/core/esp_rmaker_core.c +++ b/components/esp_rainmaker/src/core/esp_rmaker_core.c @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -33,7 +34,8 @@ #include "esp_rmaker_client_data.h" static const int WIFI_CONNECTED_EVENT = BIT0; -static EventGroupHandle_t wifi_event_group; +static const int MQTT_CONNECTED_EVENT = BIT1; +static EventGroupHandle_t rmaker_core_event_group; ESP_EVENT_DEFINE_BASE(RMAKER_EVENT); @@ -130,9 +132,9 @@ static void esp_rmaker_event_handler(void* arg, esp_event_base_t event_base, ESP_LOGE(TAG, "Please update your phone apps and repeat Wi-Fi provisioning with BLE transport."); } #endif - if (wifi_event_group) { + if (rmaker_core_event_group) { /* Signal rmaker thread to continue execution */ - xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_EVENT); + xEventGroupSetBits(rmaker_core_event_group, WIFI_CONNECTED_EVENT); } } else if (event_base == RMAKER_EVENT && (event_id == RMAKER_EVENT_USER_NODE_MAPPING_DONE || @@ -140,6 +142,11 @@ static void esp_rmaker_event_handler(void* arg, esp_event_base_t event_base, esp_event_handler_unregister(RMAKER_EVENT, event_id, &esp_rmaker_event_handler); esp_rmaker_params_mqtt_init(); esp_rmaker_cmd_response_enable(); + } else if (event_base == RMAKER_COMMON_EVENT && event_id == RMAKER_MQTT_EVENT_CONNECTED) { + if (rmaker_core_event_group) { + /* Signal rmaker thread to continue execution */ + xEventGroupSetBits(rmaker_core_event_group, MQTT_CONNECTED_EVENT); + } } } @@ -226,8 +233,8 @@ static void esp_rmaker_task(void *data) esp_rmaker_priv_data->state = ESP_RMAKER_STATE_STARTING; esp_err_t err = ESP_FAIL; wifi_ap_record_t ap_info; - wifi_event_group = xEventGroupCreate(); - if (!wifi_event_group) { + rmaker_core_event_group = xEventGroupCreate(); + if (!rmaker_core_event_group) { ESP_LOGE(TAG, "Failed to create event group. Aborting"); goto rmaker_end; } @@ -236,6 +243,11 @@ static void esp_rmaker_task(void *data) ESP_LOGE(TAG, "Failed to register event handler. Error: %d. Aborting", err); goto rmaker_end; } + err = esp_event_handler_register(RMAKER_COMMON_EVENT, RMAKER_MQTT_EVENT_CONNECTED, &esp_rmaker_event_handler, esp_rmaker_priv_data); + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to register event handler. Error: %d. Aborting", err); + goto rmaker_end; + } /* Assisted claiming needs to be done before Wi-Fi connection */ #ifdef CONFIG_ESP_RMAKER_ASSISTED_CLAIM if (esp_rmaker_priv_data->need_claim) { @@ -261,7 +273,7 @@ static void esp_rmaker_task(void *data) /* Check if already connected to Wi-Fi */ if (esp_wifi_sta_get_ap_info(&ap_info) != ESP_OK) { /* Wait for Wi-Fi connection */ - xEventGroupWaitBits(wifi_event_group, WIFI_CONNECTED_EVENT, false, true, portMAX_DELAY); + xEventGroupWaitBits(rmaker_core_event_group, WIFI_CONNECTED_EVENT, false, true, portMAX_DELAY); } esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler); @@ -312,6 +324,9 @@ static void esp_rmaker_task(void *data) ESP_LOGE(TAG, "esp_rmaker_mqtt_connect() returned %d. Aborting", err); goto rmaker_end; } + ESP_LOGI(TAG, "Waiting for MQTT connection"); + xEventGroupWaitBits(rmaker_core_event_group, MQTT_CONNECTED_EVENT, false, true, portMAX_DELAY); + esp_event_handler_unregister(RMAKER_COMMON_EVENT, RMAKER_MQTT_EVENT_CONNECTED, &esp_rmaker_event_handler); esp_rmaker_priv_data->mqtt_connected = true; esp_rmaker_priv_data->state = ESP_RMAKER_STATE_STARTED; err = esp_rmaker_report_node_config(); @@ -357,10 +372,10 @@ static void esp_rmaker_task(void *data) err = ESP_OK; rmaker_end: - if (wifi_event_group) { - vEventGroupDelete(wifi_event_group); + if (rmaker_core_event_group) { + vEventGroupDelete(rmaker_core_event_group); } - wifi_event_group = NULL; + rmaker_core_event_group = NULL; if (err == ESP_OK) { return; } diff --git a/components/rmaker_common b/components/rmaker_common index 7f60629..a64ad7a 160000 --- a/components/rmaker_common +++ b/components/rmaker_common @@ -1 +1 @@ -Subproject commit 7f606294a1e692a1b1efb356e4a94cd46f603952 +Subproject commit a64ad7a6806c242de468a8fa72e801d634403442