Skip to content

Commit

Permalink
[radio] clarify otPlatRadioReceiveAt() behavior (openthread#11221)
Browse files Browse the repository at this point in the history
This commit clarifies the documentation for `otPlatRadioReceiveAt()`
regarding its behavior when called multiple times after successfully
scheduling a reception window.  If a subsequent call occurs before
the start of the previous window, it MUST cancel the previous window
and effectively replace it. If the call occurs after the start of
the previously scheduled window, even if still within it, it MUST
NOT impact the ongoing reception.
  • Loading branch information
abtink authored Feb 13, 2025
1 parent 3c7f387 commit 6831210
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
2 changes: 1 addition & 1 deletion include/openthread/instance.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ extern "C" {
*
* @note This number versions both OpenThread platform and user APIs.
*/
#define OPENTHREAD_API_VERSION (476)
#define OPENTHREAD_API_VERSION (477)

/**
* @addtogroup api-instance
Expand Down
13 changes: 12 additions & 1 deletion include/openthread/platform/radio.h
Original file line number Diff line number Diff line change
Expand Up @@ -865,6 +865,17 @@ otError otPlatRadioReceive(otInstance *aInstance, uint8_t aChannel);
/**
* Schedule a radio reception window at a specific time and duration.
*
* After a radio reception is successfully scheduled for a future time and duration, a subsequent call to this
* function MUST be handled as follows:
*
* - If the start time of the previously scheduled reception window has not yet been reached, the new call to
* `otPlatRadioReceiveAt()` MUST cancel the previous schedule, effectively replacing it.
*
* - If the start of the previous window has already passed, the previous receive schedule is already being executed
* by the radio and MUST NOT be replaced or impacted. The new call to `otPlatRadioReceiveAt()` would then schedule
* a new future receive window. In particular, if the new `otPlatRadioReceiveAt()` call occurs after the start
* but while still within the previous reception window, the ongoing reception window MUST NOT be impacted.
*
* @param[in] aChannel The radio channel on which to receive.
* @param[in] aStart The receive window start time relative to the local
* radio clock, see `otPlatRadioGetNow`. The radio
Expand All @@ -879,7 +890,7 @@ otError otPlatRadioReceive(otInstance *aInstance, uint8_t aChannel);
* reception has either succeeded or failed.
*
* @retval OT_ERROR_NONE Successfully scheduled receive window.
* @retval OT_ERROR_FAILED The receive window could not be scheduled.
* @retval OT_ERROR_FAILED The receive window could not be scheduled. For example, if @p aStart is in the past.
*/
otError otPlatRadioReceiveAt(otInstance *aInstance, uint8_t aChannel, uint32_t aStart, uint32_t aDuration);

Expand Down

0 comments on commit 6831210

Please sign in to comment.