LCOV - code coverage report
Current view: top level - zephyr/net - ieee802154_radio_openthread.h Coverage Total Hit
Test: new.info Lines: 89.5 % 19 17
Test Date: 2025-09-05 22:20:39

            Line data    Source code
       1            1 : /*
       2              :  * Copyright (c) 2023 Nordic Semiconductor ASA
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : /**
       8              :  * @file
       9              :  * @brief This file extends interface of ieee802154_radio.h for OpenThread.
      10              :  */
      11              : 
      12              : #ifndef ZEPHYR_INCLUDE_NET_IEEE802154_RADIO_OPENTHREAD_H_
      13              : #define ZEPHYR_INCLUDE_NET_IEEE802154_RADIO_OPENTHREAD_H_
      14              : 
      15              : #include <zephyr/net/ieee802154_radio.h>
      16              : 
      17              : /** Bit number starting the OpenThread specific capabilities of ieee802154 driver. */
      18            1 : #define IEEE802154_OPENTHREAD_HW_CAPS_BITS_START IEEE802154_HW_CAPS_BITS_PRIV_START
      19              : 
      20              : /**
      21              :  *  OpenThread specific capabilities of ieee802154 driver.
      22              :  *  This type extends @ref ieee802154_hw_caps.
      23              :  */
      24            1 : enum ieee802154_openthread_hw_caps {
      25              :         /** Capability to transmit with @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA
      26              :          *  mode.
      27              :          */
      28              :         IEEE802154_OPENTHREAD_HW_MULTIPLE_CCA = BIT(IEEE802154_OPENTHREAD_HW_CAPS_BITS_START),
      29              : 
      30              :         /** Capability to support CST-related features.
      31              :          *
      32              :          * The CST-related features are described by "Specification changes for Thread-in-Mobile"
      33              :          * Draft version 1, July 11, 2024. The CST allows to transmit a frame with CST Phase and
      34              :          * CST Period IEs as described by chapter 4.6.6.1 of the Thread-in-Mobile specification
      35              :          * change. The upper layer implementation (OpenThread) is responsible for preparing
      36              :          * a frame to be transmitted that contains placeholders where the CST Phase and CST Period
      37              :          * are to be placed. The implementation of a driver is responsible for injecting
      38              :          * correct value for CST Phase IE and CST Period IE based on configuration parameters
      39              :          * @ref IEEE802154_OPENTHREAD_CONFIG_CST_PERIOD and
      40              :          * @ref IEEE802154_OPENTHREAD_CONFIG_EXPECTED_TX_TIME.
      41              :          *
      42              :          * @note The CST transmission in its design is very similar to CSL reception.
      43              :          * In the CSL reception the receiver side informs its peer about the moment in time
      44              :          * when it will be able to receive. In the CST transmission the transmitter side informs
      45              :          * its peer about the moment in time when the next transmission will occur.
      46              :          */
      47              :         IEEE802154_OPENTHREAD_HW_CST = BIT(IEEE802154_OPENTHREAD_HW_CAPS_BITS_START + 1),
      48              : };
      49              : 
      50              : /** @brief TX mode */
      51            1 : enum ieee802154_openthread_tx_mode {
      52              :         /**
      53              :          * The @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA mode allows to send
      54              :          * a scheduled packet if the channel is reported idle after at most
      55              :          * 1 + max_extra_cca_attempts CCAs performed back-to-back.
      56              :          *
      57              :          * This mode is a non-standard experimental OpenThread feature. It allows transmission
      58              :          * of a packet within a certain time window.
      59              :          * The earliest transmission time is specified as in the other TXTIME modes:
      60              :          * When the first CCA reports an idle channel then the first symbol of the packet's PHR
      61              :          * SHALL be present at the local antenna at the time represented by the scheduled
      62              :          * TX timestamp (referred to as T_tx below).
      63              :          *
      64              :          * If the first CCA reports a busy channel, then additional CCAs up to
      65              :          * max_extra_cca_attempts will be done until one of them reports an idle channel and
      66              :          * the packet is sent out or the max number of attempts is reached in which case
      67              :          * the transmission fails.
      68              :          *
      69              :          * The timing of these additional CCAs depends on the capabilities of the driver
      70              :          * which reports them in the T_recca and T_ccatx driver attributes
      71              :          * (see @ref IEEE802154_OPENTHREAD_ATTR_T_RECCA and
      72              :          * @ref IEEE802154_OPENTHREAD_ATTR_T_CCATX). Based on these attributes the upper layer
      73              :          * can calculate the latest point in time (T_txmax) that the first symbol of the scheduled
      74              :          * packet's PHR SHALL be present at the local antenna:
      75              :          *
      76              :          * T_maxtxdelay = max_extra_cca_attempts * (aCcaTime + T_recca) - T_recca + T_ccatx
      77              :          * T_txmax = T_tx + T_maxtxdelay
      78              :          *
      79              :          * See IEEE 802.15.4-2020, section 11.3, table 11-1 for the definition of aCcaTime.
      80              :          *
      81              :          * Drivers implementing this TX mode SHOULD keep T_recca and T_ccatx as short as possible.
      82              :          * T_ccatx SHALL be less than or equal aTurnaroundTime as defined in ibid.,
      83              :          * section 11.3, table 11-1.
      84              :          *
      85              :          * CCA SHALL be executed as defined by the phyCcaMode PHY PIB attribute (see ibid.,
      86              :          * section 11.3, table 11-2).
      87              :          *
      88              :          * Requires IEEE802154_OPENTHREAD_HW_MULTIPLE_CCA capability.
      89              :          *
      90              :          * @note Capability @ref IEEE802154_HW_SELECTIVE_TXCHANNEL applies as for
      91              :          *       @ref IEEE802154_TX_MODE_TXTIME_CCA.
      92              :          */
      93              :         IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA = IEEE802154_TX_MODE_PRIV_START
      94              : };
      95              : 
      96              : /**
      97              :  *  OpenThread specific configuration types of ieee802154 driver.
      98              :  *  This type extends @ref ieee802154_config_type.
      99              :  */
     100            1 : enum ieee802154_openthread_config_type {
     101              :         /** Allows to configure extra CCA for transmission requested with mode
     102              :          *  @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA.
     103              :          *  Requires IEEE802154_OPENTHREAD_HW_MULTIPLE_CCA capability.
     104              :          */
     105              :         IEEE802154_OPENTHREAD_CONFIG_MAX_EXTRA_CCA_ATTEMPTS  = IEEE802154_CONFIG_PRIV_START,
     106              : 
     107              :         /** Configures the CST period of a device.
     108              :          *
     109              :          *  When a frame containing CST Period IE is about to be transmitted by a driver,
     110              :          *  the driver SHALL inject the CST Period value to the CST Period IE based on
     111              :          *  the value of this configuration parameter.
     112              :          *
     113              :          *  Requires IEEE802154_OPENTHREAD_HW_CST capability.
     114              :          */
     115              :         IEEE802154_OPENTHREAD_CONFIG_CST_PERIOD,
     116              : 
     117              :         /** Configure a point in time at which a TX frame is expected to be transmitted.
     118              :          *
     119              :          *  When a frame containing CST Phase IE is about to be transmitted by a driver,
     120              :          *  the driver SHALL inject the CST Phase IE value to the CST Phase IE based on
     121              :          *  the value of this configuration parameter parameter, the time of transmission
     122              :          *  and the CST Period value.
     123              :          *
     124              :          *  This parameter configures the nanosecond resolution timepoint relative to
     125              :          *  the network subsystem's local clock at which a TX frame's end of SFD
     126              :          *  (i.e. equivalently its end of SHR, start of PHR) is expected to be transmitted
     127              :          *  at the local antenna.
     128              :          *
     129              :          *  Requires IEEE802154_OPENTHREAD_HW_CST capability.
     130              :          */
     131              :         IEEE802154_OPENTHREAD_CONFIG_EXPECTED_TX_TIME,
     132              : };
     133              : 
     134              : /**
     135              :  * Thread vendor OUI for vendor specific header or nested information elements,
     136              :  * see IEEE 802.15.4-2020, sections 7.4.2.2 and 7.4.4.30.
     137              :  *
     138              :  * in little endian
     139              :  */
     140            1 : #define IEEE802154_OPENTHREAD_THREAD_IE_VENDOR_OUI { 0x9b, 0xb8, 0xea }
     141              : 
     142              : /** length of IEEE 802.15.4-2020 vendor OUIs */
     143            1 : #define IEEE802154_OPENTHREAD_VENDOR_OUI_LEN 3
     144              : 
     145              : /** OpenThread specific configuration data of ieee802154 driver. */
     146            1 : struct ieee802154_openthread_config {
     147              :         union {
     148              :                 /** Common configuration */
     149            1 :                 struct ieee802154_config common;
     150              : 
     151              :                 /** ``IEEE802154_OPENTHREAD_CONFIG_MAX_EXTRA_CCA_ATTEMPTS``
     152              :                  *
     153              :                  *  The maximum number of extra CCAs to be performed when transmission is
     154              :                  *  requested with mode @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA.
     155              :                  */
     156            1 :                 uint8_t max_extra_cca_attempts;
     157              : 
     158              :                 /** ``IEEE802154_OPENTHREAD_CONFIG_CST_PERIOD``
     159              :                  *
     160              :                  *  The CST period (in CPU byte order).
     161              :                  */
     162            1 :                 uint32_t cst_period;
     163              : 
     164              :                 /** ``IEEE802154_OPENTHREAD_CONFIG_EXPECTED_TX_TIME``
     165              :                  *
     166              :                  *  A point in time at which a TX frame is expected to be transmitted.
     167              :                  */
     168            1 :                 net_time_t expected_tx_time;
     169            0 :         };
     170              : };
     171              : 
     172              : /**
     173              :  *  OpenThread specific attributes of ieee802154 driver.
     174              :  *  This type extends @ref ieee802154_attr
     175              :  */
     176            1 : enum ieee802154_openthread_attr {
     177              : 
     178              :         /** Attribute: Maximum time between consecutive CCAs performed back-to-back.
     179              :          *
     180              :          *  This is attribute for T_recca parameter mentioned for
     181              :          *  @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA.
     182              :          *  Time is expressed in microseconds.
     183              :          */
     184              :         IEEE802154_OPENTHREAD_ATTR_T_RECCA = IEEE802154_ATTR_PRIV_START,
     185              : 
     186              :         /** Attribute: Maximum time between detection of CCA idle channel and the moment of
     187              :          *  start of SHR at the local antenna.
     188              :          *
     189              :          *  This is attribute for T_ccatx parameter mentioned for
     190              :          *  @ref IEEE802154_OPENTHREAD_TX_MODE_TXTIME_MULTIPLE_CCA.
     191              :          *  Time is expressed in microseconds.
     192              :          */
     193              :         IEEE802154_OPENTHREAD_ATTR_T_CCATX
     194              : };
     195              : 
     196              : /**
     197              :  *  OpenThread specific attribute value data of ieee802154 driver.
     198              :  *  This type extends @ref ieee802154_attr_value
     199              :  */
     200            1 : struct ieee802154_openthread_attr_value {
     201              :         union {
     202              :                 /** Common attribute value */
     203            1 :                 struct ieee802154_attr_value common;
     204              : 
     205              :                 /** @brief Attribute value for @ref IEEE802154_OPENTHREAD_ATTR_T_RECCA */
     206            1 :                 uint16_t t_recca;
     207              : 
     208              :                 /** @brief Attribute value for @ref IEEE802154_OPENTHREAD_ATTR_T_CCATX */
     209            1 :                 uint16_t t_ccatx;
     210              : 
     211            0 :         };
     212              : };
     213              : 
     214              : #endif /* ZEPHYR_INCLUDE_NET_IEEE802154_RADIO_OPENTHREAD_H_ */
        

Generated by: LCOV version 2.0-1