22
22
#include " pigweed/rpc_services/internal/StatusUtils.h"
23
23
24
24
#include < app-common/zap-generated/attribute-type.h>
25
- #include < app/AttributeAccessInterfaceRegistry.h>
26
25
#include < app/InteractionModelEngine.h>
27
26
#include < app/MessageDef/AttributeReportIBs.h>
28
- #include < app/reporting/reporting.h>
29
27
#include < app/util/attribute-storage.h>
30
28
#include < app/util/attribute-table.h>
31
29
#include < app/util/ember-compatibility-functions.h>
@@ -44,99 +42,38 @@ class Attributes : public pw_rpc::nanopb::Attributes::Service<Attributes>
44
42
::pw::Status Write (const chip_rpc_AttributeWrite & request, pw_protobuf_Empty & response)
45
43
{
46
44
const void * data;
47
- size_t data_len = 0 ;
48
45
DeviceLayer::StackLock lock;
49
46
50
47
switch (request.data .which_data )
51
48
{
52
49
case chip_rpc_AttributeData_data_bool_tag:
53
50
data = &request.data .data .data_bool ;
54
- data_len = sizeof (request.data .data .data_bool );
55
51
break ;
56
52
case chip_rpc_AttributeData_data_uint8_tag:
57
53
data = &request.data .data .data_uint8 ;
58
- data_len = sizeof (request.data .data .data_uint8 );
59
54
break ;
60
55
case chip_rpc_AttributeData_data_uint16_tag:
61
56
data = &request.data .data .data_uint16 ;
62
- data_len = sizeof (request.data .data .data_uint16 );
63
57
break ;
64
58
case chip_rpc_AttributeData_data_uint32_tag:
65
59
data = &request.data .data .data_uint32 ;
66
- data_len = sizeof (request.data .data .data_uint32 );
67
60
break ;
68
61
case chip_rpc_AttributeData_data_int8_tag:
69
62
data = &request.data .data .data_int8 ;
70
- data_len = sizeof (request.data .data .data_int8 );
71
63
break ;
72
64
case chip_rpc_AttributeData_data_int16_tag:
73
65
data = &request.data .data .data_int16 ;
74
- data_len = sizeof (request.data .data .data_int16 );
75
66
break ;
76
67
case chip_rpc_AttributeData_data_int32_tag:
77
68
data = &request.data .data .data_int32 ;
78
- data_len = sizeof (request.data .data .data_int32 );
79
69
break ;
80
70
case chip_rpc_AttributeData_data_bytes_tag:
81
71
data = &request.data .data .data_bytes ;
82
- data_len = sizeof (request.data .data .data_bytes );
83
72
break ;
84
73
default :
85
74
return pw::Status::InvalidArgument ();
86
75
}
87
76
88
- #if 1 // Refering Duplicate WriteSingleClusterData to calling AttributeInterface when available
89
- if (data_len == 0 ) {
90
- ChipLogError (Zcl, " Invalid writing to PW RPC with data length: 0" );
91
- return pw::Status::InvalidArgument ();
92
- }
93
- if (auto * attrOverride = chip::app::GetAttributeAccessOverride (request.metadata .endpoint , request.metadata .cluster ))
94
- {
95
- Access::SubjectDescriptor aSubjectDescriptor{ .authMode = chip::Access::AuthMode::kPase };
96
- app::ConcreteDataAttributePath aPath (request.metadata .endpoint , request.metadata .cluster , request.metadata .attribute_id );
97
-
98
- uint8_t tlvBuffer[128 ] = { 0 };
99
- uint8_t value = *(static_cast <const uint8_t *>(data));
100
-
101
- TLV::TLVReader aReader;
102
-
103
- TLV::TLVType outerContainerType;
104
- TLV::TLVWriter writer;
105
- writer.Init (tlvBuffer);
106
- writer.StartContainer (TLV::AnonymousTag (), TLV::kTLVType_Structure , outerContainerType);
107
- writer.Put (TLV::AnonymousTag (), value);
108
- writer.EndContainer (outerContainerType);
109
- writer.Finalize ();
110
-
111
- aReader.Init (tlvBuffer);
112
- app::AttributeValueDecoder valueDecoder (aReader, aSubjectDescriptor);
113
-
114
- #if 1 // Test Decode
115
- app::DataModel::Nullable<uint8_t > nullableValue;
116
-
117
- CHIP_ERROR err = valueDecoder.Decode (nullableValue);
118
- if (CHIP_NO_ERROR != err) {
119
- ChipLogError (Zcl, " Invalid writing to PW RPC due to data decoding failed" );
120
- return pw::Status::InvalidArgument ();
121
- }
122
-
123
- if (nullableValue.IsNull ()) {
124
- ChipLogError (Zcl, " Invalid writing to PW RPC with null data" );
125
- return pw::Status::InvalidArgument ();
126
- }
127
-
128
- ChipLogError (Zcl, " Writing to PW RPC with data: %u" , nullableValue.Value ());
129
- #endif
130
-
131
- PW_TRY (ChipErrorToPwStatus (attrOverride->Write (aPath, valueDecoder)));
132
-
133
- if (valueDecoder.TriedDecode ()) // TBD
134
- {
135
- MatterReportingAttributeChangeCallback (aPath);
136
- return pw::OkStatus ();
137
- }
138
- }
139
- #endif
140
77
RETURN_STATUS_IF_NOT_OK (
141
78
emberAfWriteAttribute (request.metadata .endpoint , request.metadata .cluster , request.metadata .attribute_id ,
142
79
const_cast <uint8_t *>(static_cast <const uint8_t *>(data)), request.metadata .type ));
0 commit comments