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.

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?

UserRevisionLine numberNew 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__