@@ -47,8 +47,14 @@ extern "C" {
4747 * @brief
4848 * This module includes functions for Channel Manager.
4949 *
50- * The functions in this module are available when Channel Manager feature
51- * (`OPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE`) is enabled. Channel Manager is available only on an FTD build.
50+ * The functions in this module are available when Channel Manager features
51+ * `OPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE` or `OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE &&
52+ * OPENTHREAD_CONFIG_CHANNEL_MANAGER_CSL_CHANNEL_SELECT_ENABLE` are enabled. Channel Manager behavior depends on the
53+ * device role. It manages the network-wide PAN channel on a Full Thread Device in rx-on-when-idle mode, or with
54+ * `OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE && OPENTHREAD_CONFIG_CHANNEL_MANAGER_CSL_CHANNEL_SELECT_ENABLE` set,
55+ * selects CSL channel in synchronized rx-off-when-idle mode. On a Minimal Thread Device
56+ * `OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE && OPENTHREAD_CONFIG_CHANNEL_MANAGER_CSL_CHANNEL_SELECT_ENABLE` selects
57+ * the CSL channel.
5258 *
5359 * @{
5460 *
@@ -77,7 +83,9 @@ void otChannelManagerRequestChannelChange(otInstance *aInstance, uint8_t aChanne
7783uint8_t otChannelManagerGetRequestedChannel (otInstance * aInstance );
7884
7985/**
80- * Gets the delay (in seconds) used by Channel Manager for a channel change.
86+ * Gets the delay (in seconds) used by Channel Manager for a network channel change.
87+ *
88+ * Only available on FTDs.
8189 *
8290 * @param[in] aInstance A pointer to an OpenThread instance.
8391 *
@@ -87,10 +95,10 @@ uint8_t otChannelManagerGetRequestedChannel(otInstance *aInstance);
8795uint16_t otChannelManagerGetDelay (otInstance * aInstance );
8896
8997/**
90- * Sets the delay (in seconds) used for a channel change.
98+ * Sets the delay (in seconds) used for a network channel change.
9199 *
92- * The delay should preferably be longer than the maximum data poll interval used by all sleepy-end-devices within the
93- * Thread network.
100+ * Only available on FTDs. The delay should preferably be longer than the maximum data poll interval used by all
101+ * Sleepy End Devices within the Thread network.
94102 *
95103 * @param[in] aInstance A pointer to an OpenThread instance.
96104 * @param[in] aDelay Delay in seconds.
@@ -117,7 +125,7 @@ otError otChannelManagerSetDelay(otInstance *aInstance, uint16_t aDelay);
117125 *
118126 * 2) If the first step passes, then `ChannelManager` selects a potentially better channel. It uses the collected
119127 * channel quality data by `ChannelMonitor` module. The supported and favored channels are used at this step.
120- * (see otChannelManagerSetSupportedChannels() and otChannelManagerSetFavoredChannels()).
128+ * (see ` otChannelManagerSetSupportedChannels()` and ` otChannelManagerSetFavoredChannels()` ).
121129 *
122130 * 3) If the newly selected channel is different from the current channel, `ChannelManager` requests/starts the
123131 * channel change process (internally invoking a `RequestChannelChange()`).
@@ -132,10 +140,41 @@ otError otChannelManagerSetDelay(otInstance *aInstance, uint16_t aDelay);
132140otError otChannelManagerRequestChannelSelect (otInstance * aInstance , bool aSkipQualityCheck );
133141
134142/**
135- * Enables or disables the auto-channel-selection functionality.
143+ * Requests that `ChannelManager` checks and selects a new CSL channel and starts a CSL channel change.
144+ *
145+ * Only available with `OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE &&
146+ * OPENTHREAD_CONFIG_CHANNEL_MANAGER_CSL_CHANNEL_SELECT_ENABLE`. This function asks the `ChannelManager` to select a
147+ * channel by itself (based on collected channel quality info).
148+ *
149+ * Once called, the Channel Manager will perform the following 3 steps:
150+ *
151+ * 1) `ChannelManager` decides if the CSL channel change would be helpful. This check can be skipped if
152+ * `aSkipQualityCheck` is set to true (forcing a CSL channel selection to happen and skipping the quality check).
153+ * This step uses the collected link quality metrics on the device (such as CCA failure rate, frame and message
154+ * error rates per neighbor, etc.) to determine if the current channel quality is at the level that justifies
155+ * a CSL channel change.
156+ *
157+ * 2) If the first step passes, then `ChannelManager` selects a potentially better CSL channel. It uses the collected
158+ * channel quality data by `ChannelMonitor` module. The supported and favored channels are used at this step.
159+ * (see `otChannelManagerSetSupportedChannels()` and `otChannelManagerSetFavoredChannels()`).
160+ *
161+ * 3) If the newly selected CSL channel is different from the current CSL channel, `ChannelManager` starts the
162+ * CSL channel change process.
163+ *
164+ * @param[in] aInstance A pointer to an OpenThread instance.
165+ * @param[in] aSkipQualityCheck Indicates whether the quality check (step 1) should be skipped.
166+ *
167+ * @retval OT_ERROR_NONE Channel selection finished successfully.
168+ * @retval OT_ERROR_NOT_FOUND Supported channel mask is empty, therefore could not select a channel.
169+ *
170+ */
171+ otError otChannelManagerRequestCslChannelSelect (otInstance * aInstance , bool aSkipQualityCheck );
172+
173+ /**
174+ * Enables or disables the auto-channel-selection functionality for network channel.
136175 *
137176 * When enabled, `ChannelManager` will periodically invoke a `RequestChannelSelect(false)`. The period interval
138- * can be set by `SetAutoChannelSelectionInterval ()`.
177+ * can be set by `otChannelManagerSetAutoChannelSelectionInterval ()`.
139178 *
140179 * @param[in] aInstance A pointer to an OpenThread instance.
141180 * @param[in] aEnabled Indicates whether to enable or disable this functionality.
@@ -144,7 +183,7 @@ otError otChannelManagerRequestChannelSelect(otInstance *aInstance, bool aSkipQu
144183void otChannelManagerSetAutoChannelSelectionEnabled (otInstance * aInstance , bool aEnabled );
145184
146185/**
147- * Indicates whether the auto-channel-selection functionality is enabled or not.
186+ * Indicates whether the auto-channel-selection functionality for a network channel is enabled or not.
148187 *
149188 * @param[in] aInstance A pointer to an OpenThread instance.
150189 *
@@ -153,6 +192,33 @@ void otChannelManagerSetAutoChannelSelectionEnabled(otInstance *aInstance, bool
153192 */
154193bool otChannelManagerGetAutoChannelSelectionEnabled (otInstance * aInstance );
155194
195+ /**
196+ * Enables or disables the auto-channel-selection functionality for a CSL channel.
197+ *
198+ * Only available with `OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE &&
199+ * OPENTHREAD_CONFIG_CHANNEL_MANAGER_CSL_CHANNEL_SELECT_ENABLE`. When enabled, `ChannelManager` will periodically invoke
200+ * a `otChannelManagerRequestCslChannelSelect()`. The period interval can be set by
201+ * `otChannelManagerSetAutoChannelSelectionInterval()`.
202+ *
203+ * @param[in] aInstance A pointer to an OpenThread instance.
204+ * @param[in] aEnabled Indicates whether to enable or disable this functionality.
205+ *
206+ */
207+ void otChannelManagerSetAutoCslChannelSelectionEnabled (otInstance * aInstance , bool aEnabled );
208+
209+ /**
210+ * Indicates whether the auto-csl-channel-selection functionality is enabled or not.
211+ *
212+ * Only available with `OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE &&
213+ * OPENTHREAD_CONFIG_CHANNEL_MANAGER_CSL_CHANNEL_SELECT_ENABLE`.
214+ *
215+ * @param[in] aInstance A pointer to an OpenThread instance.
216+ *
217+ * @returns TRUE if enabled, FALSE if disabled.
218+ *
219+ */
220+ bool otChannelManagerGetAutoCslChannelSelectionEnabled (otInstance * aInstance );
221+
156222/**
157223 * Sets the period interval (in seconds) used by auto-channel-selection functionality.
158224 *
0 commit comments