drivers: ieee802154: add IEEE802154_RX_ON_WHEN_IDLE capability

Introduce `IEEE802154_RX_ON_WHEN_IDLE` capability.

Signed-off-by: Eduardo Montoya <eduardo.montoya@nordicsemi.no>
This commit is contained in:
Eduardo Montoya 2023-11-14 15:11:27 +01:00 committed by Carles Cufí
parent 5fee1b17d5
commit 5c6402e76b

View file

@ -515,13 +515,16 @@ enum ieee802154_hw_caps {
/** TX security supported (key management, encryption and authentication) */
IEEE802154_HW_TX_SEC = BIT(11),
/** RxOnWhenIdle handling supported */
IEEE802154_RX_ON_WHEN_IDLE = BIT(12),
/* Note: Update also IEEE802154_HW_CAPS_BITS_COMMON_COUNT when changing
* the ieee802154_hw_caps type.
*/
};
/** @brief Number of bits used by ieee802154_hw_caps type. */
#define IEEE802154_HW_CAPS_BITS_COMMON_COUNT (12)
#define IEEE802154_HW_CAPS_BITS_COMMON_COUNT (13)
/** @brief This and higher values are specific to the protocol- or driver-specific extensions. */
#define IEEE802154_HW_CAPS_BITS_PRIV_START IEEE802154_HW_CAPS_BITS_COMMON_COUNT
@ -1057,6 +1060,35 @@ enum ieee802154_config_type {
*/
IEEE802154_CONFIG_ENH_ACK_HEADER_IE,
/**
* Enable/disable RxOnWhenIdle MAC PIB attribute (Table 8-94).
*
* Since there is no clear guidance in IEEE 802.15.4 specification about the definition of
* an "idle period", this implementation expects that drivers use the RxOnWhenIdle attribute
* to determine next radio state (false --> off, true --> receive) in the following
* scenarios:
* - Finalization of a regular frame reception task, provided that:
* - The frame is received without errors and passes the filtering and it's not an
* spurious ACK.
* - ACK is not requested or transmission of ACK is not possible due to internal
* conditions.
* - Finalization of a frame transmission or transmission of an ACK frame, when ACK is not
* requested in the transmitted frame.
* - Finalization of the reception operation of a requested ACK due to:
* - ACK timeout expiration.
* - Reception of an invalid ACK or not an ACK frame.
* - Reception of the proper ACK, unless the transmitted frame was a Data Request Command
* and the frame pending bit on the received ACK is set to true. In this case the radio
* platform implementation SHOULD keep the receiver on until a determined timeout which
* triggers an idle period start.
* - Finalization of a stand alone CCA task.
* - Finalization of a CCA operation with busy result during CSMA/CA procedure.
* - Finalization of an Energy Detection task.
* - Finalization of a scheduled radio reception window
* (see @ref IEEE802154_CONFIG_RX_SLOT).
*/
IEEE802154_CONFIG_RX_ON_WHEN_IDLE,
/** Number of types defined in ieee802154_config_type. */
IEEE802154_CONFIG_COMMON_COUNT,
@ -1103,6 +1135,9 @@ struct ieee802154_config {
/** see @ref IEEE802154_CONFIG_PROMISCUOUS */
bool promiscuous;
/** see @ref IEEE802154_CONFIG_RX_ON_WHEN_IDLE */
bool rx_on_when_idle;
/** see @ref IEEE802154_CONFIG_EVENT_HANDLER */
ieee802154_event_cb_t event_handler;