@@ -42,6 +42,7 @@ static bool s_tagid_received = false;
4242static esp_err_t zb_attribute_set_handler (const esp_zb_zcl_set_attr_value_message_t *message);
4343static esp_err_t zb_attribute_reporting_handler (const esp_zb_zcl_report_attr_message_t *message);
4444static esp_err_t zb_cmd_read_attr_resp_handler (const esp_zb_zcl_cmd_read_attr_resp_message_t *message);
45+ static esp_err_t zb_cmd_write_attr_resp_handler (const esp_zb_zcl_cmd_write_attr_resp_message_t *message);
4546static esp_err_t zb_configure_report_resp_handler (const esp_zb_zcl_cmd_config_report_resp_message_t *message);
4647static esp_err_t zb_cmd_ias_zone_status_change_handler (const esp_zb_zcl_ias_zone_status_change_notification_message_t *message);
4748static esp_err_t zb_cmd_ias_zone_enroll_response_handler (const esp_zb_zcl_ias_zone_enroll_response_message_t *message);
@@ -72,8 +73,9 @@ static esp_err_t zb_action_handler(esp_zb_core_action_callback_id_t callback_id,
7273 case ESP_ZB_CORE_OTA_UPGRADE_QUERY_IMAGE_RESP_CB_ID:
7374 ret = zb_ota_upgrade_query_image_resp_handler ((esp_zb_zcl_ota_upgrade_query_image_resp_message_t *)message);
7475 break ;
75- case ESP_ZB_CORE_CMD_DEFAULT_RESP_CB_ID: ret = zb_cmd_default_resp_handler ((esp_zb_zcl_cmd_default_resp_message_t *)message); break ;
76- default : log_w (" Receive unhandled Zigbee action(0x%x) callback" , callback_id); break ;
76+ case ESP_ZB_CORE_CMD_DEFAULT_RESP_CB_ID: ret = zb_cmd_default_resp_handler ((esp_zb_zcl_cmd_default_resp_message_t *)message); break ;
77+ case ESP_ZB_CORE_CMD_WRITE_ATTR_RESP_CB_ID: ret = zb_cmd_write_attr_resp_handler ((esp_zb_zcl_cmd_write_attr_resp_message_t *)message); break ;
78+ default : log_w (" Receive unhandled Zigbee action(0x%x) callback" , callback_id); break ;
7779 }
7880 return ret;
7981}
@@ -170,6 +172,36 @@ static esp_err_t zb_cmd_read_attr_resp_handler(const esp_zb_zcl_cmd_read_attr_re
170172 return ESP_OK;
171173}
172174
175+ static esp_err_t zb_cmd_write_attr_resp_handler (const esp_zb_zcl_cmd_write_attr_resp_message_t *message) {
176+ if (!message) {
177+ log_e (" Empty message" );
178+ return ESP_FAIL;
179+ }
180+ if (message->info .status != ESP_ZB_ZCL_STATUS_SUCCESS) {
181+ log_e (" Received message: error status(%d)" , message->info .status );
182+ return ESP_ERR_INVALID_ARG;
183+ }
184+ log_v (
185+ " Write attribute response: from address(0x%x) src endpoint(%d) to dst endpoint(%d) cluster(0x%x)" , message->info .src_address .u .short_addr ,
186+ message->info .src_endpoint , message->info .dst_endpoint , message->info .cluster
187+ );
188+ for (std::list<ZigbeeEP *>::iterator it = Zigbee.ep_objects .begin (); it != Zigbee.ep_objects .end (); ++it) {
189+ if (message->info .dst_endpoint == (*it)->getEndpoint ()) {
190+ esp_zb_zcl_write_attr_resp_variable_t *variable = message->variables ;
191+ while (variable) {
192+ log_v (" Write attribute response: status(%d), cluster(0x%x), attribute(0x%x)" , variable->status , message->info .cluster , variable->attribute_id );
193+ if (variable->status == ESP_ZB_ZCL_STATUS_SUCCESS) {
194+ (*it)->zbWriteAttributeResponse (
195+ message->info .cluster , variable->attribute_id , variable->status , message->info .src_endpoint , message->info .src_address
196+ );
197+ }
198+ variable = variable->next ;
199+ }
200+ }
201+ }
202+ return ESP_OK;
203+ }
204+
173205static esp_err_t zb_configure_report_resp_handler (const esp_zb_zcl_cmd_config_report_resp_message_t *message) {
174206 if (!message) {
175207 log_e (" Empty message" );
0 commit comments