Skip to content

Commit 067b3f5

Browse files
mkardous-silabsCuRahman
authored andcommitted
Pull request project-chip#1773: Update ICD docs for v1.3
Merge in WMN_TOOLS/matter from feature/icd_documentation to RC_2.3.0-1.3 Squashed commit of the following: commit 8af436906d57ba3d3b66bcc06be87ce145a979ec Author: Curtis Rahman <Curtis.Rahman@silabs.com> Date: Fri Apr 19 14:10:57 2024 +0000 Applied suggestion commit d2fbaf2dbc6a02c91aa5501edd09d00dc750904a Author: Curtis Rahman <Curtis.Rahman@silabs.com> Date: Fri Apr 19 14:10:46 2024 +0000 Applied suggestion commit 728c404fa8d9378c7689b65eed024dbda00e6a28 Author: Curtis Rahman <Curtis.Rahman@silabs.com> Date: Fri Apr 19 14:10:18 2024 +0000 Applied suggestion ... and 13 more commits
1 parent 3ce282c commit 067b3f5

File tree

1 file changed

+151
-47
lines changed

1 file changed

+151
-47
lines changed

docs/silabs/general/MATTER_ICD.md

+151-47
Original file line numberDiff line numberDiff line change
@@ -4,54 +4,35 @@ Matter introduces the concept of Intermittently Connected Devices (ICD) in the S
44
An Intermittently Connected Device is the Matter representation of a device that is not always reachable.
55
This covers battery-powered devices that disable their underlying hardware when in a low-power mode or devices that can be disconnected from the network, like a phone app.
66

7-
This page focuses on features designed to improve the performance and reliability of battery-powered devices. By default Matter ICD functionality is enabled.
7+
This page focuses on features designed to improve the performance and reliability of battery-powered devices and their different configuration options.
88

9-
## ICD Device Types
10-
11-
Matter introduces two types of ICDs.
12-
13-
- Short Idle Time ICDs
14-
- Long Idle Time ICDs
15-
16-
### Short Idle Time ICDs
17-
18-
Short Idle Time ICDs are battery powered devices that can always be reached by clients.
19-
This means that their polling intervals are small enough to guarantee that a message sent from a client will be able to reach the ICD without any synchronization.
20-
A door lock, for example, is typicaly a short idle time ICD because it needs to be able to receive commands from clients at any given time.
21-
These devices are usually not the initiators in the communication flow.
22-
23-
### Long Idle ICDs
24-
25-
Long Idle Time ICDs are battery powered devices that require synchronization between the client and the ICD for communication to succeed.
26-
A sensor device is an example of a device that are typicaly long idle time ICDs.
27-
28-
Long Idle Time ICDs are provisional with the Matter 1.3 alpha release.
9+
## ICD Configurations
2910

11+
The ICD feature-set offers two types of configurations : cluster configurations and subscription configurations.
12+
The cluster configurations are exposed through the ICD Manager Cluster interface.
13+
The subscription configurations are exposed through build arguments and public APIs of the Matter SDK.
3014

31-
## ICD Management Cluster
15+
### ICD Management Cluster
3216

3317
The ICD Management Cluster enables configuration of the ICD’s behavior.
34-
It is required for an ICD to have this cluster enabled on endpoint 0.
18+
It is required for an ICD to have this cluster enabled on endpoint 0 to be certifiable.
3519

36-
The ICDM Cluster exposes three configuration attributes that enable to configure an ICD.
20+
#### Configuration Attributes
21+
22+
The ICD Management Cluster exposes three configuration attributes.
23+
These configurations are independent from the underlying transport configurations.
3724

3825
| Attribute | Type | Constraints | Description |
3926
|-|-|-|-|
40-
| IdleModeInterval | uint32 | 1 to 64800 | Maximum interval in seconds or milliseconds the server can stay in idle mode |
41-
| ActiveModeInterval | uint32 | min 300 | minimum interval in milliseconds the server will stay in active mode |
42-
| ActiveModeThreshold | uint32 | min 300 | minimum amount of time in milliseconds the server typically will stay active after network activity when in active mode |
27+
| IdleModeInterval | uint32 | 1 to 64800 | Maximum interval in seconds or milliseconds the server can stay in idle mode |
28+
| ActiveModeInterval | uint32 | all | minimum interval in milliseconds the server will stay in active mode |
29+
| ActiveModeThreshold | uint16 | desc | minimum amount of time in milliseconds the server typically will stay active after network activity when in active mode |
4330

