Skip to content

Commit 594ffe2

Browse files
icd management: make the feature map and operating mode managed by AAI (#37062)
* icd management: make the feature map and operating mode managed by AAI * Restyled by clang-format * review changes * Restyled by clang-format * change the macro for operating mode * review change * run zap regen * Update TestICDManager.cpp --------- Co-authored-by: Restyled.io <commits@restyled.io>
1 parent f3e4e39 commit 594ffe2

File tree

24 files changed

+110
-164
lines changed

24 files changed

+110
-164
lines changed

examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.matter

+2-2
Original file line numberDiff line numberDiff line change
@@ -2235,12 +2235,12 @@ endpoint 0 {
22352235
callback attribute clientsSupportedPerFabric;
22362236
ram attribute userActiveModeTriggerHint default = 0x100;
22372237
ram attribute userActiveModeTriggerInstruction default = "Push setup button for Active Mode";
2238-
ram attribute operatingMode default = 0;
2238+
callback attribute operatingMode;
22392239
callback attribute maximumCheckInBackOff;
22402240
callback attribute generatedCommandList;
22412241
callback attribute acceptedCommandList;
22422242
callback attribute attributeList;
2243-
ram attribute featureMap default = 0x000f;
2243+
callback attribute featureMap;
22442244
ram attribute clusterRevision default = 3;
22452245

22462246
handle command RegisterClient;

examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter

+2-2
Original file line numberDiff line numberDiff line change
@@ -2023,12 +2023,12 @@ endpoint 0 {
20232023
callback attribute clientsSupportedPerFabric;
20242024
ram attribute userActiveModeTriggerHint default = 4096;
20252025
ram attribute userActiveModeTriggerInstruction default = "Push setup button for Active Mode";
2026-
ram attribute operatingMode default = 0;
2026+
callback attribute operatingMode;
20272027
callback attribute maximumCheckInBackOff;
20282028
callback attribute generatedCommandList;
20292029
callback attribute acceptedCommandList;
20302030
callback attribute attributeList;
2031-
ram attribute featureMap default = 0x000F;
2031+
callback attribute featureMap;
20322032
ram attribute clusterRevision default = 3;
20332033

20342034
handle command RegisterClient;

examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter

+1-1
Original file line numberDiff line numberDiff line change
@@ -2021,7 +2021,7 @@ endpoint 0 {
20212021
callback attribute generatedCommandList;
20222022
callback attribute acceptedCommandList;
20232023
callback attribute attributeList;
2024-
ram attribute featureMap default = 0x0000;
2024+
callback attribute featureMap;
20252025
ram attribute clusterRevision default = 3;
20262026
}
20272027
}

examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.matter

+2-2
Original file line numberDiff line numberDiff line change
@@ -3136,9 +3136,9 @@ endpoint 0 {
31363136
callback attribute clientsSupportedPerFabric;
31373137
ram attribute userActiveModeTriggerHint default = 0x1115;
31383138
ram attribute userActiveModeTriggerInstruction default = "Power Cycle";
3139-
ram attribute operatingMode default = 0;
3139+
callback attribute operatingMode;
31403140
callback attribute maximumCheckInBackOff;
3141-
ram attribute featureMap default = 15;
3141+
callback attribute featureMap;
31423142
ram attribute clusterRevision default = 3;
31433143

31443144
handle command RegisterClient;

examples/light-switch-app/light-switch-common/light-switch-app.matter

+1-1
Original file line numberDiff line numberDiff line change
@@ -3131,7 +3131,7 @@ endpoint 0 {
31313131
callback attribute idleModeDuration;
31323132
callback attribute activeModeDuration;
31333133
callback attribute activeModeThreshold;
3134-
ram attribute featureMap default = 0x0000;
3134+
callback attribute featureMap;
31353135
ram attribute clusterRevision default = 3;
31363136
}
31373137
}

examples/light-switch-app/qpg/zap/switch.matter

+2-2
Original file line numberDiff line numberDiff line change
@@ -3242,11 +3242,11 @@ endpoint 0 {
32423242
callback attribute clientsSupportedPerFabric;
32433243
ram attribute userActiveModeTriggerHint default = 0x100;
32443244
ram attribute userActiveModeTriggerInstruction default = "Reset the application";
3245-
ram attribute operatingMode default = 1;
3245+
callback attribute operatingMode;
32463246
callback attribute generatedCommandList;
32473247
callback attribute acceptedCommandList;
32483248
callback attribute attributeList;
3249-
ram attribute featureMap default = 0x0007;
3249+
callback attribute featureMap;
32503250
ram attribute clusterRevision default = 3;
32513251

32523252
handle command RegisterClient;

examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter

+2-2
Original file line numberDiff line numberDiff line change
@@ -2089,12 +2089,12 @@ endpoint 0 {
20892089
callback attribute clientsSupportedPerFabric;
20902090
ram attribute userActiveModeTriggerHint default = 0x111D;
20912091
ram attribute userActiveModeTriggerInstruction default = "Restart the application";
2092-
ram attribute operatingMode default = 0;
2092+
callback attribute operatingMode;
20932093
callback attribute maximumCheckInBackOff;
20942094
callback attribute generatedCommandList;
20952095
callback attribute acceptedCommandList;
20962096
callback attribute attributeList;
2097-
ram attribute featureMap default = 0x000F;
2097+
callback attribute featureMap;
20982098
ram attribute clusterRevision default = 3;
20992099

21002100
handle command RegisterClient;

examples/lock-app/lock-common/lock-app.matter

+1-1
Original file line numberDiff line numberDiff line change
@@ -3173,7 +3173,7 @@ endpoint 0 {
31733173
callback attribute idleModeDuration;
31743174
callback attribute activeModeDuration;
31753175
callback attribute activeModeThreshold;
3176-
ram attribute featureMap default = 0x0000;
3176+
callback attribute featureMap;
31773177
ram attribute clusterRevision default = 3;
31783178
}
31793179
}

examples/lock-app/nxp/zap/lock-app.matter

+1-1
Original file line numberDiff line numberDiff line change
@@ -2683,7 +2683,7 @@ endpoint 0 {
26832683
callback attribute generatedCommandList;
26842684
callback attribute acceptedCommandList;
26852685
callback attribute attributeList;
2686-
ram attribute featureMap default = 0x0000;
2686+
callback attribute featureMap;
26872687
ram attribute clusterRevision default = 1;
26882688
}
26892689
}

examples/lock-app/qpg/zap/lock.matter

+1-1
Original file line numberDiff line numberDiff line change
@@ -2805,7 +2805,7 @@ endpoint 0 {
28052805
callback attribute generatedCommandList;
28062806
callback attribute acceptedCommandList;
28072807
callback attribute attributeList;
2808-
ram attribute featureMap default = 0x0000;
2808+
callback attribute featureMap;
28092809
ram attribute clusterRevision default = 3;
28102810
}
28112811
}

examples/lock-app/silabs/data_model/lock-app.matter

+1-1
Original file line numberDiff line numberDiff line change
@@ -3175,7 +3175,7 @@ endpoint 0 {
31753175
callback attribute idleModeDuration;
31763176
callback attribute activeModeDuration;
31773177
callback attribute activeModeThreshold;
3178-
ram attribute featureMap default = 0x0000;
3178+
callback attribute featureMap;
31793179
ram attribute clusterRevision default = 3;
31803180
}
31813181
}

examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter

+1-1
Original file line numberDiff line numberDiff line change
@@ -2471,7 +2471,7 @@ endpoint 0 {
24712471
callback attribute generatedCommandList;
24722472
callback attribute acceptedCommandList;
24732473
callback attribute attributeList;
2474-
ram attribute featureMap default = 1;
2474+
callback attribute featureMap;
24752475
ram attribute clusterRevision default = 3;
24762476

24772477
handle command RegisterClient;

examples/window-app/common/window-app.matter

+1-1
Original file line numberDiff line numberDiff line change
@@ -2699,7 +2699,7 @@ endpoint 0 {
26992699
callback attribute generatedCommandList;
27002700
callback attribute acceptedCommandList;
27012701
callback attribute attributeList;
2702-
ram attribute featureMap default = 0x0000;
2702+
callback attribute featureMap;
27032703
ram attribute clusterRevision default = 3;
27042704
}
27052705
}

src/app/clusters/icd-management-server/icd-management-server.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <access/AccessControl.h>
2121
#include <access/Privilege.h>
2222
#include <app-common/zap-generated/attributes/Accessors.h>
23+
#include <app-common/zap-generated/cluster-enums.h>
2324
#include <app-common/zap-generated/cluster-objects.h>
2425
#include <app-common/zap-generated/ids/Clusters.h>
2526
#include <app/AttributeAccessInterface.h>
@@ -64,6 +65,19 @@ class IcdManagementAttributeAccess : public AttributeAccessInterface
6465
CHIP_ERROR ReadIdleModeDuration(EndpointId endpoint, AttributeValueEncoder & encoder);
6566
CHIP_ERROR ReadActiveModeDuration(EndpointId endpoint, AttributeValueEncoder & encoder);
6667
CHIP_ERROR ReadActiveModeThreshold(EndpointId endpoint, AttributeValueEncoder & encoder);
68+
CHIP_ERROR ReadFeatureMap(EndpointId endpoint, AttributeValueEncoder & encoder)
69+
{
70+
return encoder.Encode(mICDConfigurationData->GetFeatureMap());
71+
}
72+
73+
#if CHIP_CONFIG_ENABLE_ICD_LIT
74+
CHIP_ERROR ReadOperatingMode(EndpointId endpoint, AttributeValueEncoder & encoder)
75+
{
76+
return mICDConfigurationData->GetICDMode() == ICDConfigurationData::ICDMode::SIT
77+
? encoder.Encode(IcdManagement::OperatingModeEnum::kSit)
78+
: encoder.Encode(IcdManagement::OperatingModeEnum::kLit);
79+
}
80+
#endif // CHIP_CONFIG_ENABLE_ICD_LIT
6781

