1
1
/*
2
2
*
3
- * Copyright (c) 2023 Project CHIP Authors
3
+ * Copyright (c) 2024 Project CHIP Authors
4
4
*
5
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
6
* you may not use this file except in compliance with the License.
15
15
* limitations under the License.
16
16
*/
17
17
18
+ #include < utility>
18
19
#include < app-common/zap-generated/ids/Attributes.h>
19
20
#include < app-common/zap-generated/ids/Clusters.h>
20
21
#include < app/clusters/resource-monitoring-server/resource-monitoring-cluster-objects.h>
21
22
#include < app/clusters/resource-monitoring-server/resource-monitoring-server.h>
22
- #include < chef-resource-monitoring-delegates.h>
23
+ #include < resource-monitoring/chef-resource-monitoring-delegates.h>
24
+ #include < lib/core/TLVReader.h>
23
25
24
26
using namespace chip ;
25
27
using namespace chip ::app;
@@ -37,10 +39,10 @@ const chip::BitMask<ResourceMonitoring::Feature> gActivatedCarbonFeatureMap(Reso
37
39
ResourceMonitoring::Feature::kReplacementProductList );
38
40
39
41
static std::unique_ptr<ActivatedCarbonFilterMonitoringDelegate> gActivatedCarbonFilterDelegate ;
40
- static std::unique_ptr<ResourceMonitoring::Instance > gActivatedCarbonFilterInstance ;
42
+ static std::unique_ptr<ResourceMonitoring::ChefResourceMonitorInstance > gActivatedCarbonFilterInstance ;
41
43
42
44
static std::unique_ptr<HepaFilterMonitoringDelegate> gHepaFilterDelegate ;
43
- static std::unique_ptr<ResourceMonitoring::Instance > gHepaFilterInstance ;
45
+ static std::unique_ptr<ResourceMonitoring::ChefResourceMonitorInstance > gHepaFilterInstance ;
44
46
45
47
static ImmutableReplacementProductListManager sReplacementProductListManager ;
46
48
@@ -96,25 +98,155 @@ void HepaFilterMonitoring::Shutdown()
96
98
gHepaFilterDelegate .reset ();
97
99
}
98
100
101
+ chip::Protocols::InteractionModel::Status ChefResourceMonitorInstance::ExternalAttributeWrite (const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer)
102
+ {
103
+ Protocols::InteractionModel::Status ret = Protocols::InteractionModel::Status::Success;
104
+ AttributeId attributeId = attributeMetadata->attributeId ;
105
+
106
+ switch (attributeId) {
107
+ case HepaFilterMonitoring::Attributes::Condition::Id:
108
+ {
109
+ uint8_t newCondition = *(uint8_t *)buffer;
110
+ ret = UpdateCondition (newCondition);
111
+ }
112
+ break ;
113
+ case HepaFilterMonitoring::Attributes::ChangeIndication::Id:
114
+ {
115
+ ResourceMonitoring::ChangeIndicationEnum newIndication = static_cast <ResourceMonitoring::ChangeIndicationEnum>(*(uint8_t *)buffer);
116
+ ret = UpdateChangeIndication (newIndication);
117
+ }
118
+ break ;
119
+ case HepaFilterMonitoring::Attributes::InPlaceIndicator::Id:
120
+ {
121
+ bool newInPlaceIndicator = *(bool *)buffer;
122
+ ret = UpdateInPlaceIndicator (newInPlaceIndicator);
123
+ }
124
+ break ;
125
+ case HepaFilterMonitoring::Attributes::LastChangedTime::Id:
126
+ {
127
+ uint32_t newValue = 0 ;
128
+ uint16_t tlvLen = *(uint16_t *) buffer;
129
+ chip::TLV::TLVReader reader;
130
+ reader.Init (buffer + sizeof (uint16_t ), tlvLen);
131
+ reader.Next ();
132
+ reader.Get (newValue);
133
+ DataModel::Nullable<uint32_t > newLastChangedTime = DataModel::MakeNullable (newValue);
134
+ ret = UpdateLastChangedTime (newLastChangedTime);
135
+ }
136
+ break ;
137
+ case HepaFilterMonitoring::Attributes::DegradationDirection::Id:
138
+ default :
139
+ {
140
+ ChipLogError (Zcl, " Unsupported External Attribute Read: %d" , static_cast <int >(attributeId));
141
+ ret = Protocols::InteractionModel::Status::UnsupportedWrite;
142
+ }
143
+ break ;
144
+ }
145
+
146
+ return ret;
147
+ }
148
+
99
149
void emberAfActivatedCarbonFilterMonitoringClusterInitCallback (chip::EndpointId endpoint)
100
150
{
101
151
VerifyOrDie (!gActivatedCarbonFilterInstance && !gActivatedCarbonFilterDelegate );
102
- gActivatedCarbonFilterDelegate = std::make_unique<ActivatedCarbonFilterMonitoringDelegate>();
152
+
103
153
bool bResetConditionCommandSupported = true ; // The ResetCondition command is supported by the ResourceMonitor cluster
104
- gActivatedCarbonFilterInstance = std::make_unique<ResourceMonitoring::Instance>(
154
+ gActivatedCarbonFilterDelegate = std::make_unique<ActivatedCarbonFilterMonitoringDelegate>();
155
+ gActivatedCarbonFilterInstance = std::make_unique<ResourceMonitoring::ChefResourceMonitorInstance>(
105
156
gActivatedCarbonFilterDelegate .get (), endpoint, ActivatedCarbonFilterMonitoring::Id,
106
157
static_cast <uint32_t >(gActivatedCarbonFeatureMap .Raw ()), ResourceMonitoring::DegradationDirectionEnum::kDown ,
107
158
bResetConditionCommandSupported);
108
159
gActivatedCarbonFilterInstance ->Init ();
109
160
}
110
161
162
+ chip::Protocols::InteractionModel::Status chefResourceMonitoringExternalWriteCallback (chip::EndpointId endpoint, chip::ClusterId clusterId, const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer)
163
+ {
164
+ Protocols::InteractionModel::Status ret = Protocols::InteractionModel::Status::Success;
165
+ AttributeId attributeId = attributeMetadata->attributeId ;
166
+ ChipLogProgress (Zcl, " chefResourceMonitoringExternalWriteCallback EP: %d, Cluster: %d, Att: %d" , static_cast <int >(endpoint), static_cast <int >(clusterId), static_cast <int >(attributeId));
167
+
168
+ switch (clusterId) {
169
+ case HepaFilterMonitoring::Id:
170
+ ret = gHepaFilterInstance ->ExternalAttributeWrite (attributeMetadata, buffer);
171
+ break ;
172
+ case ActivatedCarbonFilterMonitoring::Id:
173
+ ret = gActivatedCarbonFilterInstance ->ExternalAttributeWrite (attributeMetadata, buffer);
174
+ break ;
175
+ default :
176
+ ret = Protocols::InteractionModel::Status::UnsupportedWrite;
177
+ break ;
178
+ }
179
+
180
+ return ret;
181
+ }
182
+
183
+ chip::Protocols::InteractionModel::Status chefResourceMonitoringExternalReadCallback (chip::EndpointId endpoint, chip::ClusterId clusterId, const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer, uint16_t maxReadLength)
184
+ {
185
+ Protocols::InteractionModel::Status ret = Protocols::InteractionModel::Status::Success;
186
+ AttributeId attributeId = attributeMetadata->attributeId ;
187
+ ChipLogProgress (Zcl, " chefResourceMonitoringExternalReadCallback EP: %d, Cluster: %d, Att: %d" , static_cast <int >(endpoint), static_cast <int >(clusterId), static_cast <int >(attributeId));
188
+
189
+ switch (clusterId) {
190
+ case HepaFilterMonitoring::Id:
191
+ ret = gHepaFilterInstance ->ExternalAttributeRead (attributeMetadata, buffer, maxReadLength);
192
+ break ;
193
+ case ActivatedCarbonFilterMonitoring::Id:
194
+ ret = gActivatedCarbonFilterInstance ->ExternalAttributeRead (attributeMetadata, buffer, maxReadLength);
195
+ break ;
196
+ default :
197
+ ret = Protocols::InteractionModel::Status::UnsupportedRead;
198
+ break ;
199
+ }
200
+
201
+ return ret;
202
+ }
203
+
204
+ chip::Protocols::InteractionModel::Status ChefResourceMonitorInstance::ExternalAttributeRead (const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer, uint16_t maxReadLength)
205
+ {
206
+ Protocols::InteractionModel::Status ret = Protocols::InteractionModel::Status::Success;
207
+ AttributeId attributeId = attributeMetadata->attributeId ;
208
+
209
+ switch (attributeId) {
210
+ case HepaFilterMonitoring::Attributes::Condition::Id:
211
+ {
212
+ *buffer = GetCondition ();
213
+ }
214
+ break ;
215
+ case HepaFilterMonitoring::Attributes::ChangeIndication::Id:
216
+ {
217
+ ResourceMonitoring::ChangeIndicationEnum changeIndication = GetChangeIndication ();
218
+ // The underlying type of ResourceMonitoring::ChangeIndicationEnum is uint8_t
219
+ *buffer = to_underlying (changeIndication);
220
+ }
221
+ break ;
222
+ case HepaFilterMonitoring::Attributes::InPlaceIndicator::Id:
223
+ {
224
+ *(bool *)buffer = GetInPlaceIndicator ();
225
+ }
226
+ break ;
227
+ case HepaFilterMonitoring::Attributes::LastChangedTime::Id:
228
+ {
229
+ DataModel::Nullable<uint32_t > lastChangedTime = GetLastChangedTime ();
230
+ *(uint32_t *)buffer = lastChangedTime.IsNull () ? 0 : lastChangedTime.Value ();
231
+ }
232
+ break ;
233
+ case HepaFilterMonitoring::Attributes::DegradationDirection::Id:
234
+ default :
235
+ ChipLogError (Zcl, " Unsupported External Attribute Read: %d" , static_cast <int >(attributeId));
236
+ ret = Protocols::InteractionModel::Status::UnsupportedRead;
237
+ break ;
238
+ }
239
+
240
+ return ret;
241
+ }
242
+
111
243
void emberAfHepaFilterMonitoringClusterInitCallback (chip::EndpointId endpoint)
112
244
{
113
245
VerifyOrDie (!gHepaFilterInstance && !gHepaFilterDelegate );
114
246
115
- gHepaFilterDelegate = std::make_unique<HepaFilterMonitoringDelegate>();
116
247
bool bResetConditionCommandSupported = true ; // The ResetCondition command is supported by the ResourceMonitor cluster
117
- gHepaFilterInstance = std::make_unique<ResourceMonitoring::Instance>(
248
+ gHepaFilterDelegate = std::make_unique<HepaFilterMonitoringDelegate>();
249
+ gHepaFilterInstance = std::make_unique<ResourceMonitoring::ChefResourceMonitorInstance>(
118
250
gHepaFilterDelegate .get (), endpoint, HepaFilterMonitoring::Id, static_cast <uint32_t >(gHepaFilterFeatureMap .Raw ()),
119
251
ResourceMonitoring::DegradationDirectionEnum::kDown , bResetConditionCommandSupported);
120
252
gHepaFilterInstance ->Init ();
0 commit comments