Skip to content

Commit dcfecc3

Browse files
committed
Merge branch 'task/wifi_conn_check_in_rmaker_task' into 'master'
rmaker_core: Check for wifi connection in rmaker_task See merge request app-frameworks/esp-rainmaker!240
2 parents 7398ed6 + f6510db commit dcfecc3

File tree

1 file changed

+41
-23
lines changed

1 file changed

+41
-23
lines changed

components/esp_rainmaker/src/core/esp_rmaker_core.c

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,13 @@ static void esp_rmaker_event_handler(void* arg, esp_event_base_t event_base,
130130
ESP_LOGE(TAG, "Please update your phone apps and repeat Wi-Fi provisioning with BLE transport.");
131131
}
132132
#endif
133-
/* Signal rmaker thread to continue execution */
134-
xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_EVENT);
133+
if (wifi_event_group) {
134+
/* Signal rmaker thread to continue execution */
135+
xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_EVENT);
136+
}
135137
} else if (event_base == RMAKER_EVENT && event_id == RMAKER_EVENT_USER_NODE_MAPPING_DONE) {
136138
esp_rmaker_params_mqtt_init();
137139
esp_event_handler_unregister(RMAKER_EVENT, RMAKER_EVENT_USER_NODE_MAPPING_DONE, &esp_rmaker_event_handler);
138-
139140
}
140141
}
141142

@@ -220,36 +221,45 @@ static void esp_rmaker_task(void *data)
220221
{
221222
ESP_RMAKER_CHECK_HANDLE();
222223
esp_rmaker_priv_data->state = ESP_RMAKER_STATE_STARTING;
223-
esp_err_t err;
224+
esp_err_t err = ESP_FAIL;
225+
wifi_ap_record_t ap_info;
224226
wifi_event_group = xEventGroupCreate();
225227
if (!wifi_event_group) {
226228
ESP_LOGE(TAG, "Failed to create event group. Aborting");
227-
goto rmaker_err;
229+
goto rmaker_end;
228230
}
229231
err = esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler, esp_rmaker_priv_data);
230232
if (err != ESP_OK) {
231233
ESP_LOGE(TAG, "Failed to register event handler. Error: %d. Aborting", err);
232-
goto rmaker_err;
234+
goto rmaker_end;
233235
}
234236
/* Assisted claiming needs to be done before Wi-Fi connection */
235237
#ifdef CONFIG_ESP_RMAKER_ASSISTED_CLAIM
236238
if (esp_rmaker_priv_data->need_claim) {
239+
if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) {
240+
ESP_LOGE(TAG, "Node connected to Wi-Fi without Assisted claiming. Cannot proceed to MQTT connection.");
241+
ESP_LOGE(TAG, "Please update your phone apps and repeat Wi-Fi provisioning with BLE transport.");
242+
esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler);
243+
err = ESP_FAIL;
244+
goto rmaker_end;
245+
}
237246
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_STARTED, NULL, 0);
238247
err = esp_rmaker_assisted_claim_perform(esp_rmaker_priv_data->claim_data);
239248
if (err != ESP_OK) {
240249
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_FAILED, NULL, 0);
241250
ESP_LOGE(TAG, "esp_rmaker_self_claim_perform() returned %d. Aborting", err);
242251
esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler);
243-
goto rmaker_err;
252+
goto rmaker_end;
244253
}
245254
esp_rmaker_priv_data->claim_data = NULL;
246255
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_SUCCESSFUL, NULL, 0);
247256
}
248257
#endif
249-
/* Wait for Wi-Fi connection */
250-
xEventGroupWaitBits(wifi_event_group, WIFI_CONNECTED_EVENT, false, true, portMAX_DELAY);
251-
vEventGroupDelete(wifi_event_group);
252-
wifi_event_group = NULL;
258+
/* Check if already connected to Wi-Fi */
259+
if (esp_wifi_sta_get_ap_info(&ap_info) != ESP_OK) {
260+
/* Wait for Wi-Fi connection */
261+
xEventGroupWaitBits(wifi_event_group, WIFI_CONNECTED_EVENT, false, true, portMAX_DELAY);
262+
}
253263
esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler);
254264

