@@ -91,21 +91,26 @@ bool ZigbeeCore::begin(zigbee_role_t role, bool erase_nvs) {
9191 return started ();
9292}
9393
94- void ZigbeeCore::addEndpoint (ZigbeeEP *ep) {
94+ bool ZigbeeCore::addEndpoint (ZigbeeEP *ep) {
9595 ep_objects.push_back (ep);
9696
9797 log_d (" Endpoint: %d, Device ID: 0x%04x" , ep->_endpoint , ep->_device_id );
9898 // Register clusters and ep_list to the ZigbeeCore class's ep_list
9999 if (ep->_ep_config .endpoint == 0 || ep->_cluster_list == nullptr ) {
100100 log_e (" Endpoint config or Cluster list is not initialized, EP not added to ZigbeeCore's EP list" );
101- return ;
101+ return false ;
102102 }
103-
103+ esp_err_t ret = ESP_OK;
104104 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 );
106106 } 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 ;
108112 }
113+ return true ;
109114}
110115
111116static void esp_zb_task (void *pvParameters) {
@@ -368,16 +373,22 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
368373 case ESP_ZB_ZDO_SIGNAL_LEAVE: // End Device + Router
369374 // Device was removed from the network, factory reset the device
370375 if ((zigbee_role_t )Zigbee.getRole () != ZIGBEE_COORDINATOR) {
371- Zigbee.factoryReset ();
376+ Zigbee.factoryReset (true );
372377 }
373378 break ;
374379 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 ;
375380 }
376381}
377382
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+ }
381392}
382393
383394void ZigbeeCore::scanCompleteCallback (esp_zb_zdp_status_t zdo_status, uint8_t count, esp_zb_network_descriptor_t *nwk_descriptor) {
0 commit comments