@@ -130,12 +130,13 @@ static void esp_rmaker_event_handler(void* arg, esp_event_base_t event_base,
130
130
ESP_LOGE (TAG , "Please update your phone apps and repeat Wi-Fi provisioning with BLE transport." );
131
131
}
132
132
#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
+ }
135
137
} else if (event_base == RMAKER_EVENT && event_id == RMAKER_EVENT_USER_NODE_MAPPING_DONE ) {
136
138
esp_rmaker_params_mqtt_init ();
137
139
esp_event_handler_unregister (RMAKER_EVENT , RMAKER_EVENT_USER_NODE_MAPPING_DONE , & esp_rmaker_event_handler );
138
-
139
140
}
140
141
}
141
142
@@ -220,36 +221,45 @@ static void esp_rmaker_task(void *data)
220
221
{
221
222
ESP_RMAKER_CHECK_HANDLE ();
222
223
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 ;
224
226
wifi_event_group = xEventGroupCreate ();
225
227
if (!wifi_event_group ) {
226
228
ESP_LOGE (TAG , "Failed to create event group. Aborting" );
227
- goto rmaker_err ;
229
+ goto rmaker_end ;
228
230
}
229
231
err = esp_event_handler_register (IP_EVENT , IP_EVENT_STA_GOT_IP , & esp_rmaker_event_handler , esp_rmaker_priv_data );
230
232
if (err != ESP_OK ) {
231
233
ESP_LOGE (TAG , "Failed to register event handler. Error: %d. Aborting" , err );
232
- goto rmaker_err ;
234
+ goto rmaker_end ;
233
235
}
234
236
/* Assisted claiming needs to be done before Wi-Fi connection */
235
237
#ifdef CONFIG_ESP_RMAKER_ASSISTED_CLAIM
236
238
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
+ }
237
246
esp_rmaker_post_event (RMAKER_EVENT_CLAIM_STARTED , NULL , 0 );
238
247
err = esp_rmaker_assisted_claim_perform (esp_rmaker_priv_data -> claim_data );
239
248
if (err != ESP_OK ) {
240
249
esp_rmaker_post_event (RMAKER_EVENT_CLAIM_FAILED , NULL , 0 );
241
250
ESP_LOGE (TAG , "esp_rmaker_self_claim_perform() returned %d. Aborting" , err );
242
251
esp_event_handler_unregister (IP_EVENT , IP_EVENT_STA_GOT_IP , & esp_rmaker_event_handler );
243
- goto rmaker_err ;
252
+ goto rmaker_end ;
244
253
}
245
254
esp_rmaker_priv_data -> claim_data = NULL ;
246
255
esp_rmaker_post_event (RMAKER_EVENT_CLAIM_SUCCESSFUL , NULL , 0 );
247
256
}
248
257
#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
+ }
253
263
esp_event_handler_unregister (IP_EVENT , IP_EVENT_STA_GOT_IP , & esp_rmaker_event_handler );
254
264
255
265
if (esp_rmaker_priv_data -> enable_time_sync ) {
@@ -265,7 +275,7 @@ static void esp_rmaker_task(void *data)
265
275
if (err != ESP_OK ) {
266
276
esp_rmaker_post_event (RMAKER_EVENT_CLAIM_FAILED , NULL , 0 );
267
277
ESP_LOGE (TAG , "esp_rmaker_self_claim_perform() returned %d. Aborting" , err );
268
- goto rmaker_err ;
278
+ goto rmaker_end ;
269
279
}
270
280
esp_rmaker_priv_data -> claim_data = NULL ;
271
281
esp_rmaker_post_event (RMAKER_EVENT_CLAIM_SUCCESSFUL , NULL , 0 );
@@ -276,35 +286,39 @@ static void esp_rmaker_task(void *data)
276
286
esp_rmaker_priv_data -> mqtt_conn_params = esp_rmaker_get_mqtt_conn_params ();
277
287
if (!esp_rmaker_priv_data -> mqtt_conn_params ) {
278
288
ESP_LOGE (TAG , "Failed to initialise MQTT Config after claiming. Aborting" );
279
- goto rmaker_err ;
289
+ err = ESP_FAIL ;
290
+ goto rmaker_end ;
280
291
}
281
292
err = esp_rmaker_mqtt_init (esp_rmaker_priv_data -> mqtt_conn_params );
282
293
if (err != ESP_OK ) {
283
294
ESP_LOGE (TAG , "esp_rmaker_mqtt_init() returned %d. Aborting" , err );
284
- goto rmaker_err ;
295
+ goto rmaker_end ;
285
296
}
286
297
esp_rmaker_priv_data -> need_claim = false;
287
298
}
288
299
#endif /* ESP_RMAKER_CLAIM_ENABLED */
289
300
#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 ) {
291
303
ESP_LOGE (TAG , "Failed to start local control service. Aborting!!!" );
292
- goto rmaker_err ;
304
+ goto rmaker_end ;
293
305
}
294
306
#endif /* CONFIG_ESP_RMAKER_LOCAL_CTRL_ENABLE */
295
307
err = esp_rmaker_mqtt_connect ();
296
308
if (err != ESP_OK ) {
297
309
ESP_LOGE (TAG , "esp_rmaker_mqtt_connect() returned %d. Aborting" , err );
298
- goto rmaker_err ;
310
+ goto rmaker_end ;
299
311
}
300
312
esp_rmaker_priv_data -> mqtt_connected = true;
301
313
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 ) {
303
316
ESP_LOGE (TAG , "Aborting!!!" );
304
317
goto rmaker_end ;
305
318
}
306
319
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 ) {
308
322
ESP_LOGE (TAG , "Aborting!!!" );
309
323
goto rmaker_end ;
310
324
}
@@ -332,16 +346,20 @@ static void esp_rmaker_task(void *data)
332
346
}
333
347
ESP_LOGI (TAG , "Waiting for User Node Association." );
334
348
}
335
- return ;
349
+ err = ESP_OK ;
336
350
337
351
rmaker_end :
338
- esp_rmaker_mqtt_disconnect ();
339
- esp_rmaker_priv_data -> mqtt_connected = false;
340
- rmaker_err :
341
352
if (wifi_event_group ) {
342
353
vEventGroupDelete (wifi_event_group );
343
354
}
344
355
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
+ }
345
363
esp_rmaker_priv_data -> state = ESP_RMAKER_STATE_INIT_DONE ;
346
364
}
347
365
0 commit comments