17
17
18
18
#pragma once
19
19
20
+ #include < app-common/zap-generated/cluster-enums.h>
20
21
#include < app/icd/server/ICDServerConfig.h>
21
22
#include < lib/core/Optional.h>
23
+ #include < lib/support/BitFlags.h>
22
24
#include < lib/support/TimeUtils.h>
23
25
#include < platform/CHIPDeviceConfig.h>
24
26
#include < protocols/secure_channel/CheckInCounter.h>
@@ -77,6 +79,8 @@ class ICDConfigurationData
77
79
78
80
System::Clock::Seconds32 GetMaximumCheckInBackoff () { return mMaximumCheckInBackOff ; }
79
81
82
+ BitFlags<app::Clusters::IcdManagement::Feature> GetFeatureMap () { return mFeatureMap ; }
83
+
80
84
/* *
81
85
* The returned value will depend on the devices operating mode.
82
86
* 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
92
96
93
97
private:
94
98
// 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
+ }
96
115
static ICDConfigurationData instance;
97
116
98
117
// 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
125
144
CHIP_ERROR SetModeDurations (Optional<System::Clock::Milliseconds32> activeModeDuration,
126
145
Optional<System::Clock::Milliseconds32> idleModeDuration);
127
146
147
+ void SetFeatureMap (BitFlags<app::Clusters::IcdManagement::Feature> featureMap) { mFeatureMap = featureMap; }
148
+
128
149
static constexpr System::Clock::Seconds32 kMaxIdleModeDuration = System::Clock::Seconds32(18 * kSecondsPerHour );
129
150
static constexpr System::Clock::Seconds32 kMinIdleModeDuration = System::Clock::Seconds32(1 );
130
151
// As defined in the spec, the maximum guaranteed duration for the StayActiveDuration is 30s "Matter Application
@@ -169,6 +190,8 @@ class ICDConfigurationData
169
190
System::Clock::Milliseconds32 mSlowPollingInterval = CHIP_DEVICE_CONFIG_ICD_SLOW_POLL_INTERVAL;
170
191
System::Clock::Milliseconds32 mFastPollingInterval = CHIP_DEVICE_CONFIG_ICD_FAST_POLL_INTERVAL;
171
192
193
+ BitFlags<app::Clusters::IcdManagement::Feature> mFeatureMap ;
194
+
172
195
ICDMode mICDMode = ICDMode::SIT;
173
196
};
174
197
0 commit comments