The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_TB_SENSE_12/TOOLCHAIN_ARM_STD/rail_types.h@171:3a7713b1edbc, 2018-11-08 (annotated)
- Committer:
- AnnaBridge
- Date:
- Thu Nov 08 11:45:42 2018 +0000
- Revision:
- 171:3a7713b1edbc
- Parent:
- TARGET_TB_SENSE_1/TARGET_Silicon_Labs/TARGET_SL_RAIL/efr32-rf-driver/rail/rail_types.h@167:84c0a372a020
mbed library. Release version 164
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Anna Bridge |
160:5571c4ff569f | 1 | /**************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 2 | * @file rail_types.h |
Anna Bridge |
142:4eea097334d6 | 3 | * @brief This file contains the type definitions for RAIL structures, enums, |
Anna Bridge |
142:4eea097334d6 | 4 | * and other types. |
AnnaBridge | 167:84c0a372a020 | 5 | * @copyright Copyright 2017 Silicon Laboratories, Inc. www.silabs.com |
Anna Bridge |
160:5571c4ff569f | 6 | *****************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 7 | |
Anna Bridge |
142:4eea097334d6 | 8 | #ifndef __RAIL_TYPES_H__ |
Anna Bridge |
142:4eea097334d6 | 9 | #define __RAIL_TYPES_H__ |
Anna Bridge |
142:4eea097334d6 | 10 | |
Anna Bridge |
142:4eea097334d6 | 11 | // Include standard type headers to help define structures |
Anna Bridge |
142:4eea097334d6 | 12 | #include <stdint.h> |
Anna Bridge |
142:4eea097334d6 | 13 | #include <stdbool.h> |
Anna Bridge |
142:4eea097334d6 | 14 | #include <stddef.h> |
Anna Bridge |
142:4eea097334d6 | 15 | |
AnnaBridge | 167:84c0a372a020 | 16 | #ifdef __cplusplus |
AnnaBridge | 167:84c0a372a020 | 17 | extern "C" { |
AnnaBridge | 167:84c0a372a020 | 18 | #endif |
AnnaBridge | 167:84c0a372a020 | 19 | |
Anna Bridge |
160:5571c4ff569f | 20 | #ifdef DOXYGEN_SHOULD_SKIP_THIS |
Anna Bridge |
160:5571c4ff569f | 21 | /// The RAIL library does not use enums because the ARM EABI leaves their |
Anna Bridge |
160:5571c4ff569f | 22 | /// size ambiguous. This ambiguity causes problems if the application is built |
Anna Bridge |
160:5571c4ff569f | 23 | /// with different flags than the library. Instead, uint8_t typedefs |
Anna Bridge |
160:5571c4ff569f | 24 | /// are used in compiled code for all enums. For documentation purposes this is |
Anna Bridge |
160:5571c4ff569f | 25 | /// converted to an actual enum since it's much easier to read in Doxygen. |
Anna Bridge |
160:5571c4ff569f | 26 | #define RAIL_ENUM(name) enum name |
Anna Bridge |
160:5571c4ff569f | 27 | /// This macro is a more generic version of the \ref RAIL_ENUM() macro that |
Anna Bridge |
160:5571c4ff569f | 28 | /// allows the size of the type to be overridden instead of forcing the use of |
Anna Bridge |
160:5571c4ff569f | 29 | /// a uint8_t. See \ref RAIL_ENUM() for more information about why RAIL enums |
Anna Bridge |
160:5571c4ff569f | 30 | /// are defined using these. |
Anna Bridge |
160:5571c4ff569f | 31 | #define RAIL_ENUM_GENERIC(name, type) enum name |
Anna Bridge |
160:5571c4ff569f | 32 | #else |
Anna Bridge |
160:5571c4ff569f | 33 | /// Define used for the RAIL library, which sets each enum to a uint8_t |
Anna Bridge |
160:5571c4ff569f | 34 | /// typedef and creates a named enum structure for the enumeration values. |
Anna Bridge |
160:5571c4ff569f | 35 | #define RAIL_ENUM(name) typedef uint8_t name; enum name##_enum |
Anna Bridge |
160:5571c4ff569f | 36 | #define RAIL_ENUM_GENERIC(name, type) typedef type name; enum name##_enum |
Anna Bridge |
160:5571c4ff569f | 37 | // For debugging use the following define to turn this back into a proper enum |
Anna Bridge |
160:5571c4ff569f | 38 | // #define RAIL_ENUM(name) typedef enum name##_enum name; enum name##_enum |
Anna Bridge |
160:5571c4ff569f | 39 | #endif |
Anna Bridge |
142:4eea097334d6 | 40 | |
Anna Bridge |
142:4eea097334d6 | 41 | /** |
Anna Bridge |
142:4eea097334d6 | 42 | * @addtogroup RAIL_API |
Anna Bridge |
142:4eea097334d6 | 43 | * @{ |
Anna Bridge |
142:4eea097334d6 | 44 | */ |
Anna Bridge |
142:4eea097334d6 | 45 | |
Anna Bridge |
160:5571c4ff569f | 46 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 47 | * Multiprotocol Structures |
Anna Bridge |
160:5571c4ff569f | 48 | *****************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 49 | /** |
Anna Bridge |
160:5571c4ff569f | 50 | * @addtogroup Multiprotocol |
Anna Bridge |
160:5571c4ff569f | 51 | * @{ |
Anna Bridge |
160:5571c4ff569f | 52 | */ |
Anna Bridge |
160:5571c4ff569f | 53 | |
Anna Bridge |
160:5571c4ff569f | 54 | /** |
AnnaBridge | 167:84c0a372a020 | 55 | * @typedef RAIL_Time_t |
AnnaBridge | 167:84c0a372a020 | 56 | * @brief Time in microseconds |
AnnaBridge | 167:84c0a372a020 | 57 | */ |
AnnaBridge | 167:84c0a372a020 | 58 | typedef uint32_t RAIL_Time_t; |
AnnaBridge | 167:84c0a372a020 | 59 | |
AnnaBridge | 167:84c0a372a020 | 60 | /** |
Anna Bridge |
160:5571c4ff569f | 61 | * @def RAIL_SCHEDULER_STATE_UINT32_BUFFER_SIZE |
Anna Bridge |
160:5571c4ff569f | 62 | * @brief The size in 32-bit words of RAIL_SchedulerStateBuffer_t to store |
Anna Bridge |
160:5571c4ff569f | 63 | * RAIL multiprotocol internal state. |
Anna Bridge |
160:5571c4ff569f | 64 | */ |
Anna Bridge |
160:5571c4ff569f | 65 | #define RAIL_SCHEDULER_STATE_UINT32_BUFFER_SIZE 25 |
Anna Bridge |
160:5571c4ff569f | 66 | |
Anna Bridge |
160:5571c4ff569f | 67 | /** |
Anna Bridge |
160:5571c4ff569f | 68 | * @typedef RAIL_SchedulerStateBuffer_t |
Anna Bridge |
160:5571c4ff569f | 69 | * @brief Buffer used to store multiprotocol scheduler internal state. |
Anna Bridge |
160:5571c4ff569f | 70 | * |
Anna Bridge |
160:5571c4ff569f | 71 | * This buffer must be allocated in application global read-write memory |
Anna Bridge |
160:5571c4ff569f | 72 | * that persists for the duration of RAIL usage. It cannot be allocated |
Anna Bridge |
160:5571c4ff569f | 73 | * in read-only memory or on the call stack. |
Anna Bridge |
160:5571c4ff569f | 74 | */ |
Anna Bridge |
160:5571c4ff569f | 75 | typedef uint32_t RAIL_SchedulerStateBuffer_t[RAIL_SCHEDULER_STATE_UINT32_BUFFER_SIZE]; |
Anna Bridge |
160:5571c4ff569f | 76 | |
Anna Bridge |
160:5571c4ff569f | 77 | /** |
Anna Bridge |
160:5571c4ff569f | 78 | * @struct RAILSched_Config_t |
Anna Bridge |
160:5571c4ff569f | 79 | * @brief Multiprotocol scheduler configuration and internal state. |
Anna Bridge |
160:5571c4ff569f | 80 | * |
Anna Bridge |
160:5571c4ff569f | 81 | * This buffer must be allocated in application global read-write memory |
Anna Bridge |
160:5571c4ff569f | 82 | * that persists for the duration of RAIL usage. It cannot be allocated |
Anna Bridge |
160:5571c4ff569f | 83 | * in read-only memory or on the call stack. |
Anna Bridge |
160:5571c4ff569f | 84 | */ |
Anna Bridge |
160:5571c4ff569f | 85 | typedef struct RAILSched_Config { |
Anna Bridge |
160:5571c4ff569f | 86 | RAIL_SchedulerStateBuffer_t buffer; /**< Internal state buffer. */ |
Anna Bridge |
160:5571c4ff569f | 87 | } RAILSched_Config_t; |
Anna Bridge |
160:5571c4ff569f | 88 | |
Anna Bridge |
160:5571c4ff569f | 89 | /** |
Anna Bridge |
160:5571c4ff569f | 90 | * @struct RAIL_SchedulerInfo_t |
Anna Bridge |
160:5571c4ff569f | 91 | * @brief A structure to hold information used by the scheduler. |
Anna Bridge |
160:5571c4ff569f | 92 | * |
Anna Bridge |
160:5571c4ff569f | 93 | * For multiprotocol versions of RAIL this can be used to control how a receive |
Anna Bridge |
160:5571c4ff569f | 94 | * or transmit operation is run. In single protocol applications it's not |
Anna Bridge |
160:5571c4ff569f | 95 | * necessary. |
Anna Bridge |
160:5571c4ff569f | 96 | */ |
Anna Bridge |
160:5571c4ff569f | 97 | typedef struct RAIL_SchedulerInfo { |
Anna Bridge |
160:5571c4ff569f | 98 | /** |
Anna Bridge |
160:5571c4ff569f | 99 | * The priority for this operation in the scheduler. This priority is used to |
Anna Bridge |
160:5571c4ff569f | 100 | * preempt a long running lower priority task to ensure higher priority |
Anna Bridge |
160:5571c4ff569f | 101 | * operations complete in time. A lower numerical value represents a higher |
Anna Bridge |
160:5571c4ff569f | 102 | * logical priority meaning 0 is the highest priority and 255 is the lowest. |
Anna Bridge |
160:5571c4ff569f | 103 | */ |
Anna Bridge |
160:5571c4ff569f | 104 | uint8_t priority; |
Anna Bridge |
160:5571c4ff569f | 105 | /** |
Anna Bridge |
160:5571c4ff569f | 106 | * The amount of time in us that this operation can slip by into the future |
Anna Bridge |
160:5571c4ff569f | 107 | * and still be run. This time is relative to the start time which may be |
Anna Bridge |
160:5571c4ff569f | 108 | * the current time for relative transmits. If we cannot start by this time |
Anna Bridge |
160:5571c4ff569f | 109 | * the operation will be considered a failure. |
Anna Bridge |
160:5571c4ff569f | 110 | */ |
AnnaBridge | 167:84c0a372a020 | 111 | RAIL_Time_t slipTime; |
Anna Bridge |
160:5571c4ff569f | 112 | /** |
Anna Bridge |
160:5571c4ff569f | 113 | * The transaction time in us for this operation. Since transaction times may |
Anna Bridge |
160:5571c4ff569f | 114 | * not be known exactly you will likely want to use a minimum or expected |
Anna Bridge |
160:5571c4ff569f | 115 | * guess for this time. The scheduler will use the value entered here to look |
Anna Bridge |
160:5571c4ff569f | 116 | * for overlaps between low priority and high priority tasks and attempt to |
Anna Bridge |
160:5571c4ff569f | 117 | * find a schedule where all tasks get to run. |
Anna Bridge |
160:5571c4ff569f | 118 | */ |
AnnaBridge | 167:84c0a372a020 | 119 | RAIL_Time_t transactionTime; |
Anna Bridge |
160:5571c4ff569f | 120 | } RAIL_SchedulerInfo_t; |
Anna Bridge |
160:5571c4ff569f | 121 | |
Anna Bridge |
142:4eea097334d6 | 122 | /** |
Anna Bridge |
160:5571c4ff569f | 123 | * @enum RAIL_SchedulerStatus_t |
Anna Bridge |
160:5571c4ff569f | 124 | * @brief Multiprotocol scheduler status returned by RAIL_GetSchedulerStatus(). |
Anna Bridge |
160:5571c4ff569f | 125 | */ |
Anna Bridge |
160:5571c4ff569f | 126 | RAIL_ENUM(RAIL_SchedulerStatus_t) { |
Anna Bridge |
160:5571c4ff569f | 127 | /** Multiprotocol scheduler reports no error */ |
Anna Bridge |
160:5571c4ff569f | 128 | RAIL_SCHEDULER_STATUS_NO_ERROR, |
Anna Bridge |
160:5571c4ff569f | 129 | /** |
Anna Bridge |
160:5571c4ff569f | 130 | * The scheduler is disabled or the requested scheduler operation is |
Anna Bridge |
160:5571c4ff569f | 131 | * unsupported. |
Anna Bridge |
160:5571c4ff569f | 132 | */ |
Anna Bridge |
160:5571c4ff569f | 133 | RAIL_SCHEDULER_STATUS_UNSUPPORTED, |
Anna Bridge |
160:5571c4ff569f | 134 | /** |
Anna Bridge |
160:5571c4ff569f | 135 | * The scheduled event was started but was interrupted by a higher priority |
Anna Bridge |
160:5571c4ff569f | 136 | * event before it could be completed. |
Anna Bridge |
160:5571c4ff569f | 137 | */ |
Anna Bridge |
160:5571c4ff569f | 138 | RAIL_SCHEDULER_STATUS_EVENT_INTERRUPTED, |
Anna Bridge |
160:5571c4ff569f | 139 | /** |
Anna Bridge |
160:5571c4ff569f | 140 | * This task could not be scheduled given its priority and the other tasks |
Anna Bridge |
160:5571c4ff569f | 141 | * running on the system. |
Anna Bridge |
160:5571c4ff569f | 142 | */ |
Anna Bridge |
160:5571c4ff569f | 143 | RAIL_SCHEDULER_STATUS_SCHEDULE_FAIL, |
Anna Bridge |
160:5571c4ff569f | 144 | /** |
Anna Bridge |
160:5571c4ff569f | 145 | * Calling the scheduled transmit function returned an error code. See |
Anna Bridge |
160:5571c4ff569f | 146 | * RAIL_StartScheduledTx() for more information about possible errors. |
Anna Bridge |
160:5571c4ff569f | 147 | */ |
Anna Bridge |
160:5571c4ff569f | 148 | RAIL_SCHEDULER_STATUS_SCHEDULED_TX_FAIL, |
Anna Bridge |
160:5571c4ff569f | 149 | /** |
Anna Bridge |
160:5571c4ff569f | 150 | * Calling the start transmit function returned an error code. See |
Anna Bridge |
160:5571c4ff569f | 151 | * RAIL_StartTx() for more information about possible errors. |
Anna Bridge |
160:5571c4ff569f | 152 | */ |
Anna Bridge |
160:5571c4ff569f | 153 | RAIL_SCHEDULER_STATUS_SINGLE_TX_FAIL, |
Anna Bridge |
160:5571c4ff569f | 154 | /** |
Anna Bridge |
160:5571c4ff569f | 155 | * Calling the CSMA transmit function returned an error code. See |
Anna Bridge |
160:5571c4ff569f | 156 | * RAIL_StartCcaCsmaTx() for more information about possible errors. |
Anna Bridge |
160:5571c4ff569f | 157 | */ |
Anna Bridge |
160:5571c4ff569f | 158 | RAIL_SCHEDULER_STATUS_CCA_CSMA_TX_FAIL, |
Anna Bridge |
160:5571c4ff569f | 159 | /** |
Anna Bridge |
160:5571c4ff569f | 160 | * Calling the LBT transmit function returned an error code. See |
Anna Bridge |
160:5571c4ff569f | 161 | * RAIL_StartCcaLbtTx() for more information about possible errors. |
Anna Bridge |
160:5571c4ff569f | 162 | */ |
Anna Bridge |
160:5571c4ff569f | 163 | RAIL_SCHEDULER_STATUS_CCA_LBT_TX_FAIL, |
Anna Bridge |
160:5571c4ff569f | 164 | /** |
Anna Bridge |
160:5571c4ff569f | 165 | * Calling the scheduled receive function returned an error code. This likely |
Anna Bridge |
160:5571c4ff569f | 166 | * means that we were a little too late and could not setup the hardware in |
Anna Bridge |
160:5571c4ff569f | 167 | * time to do this receive. |
Anna Bridge |
160:5571c4ff569f | 168 | */ |
Anna Bridge |
160:5571c4ff569f | 169 | RAIL_SCHEDULER_STATUS_SCHEDULED_RX_FAIL, |
Anna Bridge |
160:5571c4ff569f | 170 | /** |
Anna Bridge |
160:5571c4ff569f | 171 | * Calling the stream transmit function returned an error code. See |
Anna Bridge |
160:5571c4ff569f | 172 | * RAIL_StartTxStream() for more information about possible errors. |
Anna Bridge |
160:5571c4ff569f | 173 | */ |
Anna Bridge |
160:5571c4ff569f | 174 | RAIL_SCHEDULER_STATUS_TX_STREAM_FAIL, |
Anna Bridge |
160:5571c4ff569f | 175 | /** |
Anna Bridge |
160:5571c4ff569f | 176 | * RSSI averaging failed. If this scheduler status occurs |
AnnaBridge | 167:84c0a372a020 | 177 | * RAIL_GetAverageRssi() will return \ref RAIL_RSSI_INVALID until |
AnnaBridge | 167:84c0a372a020 | 178 | * a RAIL_StartAverageRssi() completes successfully. |
Anna Bridge |
160:5571c4ff569f | 179 | */ |
Anna Bridge |
160:5571c4ff569f | 180 | RAIL_SCHEDULER_STATUS_AVERAGE_RSSI_FAIL, |
Anna Bridge |
160:5571c4ff569f | 181 | /** |
Anna Bridge |
160:5571c4ff569f | 182 | * There was an internal error in the scheduler data structures. This should |
Anna Bridge |
160:5571c4ff569f | 183 | * not happen and indicates a problem if seen. |
Anna Bridge |
160:5571c4ff569f | 184 | */ |
Anna Bridge |
160:5571c4ff569f | 185 | RAIL_SCHEDULER_STATUS_INTERNAL_ERROR, |
Anna Bridge |
160:5571c4ff569f | 186 | }; |
Anna Bridge |
160:5571c4ff569f | 187 | |
Anna Bridge |
160:5571c4ff569f | 188 | /** @} */ // end of group Multiprotocol |
Anna Bridge |
160:5571c4ff569f | 189 | |
Anna Bridge |
160:5571c4ff569f | 190 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 191 | * Event Structures |
Anna Bridge |
160:5571c4ff569f | 192 | *****************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 193 | /** |
Anna Bridge |
160:5571c4ff569f | 194 | * @addtogroup Events |
Anna Bridge |
142:4eea097334d6 | 195 | * @{ |
Anna Bridge |
142:4eea097334d6 | 196 | */ |
Anna Bridge |
142:4eea097334d6 | 197 | |
Anna Bridge |
142:4eea097334d6 | 198 | /** |
Anna Bridge |
160:5571c4ff569f | 199 | * @enum RAIL_Events_t |
Anna Bridge |
160:5571c4ff569f | 200 | * @brief RAIL events passed to event callback. More than one event may be |
Anna Bridge |
160:5571c4ff569f | 201 | * indicated due to interrupt latency. |
Anna Bridge |
142:4eea097334d6 | 202 | */ |
Anna Bridge |
160:5571c4ff569f | 203 | RAIL_ENUM_GENERIC(RAIL_Events_t, uint64_t) { |
Anna Bridge |
160:5571c4ff569f | 204 | // RX Event Bit Shifts |
Anna Bridge |
160:5571c4ff569f | 205 | |
Anna Bridge |
160:5571c4ff569f | 206 | /** Shift position of \ref RAIL_EVENT_RSSI_AVERAGE_DONE bit */ |
Anna Bridge |
160:5571c4ff569f | 207 | RAIL_EVENT_RSSI_AVERAGE_DONE_SHIFT = 0, |
Anna Bridge |
160:5571c4ff569f | 208 | /** Shift position of \ref RAIL_EVENT_RX_ACK_TIMEOUT bit */ |
Anna Bridge |
160:5571c4ff569f | 209 | RAIL_EVENT_RX_ACK_TIMEOUT_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 210 | /** Shift position of \ref RAIL_EVENT_RX_FIFO_ALMOST_FULL bit */ |
Anna Bridge |
160:5571c4ff569f | 211 | RAIL_EVENT_RX_FIFO_ALMOST_FULL_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 212 | /** Shift position of \ref RAIL_EVENT_RX_PACKET_RECEIVED bit */ |
Anna Bridge |
160:5571c4ff569f | 213 | RAIL_EVENT_RX_PACKET_RECEIVED_SHIFT, |
AnnaBridge | 167:84c0a372a020 | 214 | /** Shift position of \ref RAIL_EVENT_RX_PREAMBLE_LOST bit */ |
AnnaBridge | 167:84c0a372a020 | 215 | RAIL_EVENT_RX_PREAMBLE_LOST_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 216 | /** Shift position of \ref RAIL_EVENT_RX_PREAMBLE_DETECT bit */ |
Anna Bridge |
160:5571c4ff569f | 217 | RAIL_EVENT_RX_PREAMBLE_DETECT_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 218 | /** Shift position of \ref RAIL_EVENT_RX_SYNC1_DETECT bit */ |
Anna Bridge |
160:5571c4ff569f | 219 | RAIL_EVENT_RX_SYNC1_DETECT_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 220 | /** Shift position of \ref RAIL_EVENT_RX_SYNC2_DETECT bit */ |
Anna Bridge |
160:5571c4ff569f | 221 | RAIL_EVENT_RX_SYNC2_DETECT_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 222 | /** Shift position of \ref RAIL_EVENT_RX_FRAME_ERROR bit */ |
Anna Bridge |
160:5571c4ff569f | 223 | RAIL_EVENT_RX_FRAME_ERROR_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 224 | /** Shift position of \ref RAIL_EVENT_RX_FIFO_OVERFLOW bit */ |
Anna Bridge |
160:5571c4ff569f | 225 | RAIL_EVENT_RX_FIFO_OVERFLOW_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 226 | /** Shift position of \ref RAIL_EVENT_RX_ADDRESS_FILTERED bit */ |
Anna Bridge |
160:5571c4ff569f | 227 | RAIL_EVENT_RX_ADDRESS_FILTERED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 228 | /** Shift position of \ref RAIL_EVENT_RX_TIMEOUT bit */ |
Anna Bridge |
160:5571c4ff569f | 229 | RAIL_EVENT_RX_TIMEOUT_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 230 | /** Shift position of \ref RAIL_EVENT_RX_SCHEDULED_RX_END bit */ |
Anna Bridge |
160:5571c4ff569f | 231 | RAIL_EVENT_RX_SCHEDULED_RX_END_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 232 | /** Shift position of \ref RAIL_EVENT_RX_PACKET_ABORTED bit */ |
Anna Bridge |
160:5571c4ff569f | 233 | RAIL_EVENT_RX_PACKET_ABORTED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 234 | /** Shift position of \ref RAIL_EVENT_RX_FILTER_PASSED bit */ |
Anna Bridge |
160:5571c4ff569f | 235 | RAIL_EVENT_RX_FILTER_PASSED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 236 | /** Shift position of \ref RAIL_EVENT_RX_TIMING_LOST bit */ |
Anna Bridge |
160:5571c4ff569f | 237 | RAIL_EVENT_RX_TIMING_LOST_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 238 | /** Shift position of \ref RAIL_EVENT_RX_TIMING_DETECT bit */ |
Anna Bridge |
160:5571c4ff569f | 239 | RAIL_EVENT_RX_TIMING_DETECT_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 240 | /** Shift position of \ref RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND bit */ |
Anna Bridge |
160:5571c4ff569f | 241 | RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 242 | |
Anna Bridge |
160:5571c4ff569f | 243 | // TX Event Bit Shifts |
Anna Bridge |
160:5571c4ff569f | 244 | |
Anna Bridge |
160:5571c4ff569f | 245 | /** Shift position of \ref RAIL_EVENT_TX_FIFO_ALMOST_EMPTY bit */ |
Anna Bridge |
160:5571c4ff569f | 246 | RAIL_EVENT_TX_FIFO_ALMOST_EMPTY_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 247 | /** Shift position of \ref RAIL_EVENT_TX_PACKET_SENT bit */ |
Anna Bridge |
160:5571c4ff569f | 248 | RAIL_EVENT_TX_PACKET_SENT_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 249 | /** Shift position of \ref RAIL_EVENT_TXACK_PACKET_SENT bit */ |
Anna Bridge |
160:5571c4ff569f | 250 | RAIL_EVENT_TXACK_PACKET_SENT_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 251 | /** Shift position of \ref RAIL_EVENT_TX_ABORTED bit */ |
Anna Bridge |
160:5571c4ff569f | 252 | RAIL_EVENT_TX_ABORTED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 253 | /** Shift position of \ref RAIL_EVENT_TXACK_ABORTED bit */ |
Anna Bridge |
160:5571c4ff569f | 254 | RAIL_EVENT_TXACK_ABORTED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 255 | /** Shift position of \ref RAIL_EVENT_TX_BLOCKED bit */ |
Anna Bridge |
160:5571c4ff569f | 256 | RAIL_EVENT_TX_BLOCKED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 257 | /** Shift position of \ref RAIL_EVENT_TXACK_BLOCKED bit */ |
Anna Bridge |
160:5571c4ff569f | 258 | RAIL_EVENT_TXACK_BLOCKED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 259 | /** Shift position of \ref RAIL_EVENT_TX_UNDERFLOW bit */ |
Anna Bridge |
160:5571c4ff569f | 260 | RAIL_EVENT_TX_UNDERFLOW_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 261 | /** Shift position of \ref RAIL_EVENT_TXACK_UNDERFLOW bit */ |
Anna Bridge |
160:5571c4ff569f | 262 | RAIL_EVENT_TXACK_UNDERFLOW_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 263 | /** Shift position of \ref RAIL_EVENT_TX_CHANNEL_CLEAR bit */ |
Anna Bridge |
160:5571c4ff569f | 264 | RAIL_EVENT_TX_CHANNEL_CLEAR_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 265 | /** Shift position of \ref RAIL_EVENT_TX_CHANNEL_BUSY bit */ |
Anna Bridge |
160:5571c4ff569f | 266 | RAIL_EVENT_TX_CHANNEL_BUSY_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 267 | /** Shift position of \ref RAIL_EVENT_TX_CCA_RETRY bit */ |
Anna Bridge |
160:5571c4ff569f | 268 | RAIL_EVENT_TX_CCA_RETRY_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 269 | /** Shift position of \ref RAIL_EVENT_TX_START_CCA bit */ |
Anna Bridge |
160:5571c4ff569f | 270 | RAIL_EVENT_TX_START_CCA_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 271 | |
Anna Bridge |
160:5571c4ff569f | 272 | // Scheduler Event Bit Shifts |
Anna Bridge |
160:5571c4ff569f | 273 | |
Anna Bridge |
160:5571c4ff569f | 274 | /** Shift position of \ref RAIL_EVENT_CONFIG_UNSCHEDULED bit */ |
Anna Bridge |
160:5571c4ff569f | 275 | RAIL_EVENT_CONFIG_UNSCHEDULED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 276 | /** Shift position of \ref RAIL_EVENT_CONFIG_SCHEDULED bit */ |
Anna Bridge |
160:5571c4ff569f | 277 | RAIL_EVENT_CONFIG_SCHEDULED_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 278 | /** Shift position of \ref RAIL_EVENT_SCHEDULER_STATUS bit */ |
Anna Bridge |
160:5571c4ff569f | 279 | RAIL_EVENT_SCHEDULER_STATUS_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 280 | |
Anna Bridge |
160:5571c4ff569f | 281 | // Other Event Bit Shifts |
Anna Bridge |
160:5571c4ff569f | 282 | |
Anna Bridge |
160:5571c4ff569f | 283 | /** Shift position of \ref RAIL_EVENT_CAL_NEEDED bit */ |
Anna Bridge |
160:5571c4ff569f | 284 | RAIL_EVENT_CAL_NEEDED_SHIFT, |
AnnaBridge | 167:84c0a372a020 | 285 | }; |
Anna Bridge |
160:5571c4ff569f | 286 | |
AnnaBridge | 167:84c0a372a020 | 287 | // RAIL_Event_t bitmasks |
AnnaBridge | 167:84c0a372a020 | 288 | |
AnnaBridge | 167:84c0a372a020 | 289 | /** Value representing no events */ |
AnnaBridge | 167:84c0a372a020 | 290 | #define RAIL_EVENTS_NONE 0ULL |
AnnaBridge | 167:84c0a372a020 | 291 | |
AnnaBridge | 167:84c0a372a020 | 292 | /** |
AnnaBridge | 167:84c0a372a020 | 293 | * Occurs when the hardware-averaged RSSI is done. It only occurs in response to |
AnnaBridge | 167:84c0a372a020 | 294 | * RAIL_StartAverageRssi() to indicate that the hardware has completed |
AnnaBridge | 167:84c0a372a020 | 295 | * averaging. Call RAIL_GetAverageRssi() to get the result. |
AnnaBridge | 167:84c0a372a020 | 296 | */ |
AnnaBridge | 167:84c0a372a020 | 297 | #define RAIL_EVENT_RSSI_AVERAGE_DONE (1ULL << RAIL_EVENT_RSSI_AVERAGE_DONE_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 298 | |
AnnaBridge | 167:84c0a372a020 | 299 | /** |
AnnaBridge | 167:84c0a372a020 | 300 | * Notifies the application when searching for an ack packet has timed out. |
AnnaBridge | 167:84c0a372a020 | 301 | * This event occurs whenever the timeout for searching for an ack packet is |
AnnaBridge | 167:84c0a372a020 | 302 | * exceeded. This will only occur after calling RAIL_ConfigAutoAck() and |
AnnaBridge | 167:84c0a372a020 | 303 | * transmitting a packet. |
AnnaBridge | 167:84c0a372a020 | 304 | */ |
AnnaBridge | 167:84c0a372a020 | 305 | #define RAIL_EVENT_RX_ACK_TIMEOUT (1ULL << RAIL_EVENT_RX_ACK_TIMEOUT_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 306 | |
AnnaBridge | 167:84c0a372a020 | 307 | /** |
AnnaBridge | 167:84c0a372a020 | 308 | * Occurs when the receive FIFO exceeds the configured threshold value. Call |
AnnaBridge | 167:84c0a372a020 | 309 | * RAIL_GetRxFifoBytesAvailable() to get the number of bytes available. When |
AnnaBridge | 167:84c0a372a020 | 310 | * using this event, the threshold should be set via RAIL_SetRxFifoThreshold(). |
AnnaBridge | 167:84c0a372a020 | 311 | */ |
AnnaBridge | 167:84c0a372a020 | 312 | #define RAIL_EVENT_RX_FIFO_ALMOST_FULL (1ULL << RAIL_EVENT_RX_FIFO_ALMOST_FULL_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 313 | |
AnnaBridge | 167:84c0a372a020 | 314 | /** |
AnnaBridge | 167:84c0a372a020 | 315 | * Occurs whenever a packet is received. Call RAIL_GetRxPacketInfo() to get |
AnnaBridge | 167:84c0a372a020 | 316 | * basic packet information along with a handle to this packet for subsequent |
AnnaBridge | 167:84c0a372a020 | 317 | * use with RAIL_PeekRxPacket(), RAIL_GetRxPacketDetails(), RAIL_HoldRxPacket(), |
AnnaBridge | 167:84c0a372a020 | 318 | * and RAIL_ReleaseRxPacket() as needed. |
AnnaBridge | 167:84c0a372a020 | 319 | * |
AnnaBridge | 167:84c0a372a020 | 320 | * If \ref RAIL_RX_OPTION_IGNORE_CRC_ERRORS is set, this event also occurs |
AnnaBridge | 167:84c0a372a020 | 321 | * for packets with CRC errors. |
AnnaBridge | 167:84c0a372a020 | 322 | */ |
AnnaBridge | 167:84c0a372a020 | 323 | #define RAIL_EVENT_RX_PACKET_RECEIVED (1ULL << RAIL_EVENT_RX_PACKET_RECEIVED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 324 | |
AnnaBridge | 167:84c0a372a020 | 325 | /** |
AnnaBridge | 167:84c0a372a020 | 326 | * Occurs when the radio has lost a preamble. This event can occur multiple |
AnnaBridge | 167:84c0a372a020 | 327 | * times while searching for a packet, and is generally used for diagnostic |
AnnaBridge | 167:84c0a372a020 | 328 | * purposes. This event can only occur after a |
AnnaBridge | 167:84c0a372a020 | 329 | * \ref RAIL_EVENT_RX_PREAMBLE_DETECT event has already occurred. |
AnnaBridge | 167:84c0a372a020 | 330 | */ |
AnnaBridge | 167:84c0a372a020 | 331 | #define RAIL_EVENT_RX_PREAMBLE_LOST (1ULL << RAIL_EVENT_RX_PREAMBLE_LOST_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 332 | |
AnnaBridge | 167:84c0a372a020 | 333 | /** |
AnnaBridge | 167:84c0a372a020 | 334 | * Occurs when the radio has detected a preamble. This event can occur multiple |
AnnaBridge | 167:84c0a372a020 | 335 | * times while searching for a packet, and is generally used for diagnostic |
AnnaBridge | 167:84c0a372a020 | 336 | * purposes. This event can only occur after a \ref RAIL_EVENT_RX_TIMING_DETECT |
AnnaBridge | 167:84c0a372a020 | 337 | * event has already occurred. |
AnnaBridge | 167:84c0a372a020 | 338 | */ |
AnnaBridge | 167:84c0a372a020 | 339 | #define RAIL_EVENT_RX_PREAMBLE_DETECT (1ULL << RAIL_EVENT_RX_PREAMBLE_DETECT_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 340 | |
AnnaBridge | 167:84c0a372a020 | 341 | /** |
AnnaBridge | 167:84c0a372a020 | 342 | * Occurs when the first sync word is detected. After this event occurs, one of |
AnnaBridge | 167:84c0a372a020 | 343 | * the events in the \ref RAIL_EVENTS_RX_COMPLETION mask will occur. |
AnnaBridge | 167:84c0a372a020 | 344 | */ |
AnnaBridge | 167:84c0a372a020 | 345 | #define RAIL_EVENT_RX_SYNC1_DETECT (1ULL << RAIL_EVENT_RX_SYNC1_DETECT_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 346 | |
AnnaBridge | 167:84c0a372a020 | 347 | /** |
AnnaBridge | 167:84c0a372a020 | 348 | * Occurs when the second sync word is detected. After this event occurs, one of |
AnnaBridge | 167:84c0a372a020 | 349 | * the events in the \ref RAIL_EVENTS_RX_COMPLETION mask will occur. |
AnnaBridge | 167:84c0a372a020 | 350 | */ |
AnnaBridge | 167:84c0a372a020 | 351 | #define RAIL_EVENT_RX_SYNC2_DETECT (1ULL << RAIL_EVENT_RX_SYNC2_DETECT_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 352 | |
AnnaBridge | 167:84c0a372a020 | 353 | /** |
AnnaBridge | 167:84c0a372a020 | 354 | * Occurs when a packet being received has a frame error. |
AnnaBridge | 167:84c0a372a020 | 355 | * |
AnnaBridge | 167:84c0a372a020 | 356 | * For efr32xg1x parts, frame errors include violations of variable length |
AnnaBridge | 167:84c0a372a020 | 357 | * minimum/maximum limits and CRC errors. If |
AnnaBridge | 167:84c0a372a020 | 358 | * \ref RAIL_RX_OPTION_IGNORE_CRC_ERRORS is set, \ref RAIL_EVENT_RX_FRAME_ERROR |
AnnaBridge | 167:84c0a372a020 | 359 | * will not occur for CRC errors. |
AnnaBridge | 167:84c0a372a020 | 360 | */ |
AnnaBridge | 167:84c0a372a020 | 361 | #define RAIL_EVENT_RX_FRAME_ERROR (1ULL << RAIL_EVENT_RX_FRAME_ERROR_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 362 | |
AnnaBridge | 167:84c0a372a020 | 363 | /** |
AnnaBridge | 167:84c0a372a020 | 364 | * Occurs when RX buffer is full. This will cause the radio to stop receiving |
AnnaBridge | 167:84c0a372a020 | 365 | * packets until the packet causing the overflow is processed. |
AnnaBridge | 167:84c0a372a020 | 366 | * */ |
AnnaBridge | 167:84c0a372a020 | 367 | #define RAIL_EVENT_RX_FIFO_OVERFLOW (1ULL << RAIL_EVENT_RX_FIFO_OVERFLOW_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 368 | |
AnnaBridge | 167:84c0a372a020 | 369 | /** |
AnnaBridge | 167:84c0a372a020 | 370 | * Occurs when a packet's address does not match the filtering settings. After |
AnnaBridge | 167:84c0a372a020 | 371 | * this event, the packet will not be received, and no other events should occur |
AnnaBridge | 167:84c0a372a020 | 372 | * for the packet. This event can only occur after calling |
AnnaBridge | 167:84c0a372a020 | 373 | * RAIL_EnableAddressFilter(). |
AnnaBridge | 167:84c0a372a020 | 374 | */ |
AnnaBridge | 167:84c0a372a020 | 375 | #define RAIL_EVENT_RX_ADDRESS_FILTERED (1ULL << RAIL_EVENT_RX_ADDRESS_FILTERED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 376 | |
AnnaBridge | 167:84c0a372a020 | 377 | /** |
AnnaBridge | 167:84c0a372a020 | 378 | * Occurs when an RX event times out. This event can only occur if the |
AnnaBridge | 167:84c0a372a020 | 379 | * RAIL_StateTiming_t::rxSearchTimeout passed to RAIL_SetStateTiming() is |
AnnaBridge | 167:84c0a372a020 | 380 | * nonzero. |
AnnaBridge | 167:84c0a372a020 | 381 | */ |
AnnaBridge | 167:84c0a372a020 | 382 | #define RAIL_EVENT_RX_TIMEOUT (1ULL << RAIL_EVENT_RX_TIMEOUT_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 383 | |
AnnaBridge | 167:84c0a372a020 | 384 | /** |
AnnaBridge | 167:84c0a372a020 | 385 | * Occurs when the scheduled RX window ends. This event only occurs in response |
AnnaBridge | 167:84c0a372a020 | 386 | * to a scheduled receive timeout after calling RAIL_ScheduleRx(). If |
AnnaBridge | 167:84c0a372a020 | 387 | * RAIL_ScheduleRxConfig_t::rxTransitionEndSchedule was passed as false, then |
AnnaBridge | 167:84c0a372a020 | 388 | * this event will occur unless the receive is aborted (due to a call to |
AnnaBridge | 167:84c0a372a020 | 389 | * RAIL_Idle() or a scheduler pre-emption, for instance). If |
AnnaBridge | 167:84c0a372a020 | 390 | * RAIL_ScheduleRxConfig_t::rxTransitionEndSchedule was passed as true, then |
AnnaBridge | 167:84c0a372a020 | 391 | * any of the \ref RAIL_EVENTS_RX_COMPLETION events occurring will also cause |
AnnaBridge | 167:84c0a372a020 | 392 | * this event to not occur, since the scheduled reeive will end with the |
AnnaBridge | 167:84c0a372a020 | 393 | * transition at the end of the packet. |
AnnaBridge | 167:84c0a372a020 | 394 | */ |
AnnaBridge | 167:84c0a372a020 | 395 | #define RAIL_EVENT_RX_SCHEDULED_RX_END (1ULL << RAIL_EVENT_RX_SCHEDULED_RX_END_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 396 | |
AnnaBridge | 167:84c0a372a020 | 397 | /** |
AnnaBridge | 167:84c0a372a020 | 398 | * Occurs when a packet is aborted, but a more specific reason (such as |
AnnaBridge | 167:84c0a372a020 | 399 | * \ref RAIL_EVENT_RX_ADDRESS_FILTERED) isn't known. |
AnnaBridge | 167:84c0a372a020 | 400 | */ |
AnnaBridge | 167:84c0a372a020 | 401 | #define RAIL_EVENT_RX_PACKET_ABORTED (1ULL << RAIL_EVENT_RX_PACKET_ABORTED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 402 | |
AnnaBridge | 167:84c0a372a020 | 403 | /** |
AnnaBridge | 167:84c0a372a020 | 404 | * Occurs when the packet has passed any configured address and frame |
AnnaBridge | 167:84c0a372a020 | 405 | * filtering options. This event will only occur between the start of the |
AnnaBridge | 167:84c0a372a020 | 406 | * packet, indicated by \ref RAIL_EVENT_RX_SYNC1_DETECT or |
AnnaBridge | 167:84c0a372a020 | 407 | * \ref RAIL_EVENT_RX_SYNC2_DETECT, and one of the events in the |
AnnaBridge | 167:84c0a372a020 | 408 | * \ref RAIL_EVENTS_RX_COMPLETION mask. This event will always occur before or |
AnnaBridge | 167:84c0a372a020 | 409 | * concurrently with \ref RAIL_EVENT_RX_PACKET_RECEIVED. If IEEE 802.15.4 frame |
AnnaBridge | 167:84c0a372a020 | 410 | * and address filtering are enabled, this event will occur immediately after |
AnnaBridge | 167:84c0a372a020 | 411 | * destination address filtering. |
AnnaBridge | 167:84c0a372a020 | 412 | */ |
AnnaBridge | 167:84c0a372a020 | 413 | #define RAIL_EVENT_RX_FILTER_PASSED (1ULL << RAIL_EVENT_RX_FILTER_PASSED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 414 | |
AnnaBridge | 167:84c0a372a020 | 415 | /** |
AnnaBridge | 167:84c0a372a020 | 416 | * Occurs when the modem timing is lost. This event can occur multiple times |
AnnaBridge | 167:84c0a372a020 | 417 | * while searching for a packet, and is generally used for diagnostic purposes. |
AnnaBridge | 167:84c0a372a020 | 418 | * This event can only occur after a \ref RAIL_EVENT_RX_TIMING_DETECT event has |
AnnaBridge | 167:84c0a372a020 | 419 | * already occurred. |
AnnaBridge | 167:84c0a372a020 | 420 | */ |
AnnaBridge | 167:84c0a372a020 | 421 | #define RAIL_EVENT_RX_TIMING_LOST (1ULL << RAIL_EVENT_RX_TIMING_LOST_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 422 | |
AnnaBridge | 167:84c0a372a020 | 423 | /** |
AnnaBridge | 167:84c0a372a020 | 424 | * Occurs when the modem timing is detected. This event can occur multiple times |
AnnaBridge | 167:84c0a372a020 | 425 | * while searching for a packet, and is generally used for diagnostic purposes. |
AnnaBridge | 167:84c0a372a020 | 426 | */ |
AnnaBridge | 167:84c0a372a020 | 427 | #define RAIL_EVENT_RX_TIMING_DETECT (1ULL << RAIL_EVENT_RX_TIMING_DETECT_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 428 | |
AnnaBridge | 167:84c0a372a020 | 429 | /** |
AnnaBridge | 167:84c0a372a020 | 430 | * Indicates a Data Request is being received when using IEEE 802.15.4 |
AnnaBridge | 167:84c0a372a020 | 431 | * functionality. This occurs when the command byte of an incoming frame is |
AnnaBridge | 167:84c0a372a020 | 432 | * for a data request, which requests an ACK. This callback is called before |
AnnaBridge | 167:84c0a372a020 | 433 | * the packet is fully received to allow the node to have more time to decide |
AnnaBridge | 167:84c0a372a020 | 434 | * whether to set the frame pending in the outgoing ACK. This event only ever |
AnnaBridge | 167:84c0a372a020 | 435 | * occurs if the RAIL IEEE 802.15.4 functionality is enabled, but will never |
AnnaBridge | 167:84c0a372a020 | 436 | * occur if promiscuous mode is enabled via |
AnnaBridge | 167:84c0a372a020 | 437 | * RAIL_IEEE802154_SetPromiscuousMode(). |
AnnaBridge | 167:84c0a372a020 | 438 | * |
AnnaBridge | 167:84c0a372a020 | 439 | * Call RAIL_IEEE802154_GetAddress() to get the source address of the packet. |
AnnaBridge | 167:84c0a372a020 | 440 | */ |
AnnaBridge | 167:84c0a372a020 | 441 | #define RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND (1ULL << RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 442 | |
AnnaBridge | 167:84c0a372a020 | 443 | /** |
AnnaBridge | 167:84c0a372a020 | 444 | * This mask indicates all of the events that determine the end of a received |
AnnaBridge | 167:84c0a372a020 | 445 | * packet. After a packet has begun to be received, which is indicated by a |
AnnaBridge | 167:84c0a372a020 | 446 | * \ref RAIL_EVENT_RX_SYNC1_DETECT or a \ref RAIL_EVENT_RX_SYNC2_DETECT, |
AnnaBridge | 167:84c0a372a020 | 447 | * exactly one of the following events will occur. When one of these events |
AnnaBridge | 167:84c0a372a020 | 448 | * occurs a state transition will take place, based on the parameter passed to |
AnnaBridge | 167:84c0a372a020 | 449 | * RAIL_SetRxTransitions(). The RAIL_StateTransitions_t::success transition |
AnnaBridge | 167:84c0a372a020 | 450 | * will be followed only if the \ref RAIL_EVENT_RX_PACKET_RECEIVED event occurs. |
AnnaBridge | 167:84c0a372a020 | 451 | * Any of the other events will trigger the RAIL_StateTransitions_t::error |
AnnaBridge | 167:84c0a372a020 | 452 | * transition. |
AnnaBridge | 167:84c0a372a020 | 453 | */ |
AnnaBridge | 167:84c0a372a020 | 454 | #define RAIL_EVENTS_RX_COMPLETION (RAIL_EVENT_RX_PACKET_RECEIVED \ |
AnnaBridge | 167:84c0a372a020 | 455 | | RAIL_EVENT_RX_PACKET_ABORTED \ |
AnnaBridge | 167:84c0a372a020 | 456 | | RAIL_EVENT_RX_FRAME_ERROR \ |
AnnaBridge | 167:84c0a372a020 | 457 | | RAIL_EVENT_RX_FIFO_OVERFLOW \ |
AnnaBridge | 167:84c0a372a020 | 458 | | RAIL_EVENT_RX_ADDRESS_FILTERED) |
Anna Bridge |
160:5571c4ff569f | 459 | |
AnnaBridge | 167:84c0a372a020 | 460 | // TX Event Bitmasks |
AnnaBridge | 167:84c0a372a020 | 461 | |
AnnaBridge | 167:84c0a372a020 | 462 | /** |
AnnaBridge | 167:84c0a372a020 | 463 | * Occurs when the number of bytes in the transmit FIFO was above the |
AnnaBridge | 167:84c0a372a020 | 464 | * configured threshold, and falls to a value at or below the threshold value. |
AnnaBridge | 167:84c0a372a020 | 465 | * This event does not occur on initailization or after resetting the transmit |
AnnaBridge | 167:84c0a372a020 | 466 | * FIFO with RAIL_ResetFifo(). Call RAIL_GetTxFifoSpaceAvailable() to get the |
AnnaBridge | 167:84c0a372a020 | 467 | * number of bytes available in the transmit FIFO at the time of the callback |
AnnaBridge | 167:84c0a372a020 | 468 | * dispatch. When using this event, the threshold should be set via |
AnnaBridge | 167:84c0a372a020 | 469 | * RAIL_SetTxFifoThreshold(). |
AnnaBridge | 167:84c0a372a020 | 470 | */ |
AnnaBridge | 167:84c0a372a020 | 471 | #define RAIL_EVENT_TX_FIFO_ALMOST_EMPTY (1ULL << RAIL_EVENT_TX_FIFO_ALMOST_EMPTY_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 472 | |
AnnaBridge | 167:84c0a372a020 | 473 | /** |
AnnaBridge | 167:84c0a372a020 | 474 | * Occurs when a packet was sent. Call RAIL_GetTxPacketDetails() to get |
AnnaBridge | 167:84c0a372a020 | 475 | * information about the packet that was transmitted. |
AnnaBridge | 167:84c0a372a020 | 476 | * @note RAIL_GetTxPacketDetails() is only valid to call during the timeframe |
AnnaBridge | 167:84c0a372a020 | 477 | * of the RAIL_Config_t::eventsCallback. |
AnnaBridge | 167:84c0a372a020 | 478 | */ |
AnnaBridge | 167:84c0a372a020 | 479 | #define RAIL_EVENT_TX_PACKET_SENT (1ULL << RAIL_EVENT_TX_PACKET_SENT_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 480 | |
AnnaBridge | 167:84c0a372a020 | 481 | /** |
AnnaBridge | 167:84c0a372a020 | 482 | * Occurs when an ack packet was sent. Call RAIL_GetTxPacketDetails() to get |
AnnaBridge | 167:84c0a372a020 | 483 | * information about the packet that was transmitted. This event can only occur |
AnnaBridge | 167:84c0a372a020 | 484 | * after calling RAIL_ConfigAutoAck(). |
AnnaBridge | 167:84c0a372a020 | 485 | * @note RAIL_GetTxPacketDetails() is only valid to call during the timeframe |
AnnaBridge | 167:84c0a372a020 | 486 | * of the RAIL_Config_t::eventsCallback. |
AnnaBridge | 167:84c0a372a020 | 487 | */ |
AnnaBridge | 167:84c0a372a020 | 488 | #define RAIL_EVENT_TXACK_PACKET_SENT (1ULL << RAIL_EVENT_TXACK_PACKET_SENT_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 489 | |
AnnaBridge | 167:84c0a372a020 | 490 | /** |
AnnaBridge | 167:84c0a372a020 | 491 | * Occurs when a transmit is aborted by the user. This can occur due to calling |
AnnaBridge | 167:84c0a372a020 | 492 | * RAIL_Idle() or due to a scheduler pre-emption. |
AnnaBridge | 167:84c0a372a020 | 493 | */ |
AnnaBridge | 167:84c0a372a020 | 494 | #define RAIL_EVENT_TX_ABORTED (1ULL << RAIL_EVENT_TX_ABORTED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 495 | |
AnnaBridge | 167:84c0a372a020 | 496 | /** |
AnnaBridge | 167:84c0a372a020 | 497 | * Occurs when an ack transmit is aborted by the user. This event can only |
AnnaBridge | 167:84c0a372a020 | 498 | * occur after calling RAIL_ConfigAutoAck(). This can occur due to calling |
AnnaBridge | 167:84c0a372a020 | 499 | * RAIL_Idle() or due to a scheduler pre-emption. |
AnnaBridge | 167:84c0a372a020 | 500 | */ |
AnnaBridge | 167:84c0a372a020 | 501 | #define RAIL_EVENT_TXACK_ABORTED (1ULL << RAIL_EVENT_TXACK_ABORTED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 502 | |
AnnaBridge | 167:84c0a372a020 | 503 | /** |
AnnaBridge | 167:84c0a372a020 | 504 | * Occurs when a transmit is blocked from occurring due to having called |
AnnaBridge | 167:84c0a372a020 | 505 | * RAIL_EnableTxHoldOff(). |
AnnaBridge | 167:84c0a372a020 | 506 | */ |
AnnaBridge | 167:84c0a372a020 | 507 | #define RAIL_EVENT_TX_BLOCKED (1ULL << RAIL_EVENT_TX_BLOCKED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 508 | |
AnnaBridge | 167:84c0a372a020 | 509 | /** |
AnnaBridge | 167:84c0a372a020 | 510 | * Occurs when an ack transmit is blocked from occurring due to having called |
AnnaBridge | 167:84c0a372a020 | 511 | * RAIL_EnableTxHoldOff(). This event can only occur after calling |
AnnaBridge | 167:84c0a372a020 | 512 | * RAIL_ConfigAutoAck(). |
AnnaBridge | 167:84c0a372a020 | 513 | */ |
AnnaBridge | 167:84c0a372a020 | 514 | #define RAIL_EVENT_TXACK_BLOCKED (1ULL << RAIL_EVENT_TXACK_BLOCKED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 515 | |
AnnaBridge | 167:84c0a372a020 | 516 | /** |
AnnaBridge | 167:84c0a372a020 | 517 | * Occurs when the transmit buffer underflows. This can happen due to the |
AnnaBridge | 167:84c0a372a020 | 518 | * transmitted packet specifying an unintended length based on the current |
AnnaBridge | 167:84c0a372a020 | 519 | * radio configuration, or due to RAIL_WriteTxFifo() calls not keeping up with |
AnnaBridge | 167:84c0a372a020 | 520 | * the transmit rate, if the entire packet isn't loaded at once. |
AnnaBridge | 167:84c0a372a020 | 521 | */ |
AnnaBridge | 167:84c0a372a020 | 522 | #define RAIL_EVENT_TX_UNDERFLOW (1ULL << RAIL_EVENT_TX_UNDERFLOW_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 523 | |
AnnaBridge | 167:84c0a372a020 | 524 | /** |
AnnaBridge | 167:84c0a372a020 | 525 | * Occurs when the ack transmit buffer underflows. This can happen due to the |
AnnaBridge | 167:84c0a372a020 | 526 | * transmitted packet specifying an unintended length based on the current |
AnnaBridge | 167:84c0a372a020 | 527 | * radio configuration, or due to RAIL_WriteAutoAckFifo() not being called at |
AnnaBridge | 167:84c0a372a020 | 528 | * all before an ack transmit. This event can only occur after calling |
AnnaBridge | 167:84c0a372a020 | 529 | * RAIL_ConfigAutoAck(). |
AnnaBridge | 167:84c0a372a020 | 530 | */ |
AnnaBridge | 167:84c0a372a020 | 531 | #define RAIL_EVENT_TXACK_UNDERFLOW (1ULL << RAIL_EVENT_TXACK_UNDERFLOW_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 532 | |
AnnaBridge | 167:84c0a372a020 | 533 | /** |
AnnaBridge | 167:84c0a372a020 | 534 | * Occurs when Carrier Sense Mulitple Access (CSMA) or Listen Before Talk (LBT) |
AnnaBridge | 167:84c0a372a020 | 535 | * succeeds. This event can only happen after calling RAIL_StartCcaCsmaTx() or |
AnnaBridge | 167:84c0a372a020 | 536 | * RAIL_StartCsmaLbtTx(). |
AnnaBridge | 167:84c0a372a020 | 537 | */ |
AnnaBridge | 167:84c0a372a020 | 538 | #define RAIL_EVENT_TX_CHANNEL_CLEAR (1ULL << RAIL_EVENT_TX_CHANNEL_CLEAR_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 539 | |
AnnaBridge | 167:84c0a372a020 | 540 | /** |
AnnaBridge | 167:84c0a372a020 | 541 | * Occurs when Carrier Sense Mulitple Access (CSMA) or Listen Before Talk (LBT) |
AnnaBridge | 167:84c0a372a020 | 542 | * fails. This event can only happen after calling RAIL_StartCcaCsmaTx() or |
AnnaBridge | 167:84c0a372a020 | 543 | * RAIL_StartCsmaLbtTx(). |
AnnaBridge | 167:84c0a372a020 | 544 | */ |
AnnaBridge | 167:84c0a372a020 | 545 | #define RAIL_EVENT_TX_CHANNEL_BUSY (1ULL << RAIL_EVENT_TX_CHANNEL_BUSY_SHIFT) |
Anna Bridge |
160:5571c4ff569f | 546 | |
AnnaBridge | 167:84c0a372a020 | 547 | /** |
AnnaBridge | 167:84c0a372a020 | 548 | * Occurs during CSMA or LBT when an individual Clear Channel Assessment (CCA) |
AnnaBridge | 167:84c0a372a020 | 549 | * check failed, but there are more tries needed before the overall operation |
AnnaBridge | 167:84c0a372a020 | 550 | * completes. This event can occur multiple times based on the configuration |
AnnaBridge | 167:84c0a372a020 | 551 | * of the ongoing CSMA or LBT tranmission. This event can only happen after |
AnnaBridge | 167:84c0a372a020 | 552 | * calling RAIL_StartCcaCsmaTx() or RAIL_StartCsmaLbtTx(). |
AnnaBridge | 167:84c0a372a020 | 553 | * |
AnnaBridge | 167:84c0a372a020 | 554 | */ |
AnnaBridge | 167:84c0a372a020 | 555 | #define RAIL_EVENT_TX_CCA_RETRY (1ULL << RAIL_EVENT_TX_CCA_RETRY_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 556 | |
AnnaBridge | 167:84c0a372a020 | 557 | /** |
AnnaBridge | 167:84c0a372a020 | 558 | * Occurs when a Clear Channel Assessment (CCA) check begins. This event can |
AnnaBridge | 167:84c0a372a020 | 559 | * occur multiple times based on the configuration of the ongoing CSMA or LBT |
AnnaBridge | 167:84c0a372a020 | 560 | * transmission. This event can only happen after calling RAIL_StartCcaCsmaTx() |
AnnaBridge | 167:84c0a372a020 | 561 | * or RAIL_StartCsmaLbtTx(). |
AnnaBridge | 167:84c0a372a020 | 562 | */ |
AnnaBridge | 167:84c0a372a020 | 563 | #define RAIL_EVENT_TX_START_CCA (1ULL << RAIL_EVENT_TX_START_CCA_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 564 | |
AnnaBridge | 167:84c0a372a020 | 565 | /** |
AnnaBridge | 167:84c0a372a020 | 566 | * This mask indicates all of the events that determine the end of a transmitted |
AnnaBridge | 167:84c0a372a020 | 567 | * packet. After a packet has begun to be transmitted, which is indicated by |
AnnaBridge | 167:84c0a372a020 | 568 | * a \ref RAIL_STATUS_NO_ERROR return value from one of the transmit functions, |
AnnaBridge | 167:84c0a372a020 | 569 | * exactly one of the following events will occur. When one of these events |
AnnaBridge | 167:84c0a372a020 | 570 | * occurs a state transition will take place based on the parameter |
AnnaBridge | 167:84c0a372a020 | 571 | * passed to RAIL_SetTxTransitions(). The RAIL_StateTransitions_t::success |
AnnaBridge | 167:84c0a372a020 | 572 | * transition will be followed only if the \ref RAIL_EVENT_TX_PACKET_SENT |
AnnaBridge | 167:84c0a372a020 | 573 | * event occurs. Any of the other events will trigger the |
AnnaBridge | 167:84c0a372a020 | 574 | * RAIL_StateTransitions_t::error transition. |
AnnaBridge | 167:84c0a372a020 | 575 | */ |
AnnaBridge | 167:84c0a372a020 | 576 | #define RAIL_EVENTS_TX_COMPLETION (RAIL_EVENT_TX_PACKET_SENT \ |
AnnaBridge | 167:84c0a372a020 | 577 | | RAIL_EVENT_TX_ABORTED \ |
AnnaBridge | 167:84c0a372a020 | 578 | | RAIL_EVENT_TX_BLOCKED \ |
AnnaBridge | 167:84c0a372a020 | 579 | | RAIL_EVENT_TX_UNDERFLOW \ |
AnnaBridge | 167:84c0a372a020 | 580 | | RAIL_EVENT_TX_CHANNEL_BUSY) |
Anna Bridge |
160:5571c4ff569f | 581 | |
AnnaBridge | 167:84c0a372a020 | 582 | /** |
AnnaBridge | 167:84c0a372a020 | 583 | * This mask indicates all of the events that determine the end of a transmitted |
AnnaBridge | 167:84c0a372a020 | 584 | * ack packet. After an ack packet has begun to be transmitted, which occurs |
AnnaBridge | 167:84c0a372a020 | 585 | * after an ack-requesting receive, exactly one of the following events will |
AnnaBridge | 167:84c0a372a020 | 586 | * occur. When one of these events occurs a state transition will take place |
AnnaBridge | 167:84c0a372a020 | 587 | * based on the RAIL_AutoAckConfig_t::rxTransitions passed to |
AnnaBridge | 167:84c0a372a020 | 588 | * RAIL_ConfigAutoAck(). The receive transitions are used because the |
AnnaBridge | 167:84c0a372a020 | 589 | * transmitted ack packet is considered a part of the ack-requesting received |
AnnaBridge | 167:84c0a372a020 | 590 | * packet. The RAIL_StateTransitions_t::success transition will be followed |
AnnaBridge | 167:84c0a372a020 | 591 | * only if the \ref RAIL_EVENT_TXACK_PACKET_SENT event occurs. Any of the other |
AnnaBridge | 167:84c0a372a020 | 592 | * events will trigger the RAIL_StateTransitions_t::error transition. |
AnnaBridge | 167:84c0a372a020 | 593 | */ |
AnnaBridge | 167:84c0a372a020 | 594 | #define RAIL_EVENTS_TXACK_COMPLETION (RAIL_EVENT_TXACK_PACKET_SENT \ |
AnnaBridge | 167:84c0a372a020 | 595 | | RAIL_EVENT_TXACK_ABORTED \ |
AnnaBridge | 167:84c0a372a020 | 596 | | RAIL_EVENT_TXACK_BLOCKED \ |
AnnaBridge | 167:84c0a372a020 | 597 | | RAIL_EVENT_TXACK_UNDERFLOW) |
AnnaBridge | 167:84c0a372a020 | 598 | |
AnnaBridge | 167:84c0a372a020 | 599 | // Scheduler Event Bitmasks |
AnnaBridge | 167:84c0a372a020 | 600 | |
AnnaBridge | 167:84c0a372a020 | 601 | /** |
AnnaBridge | 167:84c0a372a020 | 602 | * Occurs when the scheduler switches away from this configuration. This event |
AnnaBridge | 167:84c0a372a020 | 603 | * can occur often in dynamic multiprotocol scenarios, and can give the |
AnnaBridge | 167:84c0a372a020 | 604 | * current stack an opportunity to release hardware resources. |
AnnaBridge | 167:84c0a372a020 | 605 | */ |
AnnaBridge | 167:84c0a372a020 | 606 | #define RAIL_EVENT_CONFIG_UNSCHEDULED (1ULL << RAIL_EVENT_CONFIG_UNSCHEDULED_SHIFT) |
Anna Bridge |
160:5571c4ff569f | 607 | |
AnnaBridge | 167:84c0a372a020 | 608 | /** |
AnnaBridge | 167:84c0a372a020 | 609 | * Occurs when the scheduler switches to this configuration. This event can |
AnnaBridge | 167:84c0a372a020 | 610 | * occur often in dynamic multiprotocol scenarios, and can be used to influence |
AnnaBridge | 167:84c0a372a020 | 611 | * the stack's operation. |
AnnaBridge | 167:84c0a372a020 | 612 | */ |
AnnaBridge | 167:84c0a372a020 | 613 | #define RAIL_EVENT_CONFIG_SCHEDULED (1ULL << RAIL_EVENT_CONFIG_SCHEDULED_SHIFT) |
Anna Bridge |
160:5571c4ff569f | 614 | |
AnnaBridge | 167:84c0a372a020 | 615 | /** |
AnnaBridge | 167:84c0a372a020 | 616 | * Occurs when the scheduler has a status to report. The exact status can be |
AnnaBridge | 167:84c0a372a020 | 617 | * found with RAIL_GetSchedulerStatus(). See \ref RAIL_SchedulerStatus_t for |
AnnaBridge | 167:84c0a372a020 | 618 | * more details. |
AnnaBridge | 167:84c0a372a020 | 619 | * @note RAIL_GetSchedulerStatus() is only valid to call during the timeframe |
AnnaBridge | 167:84c0a372a020 | 620 | * of the RAIL_Config_t::eventsCallback. |
AnnaBridge | 167:84c0a372a020 | 621 | */ |
AnnaBridge | 167:84c0a372a020 | 622 | #define RAIL_EVENT_SCHEDULER_STATUS (1ULL << RAIL_EVENT_SCHEDULER_STATUS_SHIFT) |
Anna Bridge |
160:5571c4ff569f | 623 | |
AnnaBridge | 167:84c0a372a020 | 624 | // Other Event Bitmasks |
Anna Bridge |
160:5571c4ff569f | 625 | |
AnnaBridge | 167:84c0a372a020 | 626 | /** |
AnnaBridge | 167:84c0a372a020 | 627 | * Occurs when the application needs to run a calibration. |
AnnaBridge | 167:84c0a372a020 | 628 | * The RAIL library detects when a calibration is needed. The application |
AnnaBridge | 167:84c0a372a020 | 629 | * determines a valid window to call RAIL_Calibrate(). |
AnnaBridge | 167:84c0a372a020 | 630 | */ |
AnnaBridge | 167:84c0a372a020 | 631 | #define RAIL_EVENT_CAL_NEEDED (1ULL << RAIL_EVENT_CAL_NEEDED_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 632 | |
AnnaBridge | 167:84c0a372a020 | 633 | /** Value representing all possible events */ |
AnnaBridge | 167:84c0a372a020 | 634 | #define RAIL_EVENTS_ALL 0xFFFFFFFFFFFFFFFFULL |
Anna Bridge |
160:5571c4ff569f | 635 | |
Anna Bridge |
160:5571c4ff569f | 636 | /** @} */ // end of group Events |
Anna Bridge |
142:4eea097334d6 | 637 | |
Anna Bridge |
142:4eea097334d6 | 638 | /** |
Anna Bridge |
160:5571c4ff569f | 639 | * @addtogroup PA Power Amplifier (PA) |
Anna Bridge |
160:5571c4ff569f | 640 | * @ingroup Transmit |
Anna Bridge |
160:5571c4ff569f | 641 | * @{ |
Anna Bridge |
142:4eea097334d6 | 642 | */ |
Anna Bridge |
142:4eea097334d6 | 643 | |
Anna Bridge |
142:4eea097334d6 | 644 | /** |
Anna Bridge |
160:5571c4ff569f | 645 | * The transmit power in deci-dBm units (e.g. 4.5dBm -> 45 deci-dBm). These |
Anna Bridge |
160:5571c4ff569f | 646 | * values are used by the conversion functions to convert a \ref |
Anna Bridge |
160:5571c4ff569f | 647 | * RAIL_TxPowerLevel_t to deci-dBm for application consumption. On the EFR32 |
Anna Bridge |
160:5571c4ff569f | 648 | * they can range from \ref RAIL_TX_POWER_MIN to \ref RAIL_TX_POWER_MAX. |
Anna Bridge |
142:4eea097334d6 | 649 | */ |
Anna Bridge |
160:5571c4ff569f | 650 | typedef int16_t RAIL_TxPower_t; |
Anna Bridge |
160:5571c4ff569f | 651 | /** The maximum valid value for a \ref RAIL_TxPower_t. */ |
Anna Bridge |
160:5571c4ff569f | 652 | #define RAIL_TX_POWER_MAX ((RAIL_TxPower_t)0x7FFF) |
Anna Bridge |
160:5571c4ff569f | 653 | /** The minimum valid value for a \ref RAIL_TxPower_t. */ |
Anna Bridge |
160:5571c4ff569f | 654 | #define RAIL_TX_POWER_MIN ((RAIL_TxPower_t)0x8000) |
Anna Bridge |
142:4eea097334d6 | 655 | |
Anna Bridge |
160:5571c4ff569f | 656 | /// mV are used for all TX power voltage values |
Anna Bridge |
160:5571c4ff569f | 657 | /// TX power voltages take and return voltages multiplied by this factor |
Anna Bridge |
160:5571c4ff569f | 658 | #define RAIL_TX_POWER_VOLTAGE_SCALING_FACTOR 1000 |
Anna Bridge |
142:4eea097334d6 | 659 | |
Anna Bridge |
160:5571c4ff569f | 660 | /// deci-dBm are used for all TX power dBm values |
Anna Bridge |
160:5571c4ff569f | 661 | /// All dBm inputs to TX power functions take dBm power times this factor |
Anna Bridge |
160:5571c4ff569f | 662 | #define RAIL_TX_POWER_DBM_SCALING_FACTOR 10 |
Anna Bridge |
160:5571c4ff569f | 663 | |
Anna Bridge |
160:5571c4ff569f | 664 | /** @} */ // PA Power Amplifier (PA) |
Anna Bridge |
160:5571c4ff569f | 665 | |
Anna Bridge |
160:5571c4ff569f | 666 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 667 | * General Structures |
Anna Bridge |
160:5571c4ff569f | 668 | *****************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 669 | /** |
Anna Bridge |
142:4eea097334d6 | 670 | * @addtogroup General |
Anna Bridge |
142:4eea097334d6 | 671 | * @{ |
Anna Bridge |
142:4eea097334d6 | 672 | */ |
Anna Bridge |
142:4eea097334d6 | 673 | |
Anna Bridge |
142:4eea097334d6 | 674 | /** |
Anna Bridge |
142:4eea097334d6 | 675 | * @struct RAIL_Version_t |
Anna Bridge |
160:5571c4ff569f | 676 | * @brief Contains RAIL Library Version Information. |
Anna Bridge |
160:5571c4ff569f | 677 | * It is filled in by RAIL_GetVersion(). |
Anna Bridge |
142:4eea097334d6 | 678 | */ |
Anna Bridge |
142:4eea097334d6 | 679 | typedef struct RAIL_Version { |
Anna Bridge |
160:5571c4ff569f | 680 | uint32_t hash; /**< Git hash */ |
Anna Bridge |
160:5571c4ff569f | 681 | uint8_t major; /**< Major number */ |
Anna Bridge |
160:5571c4ff569f | 682 | uint8_t minor; /**< Minor number */ |
Anna Bridge |
160:5571c4ff569f | 683 | uint8_t rev; /**< Revision number */ |
Anna Bridge |
160:5571c4ff569f | 684 | uint8_t build; /**< Build number */ |
Anna Bridge |
160:5571c4ff569f | 685 | uint8_t flags; /**< Build flags */ |
Anna Bridge |
160:5571c4ff569f | 686 | /** Boolean to indicate whether this is a multiprotocol library or not. */ |
Anna Bridge |
160:5571c4ff569f | 687 | bool multiprotocol; |
Anna Bridge |
142:4eea097334d6 | 688 | } RAIL_Version_t; |
Anna Bridge |
142:4eea097334d6 | 689 | |
Anna Bridge |
142:4eea097334d6 | 690 | /** |
Anna Bridge |
160:5571c4ff569f | 691 | * @typedef RAIL_Handle_t |
Anna Bridge |
160:5571c4ff569f | 692 | * @brief Handle of a RAIL instance, as returned from RAIL_Init(). |
Anna Bridge |
160:5571c4ff569f | 693 | */ |
Anna Bridge |
160:5571c4ff569f | 694 | typedef void *RAIL_Handle_t; |
Anna Bridge |
160:5571c4ff569f | 695 | |
Anna Bridge |
160:5571c4ff569f | 696 | /** |
Anna Bridge |
160:5571c4ff569f | 697 | * @enum RAIL_Status_t |
Anna Bridge |
160:5571c4ff569f | 698 | * @brief Status returned by many RAIL API calls indicating their success or |
Anna Bridge |
160:5571c4ff569f | 699 | * failure. |
Anna Bridge |
160:5571c4ff569f | 700 | */ |
Anna Bridge |
160:5571c4ff569f | 701 | RAIL_ENUM(RAIL_Status_t) { |
Anna Bridge |
160:5571c4ff569f | 702 | RAIL_STATUS_NO_ERROR, /**< RAIL function reports no error */ |
Anna Bridge |
160:5571c4ff569f | 703 | RAIL_STATUS_INVALID_PARAMETER, /**< Call to RAIL function threw an error |
Anna Bridge |
160:5571c4ff569f | 704 | because of an invalid parameter */ |
Anna Bridge |
160:5571c4ff569f | 705 | RAIL_STATUS_INVALID_STATE, /**< Call to RAIL function threw an error |
Anna Bridge |
160:5571c4ff569f | 706 | because it was called during an invalid |
Anna Bridge |
160:5571c4ff569f | 707 | radio state */ |
AnnaBridge | 167:84c0a372a020 | 708 | RAIL_STATUS_INVALID_CALL, /**< RAIL function is called in an invalid order */ |
AnnaBridge | 167:84c0a372a020 | 709 | RAIL_STATUS_SUSPENDED, /**< RAIL function did not finish in the allotted |
AnnaBridge | 167:84c0a372a020 | 710 | time */ |
Anna Bridge |
160:5571c4ff569f | 711 | }; |
Anna Bridge |
160:5571c4ff569f | 712 | |
Anna Bridge |
160:5571c4ff569f | 713 | /** |
Anna Bridge |
160:5571c4ff569f | 714 | * @def RAIL_STATE_UINT32_BUFFER_SIZE |
Anna Bridge |
160:5571c4ff569f | 715 | * @brief The size, in 32-bit words, of RAIL_StateBuffer_t to store RAIL |
Anna Bridge |
160:5571c4ff569f | 716 | * internal state. |
Anna Bridge |
160:5571c4ff569f | 717 | */ |
AnnaBridge | 167:84c0a372a020 | 718 | #define RAIL_STATE_UINT32_BUFFER_SIZE 70 |
Anna Bridge |
160:5571c4ff569f | 719 | |
Anna Bridge |
160:5571c4ff569f | 720 | /** |
Anna Bridge |
160:5571c4ff569f | 721 | * @typedef RAIL_StateBuffer_t |
Anna Bridge |
160:5571c4ff569f | 722 | * @brief A buffer to store RAIL internal state. |
Anna Bridge |
160:5571c4ff569f | 723 | */ |
Anna Bridge |
160:5571c4ff569f | 724 | typedef uint32_t RAIL_StateBuffer_t[RAIL_STATE_UINT32_BUFFER_SIZE]; |
Anna Bridge |
160:5571c4ff569f | 725 | |
Anna Bridge |
160:5571c4ff569f | 726 | /** |
Anna Bridge |
160:5571c4ff569f | 727 | * @struct RAIL_Config_t |
Anna Bridge |
160:5571c4ff569f | 728 | * @brief RAIL configuration and internal state structure. |
Anna Bridge |
160:5571c4ff569f | 729 | * |
Anna Bridge |
160:5571c4ff569f | 730 | * This structure must be allocated in application global read-write memory |
Anna Bridge |
160:5571c4ff569f | 731 | * that persists for the duration of RAIL usage. It cannot be allocated |
Anna Bridge |
160:5571c4ff569f | 732 | * in read-only memory or on the call stack. |
Anna Bridge |
160:5571c4ff569f | 733 | */ |
Anna Bridge |
160:5571c4ff569f | 734 | typedef struct RAIL_Config { |
Anna Bridge |
160:5571c4ff569f | 735 | /** |
Anna Bridge |
160:5571c4ff569f | 736 | * Pointer to function called whenever a RAIL event occurs. |
Anna Bridge |
160:5571c4ff569f | 737 | * |
Anna Bridge |
160:5571c4ff569f | 738 | * @param[in] railHandle A handle for RAIL instance. |
Anna Bridge |
160:5571c4ff569f | 739 | * @param[in] events A bit mask of RAIL events. |
Anna Bridge |
160:5571c4ff569f | 740 | * @return void. |
Anna Bridge |
160:5571c4ff569f | 741 | * |
Anna Bridge |
160:5571c4ff569f | 742 | * See the \ref RAIL_Events_t documentation for the list of RAIL events. |
Anna Bridge |
160:5571c4ff569f | 743 | */ |
Anna Bridge |
160:5571c4ff569f | 744 | void (*eventsCallback)(RAIL_Handle_t railHandle, RAIL_Events_t events); |
Anna Bridge |
160:5571c4ff569f | 745 | /** |
Anna Bridge |
160:5571c4ff569f | 746 | * Pointer to a protocol-specific state structure allocated in global |
Anna Bridge |
160:5571c4ff569f | 747 | * read-write memory and initialized to all zeros. |
Anna Bridge |
160:5571c4ff569f | 748 | * For the BLE protocol this should point to a RAIL_BLE_State_t |
Anna Bridge |
160:5571c4ff569f | 749 | * structure. For IEEE802154 this should be NULL. |
Anna Bridge |
160:5571c4ff569f | 750 | */ |
Anna Bridge |
160:5571c4ff569f | 751 | void *protocol; |
Anna Bridge |
160:5571c4ff569f | 752 | /** |
Anna Bridge |
160:5571c4ff569f | 753 | * Pointer to a RAIL scheduler state object allocated in global read-write |
Anna Bridge |
160:5571c4ff569f | 754 | * memory and initialized to all zeros. When not using a multiprotocol |
Anna Bridge |
160:5571c4ff569f | 755 | * scheduler, this should be NULL. |
Anna Bridge |
160:5571c4ff569f | 756 | */ |
Anna Bridge |
160:5571c4ff569f | 757 | RAILSched_Config_t *scheduler; |
Anna Bridge |
160:5571c4ff569f | 758 | /** |
Anna Bridge |
160:5571c4ff569f | 759 | * A structure for RAIL to maintain its internal state, which must be |
Anna Bridge |
160:5571c4ff569f | 760 | * initialized to all zeros. |
Anna Bridge |
160:5571c4ff569f | 761 | */ |
Anna Bridge |
160:5571c4ff569f | 762 | RAIL_StateBuffer_t buffer; |
Anna Bridge |
160:5571c4ff569f | 763 | } RAIL_Config_t; |
Anna Bridge |
160:5571c4ff569f | 764 | |
Anna Bridge |
160:5571c4ff569f | 765 | /** |
Anna Bridge |
160:5571c4ff569f | 766 | * A pointer to init complete callback function |
Anna Bridge |
160:5571c4ff569f | 767 | * |
Anna Bridge |
160:5571c4ff569f | 768 | * @param[in] railHandle A handle for RAIL instance. |
Anna Bridge |
160:5571c4ff569f | 769 | * @return void. |
Anna Bridge |
160:5571c4ff569f | 770 | * |
Anna Bridge |
160:5571c4ff569f | 771 | */ |
Anna Bridge |
160:5571c4ff569f | 772 | typedef void (*RAIL_InitCompleteCallbackPtr_t)(RAIL_Handle_t railHandle); |
Anna Bridge |
160:5571c4ff569f | 773 | |
Anna Bridge |
160:5571c4ff569f | 774 | /** @} */ // end of group General |
Anna Bridge |
160:5571c4ff569f | 775 | |
Anna Bridge |
160:5571c4ff569f | 776 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 777 | * Radio Configuration Structures |
Anna Bridge |
160:5571c4ff569f | 778 | *****************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 779 | /** |
Anna Bridge |
160:5571c4ff569f | 780 | * @addtogroup Radio_Configuration |
Anna Bridge |
160:5571c4ff569f | 781 | * @{ |
Anna Bridge |
160:5571c4ff569f | 782 | */ |
Anna Bridge |
160:5571c4ff569f | 783 | |
Anna Bridge |
160:5571c4ff569f | 784 | /** |
Anna Bridge |
160:5571c4ff569f | 785 | * @struct RAIL_FrameType_t |
Anna Bridge |
160:5571c4ff569f | 786 | * @brief Configure if there is a frame type in your frame and the lengths of |
Anna Bridge |
160:5571c4ff569f | 787 | * each frame. The number of bits set in the mask determines the number of |
Anna Bridge |
160:5571c4ff569f | 788 | * elements in frameLen. A maximum of 8 different frame types may be specified. |
Anna Bridge |
160:5571c4ff569f | 789 | */ |
Anna Bridge |
160:5571c4ff569f | 790 | typedef struct RAIL_FrameType { |
Anna Bridge |
160:5571c4ff569f | 791 | /** |
Anna Bridge |
160:5571c4ff569f | 792 | * Pointer to array of frame lengths for each frame type. The length of this |
Anna Bridge |
160:5571c4ff569f | 793 | * array should be equal to the number of frame types. The array that |
Anna Bridge |
160:5571c4ff569f | 794 | * frameLen points to should not change location or be modified. |
Anna Bridge |
160:5571c4ff569f | 795 | */ |
Anna Bridge |
160:5571c4ff569f | 796 | uint16_t *frameLen; |
Anna Bridge |
160:5571c4ff569f | 797 | /** |
Anna Bridge |
160:5571c4ff569f | 798 | * Zero-indexed location of the byte containing the frame type field. |
Anna Bridge |
160:5571c4ff569f | 799 | */ |
Anna Bridge |
160:5571c4ff569f | 800 | uint8_t offset; |
Anna Bridge |
160:5571c4ff569f | 801 | /** |
Anna Bridge |
160:5571c4ff569f | 802 | * Bit mask of the frame type field. Determines number of frames expected |
Anna Bridge |
160:5571c4ff569f | 803 | * based on the number of bits set. No more than 3 bits can be set in mask. |
Anna Bridge |
160:5571c4ff569f | 804 | * Must be contiguous ones. For example, if the highest three bits of the byte |
Anna Bridge |
160:5571c4ff569f | 805 | * specified by offset constitute the frame type, then mask should be 0xE0, |
Anna Bridge |
160:5571c4ff569f | 806 | * which has 3 bits set, indicating 8 possible frame types. |
Anna Bridge |
160:5571c4ff569f | 807 | */ |
Anna Bridge |
160:5571c4ff569f | 808 | uint8_t mask; |
Anna Bridge |
160:5571c4ff569f | 809 | /** |
Anna Bridge |
160:5571c4ff569f | 810 | * Bitmask that marks if each frame is valid or should be filtered. Frame type |
Anna Bridge |
160:5571c4ff569f | 811 | * 0 corresponds to the lowest bit in isValid. If the frame is filtered, a |
Anna Bridge |
160:5571c4ff569f | 812 | * RAIL_EVENT_RX_PACKET_ABORTED will be raised. |
Anna Bridge |
160:5571c4ff569f | 813 | */ |
Anna Bridge |
160:5571c4ff569f | 814 | uint8_t isValid; |
Anna Bridge |
160:5571c4ff569f | 815 | /** |
Anna Bridge |
160:5571c4ff569f | 816 | * Bitmask that marks if each frame should have the address filter applied. |
Anna Bridge |
160:5571c4ff569f | 817 | * Frame type 0 corresponds to the least significant bit in addressFilter. |
Anna Bridge |
160:5571c4ff569f | 818 | */ |
Anna Bridge |
160:5571c4ff569f | 819 | uint8_t addressFilter; |
Anna Bridge |
160:5571c4ff569f | 820 | } RAIL_FrameType_t; |
Anna Bridge |
160:5571c4ff569f | 821 | |
Anna Bridge |
160:5571c4ff569f | 822 | /** |
Anna Bridge |
160:5571c4ff569f | 823 | * @def RAIL_SETFIXEDLENGTH_INVALID |
Anna Bridge |
160:5571c4ff569f | 824 | * @brief Invalid return value when calling RAIL_SetFixedLength() |
Anna Bridge |
160:5571c4ff569f | 825 | * |
Anna Bridge |
160:5571c4ff569f | 826 | * Invalid return value when calling RAIL_SetFixedLength() while the radio is |
Anna Bridge |
160:5571c4ff569f | 827 | * not in fixed-length mode. |
Anna Bridge |
160:5571c4ff569f | 828 | */ |
Anna Bridge |
160:5571c4ff569f | 829 | #define RAIL_SETFIXEDLENGTH_INVALID (0xFFFF) |
Anna Bridge |
160:5571c4ff569f | 830 | |
Anna Bridge |
160:5571c4ff569f | 831 | /** |
Anna Bridge |
160:5571c4ff569f | 832 | * @struct RAIL_ChannelConfigEntryAttr_t |
Anna Bridge |
160:5571c4ff569f | 833 | * @brief Channel configuration entry attribute structure. Items listed |
Anna Bridge |
160:5571c4ff569f | 834 | * here are designed to be altered and updated during run-time. |
Anna Bridge |
160:5571c4ff569f | 835 | */ |
Anna Bridge |
160:5571c4ff569f | 836 | typedef struct RAIL_ChannelConfigEntryAttr { |
Anna Bridge |
160:5571c4ff569f | 837 | uint32_t calValues[1]; /**< Attributes specific to each channel config |
Anna Bridge |
160:5571c4ff569f | 838 | entry. */ |
Anna Bridge |
160:5571c4ff569f | 839 | } RAIL_ChannelConfigEntryAttr_t; |
Anna Bridge |
160:5571c4ff569f | 840 | |
Anna Bridge |
160:5571c4ff569f | 841 | /** |
Anna Bridge |
160:5571c4ff569f | 842 | * @struct RAIL_ChannelConfigEntry_t |
Anna Bridge |
160:5571c4ff569f | 843 | * @brief Channel configuration entry structure, which defines a channel range |
Anna Bridge |
160:5571c4ff569f | 844 | * and parameters across which a corresponding radio configuration is valid. |
Anna Bridge |
160:5571c4ff569f | 845 | * |
Anna Bridge |
160:5571c4ff569f | 846 | * operating frequency = baseFrequency |
Anna Bridge |
160:5571c4ff569f | 847 | * + channelSpacing * (channel - physicalChannelOffset); |
Anna Bridge |
142:4eea097334d6 | 848 | */ |
Anna Bridge |
160:5571c4ff569f | 849 | typedef struct RAIL_ChannelConfigEntry { |
Anna Bridge |
160:5571c4ff569f | 850 | const uint32_t *phyConfigDeltaAdd; /**< Minimum radio config to apply to base |
Anna Bridge |
160:5571c4ff569f | 851 | config for this channel set. */ |
Anna Bridge |
160:5571c4ff569f | 852 | uint32_t baseFrequency; /**< Base frequency in Hz of this channel set. */ |
Anna Bridge |
160:5571c4ff569f | 853 | uint32_t channelSpacing; /**< Channel spacing in Hz of this channel set. */ |
Anna Bridge |
160:5571c4ff569f | 854 | uint16_t physicalChannelOffset; /**< The offset to subtract from the logical |
Anna Bridge |
160:5571c4ff569f | 855 | channel to align them with the zero |
Anna Bridge |
160:5571c4ff569f | 856 | based physical channels which are |
Anna Bridge |
160:5571c4ff569f | 857 | relative to baseFrequency. |
Anna Bridge |
160:5571c4ff569f | 858 | (i.e. By default ch 0 = base freq, but |
Anna Bridge |
160:5571c4ff569f | 859 | if offset = 11, ch 11 = base freq.) */ |
Anna Bridge |
160:5571c4ff569f | 860 | uint16_t channelNumberStart; /**< The first valid RAIL channel number for this |
Anna Bridge |
160:5571c4ff569f | 861 | channel set. */ |
Anna Bridge |
160:5571c4ff569f | 862 | uint16_t channelNumberEnd; /**< The last valid RAIL channel number for this |
Anna Bridge |
160:5571c4ff569f | 863 | channel set. */ |
Anna Bridge |
160:5571c4ff569f | 864 | RAIL_TxPower_t maxPower; /**< The max power allowed in this channel set. */ |
Anna Bridge |
160:5571c4ff569f | 865 | RAIL_ChannelConfigEntryAttr_t *attr; /**< A pointer to a structure containing |
Anna Bridge |
160:5571c4ff569f | 866 | attributes specific to this |
Anna Bridge |
160:5571c4ff569f | 867 | channel set. */ |
Anna Bridge |
160:5571c4ff569f | 868 | } RAIL_ChannelConfigEntry_t; |
Anna Bridge |
160:5571c4ff569f | 869 | |
AnnaBridge | 167:84c0a372a020 | 870 | /// @struct RAIL_ChannelConfig_t |
AnnaBridge | 167:84c0a372a020 | 871 | /// @brief Channel configuration structure, which defines the channel meaning |
AnnaBridge | 167:84c0a372a020 | 872 | /// when a channel number is passed into a RAIL function, e.g., RAIL_StartTx() |
AnnaBridge | 167:84c0a372a020 | 873 | /// and RAIL_StartRx(). |
AnnaBridge | 167:84c0a372a020 | 874 | /// |
AnnaBridge | 167:84c0a372a020 | 875 | /// A RAIL_ChannelConfig_t structure defines the channel scheme that an |
AnnaBridge | 167:84c0a372a020 | 876 | /// application uses when registered in RAIL_ConfigChannels(). |
AnnaBridge | 167:84c0a372a020 | 877 | /// |
AnnaBridge | 167:84c0a372a020 | 878 | /// A few examples of different channel configurations: |
AnnaBridge | 167:84c0a372a020 | 879 | /// @code{.c} |
AnnaBridge | 167:84c0a372a020 | 880 | /// // 21 channels starting at 2.45GHz with channel spacing of 1MHz |
AnnaBridge | 167:84c0a372a020 | 881 | /// // ... generated by Simplicity Studio (i.e. rail_config.c) ... |
AnnaBridge | 167:84c0a372a020 | 882 | /// const uint32_t generated[] = { ... }; |
AnnaBridge | 167:84c0a372a020 | 883 | /// RAIL_ChannelConfigEntryAttr_t generated_entryAttr = { ... }; |
AnnaBridge | 167:84c0a372a020 | 884 | /// const RAIL_ChannelConfigEntry_t generated_channels[] = { |
AnnaBridge | 167:84c0a372a020 | 885 | /// { |
AnnaBridge | 167:84c0a372a020 | 886 | /// .phyConfigDeltaAdd = NULL, // Add this to default config for this entry |
AnnaBridge | 167:84c0a372a020 | 887 | /// .baseFrequency = 2450000000, |
AnnaBridge | 167:84c0a372a020 | 888 | /// .channelSpacing = 1000000, |
AnnaBridge | 167:84c0a372a020 | 889 | /// .physicalChannelOffset = 0, |
AnnaBridge | 167:84c0a372a020 | 890 | /// .channelNumberStart = 0, |
AnnaBridge | 167:84c0a372a020 | 891 | /// .channelNumberEnd = 20, |
AnnaBridge | 167:84c0a372a020 | 892 | /// .maxPower = RAIL_TX_POWER_MAX, |
AnnaBridge | 167:84c0a372a020 | 893 | /// .attr = &generated_entryAttr |
AnnaBridge | 167:84c0a372a020 | 894 | /// }, |
AnnaBridge | 167:84c0a372a020 | 895 | /// }; |
AnnaBridge | 167:84c0a372a020 | 896 | /// const RAIL_ChannelConfig_t generated_channelConfig = { |
AnnaBridge | 167:84c0a372a020 | 897 | /// .phyConfigBase = generated, // Default radio config for all entries |
AnnaBridge | 167:84c0a372a020 | 898 | /// .phyConfigDeltaSubtract = NULL, // Subtract this to restore default config |
AnnaBridge | 167:84c0a372a020 | 899 | /// .configs = generated_channels, |
AnnaBridge | 167:84c0a372a020 | 900 | /// .length = 1 // There are this many channel config entries |
AnnaBridge | 167:84c0a372a020 | 901 | /// }; |
AnnaBridge | 167:84c0a372a020 | 902 | /// const RAIL_ChannelConfig_t *channelConfigs[] = { |
AnnaBridge | 167:84c0a372a020 | 903 | /// &generated_channelConfig, |
AnnaBridge | 167:84c0a372a020 | 904 | /// NULL |
AnnaBridge | 167:84c0a372a020 | 905 | /// }; |
AnnaBridge | 167:84c0a372a020 | 906 | /// // ... in main code ... |
AnnaBridge | 167:84c0a372a020 | 907 | /// // Associate a specific channel config with a particular rail instance. |
AnnaBridge | 167:84c0a372a020 | 908 | /// RAIL_ConfigChannels(railHandle, channelConfigs[0]); |
AnnaBridge | 167:84c0a372a020 | 909 | /// |
AnnaBridge | 167:84c0a372a020 | 910 | /// // 4 nonlinear channels |
AnnaBridge | 167:84c0a372a020 | 911 | /// // ... in rail_config.c ... |
AnnaBridge | 167:84c0a372a020 | 912 | /// const uint32_t generated[] = { ... }; |
AnnaBridge | 167:84c0a372a020 | 913 | /// RAIL_ChannelConfigEntryAttr_t generated_entryAttr = { ... }; |
AnnaBridge | 167:84c0a372a020 | 914 | /// const RAIL_ChannelConfigEntry_t generated_channels[] = { |
AnnaBridge | 167:84c0a372a020 | 915 | /// { |
AnnaBridge | 167:84c0a372a020 | 916 | /// .phyConfigDeltaAdd = NULL, // Add this to default config for this entry |
AnnaBridge | 167:84c0a372a020 | 917 | /// .baseFrequency = 910123456, |
AnnaBridge | 167:84c0a372a020 | 918 | /// .channelSpacing = 0, |
AnnaBridge | 167:84c0a372a020 | 919 | /// .physicalChannelOffset = 0, |
AnnaBridge | 167:84c0a372a020 | 920 | /// .channelNumberStart = 0, |
AnnaBridge | 167:84c0a372a020 | 921 | /// .channelNumberEnd = 0, |
AnnaBridge | 167:84c0a372a020 | 922 | /// .maxPower = RAIL_TX_POWER_MAX, |
AnnaBridge | 167:84c0a372a020 | 923 | /// .attr = &generated_entryAttr |
AnnaBridge | 167:84c0a372a020 | 924 | /// }, |
AnnaBridge | 167:84c0a372a020 | 925 | /// { |
AnnaBridge | 167:84c0a372a020 | 926 | /// .phyConfigDeltaAdd = NULL, |
AnnaBridge | 167:84c0a372a020 | 927 | /// .baseFrequency = 911654789, |
AnnaBridge | 167:84c0a372a020 | 928 | /// .channelSpacing = 0, |
AnnaBridge | 167:84c0a372a020 | 929 | /// .physicalChannelOffset = 0, // Since ch spacing = 0, offset can be 0 |
AnnaBridge | 167:84c0a372a020 | 930 | /// .channelNumberStart = 1, |
AnnaBridge | 167:84c0a372a020 | 931 | /// .channelNumberEnd = 1, |
AnnaBridge | 167:84c0a372a020 | 932 | /// .maxPower = RAIL_TX_POWER_MAX, |
AnnaBridge | 167:84c0a372a020 | 933 | /// .attr = &generated_entryAttr |
AnnaBridge | 167:84c0a372a020 | 934 | /// }, |
AnnaBridge | 167:84c0a372a020 | 935 | /// { |
AnnaBridge | 167:84c0a372a020 | 936 | /// .phyConfigDeltaAdd = NULL, |
AnnaBridge | 167:84c0a372a020 | 937 | /// .baseFrequency = 912321456, |
AnnaBridge | 167:84c0a372a020 | 938 | /// .channelSpacing = 100000, |
AnnaBridge | 167:84c0a372a020 | 939 | /// .physicalChannelOffset = 2, // Since ch spacing != 0, offset = 2 |
AnnaBridge | 167:84c0a372a020 | 940 | /// .channelNumberStart = 2, // We want ch 2 = baseFrequency |
AnnaBridge | 167:84c0a372a020 | 941 | /// .channelNumberEnd = 2, |
AnnaBridge | 167:84c0a372a020 | 942 | /// .maxPower = RAIL_TX_POWER_MAX, |
AnnaBridge | 167:84c0a372a020 | 943 | /// .attr = &generated_entryAttr |
AnnaBridge | 167:84c0a372a020 | 944 | /// }, |
AnnaBridge | 167:84c0a372a020 | 945 | /// { |
AnnaBridge | 167:84c0a372a020 | 946 | /// .phyConfigDeltaAdd = NULL, |
AnnaBridge | 167:84c0a372a020 | 947 | /// .baseFrequency = 913147852, |
AnnaBridge | 167:84c0a372a020 | 948 | /// .channelSpacing = 0, |
AnnaBridge | 167:84c0a372a020 | 949 | /// .physicalChannelOffset = 0, |
AnnaBridge | 167:84c0a372a020 | 950 | /// .channelNumberStart = 3, |
AnnaBridge | 167:84c0a372a020 | 951 | /// .channelNumberEnd = 3, |
AnnaBridge | 167:84c0a372a020 | 952 | /// .maxPower = RAIL_TX_POWER_MAX, |
AnnaBridge | 167:84c0a372a020 | 953 | /// .attr = &generated_entryAttr |
AnnaBridge | 167:84c0a372a020 | 954 | /// }, |
AnnaBridge | 167:84c0a372a020 | 955 | /// }; |
AnnaBridge | 167:84c0a372a020 | 956 | /// const RAIL_ChannelConfig_t generated_channelConfig = { |
AnnaBridge | 167:84c0a372a020 | 957 | /// .phyConfigBase = generated, // Default radio config for all entries |
AnnaBridge | 167:84c0a372a020 | 958 | /// .phyConfigDeltaSubtract = NULL, // Subtract this to restore default config |
AnnaBridge | 167:84c0a372a020 | 959 | /// .configs = generated_channels, |
AnnaBridge | 167:84c0a372a020 | 960 | /// .length = 4 // There are this many channel config entries |
AnnaBridge | 167:84c0a372a020 | 961 | /// }; |
AnnaBridge | 167:84c0a372a020 | 962 | /// const RAIL_ChannelConfig_t *channelConfigs[] = { |
AnnaBridge | 167:84c0a372a020 | 963 | /// &generated_channelConfig, |
AnnaBridge | 167:84c0a372a020 | 964 | /// NULL |
AnnaBridge | 167:84c0a372a020 | 965 | /// }; |
AnnaBridge | 167:84c0a372a020 | 966 | /// // ... in main code ... |
AnnaBridge | 167:84c0a372a020 | 967 | /// // Associate a specific channel config with a particular rail instance. |
AnnaBridge | 167:84c0a372a020 | 968 | /// RAIL_ConfigChannels(railHandle, channelConfigs[0]); |
AnnaBridge | 167:84c0a372a020 | 969 | /// |
AnnaBridge | 167:84c0a372a020 | 970 | /// // Multiple radio configurations |
AnnaBridge | 167:84c0a372a020 | 971 | /// // ... in rail_config.c ... |
AnnaBridge | 167:84c0a372a020 | 972 | /// const uint32_t generated0[] = { ... }; |
AnnaBridge | 167:84c0a372a020 | 973 | /// RAIL_ChannelConfigEntryAttr_t generated0_entryAttr = { ... }; |
AnnaBridge | 167:84c0a372a020 | 974 | /// const RAIL_ChannelConfigEntry_t generated0_channels[] = { |
AnnaBridge | 167:84c0a372a020 | 975 | /// { |
AnnaBridge | 167:84c0a372a020 | 976 | /// .phyConfigDeltaAdd = NULL, // Add this to default config for this entry |
AnnaBridge | 167:84c0a372a020 | 977 | /// .baseFrequency = 2450000000, |
AnnaBridge | 167:84c0a372a020 | 978 | /// .channelSpacing = 1000000, |
AnnaBridge | 167:84c0a372a020 | 979 | /// .physicalChannelOffset = 0, |
AnnaBridge | 167:84c0a372a020 | 980 | /// .channelNumberStart = 0, |
AnnaBridge | 167:84c0a372a020 | 981 | /// .channelNumberEnd = 20, |
AnnaBridge | 167:84c0a372a020 | 982 | /// .maxPower = RAIL_TX_POWER_MAX, |
AnnaBridge | 167:84c0a372a020 | 983 | /// .attr = &generated0_entryAttr |
AnnaBridge | 167:84c0a372a020 | 984 | /// }, |
AnnaBridge | 167:84c0a372a020 | 985 | /// }; |
AnnaBridge | 167:84c0a372a020 | 986 | /// const RAIL_ChannelConfig_t generated0_channelConfig = { |
AnnaBridge | 167:84c0a372a020 | 987 | /// .phyConfigBase = generated0, // Default radio config for all entries |
AnnaBridge | 167:84c0a372a020 | 988 | /// .phyConfigDeltaSubtract = NULL, // Subtract this to restore default config |
AnnaBridge | 167:84c0a372a020 | 989 | /// .configs = generated0_channels, |
AnnaBridge | 167:84c0a372a020 | 990 | /// .length = 1 // There are this many channel config entries |
AnnaBridge | 167:84c0a372a020 | 991 | /// }; |
AnnaBridge | 167:84c0a372a020 | 992 | /// const uint32_t generated1[] = { ... }; |
AnnaBridge | 167:84c0a372a020 | 993 | /// RAIL_ChannelConfigEntryAttr_t generated1_entryAttr = { ... }; |
AnnaBridge | 167:84c0a372a020 | 994 | /// const RAIL_ChannelConfigEntry_t generated1_channels[] = { |
AnnaBridge | 167:84c0a372a020 | 995 | /// { |
AnnaBridge | 167:84c0a372a020 | 996 | /// .phyConfigDeltaAdd = NULL, |
AnnaBridge | 167:84c0a372a020 | 997 | /// .baseFrequency = 2450000000, |
AnnaBridge | 167:84c0a372a020 | 998 | /// .channelSpacing = 1000000, |
AnnaBridge | 167:84c0a372a020 | 999 | /// .physicalChannelOffset = 0, |
AnnaBridge | 167:84c0a372a020 | 1000 | /// .channelNumberStart = 0, |
AnnaBridge | 167:84c0a372a020 | 1001 | /// .channelNumberEnd = 20, |
AnnaBridge | 167:84c0a372a020 | 1002 | /// .maxPower = -100, // Use this entry when TX power <= -10dBm |
AnnaBridge | 167:84c0a372a020 | 1003 | /// .attr = &generated1_entryAttr |
AnnaBridge | 167:84c0a372a020 | 1004 | /// }, |
AnnaBridge | 167:84c0a372a020 | 1005 | /// { |
AnnaBridge | 167:84c0a372a020 | 1006 | /// .phyConfigDeltaAdd = NULL, |
AnnaBridge | 167:84c0a372a020 | 1007 | /// .baseFrequency = 2450000000, |
AnnaBridge | 167:84c0a372a020 | 1008 | /// .channelSpacing = 1000000, |
AnnaBridge | 167:84c0a372a020 | 1009 | /// .physicalChannelOffset = 0, |
AnnaBridge | 167:84c0a372a020 | 1010 | /// .channelNumberStart = 0, |
AnnaBridge | 167:84c0a372a020 | 1011 | /// .channelNumberEnd = 20, |
AnnaBridge | 167:84c0a372a020 | 1012 | /// .maxPower = 15, // Use this entry when TX power > -10dBm |
AnnaBridge | 167:84c0a372a020 | 1013 | /// // and TX power <= 1.5dBm |
AnnaBridge | 167:84c0a372a020 | 1014 | /// .attr = &generated1_entryAttr |
AnnaBridge | 167:84c0a372a020 | 1015 | /// }, |
AnnaBridge | 167:84c0a372a020 | 1016 | /// { |
AnnaBridge | 167:84c0a372a020 | 1017 | /// .phyConfigDeltaAdd = NULL, |
AnnaBridge | 167:84c0a372a020 | 1018 | /// .baseFrequency = 2450000000, |
AnnaBridge | 167:84c0a372a020 | 1019 | /// .channelSpacing = 1000000, |
AnnaBridge | 167:84c0a372a020 | 1020 | /// .physicalChannelOffset = 0, |
AnnaBridge | 167:84c0a372a020 | 1021 | /// .channelNumberStart = 0, |
AnnaBridge | 167:84c0a372a020 | 1022 | /// .channelNumberEnd = 20, |
AnnaBridge | 167:84c0a372a020 | 1023 | /// .maxPower = RAIL_TX_POWER_MAX, // Use this entry when TX power > 1.5dBm |
AnnaBridge | 167:84c0a372a020 | 1024 | /// .attr = &generated1_entryAttr |
AnnaBridge | 167:84c0a372a020 | 1025 | /// }, |
AnnaBridge | 167:84c0a372a020 | 1026 | /// }; |
AnnaBridge | 167:84c0a372a020 | 1027 | /// const RAIL_ChannelConfig_t generated1_channelConfig = { |
AnnaBridge | 167:84c0a372a020 | 1028 | /// .phyConfigBase = generated1, |
AnnaBridge | 167:84c0a372a020 | 1029 | /// .phyConfigDeltaSubtract = NULL, |
AnnaBridge | 167:84c0a372a020 | 1030 | /// .configs = generated1_channels, |
AnnaBridge | 167:84c0a372a020 | 1031 | /// .length = 3 |
AnnaBridge | 167:84c0a372a020 | 1032 | /// }; |
AnnaBridge | 167:84c0a372a020 | 1033 | /// const uint32_t generated2[] = { ... }; |
AnnaBridge | 167:84c0a372a020 | 1034 | /// RAIL_ChannelConfigEntryAttr_t generated2_entryAttr = { ... }; |
AnnaBridge | 167:84c0a372a020 | 1035 | /// const RAIL_ChannelConfigEntry_t generated2_channels[] = { |
AnnaBridge | 167:84c0a372a020 | 1036 | /// { |
AnnaBridge | 167:84c0a372a020 | 1037 | /// .phyConfigDeltaAdd = NULL, |
AnnaBridge | 167:84c0a372a020 | 1038 | /// .baseFrequency = 2450000000, |
AnnaBridge | 167:84c0a372a020 | 1039 | /// .channelSpacing = 1000000, |
AnnaBridge | 167:84c0a372a020 | 1040 | /// .physicalChannelOffset = 0, |
AnnaBridge | 167:84c0a372a020 | 1041 | /// .channelNumberStart = 0, |
AnnaBridge | 167:84c0a372a020 | 1042 | /// .channelNumberEnd = 20, |
AnnaBridge | 167:84c0a372a020 | 1043 | /// .maxPower = RAIL_TX_POWER_MAX, |
AnnaBridge | 167:84c0a372a020 | 1044 | /// .attr = &generated2_entryAttr |
AnnaBridge | 167:84c0a372a020 | 1045 | /// }, |
AnnaBridge | 167:84c0a372a020 | 1046 | /// }; |
AnnaBridge | 167:84c0a372a020 | 1047 | /// const RAIL_ChannelConfig_t generated2_channelConfig = { |
AnnaBridge | 167:84c0a372a020 | 1048 | /// .phyConfigBase = generated2, |
AnnaBridge | 167:84c0a372a020 | 1049 | /// .phyConfigDeltaSubtract = NULL, |
AnnaBridge | 167:84c0a372a020 | 1050 | /// .configs = generated2_channels, |
AnnaBridge | 167:84c0a372a020 | 1051 | /// .length = 1 |
AnnaBridge | 167:84c0a372a020 | 1052 | /// }; |
AnnaBridge | 167:84c0a372a020 | 1053 | /// const RAIL_ChannelConfig_t *channelConfigs[] = { |
AnnaBridge | 167:84c0a372a020 | 1054 | /// &generated0_channelConfig, |
AnnaBridge | 167:84c0a372a020 | 1055 | /// &generated1_channelConfig, |
AnnaBridge | 167:84c0a372a020 | 1056 | /// &generated2_channelConfig, |
AnnaBridge | 167:84c0a372a020 | 1057 | /// NULL |
AnnaBridge | 167:84c0a372a020 | 1058 | /// }; |
AnnaBridge | 167:84c0a372a020 | 1059 | /// // ... in main code ... |
AnnaBridge | 167:84c0a372a020 | 1060 | /// // Create a unique RAIL handle for each unique channel config. |
AnnaBridge | 167:84c0a372a020 | 1061 | /// railHandle0 = RAIL_Init(&railCfg0, &RAILCb_RfReady0); |
AnnaBridge | 167:84c0a372a020 | 1062 | /// railHandle1 = RAIL_Init(&railCfg1, &RAILCb_RfReady1); |
AnnaBridge | 167:84c0a372a020 | 1063 | /// railHandle2 = RAIL_Init(&railCfg2, &RAILCb_RfReady2); |
AnnaBridge | 167:84c0a372a020 | 1064 | /// // Associate each channel config with its corresponding RAIL handle. |
AnnaBridge | 167:84c0a372a020 | 1065 | /// RAIL_ConfigChannels(railHandle0, channelConfigs[0]); |
AnnaBridge | 167:84c0a372a020 | 1066 | /// RAIL_ConfigChannels(railHandle1, channelConfigs[1]); |
AnnaBridge | 167:84c0a372a020 | 1067 | /// RAIL_ConfigChannels(railHandle2, channelConfigs[2]); |
AnnaBridge | 167:84c0a372a020 | 1068 | /// // Use a RAIL handle and channel to access the desired channel config entry. |
AnnaBridge | 167:84c0a372a020 | 1069 | /// RAIL_SetTxPowerDbm(railHandle1, 100); // set 10.0 dBm TX power |
AnnaBridge | 167:84c0a372a020 | 1070 | /// RAIL_StartRx(railHandle1, 0, &schedInfo); // RX using generated1_channels[2] |
AnnaBridge | 167:84c0a372a020 | 1071 | /// RAIL_SetTxPowerDbm(railHandle1, 0); // set 0 dBm TX power |
AnnaBridge | 167:84c0a372a020 | 1072 | /// RAIL_StartRx(railHandle1, 0, &schedInfo); // RX using generated1_channels[1] |
AnnaBridge | 167:84c0a372a020 | 1073 | /// RAIL_StartRx(railHandle2, 0, &schedInfo); // RX using generated2_channels[0] |
AnnaBridge | 167:84c0a372a020 | 1074 | /// @endcode |
AnnaBridge | 167:84c0a372a020 | 1075 | |
Anna Bridge |
160:5571c4ff569f | 1076 | typedef struct RAIL_ChannelConfig { |
Anna Bridge |
160:5571c4ff569f | 1077 | const uint32_t *phyConfigBase; /**< Base radio config for the corresponding |
Anna Bridge |
160:5571c4ff569f | 1078 | channel config entries. */ |
Anna Bridge |
160:5571c4ff569f | 1079 | const uint32_t *phyConfigDeltaSubtract; /**< Minimum radio config to restore |
Anna Bridge |
160:5571c4ff569f | 1080 | channel entries back to base |
Anna Bridge |
160:5571c4ff569f | 1081 | config. */ |
Anna Bridge |
160:5571c4ff569f | 1082 | const RAIL_ChannelConfigEntry_t *configs; /**< Pointer to an array of |
Anna Bridge |
160:5571c4ff569f | 1083 | RAIL_ChannelConfigEntry_t |
Anna Bridge |
160:5571c4ff569f | 1084 | entries. */ |
Anna Bridge |
160:5571c4ff569f | 1085 | uint32_t length; /**< Number of RAIL_ChannelConfigEntry_t entries. */ |
Anna Bridge |
160:5571c4ff569f | 1086 | } RAIL_ChannelConfig_t; |
Anna Bridge |
160:5571c4ff569f | 1087 | |
Anna Bridge |
160:5571c4ff569f | 1088 | /** |
Anna Bridge |
160:5571c4ff569f | 1089 | * @typedef RAIL_RadioConfigChangedCallback_t |
Anna Bridge |
160:5571c4ff569f | 1090 | * @brief Pointer to function called whenever a radio configuration change occurs. |
Anna Bridge |
160:5571c4ff569f | 1091 | * |
Anna Bridge |
160:5571c4ff569f | 1092 | * @param[in] railHandle A handle for RAIL instance. |
Anna Bridge |
160:5571c4ff569f | 1093 | * @param[in] entry The radio configuration entry being changed to. |
Anna Bridge |
160:5571c4ff569f | 1094 | */ |
Anna Bridge |
160:5571c4ff569f | 1095 | typedef void (*RAIL_RadioConfigChangedCallback_t)(RAIL_Handle_t railHandle, |
Anna Bridge |
160:5571c4ff569f | 1096 | const RAIL_ChannelConfigEntry_t *entry); |
Anna Bridge |
160:5571c4ff569f | 1097 | /** @} */ // end of group Radio_Configuration |
Anna Bridge |
160:5571c4ff569f | 1098 | |
Anna Bridge |
160:5571c4ff569f | 1099 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 1100 | * Packet Trace Interface (PTI) Structures |
Anna Bridge |
160:5571c4ff569f | 1101 | *****************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 1102 | /** |
Anna Bridge |
160:5571c4ff569f | 1103 | * @addtogroup PTI |
Anna Bridge |
160:5571c4ff569f | 1104 | * @{ |
Anna Bridge |
160:5571c4ff569f | 1105 | */ |
Anna Bridge |
142:4eea097334d6 | 1106 | |
Anna Bridge |
142:4eea097334d6 | 1107 | /** |
Anna Bridge |
142:4eea097334d6 | 1108 | * @enum RAIL_PtiProtocol_t |
Anna Bridge |
160:5571c4ff569f | 1109 | * @brief The protocol that RAIL outputs via the Packet Trace Interface (PTI). |
Anna Bridge |
142:4eea097334d6 | 1110 | */ |
Anna Bridge |
160:5571c4ff569f | 1111 | RAIL_ENUM(RAIL_PtiProtocol_t) { |
Anna Bridge |
142:4eea097334d6 | 1112 | RAIL_PTI_PROTOCOL_CUSTOM = 0, /**< PTI output for a custom protocol */ |
Anna Bridge |
142:4eea097334d6 | 1113 | RAIL_PTI_PROTOCOL_THREAD = 2, /**< PTI output for the Thread protocol */ |
Anna Bridge |
142:4eea097334d6 | 1114 | RAIL_PTI_PROTOCOL_BLE = 3, /**< PTI output for the Bluetooth Smart protocol */ |
Anna Bridge |
142:4eea097334d6 | 1115 | RAIL_PTI_PROTOCOL_CONNECT = 4, /**< PTI output for the Connect protocol */ |
Anna Bridge |
160:5571c4ff569f | 1116 | RAIL_PTI_PROTOCOL_ZIGBEE = 5, /**< PTI output for the zigbee protocol */ |
Anna Bridge |
160:5571c4ff569f | 1117 | }; |
Anna Bridge |
160:5571c4ff569f | 1118 | |
Anna Bridge |
160:5571c4ff569f | 1119 | /** @} */ // end of group PTI |
Anna Bridge |
160:5571c4ff569f | 1120 | |
Anna Bridge |
160:5571c4ff569f | 1121 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 1122 | * System Timing Structures |
Anna Bridge |
160:5571c4ff569f | 1123 | *****************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 1124 | /** |
Anna Bridge |
160:5571c4ff569f | 1125 | * @addtogroup System_Timing |
Anna Bridge |
160:5571c4ff569f | 1126 | * @{ |
Anna Bridge |
160:5571c4ff569f | 1127 | */ |
Anna Bridge |
142:4eea097334d6 | 1128 | |
Anna Bridge |
142:4eea097334d6 | 1129 | /** |
Anna Bridge |
160:5571c4ff569f | 1130 | * Pointer to callback called when the RAIL timer expires. |
Anna Bridge |
160:5571c4ff569f | 1131 | * |
Anna Bridge |
160:5571c4ff569f | 1132 | * @param[in] cbArg The argument passed to the callback. |
Anna Bridge |
160:5571c4ff569f | 1133 | * @return void. |
Anna Bridge |
142:4eea097334d6 | 1134 | */ |
Anna Bridge |
160:5571c4ff569f | 1135 | typedef void (*RAIL_TimerCallback_t)(RAIL_Handle_t cbArg); |
Anna Bridge |
142:4eea097334d6 | 1136 | |
Anna Bridge |
142:4eea097334d6 | 1137 | /** |
Anna Bridge |
160:5571c4ff569f | 1138 | * @enum RAIL_TimeMode_t |
Anna Bridge |
160:5571c4ff569f | 1139 | * @brief Specifies a time offset in RAIL APIs. |
Anna Bridge |
160:5571c4ff569f | 1140 | * |
Anna Bridge |
160:5571c4ff569f | 1141 | * Different APIs use the same constants and may provide more specifics about |
Anna Bridge |
160:5571c4ff569f | 1142 | * how they're used but the general use for each is described below. |
Anna Bridge |
142:4eea097334d6 | 1143 | */ |
Anna Bridge |
160:5571c4ff569f | 1144 | RAIL_ENUM(RAIL_TimeMode_t) { |
Anna Bridge |
160:5571c4ff569f | 1145 | /** |
Anna Bridge |
160:5571c4ff569f | 1146 | * The time specified is an exact time in the RAIL timebase. The given |
Anna Bridge |
160:5571c4ff569f | 1147 | * event should happen at exactly that time. If this time is already in the |
Anna Bridge |
160:5571c4ff569f | 1148 | * past, an error is returned. Because the RAIL timebase wraps at 32 |
Anna Bridge |
160:5571c4ff569f | 1149 | * bits, there is no real 'past'. Instead, any event greater than |
Anna Bridge |
160:5571c4ff569f | 1150 | * 3/4 of the way into the future is considered to be in the past. |
Anna Bridge |
160:5571c4ff569f | 1151 | */ |
Anna Bridge |
160:5571c4ff569f | 1152 | RAIL_TIME_ABSOLUTE, |
Anna Bridge |
160:5571c4ff569f | 1153 | /** |
Anna Bridge |
160:5571c4ff569f | 1154 | * The time specified is relative to the current time. The event should occur |
Anna Bridge |
160:5571c4ff569f | 1155 | * that many ticks in the future. Delays are only guaranteed at least as long |
Anna Bridge |
160:5571c4ff569f | 1156 | * as the value specified. An overhead may occur between the time when the |
Anna Bridge |
160:5571c4ff569f | 1157 | * API is called and when the delay starts. As a result, using this for |
Anna Bridge |
160:5571c4ff569f | 1158 | * operations that must happen at an exact given time is not recommended. |
Anna Bridge |
160:5571c4ff569f | 1159 | * For that, you must use \ref RAIL_TIME_ABSOLUTE delays. |
Anna Bridge |
160:5571c4ff569f | 1160 | * |
Anna Bridge |
160:5571c4ff569f | 1161 | * Note that, if you specify a delay 0, that event is triggered as soon as |
Anna Bridge |
160:5571c4ff569f | 1162 | * possible. This is different than specifying an absolute time of now which |
Anna Bridge |
160:5571c4ff569f | 1163 | * would return an error unless it was possible. |
Anna Bridge |
160:5571c4ff569f | 1164 | */ |
Anna Bridge |
160:5571c4ff569f | 1165 | RAIL_TIME_DELAY, |
Anna Bridge |
160:5571c4ff569f | 1166 | /** |
Anna Bridge |
160:5571c4ff569f | 1167 | * The specified time is invalid and should be ignored. For some APIs this |
Anna Bridge |
160:5571c4ff569f | 1168 | * can also indicate that any previously stored delay should be invalidated |
Anna Bridge |
160:5571c4ff569f | 1169 | * and disabled. |
Anna Bridge |
160:5571c4ff569f | 1170 | */ |
Anna Bridge |
160:5571c4ff569f | 1171 | RAIL_TIME_DISABLED |
Anna Bridge |
160:5571c4ff569f | 1172 | }; |
Anna Bridge |
142:4eea097334d6 | 1173 | |
AnnaBridge | 167:84c0a372a020 | 1174 | /// Forward declaration of RAIL_MultiTimer |
AnnaBridge | 167:84c0a372a020 | 1175 | struct RAIL_MultiTimer; |
AnnaBridge | 167:84c0a372a020 | 1176 | |
AnnaBridge | 167:84c0a372a020 | 1177 | /** |
AnnaBridge | 167:84c0a372a020 | 1178 | * @typedef RAIL_MultiTimerCallback_t |
AnnaBridge | 167:84c0a372a020 | 1179 | * @brief Callback fired when timer expires |
AnnaBridge | 167:84c0a372a020 | 1180 | * |
AnnaBridge | 167:84c0a372a020 | 1181 | * @param[in] tmr pointer to expired timer |
AnnaBridge | 167:84c0a372a020 | 1182 | * @param[in] expectedTimeOfEvent Absolute time event fired |
AnnaBridge | 167:84c0a372a020 | 1183 | * @param[in] cbArg User supplied callback argument |
AnnaBridge | 167:84c0a372a020 | 1184 | */ |
AnnaBridge | 167:84c0a372a020 | 1185 | typedef void (*RAIL_MultiTimerCallback_t)(struct RAIL_MultiTimer *tmr, |
AnnaBridge | 167:84c0a372a020 | 1186 | RAIL_Time_t expectedTimeOfEvent, |
AnnaBridge | 167:84c0a372a020 | 1187 | void *cbArg); |
AnnaBridge | 167:84c0a372a020 | 1188 | |
AnnaBridge | 167:84c0a372a020 | 1189 | /** |
AnnaBridge | 167:84c0a372a020 | 1190 | * @struct RAIL_MultiTimer_t |
AnnaBridge | 167:84c0a372a020 | 1191 | * @brief RAIL timer state structure |
AnnaBridge | 167:84c0a372a020 | 1192 | * |
AnnaBridge | 167:84c0a372a020 | 1193 | * This structure is filled out and maintained internally only. |
AnnaBridge | 167:84c0a372a020 | 1194 | * The user/application should not alter any elements of this structure. |
AnnaBridge | 167:84c0a372a020 | 1195 | */ |
AnnaBridge | 167:84c0a372a020 | 1196 | typedef struct RAIL_MultiTimer { |
AnnaBridge | 167:84c0a372a020 | 1197 | RAIL_Time_t absOffset; /**< absolute time before next event */ |
AnnaBridge | 167:84c0a372a020 | 1198 | RAIL_Time_t relPeriodic; /**< relative, periodic time between events; 0 = timer is oneshot */ |
AnnaBridge | 167:84c0a372a020 | 1199 | RAIL_MultiTimerCallback_t callback; /**< user callback */ |
AnnaBridge | 167:84c0a372a020 | 1200 | void *cbArg; /**< user callback argument */ |
AnnaBridge | 167:84c0a372a020 | 1201 | struct RAIL_MultiTimer *next; /**< pointer to next soft timer structure */ |
AnnaBridge | 167:84c0a372a020 | 1202 | uint8_t priority; /**< priority of callback; 0 = highest priority; 255 = lowest */ |
AnnaBridge | 167:84c0a372a020 | 1203 | bool isRunning; /**< soft timer currently running? */ |
AnnaBridge | 167:84c0a372a020 | 1204 | bool doCallback; /**< callback needs to run? */ |
AnnaBridge | 167:84c0a372a020 | 1205 | } RAIL_MultiTimer_t; |
AnnaBridge | 167:84c0a372a020 | 1206 | |
Anna Bridge |
142:4eea097334d6 | 1207 | /** |
Anna Bridge |
160:5571c4ff569f | 1208 | * @enum RAIL_SleepConfig_t |
Anna Bridge |
160:5571c4ff569f | 1209 | * @brief The config |
Anna Bridge |
142:4eea097334d6 | 1210 | */ |
Anna Bridge |
160:5571c4ff569f | 1211 | RAIL_ENUM(RAIL_SleepConfig_t) { |
Anna Bridge |
160:5571c4ff569f | 1212 | RAIL_SLEEP_CONFIG_TIMERSYNC_DISABLED, /**< Disable timer sync before and after sleep */ |
Anna Bridge |
160:5571c4ff569f | 1213 | RAIL_SLEEP_CONFIG_TIMERSYNC_ENABLED, /**< Enable timer sync before and after sleep */ |
Anna Bridge |
160:5571c4ff569f | 1214 | }; |
Anna Bridge |
142:4eea097334d6 | 1215 | |
Anna Bridge |
142:4eea097334d6 | 1216 | /** |
Anna Bridge |
160:5571c4ff569f | 1217 | * @enum RAIL_PacketTimePosition_t |
Anna Bridge |
160:5571c4ff569f | 1218 | * @brief The available packet timestamp position choices |
Anna Bridge |
142:4eea097334d6 | 1219 | */ |
Anna Bridge |
160:5571c4ff569f | 1220 | RAIL_ENUM(RAIL_PacketTimePosition_t) { |
Anna Bridge |
160:5571c4ff569f | 1221 | /** |
Anna Bridge |
160:5571c4ff569f | 1222 | * Indicates timestamp is not to be, or was not, provided. |
Anna Bridge |
160:5571c4ff569f | 1223 | * Useful if the application doesn't care about packet timestamps |
Anna Bridge |
160:5571c4ff569f | 1224 | * and doesn't want RAIL to spend time calculating one. |
Anna Bridge |
160:5571c4ff569f | 1225 | */ |
Anna Bridge |
160:5571c4ff569f | 1226 | RAIL_PACKET_TIME_INVALID = 0, |
Anna Bridge |
142:4eea097334d6 | 1227 | /** |
Anna Bridge |
160:5571c4ff569f | 1228 | * Requests the choice most expedient for RAIL to calculate, |
Anna Bridge |
160:5571c4ff569f | 1229 | * which may depend on the radio and/or its configuration. |
Anna Bridge |
160:5571c4ff569f | 1230 | * The actual choice would always be reflected in the timePosition |
Anna Bridge |
160:5571c4ff569f | 1231 | * field of \ref RAIL_RxPacketDetails_t or \ref RAIL_TxPacketDetails_t |
Anna Bridge |
160:5571c4ff569f | 1232 | * returned, and would never be one of the _USED_TOTAL values. |
Anna Bridge |
142:4eea097334d6 | 1233 | */ |
Anna Bridge |
160:5571c4ff569f | 1234 | RAIL_PACKET_TIME_DEFAULT = 1, |
Anna Bridge |
142:4eea097334d6 | 1235 | /** |
Anna Bridge |
160:5571c4ff569f | 1236 | * Requests the timestamp corresponding to the first preamble bit |
Anna Bridge |
160:5571c4ff569f | 1237 | * sent or received. |
Anna Bridge |
160:5571c4ff569f | 1238 | * Indicates that timestamp did not require using totalPacketBytes. |
Anna Bridge |
142:4eea097334d6 | 1239 | */ |
Anna Bridge |
160:5571c4ff569f | 1240 | RAIL_PACKET_TIME_AT_PREAMBLE_START = 2, |
Anna Bridge |
142:4eea097334d6 | 1241 | /** |
Anna Bridge |
160:5571c4ff569f | 1242 | * Requests the timestamp corresponding to the first preamble bit |
Anna Bridge |
160:5571c4ff569f | 1243 | * sent or received. |
Anna Bridge |
160:5571c4ff569f | 1244 | * Indicates that timestamp did require using totalPacketBytes. |
Anna Bridge |
142:4eea097334d6 | 1245 | */ |
Anna Bridge |
160:5571c4ff569f | 1246 | RAIL_PACKET_TIME_AT_PREAMBLE_START_USED_TOTAL = 3, |
Anna Bridge |
160:5571c4ff569f | 1247 | /** |
Anna Bridge |
160:5571c4ff569f | 1248 | * Requests the timestamp corresponding to right after its last |
Anna Bridge |
160:5571c4ff569f | 1249 | * SYNC word bit has been sent or received. |
Anna Bridge |
160:5571c4ff569f | 1250 | * Indicates that timestamp did not require using totalPacketBytes. |
Anna Bridge |
160:5571c4ff569f | 1251 | */ |
Anna Bridge |
160:5571c4ff569f | 1252 | RAIL_PACKET_TIME_AT_SYNC_END = 4, |
Anna Bridge |
142:4eea097334d6 | 1253 | /** |
Anna Bridge |
160:5571c4ff569f | 1254 | * Requests the timestamp corresponding to right after its last |
Anna Bridge |
160:5571c4ff569f | 1255 | * SYNC word bit has been sent or received. |
Anna Bridge |
160:5571c4ff569f | 1256 | * Indicates that timestamp did require using totalPacketBytes. |
Anna Bridge |
160:5571c4ff569f | 1257 | */ |
Anna Bridge |
160:5571c4ff569f | 1258 | RAIL_PACKET_TIME_AT_SYNC_END_USED_TOTAL = 5, |
Anna Bridge |
160:5571c4ff569f | 1259 | /** |
Anna Bridge |
160:5571c4ff569f | 1260 | * Reqeusts the timestamp corresponding to right after its last |
Anna Bridge |
160:5571c4ff569f | 1261 | * bit has been sent or received. |
Anna Bridge |
160:5571c4ff569f | 1262 | * Indicates that timestamp did not require using totalPacketBytes. |
Anna Bridge |
142:4eea097334d6 | 1263 | */ |
Anna Bridge |
160:5571c4ff569f | 1264 | RAIL_PACKET_TIME_AT_PACKET_END = 6, |
Anna Bridge |
160:5571c4ff569f | 1265 | /** |
Anna Bridge |
160:5571c4ff569f | 1266 | * Reqeusts the timestamp corresponding to right after its last |
Anna Bridge |
160:5571c4ff569f | 1267 | * bit has been sent or received. |
Anna Bridge |
160:5571c4ff569f | 1268 | * Indicates that timestamp did require using totalPacketBytes. |
Anna Bridge |
160:5571c4ff569f | 1269 | */ |
Anna Bridge |
160:5571c4ff569f | 1270 | RAIL_PACKET_TIME_AT_PACKET_END_USED_TOTAL = 7, |
Anna Bridge |
160:5571c4ff569f | 1271 | RAIL_PACKET_TIME_COUNT /**< Count of the choices in this enum */ |
Anna Bridge |
160:5571c4ff569f | 1272 | }; |
Anna Bridge |
142:4eea097334d6 | 1273 | |
Anna Bridge |
142:4eea097334d6 | 1274 | /** |
Anna Bridge |
160:5571c4ff569f | 1275 | * @struct RAIL_PacketTimeStamp_t |
Anna Bridge |
160:5571c4ff569f | 1276 | * @brief Information needed to calculate and represent a packet timestamp. |
Anna Bridge |
142:4eea097334d6 | 1277 | */ |
Anna Bridge |
160:5571c4ff569f | 1278 | typedef struct RAIL_PacketTimeStamp { |
Anna Bridge |
160:5571c4ff569f | 1279 | /** |
Anna Bridge |
160:5571c4ff569f | 1280 | * Timestamp of the packet in the RAIL timebase. |
Anna Bridge |
160:5571c4ff569f | 1281 | */ |
AnnaBridge | 167:84c0a372a020 | 1282 | RAIL_Time_t packetTime; |
Anna Bridge |
160:5571c4ff569f | 1283 | /** |
Anna Bridge |
160:5571c4ff569f | 1284 | * A value specifying the total length in bytes of the packet for |
Anna Bridge |
160:5571c4ff569f | 1285 | * use when calculating the packetTime requested by the timePosition |
Anna Bridge |
160:5571c4ff569f | 1286 | * field. This should account for all bytes sent over the air after |
Anna Bridge |
160:5571c4ff569f | 1287 | * the Preamble and Sync word(s), including any CRC bytes. |
Anna Bridge |
160:5571c4ff569f | 1288 | */ |
Anna Bridge |
160:5571c4ff569f | 1289 | uint32_t totalPacketBytes; |
Anna Bridge |
160:5571c4ff569f | 1290 | /** |
Anna Bridge |
160:5571c4ff569f | 1291 | * A RAIL_PacketTimePosition_t value specifying the packet position |
Anna Bridge |
160:5571c4ff569f | 1292 | * to return in the packetTime field. |
Anna Bridge |
160:5571c4ff569f | 1293 | * If this is \ref RAIL_PACKET_TIME_DEFAULT then this field will be |
Anna Bridge |
160:5571c4ff569f | 1294 | * updated with the actual position corresponding to the packetTime |
Anna Bridge |
160:5571c4ff569f | 1295 | * value filled in by a call using this structure. |
Anna Bridge |
160:5571c4ff569f | 1296 | */ |
Anna Bridge |
160:5571c4ff569f | 1297 | RAIL_PacketTimePosition_t timePosition; |
Anna Bridge |
160:5571c4ff569f | 1298 | } RAIL_PacketTimeStamp_t; |
Anna Bridge |
142:4eea097334d6 | 1299 | |
Anna Bridge |
160:5571c4ff569f | 1300 | /** @} */ // end of group System_Timing |
Anna Bridge |
142:4eea097334d6 | 1301 | |
Anna Bridge |
160:5571c4ff569f | 1302 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 1303 | * Data Management Structures |
Anna Bridge |
160:5571c4ff569f | 1304 | *****************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 1305 | /** |
Anna Bridge |
142:4eea097334d6 | 1306 | * @addtogroup Data_Management |
Anna Bridge |
142:4eea097334d6 | 1307 | * @{ |
Anna Bridge |
142:4eea097334d6 | 1308 | */ |
Anna Bridge |
142:4eea097334d6 | 1309 | |
Anna Bridge |
142:4eea097334d6 | 1310 | /** |
Anna Bridge |
142:4eea097334d6 | 1311 | * @enum RAIL_TxDataSource_t |
Anna Bridge |
142:4eea097334d6 | 1312 | * @brief Transmit data sources supported by RAIL. |
Anna Bridge |
142:4eea097334d6 | 1313 | */ |
Anna Bridge |
160:5571c4ff569f | 1314 | RAIL_ENUM(RAIL_TxDataSource_t) { |
Anna Bridge |
160:5571c4ff569f | 1315 | TX_PACKET_DATA, /**< Uses the frame hardware to packetize data */ |
Anna Bridge |
160:5571c4ff569f | 1316 | }; |
Anna Bridge |
142:4eea097334d6 | 1317 | |
Anna Bridge |
142:4eea097334d6 | 1318 | /** |
Anna Bridge |
142:4eea097334d6 | 1319 | * @enum RAIL_RxDataSource_t |
Anna Bridge |
142:4eea097334d6 | 1320 | * @brief Receive data sources supported by RAIL. |
Anna Bridge |
142:4eea097334d6 | 1321 | */ |
Anna Bridge |
160:5571c4ff569f | 1322 | RAIL_ENUM(RAIL_RxDataSource_t) { |
Anna Bridge |
160:5571c4ff569f | 1323 | RX_PACKET_DATA, /**< Uses the frame hardware to packetize data */ |
Anna Bridge |
160:5571c4ff569f | 1324 | RX_DEMOD_DATA, /**< Gets 8-bit data output from the demodulator */ |
Anna Bridge |
160:5571c4ff569f | 1325 | RX_IQDATA_FILTLSB, /**< Gets lower 16 bits of I/Q data provided to the |
Anna Bridge |
160:5571c4ff569f | 1326 | demodulator */ |
Anna Bridge |
160:5571c4ff569f | 1327 | RX_IQDATA_FILTMSB /**< Gets highest 16 bits of I/Q data provided to the |
Anna Bridge |
160:5571c4ff569f | 1328 | demodulator */ |
Anna Bridge |
160:5571c4ff569f | 1329 | }; |
Anna Bridge |
142:4eea097334d6 | 1330 | |
Anna Bridge |
142:4eea097334d6 | 1331 | /** |
Anna Bridge |
142:4eea097334d6 | 1332 | * @enum RAIL_DataMethod_t |
Anna Bridge |
160:5571c4ff569f | 1333 | * @brief Methods for the application to provide and retrieve data from RAIL. |
Anna Bridge |
142:4eea097334d6 | 1334 | */ |
Anna Bridge |
160:5571c4ff569f | 1335 | RAIL_ENUM(RAIL_DataMethod_t) { |
Anna Bridge |
160:5571c4ff569f | 1336 | PACKET_MODE, /**< Packet-based data method */ |
Anna Bridge |
160:5571c4ff569f | 1337 | FIFO_MODE, /**< FIFO-based data method */ |
Anna Bridge |
160:5571c4ff569f | 1338 | }; |
Anna Bridge |
142:4eea097334d6 | 1339 | |
Anna Bridge |
142:4eea097334d6 | 1340 | /** |
Anna Bridge |
142:4eea097334d6 | 1341 | * @struct RAIL_DataConfig_t |
Anna Bridge |
142:4eea097334d6 | 1342 | * @brief RAIL data configuration structure |
Anna Bridge |
142:4eea097334d6 | 1343 | * |
Anna Bridge |
160:5571c4ff569f | 1344 | * Selects the transmit/receive data sources and the |
Anna Bridge |
160:5571c4ff569f | 1345 | * method the application uses to provide/retrieve data from RAIL. |
Anna Bridge |
142:4eea097334d6 | 1346 | */ |
Anna Bridge |
142:4eea097334d6 | 1347 | typedef struct { |
Anna Bridge |
142:4eea097334d6 | 1348 | RAIL_TxDataSource_t txSource; /**< Source of TX Data */ |
Anna Bridge |
142:4eea097334d6 | 1349 | RAIL_RxDataSource_t rxSource; /**< Source of RX Data */ |
Anna Bridge |
142:4eea097334d6 | 1350 | RAIL_DataMethod_t txMethod; /**< Method of providing transmit data */ |
Anna Bridge |
142:4eea097334d6 | 1351 | RAIL_DataMethod_t rxMethod; /**< Method of retrieving receive data */ |
Anna Bridge |
142:4eea097334d6 | 1352 | } RAIL_DataConfig_t; |
Anna Bridge |
142:4eea097334d6 | 1353 | |
Anna Bridge |
160:5571c4ff569f | 1354 | /** @} */ // end of group Data Management |
Anna Bridge |
142:4eea097334d6 | 1355 | |
Anna Bridge |
160:5571c4ff569f | 1356 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 1357 | * State Transitions |
Anna Bridge |
160:5571c4ff569f | 1358 | *****************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 1359 | /** |
Anna Bridge |
160:5571c4ff569f | 1360 | * @addtogroup State_Transitions |
Anna Bridge |
142:4eea097334d6 | 1361 | * @{ |
Anna Bridge |
142:4eea097334d6 | 1362 | */ |
Anna Bridge |
142:4eea097334d6 | 1363 | |
Anna Bridge |
142:4eea097334d6 | 1364 | /** |
Anna Bridge |
160:5571c4ff569f | 1365 | * @enum RAIL_RadioState_t |
Anna Bridge |
160:5571c4ff569f | 1366 | * @brief The state of the radio. |
Anna Bridge |
160:5571c4ff569f | 1367 | */ |
Anna Bridge |
160:5571c4ff569f | 1368 | RAIL_ENUM(RAIL_RadioState_t) { |
Anna Bridge |
160:5571c4ff569f | 1369 | RAIL_RF_STATE_INACTIVE = 0u, /**< Phy is inactive */ |
Anna Bridge |
160:5571c4ff569f | 1370 | RAIL_RF_STATE_ACTIVE = (1u << 0), /**< Radio is idle, receiving, or |
Anna Bridge |
160:5571c4ff569f | 1371 | transmitting a frame */ |
Anna Bridge |
160:5571c4ff569f | 1372 | RAIL_RF_STATE_RX = (1u << 1), /**< Radio is in receive */ |
Anna Bridge |
160:5571c4ff569f | 1373 | RAIL_RF_STATE_TX = (1u << 2), /**< Radio is in transmit */ |
Anna Bridge |
160:5571c4ff569f | 1374 | RAIL_RF_STATE_IDLE = (RAIL_RF_STATE_ACTIVE), /**< Radio is idle */ |
Anna Bridge |
160:5571c4ff569f | 1375 | /** Radio is actively receiving a frame */ |
Anna Bridge |
160:5571c4ff569f | 1376 | RAIL_RF_STATE_RX_ACTIVE = (RAIL_RF_STATE_RX | RAIL_RF_STATE_ACTIVE), |
Anna Bridge |
160:5571c4ff569f | 1377 | /** Radio is actively transmitting a frame */ |
Anna Bridge |
160:5571c4ff569f | 1378 | RAIL_RF_STATE_TX_ACTIVE = (RAIL_RF_STATE_TX | RAIL_RF_STATE_ACTIVE) |
Anna Bridge |
160:5571c4ff569f | 1379 | }; |
Anna Bridge |
160:5571c4ff569f | 1380 | |
Anna Bridge |
160:5571c4ff569f | 1381 | /** |
Anna Bridge |
160:5571c4ff569f | 1382 | * @struct RAIL_StateTransitions_t |
Anna Bridge |
160:5571c4ff569f | 1383 | * @brief Used to specify radio states to transition to on success or failure. |
Anna Bridge |
160:5571c4ff569f | 1384 | */ |
Anna Bridge |
160:5571c4ff569f | 1385 | typedef struct RAIL_StateTransitions { |
Anna Bridge |
160:5571c4ff569f | 1386 | /** |
Anna Bridge |
160:5571c4ff569f | 1387 | * Indicates the state the radio should return to after a successful action. |
Anna Bridge |
160:5571c4ff569f | 1388 | */ |
Anna Bridge |
160:5571c4ff569f | 1389 | RAIL_RadioState_t success; |
Anna Bridge |
160:5571c4ff569f | 1390 | /** |
Anna Bridge |
160:5571c4ff569f | 1391 | * Indicates the state the radio should return to after an error. |
Anna Bridge |
160:5571c4ff569f | 1392 | */ |
Anna Bridge |
160:5571c4ff569f | 1393 | RAIL_RadioState_t error; |
Anna Bridge |
160:5571c4ff569f | 1394 | } RAIL_StateTransitions_t; |
Anna Bridge |
160:5571c4ff569f | 1395 | |
Anna Bridge |
160:5571c4ff569f | 1396 | /** |
Anna Bridge |
142:4eea097334d6 | 1397 | * @struct RAIL_StateTiming_t |
Anna Bridge |
160:5571c4ff569f | 1398 | * @brief Timing configuration structure for the RAIL State Machine. |
Anna Bridge |
142:4eea097334d6 | 1399 | * |
AnnaBridge | 167:84c0a372a020 | 1400 | * Configures the timings of the radio state transitions for common situations. |
AnnaBridge | 167:84c0a372a020 | 1401 | * All of the listed timings are in us. Timing values cannot exceed 13 ms. A |
AnnaBridge | 167:84c0a372a020 | 1402 | * value of 0 for the transition time means that the specified transition |
AnnaBridge | 167:84c0a372a020 | 1403 | * should happen as fast as possible, even if the timing cannot be as |
AnnaBridge | 167:84c0a372a020 | 1404 | * consistent. Any other timing value will be limited, so that the time can be |
AnnaBridge | 167:84c0a372a020 | 1405 | * hit consistently. Transitions to IDLE always happen as fast as possible. |
Anna Bridge |
142:4eea097334d6 | 1406 | */ |
Anna Bridge |
142:4eea097334d6 | 1407 | typedef struct RAIL_StateTiming { |
Anna Bridge |
160:5571c4ff569f | 1408 | uint16_t idleToRx; /**< Transition time from IDLE to RX */ |
Anna Bridge |
160:5571c4ff569f | 1409 | uint16_t txToRx; /**< Transition time from TX to RX */ |
Anna Bridge |
160:5571c4ff569f | 1410 | uint16_t idleToTx; /**< Transition time from IDLE to RX */ |
Anna Bridge |
160:5571c4ff569f | 1411 | uint16_t rxToTx; /**< Transition time from RX to TX */ |
Anna Bridge |
160:5571c4ff569f | 1412 | uint16_t rxSearchTimeout; /**< Time radio looks for packets when coming from |
Anna Bridge |
160:5571c4ff569f | 1413 | idle, value of zero disables this feature */ |
Anna Bridge |
160:5571c4ff569f | 1414 | uint16_t txToRxSearchTimeout; /**< Time to look for packets when coming from |
Anna Bridge |
160:5571c4ff569f | 1415 | tx, value of zero disables this feature */ |
Anna Bridge |
142:4eea097334d6 | 1416 | } RAIL_StateTiming_t; |
Anna Bridge |
142:4eea097334d6 | 1417 | |
Anna Bridge |
142:4eea097334d6 | 1418 | /** |
Anna Bridge |
160:5571c4ff569f | 1419 | * @enum RAIL_IdleMode_t |
Anna Bridge |
160:5571c4ff569f | 1420 | * @brief Enumeration for the different types of supported idle modes. These |
Anna Bridge |
160:5571c4ff569f | 1421 | * vary how quickly and destructively they put the radio into idle. |
Anna Bridge |
142:4eea097334d6 | 1422 | */ |
Anna Bridge |
160:5571c4ff569f | 1423 | RAIL_ENUM(RAIL_IdleMode_t) { |
Anna Bridge |
160:5571c4ff569f | 1424 | /** |
Anna Bridge |
160:5571c4ff569f | 1425 | * Idles the radio by turning off receive and canceling any future scheduled |
Anna Bridge |
160:5571c4ff569f | 1426 | * receive or transmit operations. It does not abort a receive or |
Anna Bridge |
160:5571c4ff569f | 1427 | * transmit in progress. |
Anna Bridge |
160:5571c4ff569f | 1428 | */ |
Anna Bridge |
160:5571c4ff569f | 1429 | RAIL_IDLE, |
Anna Bridge |
160:5571c4ff569f | 1430 | /** |
Anna Bridge |
160:5571c4ff569f | 1431 | * Idles the radio by turning off receive and any scheduled events. It |
Anna Bridge |
160:5571c4ff569f | 1432 | * also aborts any receive, transmit, or scheduled events in progress. |
Anna Bridge |
160:5571c4ff569f | 1433 | */ |
Anna Bridge |
160:5571c4ff569f | 1434 | RAIL_IDLE_ABORT, |
Anna Bridge |
160:5571c4ff569f | 1435 | /** |
Anna Bridge |
160:5571c4ff569f | 1436 | * Forces the radio into a shutdown mode as quickly as possible. It |
Anna Bridge |
160:5571c4ff569f | 1437 | * aborts all current operations and cancels any pending scheduled |
Anna Bridge |
160:5571c4ff569f | 1438 | * operations. |
Anna Bridge |
160:5571c4ff569f | 1439 | * It may also corrupt receive or transmit buffers and end up clearing them. |
Anna Bridge |
160:5571c4ff569f | 1440 | */ |
Anna Bridge |
160:5571c4ff569f | 1441 | RAIL_IDLE_FORCE_SHUTDOWN, |
Anna Bridge |
160:5571c4ff569f | 1442 | /** |
Anna Bridge |
160:5571c4ff569f | 1443 | * Similar to the \ref RAIL_IDLE_FORCE_SHUTDOWN command, it quickly |
Anna Bridge |
160:5571c4ff569f | 1444 | * puts the radio into idle state. Additionally, it clears any |
Anna Bridge |
160:5571c4ff569f | 1445 | * pending receive or transmit callbacks and clear both the receive and |
Anna Bridge |
160:5571c4ff569f | 1446 | * transmit storage. |
Anna Bridge |
160:5571c4ff569f | 1447 | */ |
Anna Bridge |
160:5571c4ff569f | 1448 | RAIL_IDLE_FORCE_SHUTDOWN_CLEAR_FLAGS |
Anna Bridge |
160:5571c4ff569f | 1449 | }; |
Anna Bridge |
142:4eea097334d6 | 1450 | |
Anna Bridge |
160:5571c4ff569f | 1451 | /** @} */ // end of group State_Transitions |
Anna Bridge |
142:4eea097334d6 | 1452 | |
Anna Bridge |
160:5571c4ff569f | 1453 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 1454 | * TX/RX Configuration Structures |
Anna Bridge |
160:5571c4ff569f | 1455 | *****************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 1456 | /** |
Anna Bridge |
160:5571c4ff569f | 1457 | * @addtogroup Transmit |
Anna Bridge |
142:4eea097334d6 | 1458 | * @{ |
Anna Bridge |
142:4eea097334d6 | 1459 | */ |
Anna Bridge |
142:4eea097334d6 | 1460 | |
Anna Bridge |
142:4eea097334d6 | 1461 | /** |
Anna Bridge |
160:5571c4ff569f | 1462 | * @enum RAIL_TxOptions_t |
Anna Bridge |
160:5571c4ff569f | 1463 | * @brief Transmit options, in reality a bitmask. |
Anna Bridge |
142:4eea097334d6 | 1464 | */ |
Anna Bridge |
160:5571c4ff569f | 1465 | RAIL_ENUM_GENERIC(RAIL_TxOptions_t, uint32_t) { |
Anna Bridge |
160:5571c4ff569f | 1466 | /** Shift position of \ref RAIL_TX_OPTION_WAIT_FOR_ACK bit */ |
Anna Bridge |
160:5571c4ff569f | 1467 | RAIL_TX_OPTION_WAIT_FOR_ACK_SHIFT = 0, |
Anna Bridge |
160:5571c4ff569f | 1468 | /** Shift position of \ref RAIL_TX_OPTION_REMOVE_CRC bit */ |
Anna Bridge |
160:5571c4ff569f | 1469 | RAIL_TX_OPTION_REMOVE_CRC_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 1470 | /** Shift position of \ref RAIL_TX_OPTION_SYNC_WORD_ID bit */ |
Anna Bridge |
160:5571c4ff569f | 1471 | RAIL_TX_OPTION_SYNC_WORD_ID_SHIFT, |
AnnaBridge | 167:84c0a372a020 | 1472 | /** Shift position of \ref RAIL_TX_OPTION_ANTENNA0 bit */ |
AnnaBridge | 167:84c0a372a020 | 1473 | RAIL_TX_OPTION_ANTENNA0_SHIFT, |
AnnaBridge | 167:84c0a372a020 | 1474 | /** Shift position of \ref RAIL_TX_OPTION_ANTENNA1 bit */ |
AnnaBridge | 167:84c0a372a020 | 1475 | RAIL_TX_OPTION_ANTENNA1_SHIFT, |
AnnaBridge | 167:84c0a372a020 | 1476 | }; |
Anna Bridge |
160:5571c4ff569f | 1477 | |
AnnaBridge | 167:84c0a372a020 | 1478 | /** Value representing no options enabled. */ |
AnnaBridge | 167:84c0a372a020 | 1479 | #define RAIL_TX_OPTIONS_NONE 0UL |
AnnaBridge | 167:84c0a372a020 | 1480 | /** Default is all options disabled. */ |
AnnaBridge | 167:84c0a372a020 | 1481 | #define RAIL_TX_OPTIONS_DEFAULT RAIL_TX_OPTIONS_NONE |
AnnaBridge | 167:84c0a372a020 | 1482 | /** |
AnnaBridge | 167:84c0a372a020 | 1483 | * Option to configure whether or not the TX'ing node will listen for an ACK. |
AnnaBridge | 167:84c0a372a020 | 1484 | * If this is false, the isAck flag in RAIL_RxPacketDetails_t of a received |
AnnaBridge | 167:84c0a372a020 | 1485 | * packet will always be false. |
AnnaBridge | 167:84c0a372a020 | 1486 | */ |
AnnaBridge | 167:84c0a372a020 | 1487 | #define RAIL_TX_OPTION_WAIT_FOR_ACK (1UL << RAIL_TX_OPTION_WAIT_FOR_ACK_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1488 | /** |
AnnaBridge | 167:84c0a372a020 | 1489 | * Option to remove crc bytes from tx packets. If you want to be able to |
AnnaBridge | 167:84c0a372a020 | 1490 | * receive packets with this option set as true, you'll need to set |
AnnaBridge | 167:84c0a372a020 | 1491 | * the IGNORE_CRC_ERRORS option on the receive side. |
AnnaBridge | 167:84c0a372a020 | 1492 | */ |
AnnaBridge | 167:84c0a372a020 | 1493 | #define RAIL_TX_OPTION_REMOVE_CRC (1UL << RAIL_TX_OPTION_REMOVE_CRC_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1494 | /** |
AnnaBridge | 167:84c0a372a020 | 1495 | * Option to select which sync word to send (0 or 1). Note that this does |
AnnaBridge | 167:84c0a372a020 | 1496 | * not set the actual sync words, it just picks which of the two will be |
AnnaBridge | 167:84c0a372a020 | 1497 | * sent with the packet. |
AnnaBridge | 167:84c0a372a020 | 1498 | */ |
AnnaBridge | 167:84c0a372a020 | 1499 | #define RAIL_TX_OPTION_SYNC_WORD_ID (1UL << RAIL_TX_OPTION_SYNC_WORD_ID_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1500 | /** |
AnnaBridge | 167:84c0a372a020 | 1501 | * Option to select antenna 0 for transmission. If not antenna selection |
AnnaBridge | 167:84c0a372a020 | 1502 | * option is set or if both antenna options are set, then the TX will |
AnnaBridge | 167:84c0a372a020 | 1503 | * take place in either antenna depending on the last RX or TX |
AnnaBridge | 167:84c0a372a020 | 1504 | * configuration. This option is only valid on platforms that support |
AnnaBridge | 167:84c0a372a020 | 1505 | * antenna selection. |
AnnaBridge | 167:84c0a372a020 | 1506 | */ |
AnnaBridge | 167:84c0a372a020 | 1507 | #define RAIL_TX_OPTION_ANTENNA0 (1UL << RAIL_TX_OPTION_ANTENNA0_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1508 | /** |
AnnaBridge | 167:84c0a372a020 | 1509 | * Option to select antenna 1 for transmission. If not antenna selection |
AnnaBridge | 167:84c0a372a020 | 1510 | * option is set or if both antenna options are set, then the TX will |
AnnaBridge | 167:84c0a372a020 | 1511 | * take place in either antenna depending on the last RX or TX |
AnnaBridge | 167:84c0a372a020 | 1512 | * configuration. This option is only valid on platforms that support |
AnnaBridge | 167:84c0a372a020 | 1513 | * antenna selection. |
AnnaBridge | 167:84c0a372a020 | 1514 | */ |
AnnaBridge | 167:84c0a372a020 | 1515 | #define RAIL_TX_OPTION_ANTENNA1 (1UL << RAIL_TX_OPTION_ANTENNA1_SHIFT) |
Anna Bridge |
160:5571c4ff569f | 1516 | |
AnnaBridge | 167:84c0a372a020 | 1517 | /** Value representing all possible options */ |
AnnaBridge | 167:84c0a372a020 | 1518 | #define RAIL_TX_OPTIONS_ALL 0xFFFFFFFFUL |
Anna Bridge |
142:4eea097334d6 | 1519 | |
Anna Bridge |
142:4eea097334d6 | 1520 | /** |
Anna Bridge |
160:5571c4ff569f | 1521 | * @struct RAIL_TxPacketDetails_t |
Anna Bridge |
160:5571c4ff569f | 1522 | * @brief Detailed information requested and about the packet that was just |
Anna Bridge |
160:5571c4ff569f | 1523 | * transmitted. |
Anna Bridge |
142:4eea097334d6 | 1524 | */ |
Anna Bridge |
160:5571c4ff569f | 1525 | typedef struct RAIL_TxPacketDetails { |
Anna Bridge |
160:5571c4ff569f | 1526 | /** |
Anna Bridge |
160:5571c4ff569f | 1527 | * Timestamp of the transmitted packet in the RAIL timebase, |
Anna Bridge |
160:5571c4ff569f | 1528 | * filled in by RAIL_GetTxPacketDetails(). |
Anna Bridge |
160:5571c4ff569f | 1529 | */ |
Anna Bridge |
160:5571c4ff569f | 1530 | RAIL_PacketTimeStamp_t timeSent; |
Anna Bridge |
160:5571c4ff569f | 1531 | /** |
Anna Bridge |
160:5571c4ff569f | 1532 | * Indicates whether the transmitted packet was an ACK. An 'ACK' is defined |
Anna Bridge |
160:5571c4ff569f | 1533 | * as a packet sent in response to a received ACK-requesting frame when |
Anna Bridge |
160:5571c4ff569f | 1534 | * auto ACK is enabled. Set to false for not an ACK, and true for an ACK. |
Anna Bridge |
160:5571c4ff569f | 1535 | * It should always be set false if auto ACK is not enabled. |
Anna Bridge |
160:5571c4ff569f | 1536 | */ |
Anna Bridge |
160:5571c4ff569f | 1537 | bool isAck; |
Anna Bridge |
160:5571c4ff569f | 1538 | } RAIL_TxPacketDetails_t; |
Anna Bridge |
142:4eea097334d6 | 1539 | |
Anna Bridge |
142:4eea097334d6 | 1540 | /** |
Anna Bridge |
160:5571c4ff569f | 1541 | * @enum RAIL_ScheduledTxDuringRx_t |
Anna Bridge |
160:5571c4ff569f | 1542 | * @brief Enumerates the possible outcomes of what will occur if a |
Anna Bridge |
160:5571c4ff569f | 1543 | * scheduled TX ends up firing during RX. Because RX and TX can't |
Anna Bridge |
160:5571c4ff569f | 1544 | * happen at the same time, it is up to the user how the TX should be |
Anna Bridge |
160:5571c4ff569f | 1545 | * handled. This enumeration is passed into RAIL_StartScheduledTx() |
Anna Bridge |
160:5571c4ff569f | 1546 | * as part of \ref RAIL_ScheduleTxConfig_t. |
Anna Bridge |
142:4eea097334d6 | 1547 | */ |
Anna Bridge |
160:5571c4ff569f | 1548 | RAIL_ENUM(RAIL_ScheduledTxDuringRx_t) { |
Anna Bridge |
160:5571c4ff569f | 1549 | /** |
Anna Bridge |
160:5571c4ff569f | 1550 | * The scheduled TX will be postponed until RX completes and then sent. |
Anna Bridge |
160:5571c4ff569f | 1551 | */ |
Anna Bridge |
160:5571c4ff569f | 1552 | RAIL_SCHEDULED_TX_DURING_RX_POSTPONE_TX, |
Anna Bridge |
160:5571c4ff569f | 1553 | /** |
Anna Bridge |
160:5571c4ff569f | 1554 | * The scheduled TX will be aborted and a TX aborted event will fire. |
Anna Bridge |
160:5571c4ff569f | 1555 | */ |
Anna Bridge |
160:5571c4ff569f | 1556 | RAIL_SCHEDULED_TX_DURING_RX_ABORT_TX |
Anna Bridge |
160:5571c4ff569f | 1557 | }; |
Anna Bridge |
142:4eea097334d6 | 1558 | |
Anna Bridge |
142:4eea097334d6 | 1559 | /** |
Anna Bridge |
142:4eea097334d6 | 1560 | * @struct RAIL_ScheduleTxConfig_t |
Anna Bridge |
160:5571c4ff569f | 1561 | * @brief Configuration structure for a scheduled transmit. |
Anna Bridge |
142:4eea097334d6 | 1562 | */ |
Anna Bridge |
142:4eea097334d6 | 1563 | typedef struct RAIL_ScheduleTxConfig { |
Anna Bridge |
142:4eea097334d6 | 1564 | /** |
Anna Bridge |
160:5571c4ff569f | 1565 | * The time when to transmit this packet. The exact interpretation of |
Anna Bridge |
160:5571c4ff569f | 1566 | * this value depends on the mode specified below. |
Anna Bridge |
142:4eea097334d6 | 1567 | */ |
AnnaBridge | 167:84c0a372a020 | 1568 | RAIL_Time_t when; |
Anna Bridge |
142:4eea097334d6 | 1569 | /** |
Anna Bridge |
160:5571c4ff569f | 1570 | * The type of delay. See the \ref RAIL_TimeMode_t documentation for |
Anna Bridge |
160:5571c4ff569f | 1571 | * more information. Be sure to use \ref RAIL_TIME_ABSOLUTE delays for |
Anna Bridge |
160:5571c4ff569f | 1572 | * time-critical protocols. |
Anna Bridge |
142:4eea097334d6 | 1573 | */ |
Anna Bridge |
142:4eea097334d6 | 1574 | RAIL_TimeMode_t mode; |
Anna Bridge |
160:5571c4ff569f | 1575 | /** |
Anna Bridge |
160:5571c4ff569f | 1576 | * Which action to take with a scheduled TX if it occurs during RX. |
Anna Bridge |
160:5571c4ff569f | 1577 | * See \ref RAIL_ScheduledTxDuringRx_t structure for more information on |
Anna Bridge |
160:5571c4ff569f | 1578 | * potential options. |
Anna Bridge |
160:5571c4ff569f | 1579 | */ |
Anna Bridge |
160:5571c4ff569f | 1580 | RAIL_ScheduledTxDuringRx_t txDuringRx; |
Anna Bridge |
142:4eea097334d6 | 1581 | } RAIL_ScheduleTxConfig_t; |
Anna Bridge |
142:4eea097334d6 | 1582 | |
Anna Bridge |
142:4eea097334d6 | 1583 | /** |
Anna Bridge |
142:4eea097334d6 | 1584 | * @def RAIL_MAX_LBT_TRIES |
Anna Bridge |
142:4eea097334d6 | 1585 | * @brief The maximum number of LBT/CSMA retries supported |
Anna Bridge |
142:4eea097334d6 | 1586 | */ |
Anna Bridge |
142:4eea097334d6 | 1587 | #define RAIL_MAX_LBT_TRIES 15 |
Anna Bridge |
142:4eea097334d6 | 1588 | |
Anna Bridge |
142:4eea097334d6 | 1589 | /** |
Anna Bridge |
142:4eea097334d6 | 1590 | * @struct RAIL_CsmaConfig_t |
Anna Bridge |
160:5571c4ff569f | 1591 | * @brief Configuration structure for the CSMA transmit algorithm. |
Anna Bridge |
142:4eea097334d6 | 1592 | */ |
Anna Bridge |
142:4eea097334d6 | 1593 | typedef struct RAIL_CsmaConfig { |
Anna Bridge |
142:4eea097334d6 | 1594 | /** |
Anna Bridge |
142:4eea097334d6 | 1595 | * Minimum (starting) exponent for CSMA backoff (2^exp - 1) |
Anna Bridge |
142:4eea097334d6 | 1596 | */ |
Anna Bridge |
142:4eea097334d6 | 1597 | uint8_t csmaMinBoExp; |
Anna Bridge |
142:4eea097334d6 | 1598 | /** |
Anna Bridge |
142:4eea097334d6 | 1599 | * Maximum exponent for CSMA backoff |
Anna Bridge |
142:4eea097334d6 | 1600 | */ |
Anna Bridge |
142:4eea097334d6 | 1601 | uint8_t csmaMaxBoExp; |
Anna Bridge |
142:4eea097334d6 | 1602 | /** |
Anna Bridge |
160:5571c4ff569f | 1603 | * A number of CCA failures before report CCA_FAIL with a maximum value |
Anna Bridge |
160:5571c4ff569f | 1604 | * defined in @ref RAIL_MAX_LBT_TRIES). A value 0 performs no CCA assessments |
Anna Bridge |
160:5571c4ff569f | 1605 | * and always transmits immediately. |
Anna Bridge |
142:4eea097334d6 | 1606 | */ |
Anna Bridge |
142:4eea097334d6 | 1607 | uint8_t csmaTries; |
Anna Bridge |
142:4eea097334d6 | 1608 | /** |
Anna Bridge |
142:4eea097334d6 | 1609 | * The CCA RSSI threshold, in dBm, above which the channel is |
Anna Bridge |
142:4eea097334d6 | 1610 | * considered 'busy'. |
Anna Bridge |
142:4eea097334d6 | 1611 | */ |
Anna Bridge |
142:4eea097334d6 | 1612 | int8_t ccaThreshold; |
Anna Bridge |
142:4eea097334d6 | 1613 | /** |
Anna Bridge |
160:5571c4ff569f | 1614 | * The backoff unit period in RAIL's microsecond time base. It is |
Anna Bridge |
160:5571c4ff569f | 1615 | * multiplied by the random backoff exponential controlled by @ref |
Anna Bridge |
142:4eea097334d6 | 1616 | * csmaMinBoExp and @ref csmaMaxBoExp to determine the overall backoff |
Anna Bridge |
142:4eea097334d6 | 1617 | * period. For random backoffs, any value above 511 microseconds will |
Anna Bridge |
160:5571c4ff569f | 1618 | * be truncated. For fixed backoffs it can go up to 65535 microseconds. |
Anna Bridge |
142:4eea097334d6 | 1619 | */ |
Anna Bridge |
142:4eea097334d6 | 1620 | uint16_t ccaBackoff; |
Anna Bridge |
142:4eea097334d6 | 1621 | /** |
Anna Bridge |
142:4eea097334d6 | 1622 | * CCA check duration in microseconds. |
Anna Bridge |
142:4eea097334d6 | 1623 | */ |
Anna Bridge |
142:4eea097334d6 | 1624 | uint16_t ccaDuration; |
Anna Bridge |
142:4eea097334d6 | 1625 | /** |
Anna Bridge |
160:5571c4ff569f | 1626 | * An overall timeout, in RAIL's microsecond time base, for the operation. |
Anna Bridge |
160:5571c4ff569f | 1627 | * If the transmission doesn't start before this timeout expires, the |
Anna Bridge |
160:5571c4ff569f | 1628 | * transmission will fail. A value 0 means no timeout is imposed. |
Anna Bridge |
142:4eea097334d6 | 1629 | */ |
AnnaBridge | 167:84c0a372a020 | 1630 | RAIL_Time_t csmaTimeout; |
Anna Bridge |
142:4eea097334d6 | 1631 | } RAIL_CsmaConfig_t; |
Anna Bridge |
142:4eea097334d6 | 1632 | |
Anna Bridge |
142:4eea097334d6 | 1633 | /** |
Anna Bridge |
142:4eea097334d6 | 1634 | * @def RAIL_CSMA_CONFIG_802_15_4_2003_2p4_GHz_OQPSK_CSMA |
Anna Bridge |
160:5571c4ff569f | 1635 | * @brief RAIL_CsmaConfig_t initializer configuring CSMA per IEEE 802.15.4-2003 |
Anna Bridge |
160:5571c4ff569f | 1636 | * on 2.4 GHz OSPSK, commonly used by ZigBee. |
Anna Bridge |
142:4eea097334d6 | 1637 | */ |
Anna Bridge |
160:5571c4ff569f | 1638 | #define RAIL_CSMA_CONFIG_802_15_4_2003_2p4_GHz_OQPSK_CSMA { \ |
Anna Bridge |
160:5571c4ff569f | 1639 | /* CSMA per 802.15.4-2003 on 2.4 GHz OSPSK, commonly used by ZigBee */ \ |
Anna Bridge |
160:5571c4ff569f | 1640 | /* csmaMinBoExp */ 3, /* 2^3-1 for 0..7 backoffs on 1st try */ \ |
Anna Bridge |
160:5571c4ff569f | 1641 | /* csmaMaxBoExp */ 5, /* 2^5-1 for 0..31 backoffs on 3rd+ tries */ \ |
Anna Bridge |
160:5571c4ff569f | 1642 | /* csmaTries */ 5, /* 5 tries overall (4 re-tries) */ \ |
Anna Bridge |
160:5571c4ff569f | 1643 | /* ccaThreshold */ -75, /* 10 dB above sensitivity */ \ |
Anna Bridge |
160:5571c4ff569f | 1644 | /* ccaBackoff */ 320, /* 20 symbols at 16 us/symbol */ \ |
Anna Bridge |
160:5571c4ff569f | 1645 | /* ccaDuration */ 128, /* 8 symbols at 16 us/symbol */ \ |
Anna Bridge |
160:5571c4ff569f | 1646 | /* csmaTimeout */ 0, /* no timeout */ \ |
Anna Bridge |
142:4eea097334d6 | 1647 | } |
Anna Bridge |
142:4eea097334d6 | 1648 | |
Anna Bridge |
142:4eea097334d6 | 1649 | /** |
Anna Bridge |
142:4eea097334d6 | 1650 | * @def RAIL_CSMA_CONFIG_SINGLE_CCA |
Anna Bridge |
160:5571c4ff569f | 1651 | * @brief RAIL_CsmaConfig_t initializer configuring a single CCA prior to TX. |
Anna Bridge |
160:5571c4ff569f | 1652 | * It can be used to as a basis for implementing other channel access schemes |
Anna Bridge |
160:5571c4ff569f | 1653 | * with custom backoff delays. User can override ccaBackoff with a fixed |
Anna Bridge |
160:5571c4ff569f | 1654 | * delay on each use. |
Anna Bridge |
142:4eea097334d6 | 1655 | */ |
Anna Bridge |
160:5571c4ff569f | 1656 | #define RAIL_CSMA_CONFIG_SINGLE_CCA { \ |
Anna Bridge |
160:5571c4ff569f | 1657 | /* Perform a single CCA after 'fixed' delay */ \ |
Anna Bridge |
160:5571c4ff569f | 1658 | /* csmaMinBoExp */ 0, /* Used for fixed backoff */ \ |
Anna Bridge |
160:5571c4ff569f | 1659 | /* csmaMaxBoExp */ 0, /* Used for fixed backoff */ \ |
Anna Bridge |
160:5571c4ff569f | 1660 | /* csmaTries */ 1, /* Single try */ \ |
Anna Bridge |
160:5571c4ff569f | 1661 | /* ccaThreshold */ -75, /* Override if not desired choice */ \ |
Anna Bridge |
160:5571c4ff569f | 1662 | /* ccaBackoff */ 0, /* No backoff (override with fixed value) */ \ |
Anna Bridge |
160:5571c4ff569f | 1663 | /* ccaDuration */ 128, /* Override if not desired length */ \ |
Anna Bridge |
160:5571c4ff569f | 1664 | /* csmaTimeout */ 0, /* no timeout */ \ |
Anna Bridge |
142:4eea097334d6 | 1665 | } |
Anna Bridge |
142:4eea097334d6 | 1666 | |
Anna Bridge |
142:4eea097334d6 | 1667 | /** |
Anna Bridge |
142:4eea097334d6 | 1668 | * @struct RAIL_LbtConfig_t |
Anna Bridge |
160:5571c4ff569f | 1669 | * @brief Configuration structure for the LBT transmit algorithm. |
Anna Bridge |
142:4eea097334d6 | 1670 | */ |
Anna Bridge |
142:4eea097334d6 | 1671 | typedef struct RAIL_LbtConfig { |
Anna Bridge |
142:4eea097334d6 | 1672 | /** |
Anna Bridge |
142:4eea097334d6 | 1673 | * Maximum backoff random multiplier |
Anna Bridge |
142:4eea097334d6 | 1674 | */ |
Anna Bridge |
142:4eea097334d6 | 1675 | uint8_t lbtMinBoRand; |
Anna Bridge |
142:4eea097334d6 | 1676 | /** |
Anna Bridge |
142:4eea097334d6 | 1677 | * Maximum backoff random multiplier |
Anna Bridge |
142:4eea097334d6 | 1678 | */ |
Anna Bridge |
142:4eea097334d6 | 1679 | uint8_t lbtMaxBoRand; |
Anna Bridge |
142:4eea097334d6 | 1680 | /** |
Anna Bridge |
160:5571c4ff569f | 1681 | * The number of CCA failures before reporting CCA_FAIL. The maximum |
Anna Bridge |
160:5571c4ff569f | 1682 | * supported value for this field is defined in \ref RAIL_MAX_LBT_TRIES. |
Anna Bridge |
160:5571c4ff569f | 1683 | * A value 0 performs no CCA assessments and always transmits immediately. |
Anna Bridge |
142:4eea097334d6 | 1684 | */ |
Anna Bridge |
142:4eea097334d6 | 1685 | uint8_t lbtTries; |
Anna Bridge |
142:4eea097334d6 | 1686 | /** |
Anna Bridge |
142:4eea097334d6 | 1687 | * The CCA RSSI threshold, in dBm, above which the channel is |
Anna Bridge |
142:4eea097334d6 | 1688 | * considered 'busy'. |
Anna Bridge |
142:4eea097334d6 | 1689 | */ |
Anna Bridge |
142:4eea097334d6 | 1690 | int8_t lbtThreshold; |
Anna Bridge |
142:4eea097334d6 | 1691 | /** |
Anna Bridge |
160:5571c4ff569f | 1692 | * The backoff unit period, in RAIL's microsecond time base. It is |
Anna Bridge |
160:5571c4ff569f | 1693 | * multiplied by the random backoff multiplier controlled by @ref |
Anna Bridge |
142:4eea097334d6 | 1694 | * lbtMinBoRand and @ref lbtMaxBoRand to determine the overall backoff |
Anna Bridge |
142:4eea097334d6 | 1695 | * period. For random backoffs, any value above 511 microseconds will |
Anna Bridge |
160:5571c4ff569f | 1696 | * be truncated. For fixed backoffs, it can go up to 65535 microseconds. |
Anna Bridge |
142:4eea097334d6 | 1697 | */ |
Anna Bridge |
142:4eea097334d6 | 1698 | uint16_t lbtBackoff; |
Anna Bridge |
142:4eea097334d6 | 1699 | /** |
Anna Bridge |
142:4eea097334d6 | 1700 | * LBT check duration in microseconds. |
Anna Bridge |
142:4eea097334d6 | 1701 | */ |
Anna Bridge |
142:4eea097334d6 | 1702 | uint16_t lbtDuration; |
Anna Bridge |
142:4eea097334d6 | 1703 | /** |
Anna Bridge |
142:4eea097334d6 | 1704 | * An overall timeout, in RAIL's microsecond time base, for the |
Anna Bridge |
160:5571c4ff569f | 1705 | * operation. If transmission doesn't start before this timeout expires, the |
Anna Bridge |
142:4eea097334d6 | 1706 | * transmission will fail. This is important for limiting LBT due to LBT's |
Anna Bridge |
142:4eea097334d6 | 1707 | * unbounded requirement that if the channel is busy, the next try must wait |
Anna Bridge |
160:5571c4ff569f | 1708 | * for the channel to clear. A value 0 means no timeout is imposed. |
Anna Bridge |
142:4eea097334d6 | 1709 | */ |
AnnaBridge | 167:84c0a372a020 | 1710 | RAIL_Time_t lbtTimeout; |
Anna Bridge |
142:4eea097334d6 | 1711 | } RAIL_LbtConfig_t; |
Anna Bridge |
142:4eea097334d6 | 1712 | |
Anna Bridge |
142:4eea097334d6 | 1713 | /** |
Anna Bridge |
142:4eea097334d6 | 1714 | * @def RAIL_LBT_CONFIG_ETSI_EN_300_220_1_V2_4_1 |
Anna Bridge |
142:4eea097334d6 | 1715 | * @brief RAIL_LbtConfig_t initializer configuring LBT per ETSI 300 220-1 |
Anna Bridge |
160:5571c4ff569f | 1716 | * V2.4.1 for a typical Sub-GHz band. To be practical, users should override |
Anna Bridge |
160:5571c4ff569f | 1717 | * lbtTries and/or lbtTimeout so channel access failure will be reported in a |
Anna Bridge |
160:5571c4ff569f | 1718 | * reasonable time frame rather than the unbounded time frame ETSI defined. |
Anna Bridge |
142:4eea097334d6 | 1719 | */ |
Anna Bridge |
160:5571c4ff569f | 1720 | #define RAIL_LBT_CONFIG_ETSI_EN_300_220_1_V2_4_1 { \ |
Anna Bridge |
160:5571c4ff569f | 1721 | /* LBT per ETSI 300 220-1 V2.4.1 */ \ |
Anna Bridge |
160:5571c4ff569f | 1722 | /* LBT time = random backoff of 0-5ms in .5ms increments plus 5ms fixed */ \ |
Anna Bridge |
160:5571c4ff569f | 1723 | /* lbtMinBoRand */ 0, /* */ \ |
Anna Bridge |
160:5571c4ff569f | 1724 | /* lbtMaxBoRand */ 10, /* */ \ |
Anna Bridge |
160:5571c4ff569f | 1725 | /* lbtTries */ RAIL_MAX_LBT_TRIES, /* the maximum supported */ \ |
Anna Bridge |
160:5571c4ff569f | 1726 | /* lbtThreshold */ -87, /* */ \ |
Anna Bridge |
160:5571c4ff569f | 1727 | /* lbtBackoff */ 500, /* 0.5 ms */ \ |
Anna Bridge |
160:5571c4ff569f | 1728 | /* lbtDuration */ 5000, /* 5 ms */ \ |
Anna Bridge |
160:5571c4ff569f | 1729 | /* lbtTimeout */ 0, /* no timeout (recommend user override) */ \ |
Anna Bridge |
142:4eea097334d6 | 1730 | } |
Anna Bridge |
142:4eea097334d6 | 1731 | |
Anna Bridge |
160:5571c4ff569f | 1732 | /** @} */ // end of group Transmit |
Anna Bridge |
142:4eea097334d6 | 1733 | |
Anna Bridge |
142:4eea097334d6 | 1734 | /** |
Anna Bridge |
142:4eea097334d6 | 1735 | * @addtogroup Receive |
Anna Bridge |
142:4eea097334d6 | 1736 | * @{ |
Anna Bridge |
142:4eea097334d6 | 1737 | */ |
Anna Bridge |
142:4eea097334d6 | 1738 | |
Anna Bridge |
160:5571c4ff569f | 1739 | /** |
Anna Bridge |
160:5571c4ff569f | 1740 | * @enum RAIL_RxOptions_t |
Anna Bridge |
160:5571c4ff569f | 1741 | * @brief Receive options, in reality a bitmask. |
Anna Bridge |
142:4eea097334d6 | 1742 | */ |
Anna Bridge |
160:5571c4ff569f | 1743 | RAIL_ENUM_GENERIC(RAIL_RxOptions_t, uint32_t) { |
Anna Bridge |
160:5571c4ff569f | 1744 | /** Shift position of \ref RAIL_RX_OPTION_STORE_CRC bit */ |
Anna Bridge |
160:5571c4ff569f | 1745 | RAIL_RX_OPTION_STORE_CRC_SHIFT = 0, |
Anna Bridge |
160:5571c4ff569f | 1746 | /** Shift position of \ref RAIL_RX_OPTION_IGNORE_CRC_ERRORS bit */ |
Anna Bridge |
160:5571c4ff569f | 1747 | RAIL_RX_OPTION_IGNORE_CRC_ERRORS_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 1748 | /** Shift position of \ref RAIL_RX_OPTION_ENABLE_DUALSYNC bit */ |
Anna Bridge |
160:5571c4ff569f | 1749 | RAIL_RX_OPTION_ENABLE_DUALSYNC_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 1750 | /** Shift position of \ref RAIL_RX_OPTION_TRACK_ABORTED_FRAMES bit */ |
Anna Bridge |
160:5571c4ff569f | 1751 | RAIL_RX_OPTION_TRACK_ABORTED_FRAMES_SHIFT, |
Anna Bridge |
160:5571c4ff569f | 1752 | /** Shift position of \ref RAIL_RX_OPTION_REMOVE_APPENDED_INFO bit */ |
Anna Bridge |
160:5571c4ff569f | 1753 | RAIL_RX_OPTION_REMOVE_APPENDED_INFO_SHIFT, |
AnnaBridge | 167:84c0a372a020 | 1754 | /** Shift position of \ref RAIL_RX_OPTION_ANTENNA0 bit */ |
AnnaBridge | 167:84c0a372a020 | 1755 | RAIL_RX_OPTION_ANTENNA0_SHIFT, |
AnnaBridge | 167:84c0a372a020 | 1756 | /** Shift position of \ref RAIL_RX_OPTION_ANTENNA1 bit */ |
AnnaBridge | 167:84c0a372a020 | 1757 | RAIL_RX_OPTION_ANTENNA1_SHIFT, |
AnnaBridge | 167:84c0a372a020 | 1758 | }; |
Anna Bridge |
142:4eea097334d6 | 1759 | |
AnnaBridge | 167:84c0a372a020 | 1760 | /** Value representing no options enabled. */ |
AnnaBridge | 167:84c0a372a020 | 1761 | #define RAIL_RX_OPTIONS_NONE 0 |
AnnaBridge | 167:84c0a372a020 | 1762 | /** Default is all options disabled. */ |
AnnaBridge | 167:84c0a372a020 | 1763 | #define RAIL_RX_OPTIONS_DEFAULT RAIL_RX_OPTIONS_NONE |
AnnaBridge | 167:84c0a372a020 | 1764 | |
AnnaBridge | 167:84c0a372a020 | 1765 | /** |
AnnaBridge | 167:84c0a372a020 | 1766 | * Option to configure whether the CRC portion of the packet is included in |
AnnaBridge | 167:84c0a372a020 | 1767 | * the packet payload exposed to the app on packet reception. |
AnnaBridge | 167:84c0a372a020 | 1768 | * Defaults to false. |
AnnaBridge | 167:84c0a372a020 | 1769 | */ |
AnnaBridge | 167:84c0a372a020 | 1770 | #define RAIL_RX_OPTION_STORE_CRC (1UL << RAIL_RX_OPTION_STORE_CRC_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1771 | /** |
AnnaBridge | 167:84c0a372a020 | 1772 | * Option to configure whether CRC errors will be ignored |
AnnaBridge | 167:84c0a372a020 | 1773 | * if this is set, RX will still be successful, even if |
AnnaBridge | 167:84c0a372a020 | 1774 | * the CRC does not pass the check. Defaults to false. |
AnnaBridge | 167:84c0a372a020 | 1775 | */ |
AnnaBridge | 167:84c0a372a020 | 1776 | #define RAIL_RX_OPTION_IGNORE_CRC_ERRORS (1UL << RAIL_RX_OPTION_IGNORE_CRC_ERRORS_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1777 | |
AnnaBridge | 167:84c0a372a020 | 1778 | /** |
AnnaBridge | 167:84c0a372a020 | 1779 | * Option to control which sync words will be accepted. Setting it to |
AnnaBridge | 167:84c0a372a020 | 1780 | * 0 (default) will cause the receiver to listen for SYNC0 only, 1 causes |
AnnaBridge | 167:84c0a372a020 | 1781 | * the receiver to listen for either SYNC0 or SYNC1. RX appended info will |
AnnaBridge | 167:84c0a372a020 | 1782 | * contain which sync word was detected. Note, this only affects which |
AnnaBridge | 167:84c0a372a020 | 1783 | * sync word(s) are received, but not what each of the sync words actually are. |
AnnaBridge | 167:84c0a372a020 | 1784 | * This feature may not be available on some combinations of chips, phys, and |
AnnaBridge | 167:84c0a372a020 | 1785 | * protocols. Consult the data sheet or support team for more details. |
AnnaBridge | 167:84c0a372a020 | 1786 | */ |
AnnaBridge | 167:84c0a372a020 | 1787 | #define RAIL_RX_OPTION_ENABLE_DUALSYNC (1UL << RAIL_RX_OPTION_ENABLE_DUALSYNC_SHIFT) |
Anna Bridge |
142:4eea097334d6 | 1788 | |
AnnaBridge | 167:84c0a372a020 | 1789 | /** |
AnnaBridge | 167:84c0a372a020 | 1790 | * Option to configure whether frames which are aborted during reception |
AnnaBridge | 167:84c0a372a020 | 1791 | * should continue to be tracked. Setting this option allows viewing Packet |
AnnaBridge | 167:84c0a372a020 | 1792 | * Trace information for frames which get discarded. Defaults to false. |
AnnaBridge | 167:84c0a372a020 | 1793 | */ |
AnnaBridge | 167:84c0a372a020 | 1794 | #define RAIL_RX_OPTION_TRACK_ABORTED_FRAMES (1UL << RAIL_RX_OPTION_TRACK_ABORTED_FRAMES_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1795 | |
AnnaBridge | 167:84c0a372a020 | 1796 | /** |
AnnaBridge | 167:84c0a372a020 | 1797 | * Option to configure whether appended info is included after received |
AnnaBridge | 167:84c0a372a020 | 1798 | * frames. Default is false. |
AnnaBridge | 167:84c0a372a020 | 1799 | */ |
AnnaBridge | 167:84c0a372a020 | 1800 | #define RAIL_RX_OPTION_REMOVE_APPENDED_INFO (1UL << RAIL_RX_OPTION_REMOVE_APPENDED_INFO_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1801 | |
AnnaBridge | 167:84c0a372a020 | 1802 | /** |
AnnaBridge | 167:84c0a372a020 | 1803 | * Option to select the use of antenna 0 when doing RX. If no antenna option |
AnnaBridge | 167:84c0a372a020 | 1804 | * is selected, the RX may take place on either antenna depending on the last |
AnnaBridge | 167:84c0a372a020 | 1805 | * RX or TX configuration. Defaults to false. |
AnnaBridge | 167:84c0a372a020 | 1806 | * This option is only valid on platforms that support antenna selection. |
AnnaBridge | 167:84c0a372a020 | 1807 | */ |
AnnaBridge | 167:84c0a372a020 | 1808 | #define RAIL_RX_OPTION_ANTENNA0 (1UL << RAIL_RX_OPTION_ANTENNA0_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1809 | |
AnnaBridge | 167:84c0a372a020 | 1810 | /** |
AnnaBridge | 167:84c0a372a020 | 1811 | * Option to select the use of antenna 1 when doing RX. If no antenna option |
AnnaBridge | 167:84c0a372a020 | 1812 | * is selected, the RX may take place on either antenna depending on the last |
AnnaBridge | 167:84c0a372a020 | 1813 | * RX or TX configuration. Defaults to false. |
AnnaBridge | 167:84c0a372a020 | 1814 | * This option is only valid on platforms that support antenna selection. |
AnnaBridge | 167:84c0a372a020 | 1815 | */ |
AnnaBridge | 167:84c0a372a020 | 1816 | #define RAIL_RX_OPTION_ANTENNA1 (1UL << RAIL_RX_OPTION_ANTENNA1_SHIFT) |
AnnaBridge | 167:84c0a372a020 | 1817 | |
AnnaBridge | 167:84c0a372a020 | 1818 | /** |
AnnaBridge | 167:84c0a372a020 | 1819 | * Option to automatically choose an antenna. If both antenna 0 and |
AnnaBridge | 167:84c0a372a020 | 1820 | * antenna 1 options are set the chip will switch between antennas and |
AnnaBridge | 167:84c0a372a020 | 1821 | * will automatically choose one. |
AnnaBridge | 167:84c0a372a020 | 1822 | */ |
AnnaBridge | 167:84c0a372a020 | 1823 | #define RAIL_RX_OPTION_ANTENNA_AUTO (RAIL_RX_OPTION_ANTENNA0 | RAIL_RX_OPTION_ANTENNA1) |
AnnaBridge | 167:84c0a372a020 | 1824 | |
AnnaBridge | 167:84c0a372a020 | 1825 | /** Value representing all possible options */ |
AnnaBridge | 167:84c0a372a020 | 1826 | #define RAIL_RX_OPTIONS_ALL 0xFFFFFFFFUL |
Anna Bridge |
160:5571c4ff569f | 1827 | |
Anna Bridge |
160:5571c4ff569f | 1828 | /** The value returned by RAIL for an invalid RSSI, in dBm */ |
Anna Bridge |
160:5571c4ff569f | 1829 | #define RAIL_RSSI_INVALID_DBM (-128) |
Anna Bridge |
160:5571c4ff569f | 1830 | /** The value returned by RAIL for an invalid RSSI: in quarter dBm */ |
Anna Bridge |
160:5571c4ff569f | 1831 | #define RAIL_RSSI_INVALID ((int16_t)(RAIL_RSSI_INVALID_DBM * 4)) |
Anna Bridge |
142:4eea097334d6 | 1832 | |
Anna Bridge |
142:4eea097334d6 | 1833 | /** |
Anna Bridge |
142:4eea097334d6 | 1834 | * @struct RAIL_ScheduleRxConfig_t |
Anna Bridge |
160:5571c4ff569f | 1835 | * @brief Configures the scheduled RX algorithm. |
Anna Bridge |
142:4eea097334d6 | 1836 | * |
Anna Bridge |
160:5571c4ff569f | 1837 | * Defines the start and end times of the receive window created |
Anna Bridge |
160:5571c4ff569f | 1838 | * for a scheduled receive. If either start or end times are disabled, they |
Anna Bridge |
142:4eea097334d6 | 1839 | * will be ignored. |
Anna Bridge |
142:4eea097334d6 | 1840 | */ |
Anna Bridge |
142:4eea097334d6 | 1841 | typedef struct RAIL_ScheduleRxConfig { |
Anna Bridge |
142:4eea097334d6 | 1842 | /** |
Anna Bridge |
142:4eea097334d6 | 1843 | * The time to start receive. See startMode for more information about they |
Anna Bridge |
142:4eea097334d6 | 1844 | * types of start times that you can specify. |
Anna Bridge |
142:4eea097334d6 | 1845 | */ |
AnnaBridge | 167:84c0a372a020 | 1846 | RAIL_Time_t start; |
Anna Bridge |
142:4eea097334d6 | 1847 | /** |
Anna Bridge |
142:4eea097334d6 | 1848 | * How to interpret the time value specified in the start parameter. See the |
Anna Bridge |
142:4eea097334d6 | 1849 | * \ref RAIL_TimeMode_t documentation for more information. Use |
Anna Bridge |
142:4eea097334d6 | 1850 | * \ref RAIL_TIME_ABSOLUTE for absolute times, \ref RAIL_TIME_DELAY for times |
Anna Bridge |
160:5571c4ff569f | 1851 | * relative to the current time, and \ref RAIL_TIME_DISABLED to ignore the |
Anna Bridge |
160:5571c4ff569f | 1852 | * start time. |
Anna Bridge |
142:4eea097334d6 | 1853 | */ |
Anna Bridge |
142:4eea097334d6 | 1854 | RAIL_TimeMode_t startMode; |
Anna Bridge |
142:4eea097334d6 | 1855 | /** |
Anna Bridge |
142:4eea097334d6 | 1856 | * The time to end receive. See endMode for more information about the types |
Anna Bridge |
142:4eea097334d6 | 1857 | * of end times you can specify. |
Anna Bridge |
142:4eea097334d6 | 1858 | */ |
AnnaBridge | 167:84c0a372a020 | 1859 | RAIL_Time_t end; |
Anna Bridge |
142:4eea097334d6 | 1860 | /** |
Anna Bridge |
142:4eea097334d6 | 1861 | * How to interpret the time value specified in the end parameter. See the |
Anna Bridge |
160:5571c4ff569f | 1862 | * \ref RAIL_TimeMode_t documentation for more information. Note that, in |
Anna Bridge |
160:5571c4ff569f | 1863 | * this API, if you specify a \ref RAIL_TIME_DELAY, it is relative to the |
Anna Bridge |
160:5571c4ff569f | 1864 | * start time if given and relative to now if none is specified. Also, using |
Anna Bridge |
160:5571c4ff569f | 1865 | * \ref RAIL_TIME_DISABLED means that this window will not end unless you |
Anna Bridge |
142:4eea097334d6 | 1866 | * explicitly call RAIL_RfIdle() or add an end event through a future update |
Anna Bridge |
142:4eea097334d6 | 1867 | * to this configuration. |
Anna Bridge |
142:4eea097334d6 | 1868 | */ |
Anna Bridge |
142:4eea097334d6 | 1869 | RAIL_TimeMode_t endMode; |
Anna Bridge |
142:4eea097334d6 | 1870 | /** |
Anna Bridge |
160:5571c4ff569f | 1871 | * While in scheduled RX, you can still control the radio state via |
Anna Bridge |
160:5571c4ff569f | 1872 | * state transitions. This option configures whether a transition |
Anna Bridge |
160:5571c4ff569f | 1873 | * to RX goes back to scheduled RX or to the normal RX state. Once in the |
Anna Bridge |
160:5571c4ff569f | 1874 | * normal RX state, you will effectively end the scheduled RX window and can |
Anna Bridge |
160:5571c4ff569f | 1875 | * continue to receive indefinitely depending on the state transitions. Set |
Anna Bridge |
160:5571c4ff569f | 1876 | * to 1 to transition to normal RX and 0 to stay in the scheduled RX. |
Anna Bridge |
142:4eea097334d6 | 1877 | */ |
Anna Bridge |
142:4eea097334d6 | 1878 | uint8_t rxTransitionEndSchedule; |
Anna Bridge |
142:4eea097334d6 | 1879 | /** |
Anna Bridge |
160:5571c4ff569f | 1880 | * If set to 0, this will allow any packets, which are received when the |
Anna Bridge |
160:5571c4ff569f | 1881 | * window end event occurs, to complete. If set to anything else, an abort |
Anna Bridge |
160:5571c4ff569f | 1882 | * of any packets received when the window end occurs is forced. |
Anna Bridge |
142:4eea097334d6 | 1883 | */ |
Anna Bridge |
142:4eea097334d6 | 1884 | uint8_t hardWindowEnd; |
Anna Bridge |
142:4eea097334d6 | 1885 | } RAIL_ScheduleRxConfig_t; |
Anna Bridge |
142:4eea097334d6 | 1886 | |
Anna Bridge |
142:4eea097334d6 | 1887 | /** |
Anna Bridge |
160:5571c4ff569f | 1888 | * @enum RAIL_RxPacketStatus_t |
Anna Bridge |
160:5571c4ff569f | 1889 | * @brief The packet status code associated with a packet received or |
Anna Bridge |
160:5571c4ff569f | 1890 | * currently being received. |
Anna Bridge |
160:5571c4ff569f | 1891 | * |
Anna Bridge |
160:5571c4ff569f | 1892 | * @note RECEIVING implies some packet data may be available, but |
Anna Bridge |
160:5571c4ff569f | 1893 | * is untrustworthy (not CRC-verified) and might disappear if the packet |
Anna Bridge |
160:5571c4ff569f | 1894 | * is rolled back on error. |
Anna Bridge |
160:5571c4ff569f | 1895 | * @note In RX FIFO mode, ABORT statuses imply some packet data may be |
Anna Bridge |
160:5571c4ff569f | 1896 | * available, but it's incomplete and not trustworthy. |
Anna Bridge |
160:5571c4ff569f | 1897 | * @note READY statuses indicate all packet data is available, including |
Anna Bridge |
160:5571c4ff569f | 1898 | * packet details (if enabled), but only \ref RAIL_RX_PACKET_READY_SUCCESS |
Anna Bridge |
160:5571c4ff569f | 1899 | * indicates the packet data is trustworthy. |
Anna Bridge |
160:5571c4ff569f | 1900 | */ |
Anna Bridge |
160:5571c4ff569f | 1901 | RAIL_ENUM(RAIL_RxPacketStatus_t) { |
Anna Bridge |
160:5571c4ff569f | 1902 | RAIL_RX_PACKET_NONE = 0, /**< Radio is idle or searching for a packet. */ |
Anna Bridge |
160:5571c4ff569f | 1903 | RAIL_RX_PACKET_ABORT_FORMAT, /**< Format/Length error. */ |
Anna Bridge |
160:5571c4ff569f | 1904 | RAIL_RX_PACKET_ABORT_FILTERED, /**< Filtering error (address). */ |
Anna Bridge |
160:5571c4ff569f | 1905 | RAIL_RX_PACKET_ABORT_ABORTED, /**< Aborted error. */ |
Anna Bridge |
160:5571c4ff569f | 1906 | RAIL_RX_PACKET_ABORT_OVERFLOW, /**< Receive overflowed buffer. */ |
Anna Bridge |
160:5571c4ff569f | 1907 | RAIL_RX_PACKET_ABORT_CRC_ERROR, /**< CRC error aborted. */ |
Anna Bridge |
160:5571c4ff569f | 1908 | RAIL_RX_PACKET_READY_CRC_ERROR, /**< CRC error accepted (details available). */ |
Anna Bridge |
160:5571c4ff569f | 1909 | RAIL_RX_PACKET_READY_SUCCESS, /**< Success (details available). */ |
Anna Bridge |
160:5571c4ff569f | 1910 | RAIL_RX_PACKET_RECEIVING, /**< Receiving in progress. */ |
Anna Bridge |
160:5571c4ff569f | 1911 | }; |
Anna Bridge |
160:5571c4ff569f | 1912 | |
Anna Bridge |
160:5571c4ff569f | 1913 | /** |
Anna Bridge |
160:5571c4ff569f | 1914 | * @typedef RAIL_RxPacketHandle_t |
Anna Bridge |
160:5571c4ff569f | 1915 | * @brief A handle used to reference a packet during reception processing. |
Anna Bridge |
160:5571c4ff569f | 1916 | * There are several sentinel handle values that pertain to certain |
Anna Bridge |
160:5571c4ff569f | 1917 | * circumstances: \ref RAIL_RX_PACKET_HANDLE_INVALID, \ref |
Anna Bridge |
160:5571c4ff569f | 1918 | * RAIL_RX_PACKET_HANDLE_OLDEST and \ref RAIL_RX_PACKET_HANDLE_NEWEST. |
Anna Bridge |
160:5571c4ff569f | 1919 | */ |
Anna Bridge |
160:5571c4ff569f | 1920 | typedef const void *RAIL_RxPacketHandle_t; |
Anna Bridge |
160:5571c4ff569f | 1921 | |
Anna Bridge |
160:5571c4ff569f | 1922 | /** Invalid RX packet handle value */ |
Anna Bridge |
160:5571c4ff569f | 1923 | #define RAIL_RX_PACKET_HANDLE_INVALID (NULL) |
Anna Bridge |
160:5571c4ff569f | 1924 | /** Special RX packet handle to refer to the oldest unreleased packet */ |
Anna Bridge |
160:5571c4ff569f | 1925 | #define RAIL_RX_PACKET_HANDLE_OLDEST ((RAIL_RxPacketHandle_t) 1) |
Anna Bridge |
160:5571c4ff569f | 1926 | /** Special RX packet handle to refer to the newest unreleased packet |
Anna Bridge |
160:5571c4ff569f | 1927 | * when in callback context. For a callback involving a completed |
Anna Bridge |
160:5571c4ff569f | 1928 | * receive event, this refers to the packet just completed. For |
Anna Bridge |
160:5571c4ff569f | 1929 | * other callback events, this refers to the next packet to be |
Anna Bridge |
160:5571c4ff569f | 1930 | * completed, which might be in-progress or might not have even |
Anna Bridge |
160:5571c4ff569f | 1931 | * started yet. |
Anna Bridge |
160:5571c4ff569f | 1932 | */ |
Anna Bridge |
160:5571c4ff569f | 1933 | #define RAIL_RX_PACKET_HANDLE_NEWEST ((RAIL_RxPacketHandle_t) 2) |
Anna Bridge |
160:5571c4ff569f | 1934 | |
Anna Bridge |
160:5571c4ff569f | 1935 | /** |
Anna Bridge |
160:5571c4ff569f | 1936 | * @struct RAIL_RxPacketInfo_t |
Anna Bridge |
160:5571c4ff569f | 1937 | * @brief Basic information about a packet being received or already |
Anna Bridge |
160:5571c4ff569f | 1938 | * completed and awaiting processing, including memory pointers to |
Anna Bridge |
160:5571c4ff569f | 1939 | * its data in the circular RX FIFO buffer. This packet information |
Anna Bridge |
160:5571c4ff569f | 1940 | * refers to remaining packet data that has not already been consumed |
Anna Bridge |
160:5571c4ff569f | 1941 | * by RAIL_ReadRxFifo(). |
Anna Bridge |
160:5571c4ff569f | 1942 | * @note Because the RX FIFO buffer is circular, a packet might start |
Anna Bridge |
160:5571c4ff569f | 1943 | * near the end of the buffer and wrap around to the beginning of |
Anna Bridge |
160:5571c4ff569f | 1944 | * the buffer to finish, hence the distinction between the first |
AnnaBridge | 167:84c0a372a020 | 1945 | * and last portions. Packets that fit without wrapping only have |
AnnaBridge | 167:84c0a372a020 | 1946 | * a first portion (firstPortionBytes == packetBytes and lastPortionData |
AnnaBridge | 167:84c0a372a020 | 1947 | * will be NULL). |
Anna Bridge |
160:5571c4ff569f | 1948 | */ |
Anna Bridge |
160:5571c4ff569f | 1949 | typedef struct RAIL_RxPacketInfo { |
Anna Bridge |
160:5571c4ff569f | 1950 | RAIL_RxPacketStatus_t packetStatus; /**< Packet status of this packet. */ |
Anna Bridge |
160:5571c4ff569f | 1951 | uint16_t packetBytes; /**< Number of packet data bytes |
Anna Bridge |
160:5571c4ff569f | 1952 | available to read in this packet. */ |
Anna Bridge |
160:5571c4ff569f | 1953 | uint16_t firstPortionBytes; /**< Number of bytes in first portion. */ |
Anna Bridge |
160:5571c4ff569f | 1954 | uint8_t *firstPortionData; /**< Pointer to first portion of packet |
Anna Bridge |
160:5571c4ff569f | 1955 | data containing firstPortionBytes |
Anna Bridge |
160:5571c4ff569f | 1956 | number of bytes. */ |
Anna Bridge |
160:5571c4ff569f | 1957 | uint8_t *lastPortionData; /**< Pointer to last portion of |
AnnaBridge | 167:84c0a372a020 | 1958 | packet, if any; NULL otherwise. The |
AnnaBridge | 167:84c0a372a020 | 1959 | number of bytes in this portion is |
Anna Bridge |
160:5571c4ff569f | 1960 | packetBytes - firstPortionBytes. */ |
Anna Bridge |
160:5571c4ff569f | 1961 | } RAIL_RxPacketInfo_t; |
Anna Bridge |
160:5571c4ff569f | 1962 | |
Anna Bridge |
160:5571c4ff569f | 1963 | /** |
Anna Bridge |
160:5571c4ff569f | 1964 | * @struct RAIL_RxPacketDetails_t |
Anna Bridge |
160:5571c4ff569f | 1965 | * @brief Successfully received packet details obtained via |
Anna Bridge |
160:5571c4ff569f | 1966 | * RAIL_GetRxPacketDetails(). |
Anna Bridge |
160:5571c4ff569f | 1967 | * |
Anna Bridge |
142:4eea097334d6 | 1968 | */ |
Anna Bridge |
160:5571c4ff569f | 1969 | typedef struct RAIL_RxPacketDetails { |
Anna Bridge |
160:5571c4ff569f | 1970 | /** |
Anna Bridge |
160:5571c4ff569f | 1971 | * Timestamp of the received packet in the RAIL timebase. The |
Anna Bridge |
160:5571c4ff569f | 1972 | * time is the end of the sync word of the received packet. |
Anna Bridge |
160:5571c4ff569f | 1973 | */ |
Anna Bridge |
160:5571c4ff569f | 1974 | RAIL_PacketTimeStamp_t timeReceived; |
Anna Bridge |
160:5571c4ff569f | 1975 | /** |
Anna Bridge |
160:5571c4ff569f | 1976 | * Indicates whether the CRC passed or failed for the receive packet. It |
Anna Bridge |
160:5571c4ff569f | 1977 | * is set to 0 for fail and 1 for pass. |
Anna Bridge |
160:5571c4ff569f | 1978 | */ |
Anna Bridge |
160:5571c4ff569f | 1979 | bool crcPassed; |
Anna Bridge |
160:5571c4ff569f | 1980 | /** |
Anna Bridge |
160:5571c4ff569f | 1981 | * Indicates whether the received packet is an ACK. An 'ACK' is defined as a |
Anna Bridge |
160:5571c4ff569f | 1982 | * packet received during the RX ACK window when auto ACK is enabled. |
Anna Bridge |
160:5571c4ff569f | 1983 | * Set to 0 if not an ACK, and 1 for an ACK. It is always 0 if |
Anna Bridge |
160:5571c4ff569f | 1984 | * auto ACK is not enabled. |
Anna Bridge |
160:5571c4ff569f | 1985 | */ |
Anna Bridge |
160:5571c4ff569f | 1986 | bool isAck; |
Anna Bridge |
160:5571c4ff569f | 1987 | /** |
Anna Bridge |
160:5571c4ff569f | 1988 | * RSSI of the received packet in integer dBm. It is latched when the sync |
Anna Bridge |
160:5571c4ff569f | 1989 | * word is detected for the packet. |
Anna Bridge |
160:5571c4ff569f | 1990 | */ |
Anna Bridge |
160:5571c4ff569f | 1991 | int8_t rssi; |
Anna Bridge |
160:5571c4ff569f | 1992 | /** |
Anna Bridge |
160:5571c4ff569f | 1993 | * Link quality indicator of the received packet. It is calculated as the |
Anna Bridge |
160:5571c4ff569f | 1994 | * average correlation for the first 8 symbols in a frame. |
Anna Bridge |
160:5571c4ff569f | 1995 | */ |
Anna Bridge |
160:5571c4ff569f | 1996 | uint8_t lqi; |
Anna Bridge |
160:5571c4ff569f | 1997 | /** |
Anna Bridge |
160:5571c4ff569f | 1998 | * For radios and PHY configurations that support multiple sync words, this |
Anna Bridge |
160:5571c4ff569f | 1999 | * number is the ID of the sync word that was used for this packet. |
Anna Bridge |
160:5571c4ff569f | 2000 | */ |
Anna Bridge |
160:5571c4ff569f | 2001 | uint8_t syncWordId; |
Anna Bridge |
160:5571c4ff569f | 2002 | /** |
Anna Bridge |
160:5571c4ff569f | 2003 | * In configurations where the radio has the option of receiving a given |
Anna Bridge |
160:5571c4ff569f | 2004 | * packet in multiple ways, indicates which of the sub-PHY options |
Anna Bridge |
160:5571c4ff569f | 2005 | * was used to receive the packet. Most radio configurations do not have |
Anna Bridge |
160:5571c4ff569f | 2006 | * this ability, and the subPhy is set to 0 in those cases. |
Anna Bridge |
160:5571c4ff569f | 2007 | */ |
Anna Bridge |
160:5571c4ff569f | 2008 | uint8_t subPhyId; |
AnnaBridge | 167:84c0a372a020 | 2009 | /** |
AnnaBridge | 167:84c0a372a020 | 2010 | * For configurations where the device has multiple antennas, indicates |
AnnaBridge | 167:84c0a372a020 | 2011 | * which antenna received the packets. For hardware configurations |
AnnaBridge | 167:84c0a372a020 | 2012 | * with only one antenna, this will be set to the default of 0. |
AnnaBridge | 167:84c0a372a020 | 2013 | */ |
AnnaBridge | 167:84c0a372a020 | 2014 | uint8_t antennaId; |
Anna Bridge |
160:5571c4ff569f | 2015 | } RAIL_RxPacketDetails_t; |
Anna Bridge |
160:5571c4ff569f | 2016 | |
Anna Bridge |
160:5571c4ff569f | 2017 | /** |
Anna Bridge |
160:5571c4ff569f | 2018 | * @addtogroup Address_Filtering |
Anna Bridge |
160:5571c4ff569f | 2019 | * @{ |
Anna Bridge |
160:5571c4ff569f | 2020 | */ |
Anna Bridge |
160:5571c4ff569f | 2021 | |
Anna Bridge |
160:5571c4ff569f | 2022 | /// Default address filtering match table for configurations that use only one |
Anna Bridge |
160:5571c4ff569f | 2023 | /// address field. The truth table for address matching is shown below. |
Anna Bridge |
160:5571c4ff569f | 2024 | /// |
Anna Bridge |
160:5571c4ff569f | 2025 | /// | | 0000 | 0001 | 0010 | 0100 | 1000 | |
Anna Bridge |
160:5571c4ff569f | 2026 | /// |----------|------|------|------|------|------| |
Anna Bridge |
160:5571c4ff569f | 2027 | /// | __0000__ | 0 | 1 | 1 | 1 | 1 | |
Anna Bridge |
160:5571c4ff569f | 2028 | /// | __0001__ | 1 | 1 | 1 | 1 | 1 | |
Anna Bridge |
160:5571c4ff569f | 2029 | /// | __0010__ | 1 | 1 | 1 | 1 | 1 | |
Anna Bridge |
160:5571c4ff569f | 2030 | /// | __0100__ | 1 | 1 | 1 | 1 | 1 | |
Anna Bridge |
160:5571c4ff569f | 2031 | /// | __1000__ | 1 | 1 | 1 | 1 | 1 | |
Anna Bridge |
160:5571c4ff569f | 2032 | /// |
Anna Bridge |
160:5571c4ff569f | 2033 | #define ADDRCONFIG_MATCH_TABLE_SINGLE_FIELD (0x1fffffe) |
Anna Bridge |
160:5571c4ff569f | 2034 | /// Default address filtering match table for configurations that use two |
Anna Bridge |
160:5571c4ff569f | 2035 | /// address fields and want to match the same index in each. The truth |
Anna Bridge |
160:5571c4ff569f | 2036 | /// table for address matching is shown below. |
Anna Bridge |
160:5571c4ff569f | 2037 | /// |
Anna Bridge |
160:5571c4ff569f | 2038 | /// | | 0000 | 0001 | 0010 | 0100 | 1000 | |
Anna Bridge |
160:5571c4ff569f | 2039 | /// |----------|------|------|------|------|------| |
Anna Bridge |
160:5571c4ff569f | 2040 | /// | __0000__ | 0 | 0 | 0 | 0 | 0 | |
Anna Bridge |
160:5571c4ff569f | 2041 | /// | __0001__ | 0 | 1 | 0 | 0 | 0 | |
Anna Bridge |
160:5571c4ff569f | 2042 | /// | __0010__ | 0 | 0 | 1 | 0 | 0 | |
Anna Bridge |
160:5571c4ff569f | 2043 | /// | __0100__ | 0 | 0 | 0 | 1 | 0 | |
Anna Bridge |
160:5571c4ff569f | 2044 | /// | __1000__ | 0 | 0 | 0 | 0 | 1 | |
Anna Bridge |
160:5571c4ff569f | 2045 | #define ADDRCONFIG_MATCH_TABLE_DOUBLE_FIELD (0x1041040) |
Anna Bridge |
160:5571c4ff569f | 2046 | |
Anna Bridge |
160:5571c4ff569f | 2047 | /// The maximum number of address fields that can be used by the address |
Anna Bridge |
160:5571c4ff569f | 2048 | /// filtering logic. |
Anna Bridge |
160:5571c4ff569f | 2049 | #define ADDRCONFIG_MAX_ADDRESS_FIELDS (2) |
Anna Bridge |
160:5571c4ff569f | 2050 | |
Anna Bridge |
160:5571c4ff569f | 2051 | /** |
Anna Bridge |
160:5571c4ff569f | 2052 | * @struct RAIL_AddrConfig_t |
Anna Bridge |
160:5571c4ff569f | 2053 | * @brief A structure to configure the address filtering functionality in RAIL. |
Anna Bridge |
160:5571c4ff569f | 2054 | */ |
Anna Bridge |
160:5571c4ff569f | 2055 | typedef struct RAIL_AddrConfig { |
Anna Bridge |
160:5571c4ff569f | 2056 | /** |
Anna Bridge |
160:5571c4ff569f | 2057 | * A list of the start offsets for each field. |
Anna Bridge |
160:5571c4ff569f | 2058 | * |
Anna Bridge |
160:5571c4ff569f | 2059 | * These offsets are specified relative to the previous field's end. In the |
Anna Bridge |
160:5571c4ff569f | 2060 | * case of the first field it's relative to either the beginning of the packet |
Anna Bridge |
160:5571c4ff569f | 2061 | * or the end of the frame type byte if frame type decoding is enabled. If a |
Anna Bridge |
160:5571c4ff569f | 2062 | * field is unused, it's offset should be set to 0. |
Anna Bridge |
160:5571c4ff569f | 2063 | */ |
Anna Bridge |
160:5571c4ff569f | 2064 | uint8_t offsets[ADDRCONFIG_MAX_ADDRESS_FIELDS]; |
Anna Bridge |
160:5571c4ff569f | 2065 | |
Anna Bridge |
160:5571c4ff569f | 2066 | /** |
Anna Bridge |
160:5571c4ff569f | 2067 | * A list of the address field sizes. |
Anna Bridge |
160:5571c4ff569f | 2068 | * |
Anna Bridge |
160:5571c4ff569f | 2069 | * These sizes are specified in bytes from 0 to 8. If you choose a |
Anna Bridge |
160:5571c4ff569f | 2070 | * size of 0, this field is effectively disabled. |
Anna Bridge |
160:5571c4ff569f | 2071 | */ |
Anna Bridge |
160:5571c4ff569f | 2072 | uint8_t sizes[ADDRCONFIG_MAX_ADDRESS_FIELDS]; |
Anna Bridge |
160:5571c4ff569f | 2073 | |
Anna Bridge |
160:5571c4ff569f | 2074 | /** |
Anna Bridge |
160:5571c4ff569f | 2075 | * The truth table to determine how the two fields combine to create a match. |
Anna Bridge |
160:5571c4ff569f | 2076 | * |
Anna Bridge |
160:5571c4ff569f | 2077 | * For detailed information about how this truth table is formed see the |
Anna Bridge |
160:5571c4ff569f | 2078 | * detailed description of @ref Address_Filtering. |
Anna Bridge |
160:5571c4ff569f | 2079 | * |
Anna Bridge |
160:5571c4ff569f | 2080 | * For simple predefined configurations you can use the following defines. |
Anna Bridge |
160:5571c4ff569f | 2081 | * - ADDRCONFIG_MATCH_TABLE_SINGLE_FIELD |
Anna Bridge |
160:5571c4ff569f | 2082 | * - For filtering that only uses a single address field |
Anna Bridge |
160:5571c4ff569f | 2083 | * - ADDRCONFIG_MATCH_TABLE_DOUBLE_FIELD for two field filtering where you |
Anna Bridge |
160:5571c4ff569f | 2084 | * - For filtering that uses two address fields in a configurations where |
Anna Bridge |
160:5571c4ff569f | 2085 | * you want the following logic `((Field0, Index0) && (Field1, Index0)) |
Anna Bridge |
160:5571c4ff569f | 2086 | * || ((Field0, Index1) && (Field1, Index1)) || ...` |
Anna Bridge |
160:5571c4ff569f | 2087 | */ |
Anna Bridge |
160:5571c4ff569f | 2088 | uint32_t matchTable; |
Anna Bridge |
160:5571c4ff569f | 2089 | } RAIL_AddrConfig_t; |
Anna Bridge |
160:5571c4ff569f | 2090 | |
Anna Bridge |
160:5571c4ff569f | 2091 | /** @} */ // end of group Address_Filtering |
Anna Bridge |
160:5571c4ff569f | 2092 | |
Anna Bridge |
160:5571c4ff569f | 2093 | /** @} */ // end of group Receive |
Anna Bridge |
142:4eea097334d6 | 2094 | |
Anna Bridge |
142:4eea097334d6 | 2095 | /** |
Anna Bridge |
142:4eea097334d6 | 2096 | * @addtogroup Auto_Ack |
Anna Bridge |
142:4eea097334d6 | 2097 | * @{ |
Anna Bridge |
142:4eea097334d6 | 2098 | */ |
Anna Bridge |
142:4eea097334d6 | 2099 | /** |
Anna Bridge |
142:4eea097334d6 | 2100 | * @struct RAIL_AutoAckConfig_t |
Anna Bridge |
160:5571c4ff569f | 2101 | * @brief Enables/disables the auto ACK algorithm, based on "enable". The |
Anna Bridge |
160:5571c4ff569f | 2102 | * structure provides a default state (the "success" of tx/rxTransitions |
Anna Bridge |
160:5571c4ff569f | 2103 | * when acking is being enabled) for the radio to return to after an ACK |
Anna Bridge |
160:5571c4ff569f | 2104 | * operation occurs (transmitting or attempting to receive an ACK), or normal |
Anna Bridge |
160:5571c4ff569f | 2105 | * state transitions to return to in the case that acking is being |
Anna Bridge |
160:5571c4ff569f | 2106 | * disabled. Regardless whether the ACK operation was successful, the |
Anna Bridge |
160:5571c4ff569f | 2107 | * radio returns to the specified success state. |
Anna Bridge |
160:5571c4ff569f | 2108 | * |
Anna Bridge |
160:5571c4ff569f | 2109 | * ackTimeout specifies how long to stay in receive and wait for an ACK |
Anna Bridge |
160:5571c4ff569f | 2110 | * before issuing a RAIL_EVENT_RX_ACK_TIMEOUT event and return to the |
Anna Bridge |
142:4eea097334d6 | 2111 | * default state. |
Anna Bridge |
142:4eea097334d6 | 2112 | */ |
Anna Bridge |
142:4eea097334d6 | 2113 | typedef struct RAIL_AutoAckConfig { |
Anna Bridge |
142:4eea097334d6 | 2114 | /** |
Anna Bridge |
160:5571c4ff569f | 2115 | * Indicate whether auto-acking should be enabled or disabled. |
Anna Bridge |
142:4eea097334d6 | 2116 | */ |
Anna Bridge |
160:5571c4ff569f | 2117 | bool enable; |
Anna Bridge |
142:4eea097334d6 | 2118 | /** |
Anna Bridge |
160:5571c4ff569f | 2119 | * Define the RX ACK timeout duration in µs. Limited to a maximum 65.535 ms. |
Anna Bridge |
160:5571c4ff569f | 2120 | * Only applied when auto acking is enabled. Triggers a |
Anna Bridge |
160:5571c4ff569f | 2121 | * RAIL_EVENT_RX_ACK_TIMEOUT event if this threshold is exceeded. |
Anna Bridge |
142:4eea097334d6 | 2122 | */ |
Anna Bridge |
142:4eea097334d6 | 2123 | uint16_t ackTimeout; |
Anna Bridge |
160:5571c4ff569f | 2124 | /** |
Anna Bridge |
160:5571c4ff569f | 2125 | * State transitions to do after receiving a packet. When auto acking is |
Anna Bridge |
160:5571c4ff569f | 2126 | * enabled, the "error" transition is always ignored and the radio will |
Anna Bridge |
160:5571c4ff569f | 2127 | * return to the "success" state after any acking sequence. See |
Anna Bridge |
160:5571c4ff569f | 2128 | * \ref RAIL_ConfigAutoAck for more details on this. |
Anna Bridge |
160:5571c4ff569f | 2129 | */ |
Anna Bridge |
160:5571c4ff569f | 2130 | RAIL_StateTransitions_t rxTransitions; |
Anna Bridge |
160:5571c4ff569f | 2131 | /** |
Anna Bridge |
160:5571c4ff569f | 2132 | * State transitions to do after transmitting a packet. When auto acking is |
Anna Bridge |
160:5571c4ff569f | 2133 | * enabled, the "error" transition is always ignored and the radio will |
Anna Bridge |
160:5571c4ff569f | 2134 | * return to the "success" state after any acking sequence. See |
Anna Bridge |
160:5571c4ff569f | 2135 | * \ref RAIL_ConfigAutoAck for more details on this. |
Anna Bridge |
160:5571c4ff569f | 2136 | */ |
Anna Bridge |
160:5571c4ff569f | 2137 | RAIL_StateTransitions_t txTransitions; |
Anna Bridge |
142:4eea097334d6 | 2138 | } RAIL_AutoAckConfig_t; |
Anna Bridge |
142:4eea097334d6 | 2139 | |
Anna Bridge |
160:5571c4ff569f | 2140 | /// Acknowledgment packets cannot be longer than 64 bytes. |
Anna Bridge |
160:5571c4ff569f | 2141 | #define RAIL_AUTOACK_MAX_LENGTH 64 |
Anna Bridge |
160:5571c4ff569f | 2142 | |
Anna Bridge |
160:5571c4ff569f | 2143 | /** @} */ // end of group Auto_Ack |
Anna Bridge |
160:5571c4ff569f | 2144 | |
Anna Bridge |
160:5571c4ff569f | 2145 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 2146 | * Calibration Structures |
Anna Bridge |
160:5571c4ff569f | 2147 | *****************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 2148 | /** |
Anna Bridge |
160:5571c4ff569f | 2149 | * @addtogroup Calibration |
Anna Bridge |
160:5571c4ff569f | 2150 | * @{ |
Anna Bridge |
160:5571c4ff569f | 2151 | */ |
Anna Bridge |
160:5571c4ff569f | 2152 | |
Anna Bridge |
142:4eea097334d6 | 2153 | /** |
Anna Bridge |
160:5571c4ff569f | 2154 | * @typedef RAIL_CalMask_t |
Anna Bridge |
160:5571c4ff569f | 2155 | * @brief Calibration mask type |
Anna Bridge |
142:4eea097334d6 | 2156 | * |
Anna Bridge |
160:5571c4ff569f | 2157 | * This type is a bitmask of different RAIL calibration values. The exact |
Anna Bridge |
160:5571c4ff569f | 2158 | * meaning of these bits depends on what a particular chip supports. |
Anna Bridge |
160:5571c4ff569f | 2159 | */ |
Anna Bridge |
160:5571c4ff569f | 2160 | typedef uint32_t RAIL_CalMask_t; |
Anna Bridge |
160:5571c4ff569f | 2161 | |
Anna Bridge |
160:5571c4ff569f | 2162 | /** @} */ // end of group Calibration |
Anna Bridge |
160:5571c4ff569f | 2163 | |
Anna Bridge |
160:5571c4ff569f | 2164 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 2165 | * RF Sense Structures |
Anna Bridge |
160:5571c4ff569f | 2166 | *****************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 2167 | /** |
Anna Bridge |
160:5571c4ff569f | 2168 | * @addtogroup Rf_Sense |
Anna Bridge |
160:5571c4ff569f | 2169 | * @{ |
Anna Bridge |
142:4eea097334d6 | 2170 | */ |
Anna Bridge |
160:5571c4ff569f | 2171 | |
Anna Bridge |
160:5571c4ff569f | 2172 | /** |
Anna Bridge |
160:5571c4ff569f | 2173 | * A pointer to an rfsense callback function. |
Anna Bridge |
160:5571c4ff569f | 2174 | */ |
Anna Bridge |
160:5571c4ff569f | 2175 | typedef void (*RAIL_RfSense_CallbackPtr_t)(void); |
Anna Bridge |
142:4eea097334d6 | 2176 | |
Anna Bridge |
142:4eea097334d6 | 2177 | /** |
Anna Bridge |
160:5571c4ff569f | 2178 | * @enum RAIL_RfSenseBand_t |
Anna Bridge |
160:5571c4ff569f | 2179 | * @brief Enumeration for specifying Rf Sense frequency band. |
Anna Bridge |
142:4eea097334d6 | 2180 | */ |
Anna Bridge |
160:5571c4ff569f | 2181 | RAIL_ENUM(RAIL_RfSenseBand_t) { |
Anna Bridge |
160:5571c4ff569f | 2182 | RAIL_RFSENSE_OFF, /**< RFSense is disabled */ |
Anna Bridge |
160:5571c4ff569f | 2183 | RAIL_RFSENSE_2_4GHZ, /**< RFSense is in 2.4 G band */ |
Anna Bridge |
160:5571c4ff569f | 2184 | RAIL_RFSENSE_SUBGHZ, /**< RFSense is in subgig band */ |
Anna Bridge |
160:5571c4ff569f | 2185 | RAIL_RFSENSE_ANY, /**< RfSense is in both bands */ |
Anna Bridge |
160:5571c4ff569f | 2186 | RAIL_RFSENSE_MAX // Must be last |
Anna Bridge |
160:5571c4ff569f | 2187 | }; |
Anna Bridge |
160:5571c4ff569f | 2188 | |
Anna Bridge |
160:5571c4ff569f | 2189 | /** @} */ // end of group Rf_Sense |
Anna Bridge |
160:5571c4ff569f | 2190 | |
Anna Bridge |
142:4eea097334d6 | 2191 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 2192 | * Diagnositc Structures |
Anna Bridge |
142:4eea097334d6 | 2193 | *****************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 2194 | /** |
Anna Bridge |
142:4eea097334d6 | 2195 | * @addtogroup Diagnostic |
Anna Bridge |
142:4eea097334d6 | 2196 | * @{ |
Anna Bridge |
142:4eea097334d6 | 2197 | */ |
Anna Bridge |
142:4eea097334d6 | 2198 | |
Anna Bridge |
142:4eea097334d6 | 2199 | /** |
Anna Bridge |
142:4eea097334d6 | 2200 | * @enum RAIL_StreamMode_t |
Anna Bridge |
142:4eea097334d6 | 2201 | * @brief Possible stream output modes. |
Anna Bridge |
142:4eea097334d6 | 2202 | */ |
Anna Bridge |
160:5571c4ff569f | 2203 | RAIL_ENUM(RAIL_StreamMode_t) { |
Anna Bridge |
160:5571c4ff569f | 2204 | RAIL_STREAM_CARRIER_WAVE = 0, /**< Unmodulated carrier wave */ |
Anna Bridge |
160:5571c4ff569f | 2205 | RAIL_STREAM_PN9_STREAM = 1, /**< PN9 byte sequence */ |
Anna Bridge |
160:5571c4ff569f | 2206 | }; |
Anna Bridge |
142:4eea097334d6 | 2207 | |
AnnaBridge | 167:84c0a372a020 | 2208 | /** |
AnnaBridge | 167:84c0a372a020 | 2209 | * @def RAIL_VERIFY_DURATION_MAX |
AnnaBridge | 167:84c0a372a020 | 2210 | * @brief This radio state verification duration indicates to RAIL that |
AnnaBridge | 167:84c0a372a020 | 2211 | * all memory contents should be verified by RAIL before returning to the |
AnnaBridge | 167:84c0a372a020 | 2212 | * application. |
AnnaBridge | 167:84c0a372a020 | 2213 | */ |
AnnaBridge | 167:84c0a372a020 | 2214 | #define RAIL_VERIFY_DURATION_MAX 0xFFFFFFFFUL |
AnnaBridge | 167:84c0a372a020 | 2215 | |
AnnaBridge | 167:84c0a372a020 | 2216 | /** |
AnnaBridge | 167:84c0a372a020 | 2217 | * A pointer to a verification callback function. This will be called by the |
AnnaBridge | 167:84c0a372a020 | 2218 | * radio state verification feature built into RAIL when a verified memory |
AnnaBridge | 167:84c0a372a020 | 2219 | * value is different from its reference value. |
AnnaBridge | 167:84c0a372a020 | 2220 | * |
AnnaBridge | 167:84c0a372a020 | 2221 | * @param[in] address The address of the data in question. |
AnnaBridge | 167:84c0a372a020 | 2222 | * @param[in] expectedValue The expected value of the data in question. |
AnnaBridge | 167:84c0a372a020 | 2223 | * @param[in] actualValue The actual value of the data in question. |
AnnaBridge | 167:84c0a372a020 | 2224 | * @return bool True indicates a data value difference is acceptable, and False |
AnnaBridge | 167:84c0a372a020 | 2225 | * indicates a data value difference in unacceptable. |
AnnaBridge | 167:84c0a372a020 | 2226 | * |
AnnaBridge | 167:84c0a372a020 | 2227 | * @note This callback will be issued when an address' value is different from |
AnnaBridge | 167:84c0a372a020 | 2228 | * its reference value and either of the following conditions are met: |
AnnaBridge | 167:84c0a372a020 | 2229 | * 1) The default radio config provided by the radio configurator is used |
AnnaBridge | 167:84c0a372a020 | 2230 | * for verification purposes (i.e. a custom radio config is not supplied |
AnnaBridge | 167:84c0a372a020 | 2231 | * as an input to \ref RAIL_ConfigVerification()), and the radio |
AnnaBridge | 167:84c0a372a020 | 2232 | * configurator has flagged the address under question as being verifiable. |
AnnaBridge | 167:84c0a372a020 | 2233 | * 2) A custom radio config is provided to the verification API (i.e. |
AnnaBridge | 167:84c0a372a020 | 2234 | * a custom radio config is supplied as an input to \ref |
AnnaBridge | 167:84c0a372a020 | 2235 | * RAIL_ConfigVerification()). When providing a custom radio config for |
AnnaBridge | 167:84c0a372a020 | 2236 | * verification purposes, all addresses in that config will be verified, |
AnnaBridge | 167:84c0a372a020 | 2237 | * regardless of whether or not the addresses are flagged as verifiable. |
AnnaBridge | 167:84c0a372a020 | 2238 | */ |
AnnaBridge | 167:84c0a372a020 | 2239 | typedef bool (*RAIL_VerifyCallbackPtr_t)(uint32_t address, |
AnnaBridge | 167:84c0a372a020 | 2240 | uint32_t expectedValue, |
AnnaBridge | 167:84c0a372a020 | 2241 | uint32_t actualValue); |
AnnaBridge | 167:84c0a372a020 | 2242 | |
AnnaBridge | 167:84c0a372a020 | 2243 | /** |
AnnaBridge | 167:84c0a372a020 | 2244 | * @struct RAIL_VerifyConfig_t |
AnnaBridge | 167:84c0a372a020 | 2245 | * @brief The configuration array provided to RAIL for use by the radio state |
AnnaBridge | 167:84c0a372a020 | 2246 | * verification feature. This structure will be populated with appropriate |
AnnaBridge | 167:84c0a372a020 | 2247 | * values by calling \ref RAIL_ConfigVerification(). The application should |
AnnaBridge | 167:84c0a372a020 | 2248 | * not set or alter any of these structure elements. |
AnnaBridge | 167:84c0a372a020 | 2249 | */ |
AnnaBridge | 167:84c0a372a020 | 2250 | typedef struct RAIL_VerifyConfig { |
AnnaBridge | 167:84c0a372a020 | 2251 | /** Internal verification tracking information */ |
AnnaBridge | 167:84c0a372a020 | 2252 | RAIL_Handle_t correspondingHandle; |
AnnaBridge | 167:84c0a372a020 | 2253 | /** Internal verification tracking information */ |
AnnaBridge | 167:84c0a372a020 | 2254 | uint32_t nextIndexToVerify; |
AnnaBridge | 167:84c0a372a020 | 2255 | /** Internal verification tracking information */ |
AnnaBridge | 167:84c0a372a020 | 2256 | const uint32_t *override; |
AnnaBridge | 167:84c0a372a020 | 2257 | /** Internal verification tracking information */ |
AnnaBridge | 167:84c0a372a020 | 2258 | RAIL_VerifyCallbackPtr_t cb; |
AnnaBridge | 167:84c0a372a020 | 2259 | } RAIL_VerifyConfig_t; |
AnnaBridge | 167:84c0a372a020 | 2260 | |
Anna Bridge |
160:5571c4ff569f | 2261 | #ifndef DOXYGEN_SHOULD_SKIP_THIS |
Anna Bridge |
142:4eea097334d6 | 2262 | |
Anna Bridge |
160:5571c4ff569f | 2263 | typedef struct RAIL_DirectModeConfig { |
Anna Bridge |
160:5571c4ff569f | 2264 | bool enable; /**< Indicates whether to enable direct mode. */ |
Anna Bridge |
160:5571c4ff569f | 2265 | } RAIL_DirectModeConfig_t; |
Anna Bridge |
142:4eea097334d6 | 2266 | |
Anna Bridge |
160:5571c4ff569f | 2267 | #endif//DOXYGEN_SHOULD_SKIP_THIS |
Anna Bridge |
160:5571c4ff569f | 2268 | |
Anna Bridge |
160:5571c4ff569f | 2269 | /** @} */ // end of group Diagnostic |
Anna Bridge |
142:4eea097334d6 | 2270 | |
Anna Bridge |
142:4eea097334d6 | 2271 | #ifndef DOXYGEN_SHOULD_SKIP_THIS |
Anna Bridge |
142:4eea097334d6 | 2272 | |
Anna Bridge |
142:4eea097334d6 | 2273 | /****************************************************************************** |
Anna Bridge |
160:5571c4ff569f | 2274 | * Debug Structures |
Anna Bridge |
142:4eea097334d6 | 2275 | *****************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 2276 | /** |
Anna Bridge |
142:4eea097334d6 | 2277 | * @addtogroup Debug |
Anna Bridge |
142:4eea097334d6 | 2278 | * @{ |
Anna Bridge |
142:4eea097334d6 | 2279 | */ |
Anna Bridge |
142:4eea097334d6 | 2280 | |
Anna Bridge |
142:4eea097334d6 | 2281 | /** |
Anna Bridge |
142:4eea097334d6 | 2282 | * @def RAIL_DEBUG_MODE_FREQ_OVERRIDE |
Anna Bridge |
160:5571c4ff569f | 2283 | * @brief A bitmask to enable the frequency override debug mode to |
Anna Bridge |
142:4eea097334d6 | 2284 | * manually tune to a specified frequency. Note that this should only be used |
Anna Bridge |
142:4eea097334d6 | 2285 | * for testing and is not as tuned as frequencies from the calculator. |
Anna Bridge |
142:4eea097334d6 | 2286 | */ |
Anna Bridge |
142:4eea097334d6 | 2287 | #define RAIL_DEBUG_MODE_FREQ_OVERRIDE 0x00000001UL |
Anna Bridge |
160:5571c4ff569f | 2288 | |
Anna Bridge |
142:4eea097334d6 | 2289 | /** |
Anna Bridge |
142:4eea097334d6 | 2290 | * @def RAIL_DEBUG_MODE_VALID_MASK |
Anna Bridge |
142:4eea097334d6 | 2291 | * @brief Any debug mode bits outside of this mask are invalid and ignored. |
Anna Bridge |
142:4eea097334d6 | 2292 | */ |
Anna Bridge |
142:4eea097334d6 | 2293 | #define RAIL_DEBUG_MODE_VALID_MASK (!(RAIL_DEBUG_MODE_FREQ_OVERRIDE)) |
Anna Bridge |
142:4eea097334d6 | 2294 | |
Anna Bridge |
160:5571c4ff569f | 2295 | /** @} */ // end of group Debug |
Anna Bridge |
160:5571c4ff569f | 2296 | |
Anna Bridge |
160:5571c4ff569f | 2297 | #endif//DOXYGEN_SHOULD_SKIP_THIS |
Anna Bridge |
142:4eea097334d6 | 2298 | |
Anna Bridge |
142:4eea097334d6 | 2299 | /** |
Anna Bridge |
142:4eea097334d6 | 2300 | * @} |
Anna Bridge |
142:4eea097334d6 | 2301 | * end of RAIL_API |
Anna Bridge |
142:4eea097334d6 | 2302 | */ |
Anna Bridge |
142:4eea097334d6 | 2303 | |
AnnaBridge | 167:84c0a372a020 | 2304 | #ifdef __cplusplus |
AnnaBridge | 167:84c0a372a020 | 2305 | } |
AnnaBridge | 167:84c0a372a020 | 2306 | #endif |
AnnaBridge | 167:84c0a372a020 | 2307 | |
Anna Bridge |
142:4eea097334d6 | 2308 | #endif // __RAIL_TYPES_H__ |