@@ -42,6 +42,7 @@ static bool s_tagid_received = false;
42
42
static esp_err_t zb_attribute_set_handler (const esp_zb_zcl_set_attr_value_message_t *message);
43
43
static esp_err_t zb_attribute_reporting_handler (const esp_zb_zcl_report_attr_message_t *message);
44
44
static 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);
45
46
static esp_err_t zb_configure_report_resp_handler (const esp_zb_zcl_cmd_config_report_resp_message_t *message);
46
47
static esp_err_t zb_cmd_ias_zone_status_change_handler (const esp_zb_zcl_ias_zone_status_change_notification_message_t *message);
47
48
static 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,
72
73
case ESP_ZB_CORE_OTA_UPGRADE_QUERY_IMAGE_RESP_CB_ID:
73
74
ret = zb_ota_upgrade_query_image_resp_handler ((esp_zb_zcl_ota_upgrade_query_image_resp_message_t *)message);
74
75
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 ;
77
79
}
78
80
return ret;
79
81
}
@@ -170,6 +172,36 @@ static esp_err_t zb_cmd_read_attr_resp_handler(const esp_zb_zcl_cmd_read_attr_re
170
172
return ESP_OK;
171
173
}
172
174
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
+
173
205
static esp_err_t zb_configure_report_resp_handler (const esp_zb_zcl_cmd_config_report_resp_message_t *message) {
174
206
if (!message) {
175
207
log_e (" Empty message" );
0 commit comments