| {{> header excludeZapComment=true}} |
| |
| #import "MTREventTLVValueDecoder_Internal.h" |
| |
| #import "MTRStructsObjc.h" |
| |
| #include <app/data-model/Decode.h> |
| #include <app/data-model/DecodableList.h> |
| #include <app-common/zap-generated/cluster-objects.h> |
| #include <app-common/zap-generated/ids/Attributes.h> |
| #include <app-common/zap-generated/ids/Events.h> |
| #include <app-common/zap-generated/ids/Clusters.h> |
| #include <app/EventHeader.h> |
| #include <app/EventLoggingTypes.h> |
| #include <lib/support/TypeTraits.h> |
| |
| using namespace chip; |
| using namespace chip::app; |
| |
| id MTRDecodeEventPayload(const ConcreteEventPath & aPath, TLV::TLVReader & aReader, CHIP_ERROR * aError) |
| { |
| switch (aPath.mClusterId) |
| { |
| {{#chip_client_clusters includeAll=true}} |
| case Clusters::{{asUpperCamelCase name}}::Id: { |
| using namespace Clusters::{{asUpperCamelCase name}}; |
| switch (aPath.mEventId) |
| { |
| {{#zcl_events}} |
| {{#zcl_event_fields}} |
| {{/zcl_event_fields}} |
| |
| case Events::{{asUpperCamelCase name}}::Id: { |
| Events::{{asUpperCamelCase name}}::DecodableType cppValue; |
| *aError = DataModel::Decode(aReader, cppValue); |
| if (*aError != CHIP_NO_ERROR) |
| { |
| return nil; |
| } |
| |
| MTR{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}Event *value = [MTR{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}Event new]; |
| |
| {{#zcl_event_fields}} |
| do { |
| {{asObjectiveCType type parent.parent.name}} memberValue; |
| {{>decode_value target="memberValue" source=(concat "cppValue." (asLowerCamelCase name)) cluster=parent.parent.name errorCode="*aError = err; return nil;" depth=0}} |
| value.{{asStructPropertyName name}} = memberValue; |
| } while(0); |
| {{/zcl_event_fields}} |
| |
| return value; |
| } |
| |
| {{/zcl_events}} |
| |
| default: |
| *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB; |
| break; |
| } |
| break; |
| } |
| {{/chip_client_clusters}} |
| default: { |
| *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB; |
| break; |
| } |
| } |
| return nil; |
| } |