Skip to content

Commit f2a03ae

Browse files
committed
feat(zigbee): Check the type of leave signal
1 parent 13cd0d3 commit f2a03ae

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

libraries/Zigbee/src/ZigbeeCore.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
234234
esp_zb_app_signal_type_t sig_type = (esp_zb_app_signal_type_t)*p_sg_p;
235235
//coordinator variables
236236
esp_zb_zdo_signal_device_annce_params_t *dev_annce_params = NULL;
237+
esp_zb_zdo_signal_leave_params_t *leave_params = NULL;
237238

238239
//main switch
239240
switch (sig_type) {
@@ -371,9 +372,18 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
371372
}
372373
break;
373374
case ESP_ZB_ZDO_SIGNAL_LEAVE: // End Device + Router
374-
// Device was removed from the network, factory reset the device
375+
// Recieved signal to leave the network
375376
if ((zigbee_role_t)Zigbee.getRole() != ZIGBEE_COORDINATOR) {
376-
Zigbee.factoryReset(true);
377+
leave_params = (esp_zb_zdo_signal_leave_params_t *)esp_zb_app_signal_get_params(p_sg_p);
378+
log_v("Signal to leave the network, leave type: %d", leave_params->leave_type);
379+
if (leave_params->leave_type == ESP_ZB_NWK_LEAVE_TYPE_RESET) { // Leave without rejoin -> Factory reset
380+
log_i("Leave without rejoin, factory reset the device");
381+
Zigbee.factoryReset(true);
382+
}
383+
else { // Leave with rejoin -> Rejoin the network, only rebooot the device
384+
log_i("Leave with rejoin, only rebooot the device");
385+
ESP.restart();
386+
}
377387
}
378388
break;
379389
default: log_v("ZDO signal: %s (0x%x), status: %s", esp_zb_zdo_signal_to_string(sig_type), sig_type, esp_err_to_name(err_status)); break;

0 commit comments

Comments
 (0)