diff --git a/components/esp_matter_controller/esp_matter_controller_read_command.cpp b/components/esp_matter_controller/esp_matter_controller_read_command.cpp index 41b473846..b6123aa39 100644 --- a/components/esp_matter_controller/esp_matter_controller_read_command.cpp +++ b/components/esp_matter_controller/esp_matter_controller_read_command.cpp @@ -110,14 +110,17 @@ void read_command::OnAttributeData(const chip::app::ConcreteDataAttributePath &p ESP_LOGE(TAG, "Response Failure: No Data"); return; } - error = DataModelLogger::LogAttribute(path, data); - if (CHIP_NO_ERROR != error) { - ESP_LOGE(TAG, "Response Failure: Can not decode Data"); - } + if (attribute_data_cb) { attribute_data_cb(m_node_id, path, data); } + else{ + error = DataModelLogger::LogAttribute(path, data); + if (CHIP_NO_ERROR != error) { + ESP_LOGE(TAG, "Response Failure: Can not decode Data"); + } + } } void read_command::OnEventData(const chip::app::EventHeader &event_header, chip::TLV::TLVReader *data, @@ -161,8 +164,8 @@ void read_command::OnDone(ReadClient *apReadClient) { ESP_LOGI(TAG, "read done"); - if (attribute_data_ondone_cb) { - attribute_data_ondone_cb(); + if (read_done_cb) { + read_done_cb(m_node_id,m_attr_path); } chip::Platform::Delete(apReadClient); chip::Platform::Delete(this); diff --git a/components/esp_matter_controller/esp_matter_controller_read_command.h b/components/esp_matter_controller/esp_matter_controller_read_command.h index a097136be..738e7f336 100644 --- a/components/esp_matter_controller/esp_matter_controller_read_command.h +++ b/components/esp_matter_controller/esp_matter_controller_read_command.h @@ -39,22 +39,18 @@ typedef enum { class read_command : public ReadClient::Callback { public: read_command(uint64_t node_id, uint16_t endpoint_id, uint32_t cluster_id, uint32_t attribute_or_event_id, - read_command_type_t command_type, attribute_report_cb_t attribute_cb, attribute_report_ondone_cb_t attribute_done_cb, event_report_cb_t event_cb) + read_command_type_t command_type, attribute_report_cb_t attribute_cb, read_done_cb_t read_cb_done, event_report_cb_t event_cb) : m_node_id(node_id) , m_command_type(command_type) , m_buffered_read_cb(*this) , on_device_connected_cb(on_device_connected_fcn, this) , on_device_connection_failure_cb(on_device_connection_failure_fcn, this) , attribute_data_cb(attribute_cb) - , attribute_data_ondone_cb(attribute_done_cb) + , read_done_cb(read_cb_done) , event_data_cb(event_cb) { - if (command_type == READ_ATTRIBUTE) { - m_attr_path.mEndpointId = endpoint_id; - m_attr_path.mClusterId = cluster_id; - m_attr_path.mAttributeId = attribute_or_event_id; - if(m_attr_path.mAttributeId == 0xFFFFFFFF) - m_attr_path.SetWildcardAttributeId(); + if (command_type == READ_ATTRIBUTE) { + m_attr_path = AttributePathParams(endpoint_id, cluster_id, attribute_or_event_id); } else if (command_type == READ_EVENT) { m_event_path.mEndpointId = endpoint_id; m_event_path.mClusterId = cluster_id; @@ -62,8 +58,6 @@ public: } } - bool mOnDone = false; - ~read_command() {} esp_err_t send_command(); @@ -88,6 +82,7 @@ public: void OnDeallocatePaths(chip::app::ReadPrepareParams &&aReadPrepareParams) override; void OnDone(ReadClient *apReadClient) override; + private: uint64_t m_node_id; @@ -106,7 +101,7 @@ private: chip::Callback::Callback on_device_connection_failure_cb; attribute_report_cb_t attribute_data_cb; - attribute_report_ondone_cb_t attribute_data_ondone_cb; + read_done_cb_t read_done_cb; event_report_cb_t event_data_cb; }; diff --git a/components/esp_matter_controller/esp_matter_controller_utils.h b/components/esp_matter_controller/esp_matter_controller_utils.h index debf39f8e..97df7db18 100644 --- a/components/esp_matter_controller/esp_matter_controller_utils.h +++ b/components/esp_matter_controller/esp_matter_controller_utils.h @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -29,7 +30,7 @@ using event_report_cb_t = void (*)(uint64_t remote_node_id, const chip::app::Eve using subscribe_done_cb_t = void (*)(uint64_t remote_node_id); using subscribe_failure_cb_t = void (*)(void *subscribe_command); -using attribute_report_ondone_cb_t = void (*)(); +using read_done_cb_t = void (*)(uint64_t remote_node_id, const chip::app::AttributePathParams &path); #if !CONFIG_ESP_MATTER_COMMISSIONER_ENABLE /**