255265
if (esp_rmaker_priv_data->enable_time_sync) {
@@ -265,7 +275,7 @@ static void esp_rmaker_task(void *data)
265275
if (err != ESP_OK) {
266276
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_FAILED, NULL, 0);
267277
ESP_LOGE(TAG, "esp_rmaker_self_claim_perform() returned %d. Aborting", err);
268-
goto rmaker_err;
278+
goto rmaker_end;
269279
}
270280
esp_rmaker_priv_data->claim_data = NULL;
271281
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_SUCCESSFUL, NULL, 0);
@@ -276,35 +286,39 @@ static void esp_rmaker_task(void *data)
276286
esp_rmaker_priv_data->mqtt_conn_params = esp_rmaker_get_mqtt_conn_params();
277287
if (!esp_rmaker_priv_data->mqtt_conn_params) {
278288
ESP_LOGE(TAG, "Failed to initialise MQTT Config after claiming. Aborting");
279-
goto rmaker_err;
289+
err = ESP_FAIL;
290+
goto rmaker_end;
280291
}
281292
err = esp_rmaker_mqtt_init(esp_rmaker_priv_data->mqtt_conn_params);
282293
if (err != ESP_OK) {
283294
ESP_LOGE(TAG, "esp_rmaker_mqtt_init() returned %d. Aborting", err);
284-
goto rmaker_err;
295+
goto rmaker_end;
285296
}
286297
esp_rmaker_priv_data->need_claim = false;
287298
}
288299
#endif /* ESP_RMAKER_CLAIM_ENABLED */
289300
#ifdef CONFIG_ESP_RMAKER_LOCAL_CTRL_ENABLE
290-
if (esp_rmaker_start_local_ctrl_service(esp_rmaker_get_node_id()) != ESP_OK) {
301+
err = esp_rmaker_start_local_ctrl_service(esp_rmaker_get_node_id());
302+
if (err != ESP_OK) {
291303
ESP_LOGE(TAG, "Failed to start local control service. Aborting!!!");
292-
goto rmaker_err;
304+
goto rmaker_end;
293305
}
294306
#endif /* CONFIG_ESP_RMAKER_LOCAL_CTRL_ENABLE */
295307
err = esp_rmaker_mqtt_connect();
296308
if (err != ESP_OK) {
297309
ESP_LOGE(TAG, "esp_rmaker_mqtt_connect() returned %d. Aborting", err);
298-
goto rmaker_err;
310+
goto rmaker_end;
299311
}
300312
esp_rmaker_priv_data->mqtt_connected = true;
301313
esp_rmaker_priv_data->state = ESP_RMAKER_STATE_STARTED;
302-
if (esp_rmaker_report_node_config() != ESP_OK) {
314+
err = esp_rmaker_report_node_config();
315+
if (err != ESP_OK) {
303316
ESP_LOGE(TAG, "Aborting!!!");
304317
goto rmaker_end;
305318
}
306319
if (esp_rmaker_user_node_mapping_get_state() == ESP_RMAKER_USER_MAPPING_DONE) {
307-
if (esp_rmaker_params_mqtt_init() != ESP_OK) {
320+
err = esp_rmaker_params_mqtt_init();
321+
if (err != ESP_OK) {
308322
ESP_LOGE(TAG, "Aborting!!!");
309323
goto rmaker_end;
310324
}
@@ -332,16 +346,20 @@ static void esp_rmaker_task(void *data)
332346
}
333347
ESP_LOGI(TAG, "Waiting for User Node Association.");
334348
}
335-
return;
349+
err = ESP_OK;
336350

337351
rmaker_end:
338-
esp_rmaker_mqtt_disconnect();
339-
esp_rmaker_priv_data->mqtt_connected = false;
340-
rmaker_err:
341352
if (wifi_event_group) {
342353
vEventGroupDelete(wifi_event_group);
343354
}
344355
wifi_event_group = NULL;
356+
if (err == ESP_OK) {
357+
return;
358+
}
359+
if (esp_rmaker_priv_data->mqtt_connected) {
360+
esp_rmaker_mqtt_disconnect();
361+
esp_rmaker_priv_data->mqtt_connected = false;
362+
}
345363
esp_rmaker_priv_data->state = ESP_RMAKER_STATE_INIT_DONE;
346364
}
347365

0 commit comments

Comments
 (0)