6882
#if CHIP_CONFIG_ENABLE_ICD_CIP
6983
CHIP_ERROR ReadRegisteredClients(EndpointId endpoint, AttributeValueEncoder & encoder);
@@ -94,6 +108,12 @@ CHIP_ERROR IcdManagementAttributeAccess::Read(const ConcreteReadAttributePath &
94108
case IcdManagement::Attributes::ActiveModeThreshold::Id:
95109
return ReadActiveModeThreshold(aPath.mEndpointId, aEncoder);
96110

111+
case IcdManagement::Attributes::FeatureMap::Id:
112+
return ReadFeatureMap(aPath.mEndpointId, aEncoder);
113+
#if CHIP_CONFIG_ENABLE_ICD_LIT
114+
case IcdManagement::Attributes::OperatingMode::Id:
115+
return ReadOperatingMode(aPath.mEndpointId, aEncoder);
116+
#endif // CHIP_CONFIG_ENABLE_ICD_LIT
97117
#if CHIP_CONFIG_ENABLE_ICD_CIP
98118
case IcdManagement::Attributes::RegisteredClients::Id:
99119
return ReadRegisteredClients(aPath.mEndpointId, aEncoder);

src/app/icd/server/BUILD.gn

+4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ buildconfig_header("icd-server-buildconfig") {
3131
assert(chip_enable_icd_checkin && chip_enable_icd_user_active_mode_trigger)
3232
}
3333

34+
if (chip_enable_icd_dsls) {
35+
assert(chip_enable_icd_lit)
36+
}
37+
3438
defines = [
3539
"CHIP_CONFIG_ENABLE_ICD_SERVER=${chip_enable_icd_server}",
3640
"CHIP_CONFIG_ENABLE_ICD_LIT=${chip_enable_icd_lit}",

src/app/icd/server/ICDConfigurationData.h

+24-1
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717

1818
#pragma once
1919

20+
#include <app-common/zap-generated/cluster-enums.h>
2021
#include <app/icd/server/ICDServerConfig.h>
2122
#include <lib/core/Optional.h>
23+
#include <lib/support/BitFlags.h>
2224
#include <lib/support/TimeUtils.h>
2325
#include <platform/CHIPDeviceConfig.h>
2426
#include <protocols/secure_channel/CheckInCounter.h>
@@ -77,6 +79,8 @@ class ICDConfigurationData
7779

7880
System::Clock::Seconds32 GetMaximumCheckInBackoff() { return mMaximumCheckInBackOff; }
7981

82+
BitFlags<app::Clusters::IcdManagement::Feature> GetFeatureMap() { return mFeatureMap; }
83+
8084
/**
8185
* The returned value will depend on the devices operating mode.
8286
* If ICDMode == SIT && the configured slow poll interval is superior to the maximum threshold (15s), the function will return
@@ -92,7 +96,22 @@ class ICDConfigurationData
9296

9397
private:
9498
// Singleton Object
95-
ICDConfigurationData() = default;
99+
ICDConfigurationData()
100+
{
101+
// Initialize feature map
102+
#if CHIP_CONFIG_ENABLE_ICD_CIP
103+
mFeatureMap.Set(app::Clusters::IcdManagement::Feature::kCheckInProtocolSupport);
104+
#endif // CHIP_CONFIG_ENABLE_ICD_CIP
105+
#if CHIP_CONFIG_ENABLE_ICD_UAT
106+
mFeatureMap.Set(app::Clusters::IcdManagement::Feature::kUserActiveModeTrigger);
107+
#endif // CHIP_CONFIG_ENABLE_ICD_UAT
108+
#if CHIP_CONFIG_ENABLE_ICD_LIT
109+
mFeatureMap.Set(app::Clusters::IcdManagement::Feature::kLongIdleTimeSupport);
110+
#if CHIP_CONFIG_ENABLE_ICD_DSLS
111+
mFeatureMap.Set(app::Clusters::IcdManagement::Feature::kDynamicSitLitSupport);
112+
#endif // CHIP_CONFIG_ENABLE_ICD_DSLS
113+
#endif // CHIP_CONFIG_ENABLE_ICD_LIT
114+
}
96115
static ICDConfigurationData instance;
97116

98117
// ICD related information is managed by the ICDManager but stored in the ICDConfigurationData to enable consummers to access it
@@ -125,6 +144,8 @@ class ICDConfigurationData
125144
CHIP_ERROR SetModeDurations(Optional<System::Clock::Milliseconds32> activeModeDuration,
126145
Optional<System::Clock::Milliseconds32> idleModeDuration);
127146

147+
void SetFeatureMap(BitFlags<app::Clusters::IcdManagement::Feature> featureMap) { mFeatureMap = featureMap; }
148+
128149
static constexpr System::Clock::Seconds32 kMaxIdleModeDuration = System::Clock::Seconds32(18 * kSecondsPerHour);
129150
static constexpr System::Clock::Seconds32 kMinIdleModeDuration = System::Clock::Seconds32(1);
130151
// As defined in the spec, the maximum guaranteed duration for the StayActiveDuration is 30s "Matter Application
@@ -169,6 +190,8 @@ class ICDConfigurationData
169190
System::Clock::Milliseconds32 mSlowPollingInterval = CHIP_DEVICE_CONFIG_ICD_SLOW_POLL_INTERVAL;
170191
System::Clock::Milliseconds32 mFastPollingInterval = CHIP_DEVICE_CONFIG_ICD_FAST_POLL_INTERVAL;
171192

193+
BitFlags<app::Clusters::IcdManagement::Feature> mFeatureMap;
194+
172195
ICDMode mICDMode = ICDMode::SIT;
173196
};
174197

src/app/icd/server/ICDManager.cpp

+1-14
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,7 @@ void ICDManager::Shutdown()
116116

117117
bool ICDManager::SupportsFeature(Feature feature)
118118
{
119-
// Can't use attribute accessors/Attributes::FeatureMap::Get in unit tests
120-
#if !(CONFIG_BUILD_FOR_HOST_UNIT_TEST)
121-
uint32_t featureMap = 0;
122-
bool success = (Attributes::FeatureMap::Get(kRootEndpointId, &featureMap) == Status::Success);
123-
return success ? ((featureMap & to_underlying(feature)) != 0) : false;
124-
#else
125-
return ((mFeatureMap & to_underlying(feature)) != 0);
126-
#endif // !(CONFIG_BUILD_FOR_HOST_UNIT_TEST)
119+
return ICDConfigurationData::GetInstance().GetFeatureMap().Has(feature);
127120
}
128121

129122
uint32_t ICDManager::StayActiveRequest(uint32_t stayActiveDuration)
@@ -394,12 +387,6 @@ void ICDManager::UpdateICDMode()
394387
if (ICDConfigurationData::GetInstance().GetICDMode() != tempMode)
395388
{
396389
ICDConfigurationData::GetInstance().SetICDMode(tempMode);
397-
398-
// Can't use attribute accessors/Attributes::OperatingMode::Set in unit tests
399-
#if !(CONFIG_BUILD_FOR_HOST_UNIT_TEST)
400-
Attributes::OperatingMode::Set(kRootEndpointId, static_cast<OperatingModeEnum>(tempMode));
401-
#endif
402-
403390
postObserverEvent(ObserverEventType::ICDModeChange);
404391
}
405392

src/app/icd/server/ICDManager.h

-6
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ class ICDManager : public ICDListener, public TestEventTriggerHandler
229229
#endif // CHIP_CONFIG_ENABLE_ICD_CIP
230230

231231
#if CONFIG_BUILD_FOR_HOST_UNIT_TEST
232-
void SetTestFeatureMapValue(uint32_t featureMap) { mFeatureMap = featureMap; };
233232
#if CHIP_CONFIG_PERSIST_SUBSCRIPTIONS && !CHIP_CONFIG_SUBSCRIPTION_TIMEOUT_RESUMPTION
234233
bool GetIsBootUpResumeSubscriptionExecuted() { return mIsBootUpResumeSubscriptionExecuted; };
235234
#endif // !CHIP_CONFIG_SUBSCRIPTION_TIMEOUT_RESUMPTION && CHIP_CONFIG_PERSIST_SUBSCRIPTIONS
@@ -381,11 +380,6 @@ class ICDManager : public ICDListener, public TestEventTriggerHandler
381380
ICDCheckInBackOffStrategy * mICDCheckInBackOffStrategy = nullptr;
382381
ObjectPool<ICDCheckInSender, (CHIP_CONFIG_ICD_CLIENTS_SUPPORTED_PER_FABRIC * CHIP_CONFIG_MAX_FABRICS)> mICDSenderPool;
383382
#endif // CHIP_CONFIG_ENABLE_ICD_CIP
384-
385-
#if CONFIG_BUILD_FOR_HOST_UNIT_TEST
386-
// feature map that can be changed at runtime for testing purposes
387-
uint32_t mFeatureMap = 0;
388-
#endif // CONFIG_BUILD_FOR_HOST_UNIT_TEST
389383
};
390384

391385
} // namespace app

src/app/icd/server/tests/ICDConfigurationDataTestAccess.h

+4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
#pragma once
1919

20+
#include <app-common/zap-generated/cluster-enums.h>
2021
#include <app/icd/server/ICDConfigurationData.h>
22+
#include <lib/support/BitFlags.h>
2123

2224
namespace chip {
2325
namespace Test {
@@ -39,6 +41,8 @@ class ICDConfigurationDataTestAccess
3941
return mData->SetModeDurations(activeModeDuration, idleModeDuration);
4042
}
4143

44+
void SetFeatureMap(BitFlags<app::Clusters::IcdManagement::Feature> featureMap) { mData->SetFeatureMap(featureMap); }
45+
4246
private:
4347
ICDConfigurationData * mData = nullptr;
4448
};

0 commit comments

Comments
 (0)