Skip to content
Merged
Prev Previous commit
Next Next commit
feaz(zigbee): Move function to private and add set method
  • Loading branch information
P-R-O-C-H-Y committed Mar 18, 2025
commit a2b5105293f3f633fc4ce310fc04987ffa7c5397
22 changes: 13 additions & 9 deletions libraries/Zigbee/src/ZigbeeCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ bool ZigbeeCore::begin(esp_zb_cfg_t *role_cfg, bool erase_nvs) {
if (xSemaphoreTake(lock, _begin_timeout) != pdTRUE) {
log_e("ZigbeeCore begin failed or timeout");
if(_role != ZIGBEE_COORDINATOR) { // Only End Device and Router can rejoin
resetChannelMask();
resetNVRAMChannelMask();
}
}
return started();
Expand Down Expand Up @@ -85,7 +85,7 @@ bool ZigbeeCore::begin(zigbee_role_t role, bool erase_nvs) {
if (!status || xSemaphoreTake(lock, _begin_timeout) != pdTRUE) {
log_e("ZigbeeCore begin failed or timeout");
if(_role != ZIGBEE_COORDINATOR) { // Only End Device and Router can rejoin
resetChannelMask();
resetNVRAMChannelMask();
}
}
return started();
Expand Down Expand Up @@ -261,9 +261,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
esp_zb_bdb_open_network(Zigbee._open_network);
} else {
// Save the channel mask to NVRAM in case of reboot which may be on a different channel after a change in the network
Zigbee.setPrimaryChannelMask(1 << esp_zb_get_current_channel());
esp_zb_set_channel_mask(1 << esp_zb_get_current_channel());
zb_nvram_write_dataset(ZB_NVRAM_COMMON_DATA);
Zigbee.setNVRAMChannelMask(1 << esp_zb_get_current_channel());
Zigbee._connected = true;
}
Zigbee.searchBindings();
Expand Down Expand Up @@ -309,9 +307,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
);
Zigbee._connected = true;
// Set channel mask and write to NVRAM, so that the device will re-join the network faster after reboot (scan only on the current channel)
Zigbee.setPrimaryChannelMask(1 << esp_zb_get_current_channel());
esp_zb_set_channel_mask(1 << esp_zb_get_current_channel());
zb_nvram_write_dataset(ZB_NVRAM_COMMON_DATA);
Zigbee.setNVRAMChannelMask(1 << esp_zb_get_current_channel());
} else {
log_i("Network steering was not successful (status: %s)", esp_err_to_name(err_status));
esp_zb_scheduler_alarm((esp_zb_callback_t)bdb_start_top_level_commissioning_cb, ESP_ZB_BDB_MODE_NETWORK_STEERING, 1000);
Expand Down Expand Up @@ -506,12 +502,20 @@ void ZigbeeCore::searchBindings() {
esp_zb_zdo_binding_table_req(mb_req, bindingTableCb, (void *)mb_req);
}

void ZigbeeCore::resetChannelMask() {
void ZigbeeCore::resetNVRAMChannelMask() {
_primary_channel_mask = ESP_ZB_TRANSCEIVER_ALL_CHANNELS_MASK;
esp_zb_set_channel_mask(_primary_channel_mask);
zb_nvram_write_dataset(ZB_NVRAM_COMMON_DATA);
log_v("Channel mask reset to all channels");
}

void ZigbeeCore::setNVRAMChannelMask(uint32_t mask) {
_primary_channel_mask = mask;
esp_zb_set_channel_mask(_primary_channel_mask);
zb_nvram_write_dataset(ZB_NVRAM_COMMON_DATA);
log_v("Channel mask set to 0x%08x", mask);
}

// Function to convert enum value to string
const char *ZigbeeCore::getDeviceTypeString(esp_zb_ha_standard_devices_t deviceId) {
switch (deviceId) {
Expand Down
3 changes: 2 additions & 1 deletion libraries/Zigbee/src/ZigbeeCore.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ class ZigbeeCore {
const char *getDeviceTypeString(esp_zb_ha_standard_devices_t deviceId);
void searchBindings();
static void bindingTableCb(const esp_zb_zdo_binding_table_info_t *table_info, void *user_ctx);
void resetNVRAMChannelMask(); // Reset to default mask also in NVRAM
void setNVRAMChannelMask(uint32_t mask); // Set channel mask in NVRAM

public:
ZigbeeCore();
Expand Down Expand Up @@ -137,7 +139,6 @@ class ZigbeeCore {
esp_zb_host_config_t getHostConfig();

void setPrimaryChannelMask(uint32_t mask); // By default all channels are scanned (11-26) -> mask 0x07FFF800
void resetChannelMask(); // Reset to default mask also in NVRAM

void setScanDuration(uint8_t duration); // Can be set from 1 - 4. 1 is fastest, 4 is slowest
uint8_t getScanDuration() {
Expand Down