44-
These configurations can be change two different ways.
31+
These configurations can be changed two different ways.
4532

46-
They can be changed by using the following build configuration.
47-
```cpp
48-
sl_idle_mode_interval_ms = 600000 //10min Idle Mode Interval
49-
sl_active_mode_interval_ms = 1000 //1s Active Mode Interval
50-
sl_active_mode_threshold_ms = 500 //500ms Active Mode Threshold
51-
```
5233
To change them within a build command
5334
```shell
54-
./scripts/examples/gn_silabs_example.sh ./examples/light-switch-app/silabs ./out/light-switch-app_ICD BRD4187C --icd sl_idle_mode_interval_ms=600000 sl_active_mode_interval_ms=1000 sl_active_mode_threshold_ms= 500
35+
./scripts/examples/gn_silabs_example.sh ./examples/light-switch-app/silabs ./out/light-switch-app_ICD BRD4187C --icd sl_idle_mode_interval_ms=5000 sl_active_mode_interval_ms=0 sl_active_mode_threshold_ms=500
5536
```
5637
These options can also be change by setting them to a default value in the projects openthread.gni file. See examples/lock-app/silabs/openthread.gni for an example on how they can be configured.
5738
```cpp
@@ -61,34 +42,64 @@ sl_active_mode_interval_ms = 10000 //10s Active Mode Interval
6142
sl_active_mode_threshold_ms = 1000 //1s Active Mode Threshold
6243
```
6344
The second way of changing the configuration is to set these defines in the projects ChipProjectConfig.h.
64-
6545
```cpp
6646
/**
6747
* @def CHIP_CONFIG_ICD_IDLE_MODE_INTERVAL_SEC
6848
*
6949
* @brief Default value for the ICD Management cluster IdleModeInterval attribute, in seconds
7050
*/
71-
#define CHIP_CONFIG_ICD_IDLE_MODE_INTERVAL_SEC 2
51+
#define CHIP_CONFIG_ICD_IDLE_MODE_INTERVAL_SEC 5
7252

7353

7454
/**
7555
* @def CHIP_CONFIG_ICD_ACTIVE_MODE_INTERVAL_MS
7656
*
7757
* @brief Default value for the ICD Management cluster ActiveModeInterval attribute, in milliseconds
7858
*/
79-
#define CHIP_CONFIG_ICD_ACTIVE_MODE_INTERVAL_MS 300
59+
#define CHIP_CONFIG_ICD_ACTIVE_MODE_INTERVAL_MS 0
8060

8161
/**
8262
* @def CHIP_CONFIG_ICD_ACTIVE_MODE_THRESHOLD_MS
8363
*
8464
* @brief Default value for the ICD Management cluster ActiveModeThreshold attribute, in milliseconds
8565
*/
86-
#define CHIP_CONFIG_ICD_ACTIVE_MODE_THRESHOLD_MS 300
66+
#define CHIP_CONFIG_ICD_ACTIVE_MODE_THRESHOLD_MS 500
8767
```
88-
Using the build arguments either in the build command or in the openthread.gni file is the preferred method.
68+
Using the build arguments either in the build command or in the .gni file is the preferred method.
69+
70+
#### ICD Check-In Protocol Use-Case
71+
72+
The ICD Check-In Protocol use case is used by ICDs to maintain a known relationship in case subscriptions with clients are lost.
73+
This includes how a client shares a Check-In token (symmetric key) with the ICD, when Check-In messages are sent and how the Check-In Protocol requirements are respected.
74+
75+
The Check-In Protocol is a fail-safe mechanism which allows an ICD to notify a registered client that it is available for communication when all subscriptions between the client and ICD are lost.
76+
A subscription can be lost for several reasons, such as:
77+
78+
* The ICD might not have full RAM retention when it is in an idle state.
79+
* When the ICD is powered off to change the battery.
80+
* Power or network outage causing the connection between the client and the ICD to be interrupted.
81+
* The client is unavailable for any reason (e.g. during a software update or hosted on a mobile device that is sometimes out-of-home).
82+
83+
The Check-In message is sessionless and relies on a shared secret that has been given to the ICD during the registration of the client using the ICD Management cluster.
84+
For more information on the ICD Check-In Protocol use-case, see the associated specification section.
85+
86+
#### User Active Mode Trigger
8987
88+
Since ICDs are not immediately responsive, they require a means to render them available for communication within user initiated use cases.
89+
Some of the user initiated use cases are:
9090
91-
## Subscription Maximum Interval
91+
* Opening a new commissioning window to add another administrator.
92+
* Reconfiguration of an existing fabric (e.g. IPKs, NOC rotation, ACL changes).
93+
* Reconfiguration of cluster functionality (e.g. ICD Management, Bindings, Groups, Scenes).
94+
* Removal of a device from a fabric.
95+
* Changes to the device's settings.
96+
97+
To enable these user initiated use cases, ICDs need to provide a way for a user to put them in active mode and render them responsive.
98+
The User Active Mode Trigger feature in the ICD Management cluster indicates whether a particular device implements an active mode trigger.
99+
100+
### Subscription Configurations
101+
102+
#### Subscription Maximum Interval Negotiation
92103
93104
The subscription mechanism is used by ecosystems and controllers to receive attribute change updates and liveness checks.
94105
The maximum interval of a subscription request is what defines the frequency at which a device will send a liveness check if there are no attribute changes.
@@ -105,8 +116,6 @@ The following table shows the subscribe response fields.
105116
| SubscriptionId | uint32 | identifies the subscription |
106117
| MaxInterval | uint16 | the final maximum interval for the subscription in seconds |
107118

