@@ -26,6 +26,9 @@ namespace Clusters {
26
26
namespace EcosystemInformation {
27
27
namespace {
28
28
29
+ #define ZCL_ECOSYSTEM_INFORMATION_CLUSTER_REVISION (1u )
30
+ #define ZCL_ECOSYSTEM_INFORMATION_FEATURE_MAP (0u )
31
+
29
32
constexpr size_t kDeviceNameMaxSize = 64 ;
30
33
constexpr size_t kUniqueLocationIdMaxSize = 64 ;
31
34
constexpr size_t kUniqueLocationIdsListMaxSize = 64 ;
@@ -46,18 +49,7 @@ class AttrAccess : public AttributeAccessInterface
46
49
CHIP_ERROR AttrAccess::Read (const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder)
47
50
{
48
51
VerifyOrDie (aPath.mClusterId == Clusters::EcosystemInformation::Id);
49
- switch (aPath.mAttributeId )
50
- {
51
- case Attributes::RemovedOn::Id:
52
- return EcosystemInformationServer::Instance ().EncodeRemovedOnAttribute (aPath.mEndpointId , aEncoder);
53
- case Attributes::DeviceDirectory ::Id:
54
- return EcosystemInformationServer::Instance ().EncodeDeviceDirectoryAttribute (aPath.mEndpointId , aEncoder);
55
- case Attributes::LocationDirectory ::Id:
56
- return EcosystemInformationServer::Instance ().EncodeLocationStructAttribute (aPath.mEndpointId , aEncoder);
57
- default :
58
- break ;
59
- }
60
- return CHIP_NO_ERROR;
52
+ return EcosystemInformationServer::Instance ().ReadAttribute (aPath, aEncoder);
61
53
}
62
54
63
55
// WARNING: caller is expected to use the returned LocationDescriptorStruct::Type immediately. Caller must
@@ -66,8 +58,7 @@ CHIP_ERROR AttrAccess::Read(const ConcreteReadAttributePath & aPath, AttributeVa
66
58
// TODO(#33223) To improve safety we could make GetEncodableLocationDescriptorStruct a private
67
59
// memeber method where we explicitly delete member method for the parameter that matches
68
60
// (LocationDescriptorStruct && aLocationDescriptor).
69
- Globals::Structs::LocationDescriptorStruct::Type
70
- GetEncodableLocationDescriptorStruct (const LocationDescriptorStruct & aLocationDescriptor)
61
+ Globals::Structs::LocationDescriptorStruct::Type GetEncodableLocationDescriptorStruct (const LocationDescriptorStruct & aLocationDescriptor)
71
62
{
72
63
Globals::Structs::LocationDescriptorStruct::Type locationDescriptor;
73
64
// This would imply data is either not properly validated before being
@@ -200,8 +191,7 @@ EcosystemLocationStruct::Builder & EcosystemLocationStruct::Builder::SetFloorNum
200
191
return *this ;
201
192
}
202
193
203
- EcosystemLocationStruct::Builder &
204
- EcosystemLocationStruct::Builder::SetAreaTypeTag (std::optional<Globals::AreaTypeTag> aAreaTypeTag)
194
+ EcosystemLocationStruct::Builder & EcosystemLocationStruct::Builder::SetAreaTypeTag (std::optional<Globals::AreaTypeTag> aAreaTypeTag)
205
195
{
206
196
VerifyOrDie (!mIsAlreadyBuilt );
207
197
mLocationDescriptor .mAreaType = aAreaTypeTag;
@@ -285,6 +275,32 @@ CHIP_ERROR EcosystemInformationServer::RemoveDevice(EndpointId aEndpoint, uint64
285
275
return CHIP_NO_ERROR;
286
276
}
287
277
278
+ CHIP_ERROR EcosystemInformationServer::ReadAttribute (const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder)
279
+ {
280
+ switch (aPath.mAttributeId )
281
+ {
282
+ case Attributes::RemovedOn::Id:
283
+ return EcosystemInformationServer::Instance ().EncodeRemovedOnAttribute (aPath.mEndpointId , aEncoder);
284
+ case Attributes::DeviceDirectory::Id:
285
+ return EcosystemInformationServer::Instance ().EncodeDeviceDirectoryAttribute (aPath.mEndpointId , aEncoder);
286
+ case Attributes::LocationDirectory::Id:
287
+ return EcosystemInformationServer::Instance ().EncodeLocationStructAttribute (aPath.mEndpointId , aEncoder);
288
+ case Attributes::ClusterRevision::Id:
289
+ {
290
+ uint16_t rev = ZCL_ECOSYSTEM_INFORMATION_CLUSTER_REVISION;
291
+ return aEncoder.Encode (rev);
292
+ }
293
+ case Attributes::FeatureMap::Id:
294
+ {
295
+ uint32_t featureMap = ZCL_ECOSYSTEM_INFORMATION_FEATURE_MAP;
296
+ return aEncoder.Encode (featureMap);
297
+ }
298
+ default :
299
+ break ;
300
+ }
301
+ return CHIP_NO_ERROR;
302
+ }
303
+
288
304
CHIP_ERROR EcosystemInformationServer::EncodeRemovedOnAttribute (EndpointId aEndpoint, AttributeValueEncoder & aEncoder)
289
305
{
290
306
auto it = mDevicesMap .find (aEndpoint);
0 commit comments