|
|
@@ -38,7 +38,7 @@
|
|
|
#include "esp_log.h"
|
|
|
#include "freertos/FreeRTOS.h"
|
|
|
#include "freertos/task.h"
|
|
|
-#include "esp_zigbee_ha_standard.h"
|
|
|
+#include "ha/esp_zigbee_ha_standard.h"
|
|
|
#include "esp_zb_switch.h"
|
|
|
|
|
|
/**
|
|
|
@@ -79,7 +79,7 @@ static void esp_zb_buttons_handler(switch_func_pair_t *button_func_pair)
|
|
|
cmd_req.zcl_basic_cmd.dst_endpoint = on_off_light.endpoint;
|
|
|
cmd_req.zcl_basic_cmd.src_endpoint = HA_ONOFF_SWITCH_ENDPOINT;
|
|
|
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
|
|
|
- cmd_req.on_off_cmd_id = ZB_ZCL_CMD_ON_OFF_TOGGLE_ID;
|
|
|
+ cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_TOGGLE_ID;
|
|
|
ESP_EARLY_LOGI(TAG, "send 'on_off toggle' command");
|
|
|
esp_zb_zcl_on_off_cmd_req(&cmd_req);
|
|
|
}
|
|
|
@@ -93,71 +93,63 @@ static void bdb_start_top_level_commissioning_cb(uint8_t mode_mask)
|
|
|
void user_find_cb(uint8_t zdo_status, uint16_t addr, uint8_t endpoint)
|
|
|
{
|
|
|
ESP_LOGI(TAG, "User find cb: address:0x%x, endpoint:%d, response_status:%d", addr, endpoint, zdo_status);
|
|
|
- if (zdo_status == ZB_ZDP_STATUS_SUCCESS) {
|
|
|
+ if (zdo_status == ESP_ZB_ZDP_STATUS_SUCCESS) {
|
|
|
on_off_light.endpoint = endpoint;
|
|
|
on_off_light.short_addr = addr;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * @brief Zigbee stack event signal handler.
|
|
|
- *
|
|
|
- * @param bufid Zigbee stack buffer id used to pass signal.
|
|
|
- */
|
|
|
-void zboss_signal_handler(uint8_t bufid)
|
|
|
+void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct)
|
|
|
{
|
|
|
- zb_zdo_app_signal_hdr_t *p_sg_p = NULL;
|
|
|
- zb_uint8_t status = ZB_GET_APP_SIGNAL_STATUS(bufid);
|
|
|
- zb_zdo_app_signal_type_t sig = zb_get_app_signal(bufid, &p_sg_p);
|
|
|
- zb_zdo_signal_device_annce_params_t *dev_annce_params = NULL;
|
|
|
- switch (sig) {
|
|
|
- case ZB_ZDO_SIGNAL_SKIP_STARTUP:
|
|
|
+ uint32_t *p_sg_p = signal_struct->p_app_signal;
|
|
|
+ esp_err_t err_status = signal_struct->esp_err_status;
|
|
|
+ esp_zb_app_signal_type_t sig_type = *p_sg_p;
|
|
|
+ esp_zb_zdo_signal_device_annce_params_t *dev_annce_params = NULL;
|
|
|
+ switch (sig_type) {
|
|
|
+ case ESP_ZB_ZDO_SIGNAL_SKIP_STARTUP:
|
|
|
ESP_LOGI(TAG, "Zigbee stack initialized");
|
|
|
- esp_zb_bdb_start_top_level_commissioning(ZB_BDB_INITIALIZATION);
|
|
|
+ esp_zb_bdb_start_top_level_commissioning(ESP_ZB_BDB_MODE_INITIALIZATION);
|
|
|
break;
|
|
|
- case ZB_BDB_SIGNAL_DEVICE_FIRST_START:
|
|
|
- case ZB_BDB_SIGNAL_DEVICE_REBOOT:
|
|
|
- if (status == RET_OK) {
|
|
|
+ case ESP_ZB_BDB_SIGNAL_DEVICE_FIRST_START:
|
|
|
+ case ESP_ZB_BDB_SIGNAL_DEVICE_REBOOT:
|
|
|
+ if (err_status == ESP_OK) {
|
|
|
ESP_LOGI(TAG, "Start network formation");
|
|
|
- esp_zb_bdb_start_top_level_commissioning(ZB_BDB_NETWORK_FORMATION);
|
|
|
+ esp_zb_bdb_start_top_level_commissioning(ESP_ZB_BDB_MODE_NETWORK_FORMATION);
|
|
|
} else {
|
|
|
- ESP_LOGE(TAG, "Failed to initialize Zigbee stack (status: %d)", status);
|
|
|
+ ESP_LOGE(TAG, "Failed to initialize Zigbee stack (status: %d)", err_status);
|
|
|
}
|
|
|
break;
|
|
|
- case ZB_BDB_SIGNAL_FORMATION:
|
|
|
- if (status == RET_OK) {
|
|
|
- zb_ext_pan_id_t extended_pan_id;
|
|
|
+ case ESP_ZB_BDB_SIGNAL_FORMATION:
|
|
|
+ if (err_status == ESP_OK) {
|
|
|
+ esp_zb_ieee_addr_t extended_pan_id;
|
|
|
esp_zb_get_extended_pan_id(extended_pan_id);
|
|
|
ESP_LOGI(TAG, "Formed network successfully (Extended PAN ID: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x, PAN ID: 0x%04hx)",
|
|
|
extended_pan_id[7], extended_pan_id[6], extended_pan_id[5], extended_pan_id[4],
|
|
|
extended_pan_id[3], extended_pan_id[2], extended_pan_id[1], extended_pan_id[0],
|
|
|
esp_zb_get_pan_id());
|
|
|
- esp_zb_bdb_start_top_level_commissioning(ZB_BDB_NETWORK_STEERING);
|
|
|
+ esp_zb_bdb_start_top_level_commissioning(ESP_ZB_BDB_MODE_NETWORK_STEERING);
|
|
|
} else {
|
|
|
- ESP_LOGI(TAG, "Restart network formation (status: %d)", status);
|
|
|
- ZB_SCHEDULE_APP_ALARM((zb_callback_t)bdb_start_top_level_commissioning_cb, ZB_BDB_NETWORK_FORMATION, ZB_TIME_ONE_SECOND);
|
|
|
+ ESP_LOGI(TAG, "Restart network formation (status: %d)", err_status);
|
|
|
+ esp_zb_scheduler_alarm((esp_zb_callback_t)bdb_start_top_level_commissioning_cb, ESP_ZB_BDB_MODE_NETWORK_FORMATION, 1000);
|
|
|
}
|
|
|
break;
|
|
|
- case ZB_BDB_SIGNAL_STEERING:
|
|
|
- if (status == RET_OK) {
|
|
|
+ case ESP_ZB_BDB_SIGNAL_STEERING:
|
|
|
+ if (err_status == ESP_OK) {
|
|
|
ESP_LOGI(TAG, "Network steering started");
|
|
|
}
|
|
|
break;
|
|
|
- case ZB_ZDO_SIGNAL_DEVICE_ANNCE:
|
|
|
- dev_annce_params = ZB_ZDO_SIGNAL_GET_PARAMS(p_sg_p, zb_zdo_signal_device_annce_params_t);
|
|
|
+ case ESP_ZB_ZDO_SIGNAL_DEVICE_ANNCE:
|
|
|
+ dev_annce_params = (esp_zb_zdo_signal_device_annce_params_t *)esp_zb_app_signal_get_params(p_sg_p);
|
|
|
ESP_LOGI(TAG, "New device commissioned or rejoined (short: 0x%04hx)", dev_annce_params->device_short_addr);
|
|
|
- esp_zb_zdo_match_desc_req_param_t cmd_req;
|
|
|
+ esp_zb_zdo_match_desc_req_param_t cmd_req;
|
|
|
cmd_req.dst_nwk_addr = dev_annce_params->device_short_addr;
|
|
|
cmd_req.addr_of_interest = dev_annce_params->device_short_addr;
|
|
|
esp_zb_zdo_find_on_off_light(&cmd_req, user_find_cb);
|
|
|
break;
|
|
|
default:
|
|
|
- ESP_LOGI(TAG, "status: %d", status);
|
|
|
+ ESP_LOGI(TAG, "ZDO signal: %d, status: %d", sig_type, err_status);
|
|
|
break;
|
|
|
}
|
|
|
- if (bufid) {
|
|
|
- zb_buf_free(bufid);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
static void esp_zb_task(void *pvParameters)
|