108-
### Maximum Interval Negotiation
109-
110119
The Matter SDK provides a default implementation that allows an ICD to negotiate its MaxInterval.
111120
The goal of the algorithm is to set the MaxInterval to the IdleModeInterval.
112121

@@ -163,7 +172,7 @@ The goal of the algorithm is to set the MaxInterval to the IdleModeInterval.
163172
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
164173
```
165174

166-
If the default implementation does fit within the use-case,
175+
If the default implementation does not fit within the use-case,
167176
an implementation can override the default implementation.
168177
The first step is to implement the `ApplicationCallback` class from the `ReadHandler.h` header.
169178

@@ -217,7 +226,7 @@ The second step is registering the callback object to the Interaction Model Engi
217226
chip::app::InteractionModelEngine::GetInstance()->RegisterReadHandlerAppCallback(&mICDSubscriptionHandler);
218227
```
219228

220-
## Persistent Subscriptions
229+
#### Persistent Subscriptions
221230

222231
Persistent subscriptions were added to Matter as a means to ensure that an ICD can re-establish its subscription and by extension its secure session to a subscriber in the event of a power cycle.
223232
When a device accepts a subscription request, it will persist the subscription.
@@ -227,17 +236,112 @@ the subscription will be deleted.
227236

228237
Persistent subscriptions are enabled by default on all Silicon Labs sample applications.
229238

230-
### Subscription Timeout Resumption
239+
#### Subscription Timeout Resumption
231240

232241
Matter also provides a retry mechanism for devices to try to re-establish a lost subscription with a client. This feature should not be used on an ICD since it can significantly reduce battery life. This functionality can be disabled by adding
233242

234243
`chip_subscription_timeout_resumption = false`
235244

236-
## Subscription Synchronization
245+
#### Subscription Synchronization
237246

238247
To avoid forcing an ICD to become active multiple times, the Matter SDK allows an ICD to synchronize its subscription reporting and send all the reports at the same time. The mecansim syncrhonizes the maximum interval of the all subscription to only require the ICD to become active one. This functionality can be enabled by adding
239248

240249
`sl_use_subscription_synching = true`
241250

