| /* |
| * Copyright (c) 2023 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief This file extends interface of ieee802154_radio.h for OpenThread. |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_NET_IEEE802154_RADIO_OPENTHREAD_H_ |
| #define ZEPHYR_INCLUDE_NET_IEEE802154_RADIO_OPENTHREAD_H_ |
| |
| #include <zephyr/net/ieee802154_radio.h> |
| |
| /** |
| * OpenThread specific capabilities of ieee802154 driver. |
| * This type extends @ref ieee802154_hw_caps. |
| */ |
| enum ieee802154_openthread_hw_caps { |
| /** Capability to transmit with @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA |
| * mode. |
| */ |
| IEEE802154_OPENTHREAD_HW_MULTIPLE_CCA = BIT(IEEE802154_HW_CAPS_BITS_PRIV_START), |
| }; |
| |
| enum ieee802154_openthread_tx_mode { |
| /** |
| * The @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA mode allows to send |
| * a scheduled packet if the channel is reported idle after at most |
| * 1 + max_extra_cca_attempts CCAs performed back-to-back. |
| * |
| * This mode is a non-standard experimental OpenThread feature. It allows transmission |
| * of a packet within a certain time window. |
| * The earliest transmission time is specified as in the other TXTIME modes: |
| * When the first CCA reports an idle channel then the first symbol of the packet's PHR |
| * SHALL be present at the local antenna at the time represented by the scheduled |
| * TX timestamp (referred to as T_tx below). |
| * |
| * If the first CCA reports a busy channel, then additional CCAs up to |
| * max_extra_cca_attempts will be done until one of them reports an idle channel and |
| * the packet is sent out or the max number of attempts is reached in which case |
| * the transmission fails. |
| * |
| * The timing of these additional CCAs depends on the capabilities of the driver |
| * which reports them in the T_recca and T_ccatx driver attributes |
| * (see @ref IEEE802154_OPENTHREAD_ATTR_T_RECCA and |
| * @ref IEEE802154_OPENTHREAD_ATTR_T_CCATX). Based on these attributes the upper layer |
| * can calculate the latest point in time (T_txmax) that the first symbol of the scheduled |
| * packet's PHR SHALL be present at the local antenna: |
| * |
| * T_maxtxdelay = max_extra_cca_attempts * (aCcaTime + T_recca) - T_recca + T_ccatx |
| * T_txmax = T_tx + T_maxtxdelay |
| * |
| * See IEEE 802.15.4-2020, section 11.3, table 11-1 for the definition of aCcaTime. |
| * |
| * Drivers implementing this TX mode SHOULD keep T_recca and T_ccatx as short as possible. |
| * T_ccatx SHALL be less than or equal aTurnaroundTime as defined in ibid., |
| * section 11.3, table 11-1. |
| * |
| * CCA SHALL be executed as defined by the phyCcaMode PHY PIB attribute (see ibid., |
| * section 11.3, table 11-2). |
| * |
| * Requires IEEE802154_OPENTHREAD_HW_MULTIPLE_CCA capability. |
| */ |
| IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA = IEEE802154_TX_MODE_PRIV_START |
| }; |
| |
| /** |
| * OpenThread specific configuration types of ieee802154 driver. |
| * This type extends @ref ieee802154_config_type. |
| */ |
| enum ieee802154_openthread_config_type { |
| /** Allows to configure extra CCA for transmission requested with mode |
| * @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA. |
| * Requires IEEE802154_OPENTHREAD_HW_MULTIPLE_CCA capability. |
| */ |
| IEEE802154_OPENTHREAD_CONFIG_MAX_EXTRA_CCA_ATTEMPTS = IEEE802154_CONFIG_PRIV_START |
| }; |
| |
| /** |
| * Thread vendor OUI for vendor specific header or nested information elements, |
| * see IEEE 802.15.4-2020, sections 7.4.2.2 and 7.4.4.30. |
| * |
| * in little endian |
| */ |
| #define IEEE802154_OPENTHREAD_THREAD_IE_VENDOR_OUI { 0x9b, 0xb8, 0xea } |
| |
| /** length of IEEE 802.15.4-2020 vendor OUIs */ |
| #define IEEE802154_OPENTHREAD_VENDOR_OUI_LEN 3 |
| |
| /** OpenThread specific configuration data of ieee802154 driver. */ |
| struct ieee802154_openthread_config { |
| union { |
| struct ieee802154_config common; |
| |
| /** ``IEEE802154_OPENTHREAD_CONFIG_MAX_EXTRA_CCA_ATTEMPTS`` |
| * |
| * The maximum number of extra CCAs to be performed when transmission is |
| * requested with mode @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA. |
| */ |
| uint8_t max_extra_cca_attempts; |
| }; |
| }; |
| |
| /** |
| * OpenThread specific attributes of ieee802154 driver. |
| * This type extends @ref ieee802154_attr |
| */ |
| enum ieee802154_openthread_attr { |
| |
| /** Attribute: Maximum time between consecutive CCAs performed back-to-back. |
| * |
| * This is attribute for T_recca parameter mentioned for |
| * @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA. |
| * Time is expressed in microseconds. |
| */ |
| IEEE802154_OPENTHREAD_ATTR_T_RECCA = IEEE802154_ATTR_PRIV_START, |
| |
| /** Attribute: Maximum time between detection of CCA idle channel and the moment of |
| * start of SHR at the local antenna. |
| * |
| * This is attribute for T_ccatx parameter mentioned for |
| * @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA. |
| * Time is expressed in microseconds. |
| */ |
| IEEE802154_OPENTHREAD_ATTR_T_CCATX |
| }; |
| |
| /** |
| * OpenThread specific attribute value data of ieee802154 driver. |
| * This type extends @ref ieee802154_attr_value |
| */ |
| struct ieee802154_openthread_attr_value { |
| union { |
| struct ieee802154_attr_value common; |
| |
| /** @brief Attribute value for @ref IEEE802154_OPENTHREAD_ATTR_T_RECCA */ |
| uint16_t t_recca; |
| |
| /** @brief Attribute value for @ref IEEE802154_OPENTHREAD_ATTR_T_CCATX */ |
| uint16_t t_ccatx; |
| |
| }; |
| }; |
| |
| #endif /* ZEPHYR_INCLUDE_NET_IEEE802154_RADIO_OPENTHREAD_H_ */ |