@@ -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