242251
For further details on Matter ICD's operating on OpenThread, visit [Matter Intermittently Connected Devices over OpenThread](../thread/OT_SLEEPY_END_DEVICE.md).
243252
And for Matter ICD's operating via WiFi, visit [Matter Intermittently Connected Devices over WiFi](../wifi/WIFI_SLEEPY_END_DEVICE.md).
253+
254+
255+
## ICD Device Types
256+
257+
Matter introduces two types of ICDs.
258+
259+
- Short Idle Time ICDs
260+
- Long Idle Time ICDs
261+
262+
### Short Idle Time ICDs
263+
264+
Short Idle Time ICDs are battery powered devices that can always be reached by clients.
265+
This means that their polling intervals are small enough to guarantee that a message sent from a client will be able to reach the ICD without any synchronization.
266+
A door lock, for example, is typicaly a short idle time ICD because it needs to be able to receive commands from clients at any given time.
267+
These devices are usually not the initiators in the communication flow.
268+
269+
#### Requirements
270+
271+
This section lists the requirements that Short Idle Time ICDs must respect to be certifiable.
272+
273+
1. The ICD Management Cluster must be present on the Root Endpoint (0) with mandatory attributes.
274+
2. The transport slow poll configuration must be smaller or equal to 15s.
275+
This requirement is not enforced in Matter 1.3 since LIT ICD are not certifiable.
276+
Once LIT ICD officially launch, this will be a mandatory requirement.
277+
278+
Support of the ICD Check-In Protocol use-case and the user active mode trigger is optional for SIT ICDs.
279+
280+
#### Configurations
281+
282+
These are recommended configurations based on the state of the current implementation of SIT ICDs.
283+
The recommended configurations are likely to change with the Matter 1.4 release.
284+
285+
```cpp
286+
// ICD Default configurations
287+
chip_enable_icd_server = true
288+
chip_subscription_timeout_resumption = false
289+
sl_use_subscription_synching = true
290+
291+
// ICD Matter Configuration flags
292+
sl_idle_mode_duration_s = 600 // 10min Idle Mode Duration
293+
sl_active_mode_duration_ms = 10000 // 10s Active Mode Duration
294+
sl_active_mode_threshold_ms = 1000 // 1s Active Mode Threshold
295+
296+
// Openthread Configuration flags
297+
sl_ot_idle_interval_ms = 5000 // 5s Idle Intervals
298+
sl_ot_active_interval_ms = 500 // 500ms Active Intervals
299+
```
300+
> **Note**: Wi-Fi polling configuration are dictated by the Access Point and cannot be changed at the Matter level.
301+
302+
### Long Idle ICDs
303+
304+
Long Idle Time ICDs are battery powered devices that require synchronization between the client and the ICD for communication to succeed.
305+
A sensor device is an example of a device that are typically a long idle time ICD.
306+
307+
Long Idle Time ICDs are ready for integration in the Matter 1.3 release. The core feature-set for ICDs has been implemented through the `ICDManager`.
308+
LIT ICDs should be certifiable with the Matter 1.4 release.
309+
Splitting the two milestones in different releases is to allow more in depth interoperability testing to validate the proposed feature-set achieves it's power consumption and usability goals.
310+
311+
#### Requirements
312+
313+
This section lists the requirements that Long Idle Time ICDs must respect to be certifiable.
314+
315+
1. The ICD Management Cluster must be present on the Root Endpoint (0) with mandatory attributes.
316+
2. The `LITS` (Long Idle Time Support) feature map must be set to 1.
317+
All required features, attributes and commands required by this feature map must also be present.
318+
2. The `CIP` (Check-In Protocol support) feature map must be set to 1.
319+
All required attributes and commands required by this feature map must also be present.
320+
3. The `UAT` (User Active Mode Trigger support) feature map must be set to 1.
321+
All required attributes and commands required by this feature map must also be present.
322+
4. The `ActiveModeThreshold` cannot be lower than 5 seconds.
323+
324+
325+
#### Configurations
326+
327+
These are recommended configurations based on the state of the current implementation of LIT ICDs.
328+
The recommended configurations are likely to change with the Matter 1.4 release.
329+
330+
```cpp
331+
// ICD Default configurations
332+
chip_enable_icd_server = true
333+
chip_subscription_timeout_resumption = false
334+
sl_use_subscription_synching = true
335+
icd_enforce_sit_slow_poll_limit = true
336+
chip_icd_report_on_active_mode = true
337+
chip_enable_icd_lit = true
338+
339+
# Openthread Configuration flags
340+
sl_ot_idle_interval_ms = 3600000 // 60mins Idle Polling Interval
341+
sl_ot_active_interval_ms = 1000 // 1s Active Polling Interval
342+
343+
# ICD Matter Configuration flags
344+
sl_idle_mode_duration_s = 3600 // 60min Idle Mode Duration
345+
sl_active_mode_duration_ms = 0 // 0 Active Mode Duration
346+
sl_active_mode_threshold_ms = 5000 // 5s Active Mode Threshold
347+
```

0 commit comments

Comments
 (0)