@@ -91,21 +91,26 @@ bool ZigbeeCore::begin(zigbee_role_t role, bool erase_nvs) {
91
91
return started ();
92
92
}
93
93
94
- void ZigbeeCore::addEndpoint (ZigbeeEP *ep) {
94
+ bool ZigbeeCore::addEndpoint (ZigbeeEP *ep) {
95
95
ep_objects.push_back (ep);
96
96
97
97
log_d (" Endpoint: %d, Device ID: 0x%04x" , ep->_endpoint , ep->_device_id );
98
98
// Register clusters and ep_list to the ZigbeeCore class's ep_list
99
99
if (ep->_ep_config .endpoint == 0 || ep->_cluster_list == nullptr ) {
100
100
log_e (" Endpoint config or Cluster list is not initialized, EP not added to ZigbeeCore's EP list" );
101
- return ;
101
+ return false ;
102
102
}
103
-
103
+ esp_err_t ret = ESP_OK;
104
104
if (ep->_device_id == ESP_ZB_HA_HOME_GATEWAY_DEVICE_ID) {
105
- esp_zb_ep_list_add_gateway_ep (_zb_ep_list, ep->_cluster_list , ep->_ep_config );
105
+ ret = esp_zb_ep_list_add_gateway_ep (_zb_ep_list, ep->_cluster_list , ep->_ep_config );
106
106
} else {
107
- esp_zb_ep_list_add_ep (_zb_ep_list, ep->_cluster_list , ep->_ep_config );
107
+ ret = esp_zb_ep_list_add_ep (_zb_ep_list, ep->_cluster_list , ep->_ep_config );
108
+ }
109
+ if (ret != ESP_OK) {
110
+ log_e (" Failed to add endpoint: 0x%x: %s" , ret, esp_err_to_name (ret));
111
+ return false ;
108
112
}
113
+ return true ;
109
114
}
110
115
111
116
static void esp_zb_task (void *pvParameters) {
@@ -368,16 +373,22 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
368
373
case ESP_ZB_ZDO_SIGNAL_LEAVE: // End Device + Router
369
374
// Device was removed from the network, factory reset the device
370
375
if ((zigbee_role_t )Zigbee.getRole () != ZIGBEE_COORDINATOR) {
371
- Zigbee.factoryReset ();
376
+ Zigbee.factoryReset (true );
372
377
}
373
378
break ;
374
379
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 ;
375
380
}
376
381
}
377
382
378
- void ZigbeeCore::factoryReset () {
379
- log_v (" Factory resetting Zigbee stack, device will reboot" );
380
- esp_zb_factory_reset ();
383
+ void ZigbeeCore::factoryReset (bool restart) {
384
+ if (restart) {
385
+ log_v (" Factory resetting Zigbee stack, device will reboot" );
386
+ esp_zb_factory_reset ();
387
+ } else {
388
+ log_v (" Factory resetting Zigbee NVRAM to factory default" );
389
+ log_w (" The device will not reboot, to take effect please reboot the device manually" );
390
+ esp_zb_zcl_reset_nvram_to_factory_default ();
391
+ }
381
392
}
382
393
383
394
void ZigbeeCore::scanCompleteCallback (esp_zb_zdp_status_t zdo_status, uint8_t count, esp_zb_network_descriptor_t *nwk_descriptor) {
0 commit comments