IEEE 802.15.4

IEEE 802.15.4 configuration routines.

Modules

IEEE 802.15.4 Radio Configurations
Radio configurations for the RAIL 802.15.4 Accelerator.

Data Structures

struct  RAIL_IEEE802154_Address_t
 Representation of 802.15.4 address This structure is only used for received source address information needed to perform Frame Pending lookup.
 
struct  RAIL_IEEE802154_AddrConfig_t
 A configuration structure for IEEE 802.15.4 Address Filtering.
 
struct  RAIL_IEEE802154_Config_t
 A configuration structure for IEEE 802.15.4 in RAIL.
 
struct  RAIL_IEEE802154_ModeSwitchPhr_t
 A structure containing the PHYModeID value and the corresponding mode switch PHR as defined in Wi-SUN spec.

Macros

#define RAIL_IEEE802154_MAX_ADDRESSES   (3U)
 The maximum number of allowed addresses of each type.
 
#define RAIL_IEEE802154_E_OPTIONS_NONE   0UL
 A value representing no options enabled.
 
#define RAIL_IEEE802154_E_OPTIONS_DEFAULT   RAIL_IEEE802154_E_OPTIONS_NONE
 All options disabled by default .
 
#define RAIL_IEEE802154_E_OPTION_GB868   (1UL << RAIL_IEEE802154_E_OPTION_GB868_SHIFT)
 An option to enable/disable 802.15.4E-2012 features needed for GB868.
 
#define RAIL_IEEE802154_E_OPTION_ENH_ACK   (1UL << RAIL_IEEE802154_E_OPTION_ENH_ACK_SHIFT)
 An option to enable/disable 802.15.4E-2012 features needed for Enhanced ACKs.
 
#define RAIL_IEEE802154_E_OPTION_IMPLICIT_BROADCAST   (1UL << RAIL_IEEE802154_E_OPTION_IMPLICIT_BROADCAST_SHIFT)
 An option to enable/disable 802.15.4E-2012 macImplicitBroadcast feature.
 
#define RAIL_IEEE802154_E_OPTIONS_ALL   0xFFFFFFFFUL
 A value representing all possible options.
 
#define RAIL_IEEE802154_G_OPTIONS_NONE   0UL
 A value representing no options enabled.
 
#define RAIL_IEEE802154_G_OPTIONS_DEFAULT   RAIL_IEEE802154_G_OPTIONS_NONE
 All options disabled by default .
 
#define RAIL_IEEE802154_G_OPTION_GB868   (1UL << RAIL_IEEE802154_G_OPTION_GB868_SHIFT)
 An option to enable/disable 802.15.4G-2012 features needed for GB868.
 
#define RAIL_IEEE802154_G_OPTION_DYNFEC   (1UL << RAIL_IEEE802154_G_OPTION_DYNFEC_SHIFT)
 An option to enable/disable 802.15.4G dynamic FEC feature (SUN FSK only).
 
#define RAIL_IEEE802154_G_OPTION_WISUN_MODESWITCH   (1UL << RAIL_IEEE802154_G_OPTION_WISUN_MODESWITCH_SHIFT)
 An option to enable/disable Wi-SUN Mode Switch feature.
 
#define RAIL_IEEE802154_G_OPTIONS_ALL   0xFFFFFFFFUL
 A value representing all possible options.
 
#define RAIL_IEEE802154_ACCEPT_BEACON_FRAMES   (0x01)
 When receiving packets, accept 802.15.4 BEACON frame types.
 
#define RAIL_IEEE802154_ACCEPT_DATA_FRAMES   (0x02)
 When receiving packets, accept 802.15.4 DATA frame types.
 
#define RAIL_IEEE802154_ACCEPT_ACK_FRAMES   (0x04)
 When receiving packets, accept 802.15.4 ACK frame types.
 
#define RAIL_IEEE802154_ACCEPT_COMMAND_FRAMES   (0x08)
 When receiving packets, accept 802.15.4 COMMAND frame types.
 
#define RAIL_IEEE802154_ACCEPT_MULTIPURPOSE_FRAMES   (0x20)
 When receiving packets, accept 802.15.4-2015 Multipurpose frame types.
 
#define RAIL_IEEE802154_ACCEPT_STANDARD_FRAMES
 In standard operation, accept BEACON, DATA and COMMAND frames.
 
#define RAIL_IEEE802154_ToggleFramePending   RAIL_IEEE802154_SetFramePending
 Alternate naming for function RAIL_IEEE802154_SetFramePending to depict it is used for changing the default setting specified by RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks in an outgoing ACK.
 
#define RAIL_IEEE802154_EnableSignalIdentifier   RAIL_IEEE802154_EnableSignalDetection
 Backward compatible name for the RAIL_IEEE802154_EnableSignalDetection API.

Enumerations

enum  RAIL_IEEE802154_AddressLength_t {
  RAIL_IEEE802154_ShortAddress = 2,
  RAIL_IEEE802154_LongAddress = 3
}
 Different lengths that an 802.15.4 address can have.
 
enum  RAIL_IEEE802154_PtiRadioConfig_t {
  RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ = 0x00U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_ANTDIV = 0x01U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_COEX = 0x02U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_ANTDIV_COEX = 0x03U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_FEM = 0x08U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_FEM_ANTDIV = 0x09U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_FEM_COEX = 0x0AU,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_FEM_ANTDIV_COEX = 0x0BU,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_863MHZ_GB868 = 0x85U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_915MHZ_GB868 = 0x86U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_915MHZ_R23_NA_EXT = 0x97U,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT1_863MHZ = 0x42,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT1_902MHZ = 0x43,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT2_863MHZ = 0x52,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT2_902MHZ = 0x53,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT3_863MHZ = 0x62,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT3_902MHZ = 0x63,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT4_863MHZ = 0x72,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT4_902MHZ = 0x73,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OQPSK_868MHZ = 0x44,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OQPSK_915MHZ = 0x45,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_FSK_FEC_863MHZ = 0x46,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_FSK_FEC_902MHZ = 0x47,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_FSK_NOFEC_863MHZ = 0x56,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_FSK_NOFEC_902MHZ = 0x57,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_LEG_OQPSK_868MHZ = 0x48,
  RAIL_IEEE802154_PTI_RADIO_CONFIG_LEG_OQPSK_915MHZ = 0x49
}
 802.15.4 PTI radio configuration mode
 
enum  RAIL_IEEE802154_EOptions_t {
  RAIL_IEEE802154_E_OPTION_GB868_SHIFT = 0,
  RAIL_IEEE802154_E_OPTION_ENH_ACK_SHIFT,
  RAIL_IEEE802154_E_OPTION_IMPLICIT_BROADCAST_SHIFT
}
 802.15.4E-2012 options, in reality a bitmask.
 
enum  RAIL_IEEE802154_GOptions_t {
  RAIL_IEEE802154_G_OPTION_GB868_SHIFT = 0,
  RAIL_IEEE802154_G_OPTION_DYNFEC_SHIFT,
  RAIL_IEEE802154_G_OPTION_WISUN_MODESWITCH_SHIFT
}
 802.15.4G-2012 options, in reality a bitmask.
 
enum  RAIL_IEEE802154_CcaMode_t {
  RAIL_IEEE802154_CCA_MODE_RSSI = 0,
  RAIL_IEEE802154_CCA_MODE_SIGNAL,
  RAIL_IEEE802154_CCA_MODE_SIGNAL_OR_RSSI,
  RAIL_IEEE802154_CCA_MODE_SIGNAL_AND_RSSI,
  RAIL_IEEE802154_CCA_MODE_ALWAYS_TRANSMIT,
  RAIL_IEEE802154_CCA_MODE_COUNT
}
 Available CCA modes.
 
enum  RAIL_IEEE802154_SignalIdentifierMode_t {
  RAIL_IEEE802154_SIGNAL_IDENTIFIER_MODE_DISABLE = 0,
  RAIL_IEEE802154_SIGNAL_IDENTIFIER_MODE_154
}
 Available Signal identifier modes.

Functions

RAIL_Status_t RAIL_IEEE802154_Init (RAIL_Handle_t railHandle, const RAIL_IEEE802154_Config_t *config)
 Initialize RAIL for IEEE802.15.4 features.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadio (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioAntDiv (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation with antenna diversity.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioAntDivCoex (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation with antenna diversity optimized for radio coexistence.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioCoex (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation optimized for radio coexistence.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioFem (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation with a front end module.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioAntDivFem (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation with antenna diversity optimized for a front end module.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioCoexFem (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation optimized for radio coexistence and a front end module.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioAntDivCoexFem (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation with antenna diversity optimized for radio coexistence and a front end module.
 
RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioCustom1 (RAIL_Handle_t railHandle)
 Configure the radio for 2.4 GHz 802.15.4 operation with custom settings.
 
RAIL_Status_t RAIL_IEEE802154_ConfigGB863MHzRadio (RAIL_Handle_t railHandle)
 Configure the radio for SubGHz GB868 863 MHz 802.15.4 operation.
 
RAIL_Status_t RAIL_IEEE802154_ConfigGB915MHzRadio (RAIL_Handle_t railHandle)
 Configure the radio for SubGHz GB868 915 MHz 802.15.4 operation.
 
RAIL_Status_t RAIL_IEEE802154_Deinit (RAIL_Handle_t railHandle)
 De-initialize IEEE802.15.4 hardware acceleration.
 
bool RAIL_IEEE802154_IsEnabled (RAIL_Handle_t railHandle)
 Return whether IEEE802.15.4 hardware acceleration is currently enabled.
 
RAIL_IEEE802154_PtiRadioConfig_t RAIL_IEEE802154_GetPtiRadioConfig (RAIL_Handle_t railHandle)
 Return IEEE802.15.4 PTI radio config.
 
RAIL_Status_t RAIL_IEEE802154_SetAddresses (RAIL_Handle_t railHandle, const RAIL_IEEE802154_AddrConfig_t *addresses)
 Configure the RAIL Address Filter for 802.15.4 filtering.
 
RAIL_Status_t RAIL_IEEE802154_SetPanId (RAIL_Handle_t railHandle, uint16_t panId, uint8_t index)
 Set a PAN ID for 802.15.4 address filtering.
 
RAIL_Status_t RAIL_IEEE802154_SetShortAddress (RAIL_Handle_t railHandle, uint16_t shortAddr, uint8_t index)
 Set a short address for 802.15.4 address filtering.
 
RAIL_Status_t RAIL_IEEE802154_SetLongAddress (RAIL_Handle_t railHandle, const uint8_t *longAddr, uint8_t index)
 Set a long address for 802.15.4 address filtering.
 
RAIL_Status_t RAIL_IEEE802154_SetPanCoordinator (RAIL_Handle_t railHandle, bool isPanCoordinator)
 Set whether the current node is a PAN coordinator.
 
RAIL_Status_t RAIL_IEEE802154_SetPromiscuousMode (RAIL_Handle_t railHandle, bool enable)
 Set whether to enable 802.15.4 promiscuous mode.
 
RAIL_Status_t RAIL_IEEE802154_ConfigEOptions (RAIL_Handle_t railHandle, RAIL_IEEE802154_EOptions_t mask, RAIL_IEEE802154_EOptions_t options)
 Configure certain 802.15.4E-2012 / 802.15.4-2015 Frame Version 2 features.
 
RAIL_Status_t RAIL_IEEE802154_ConfigGOptions (RAIL_Handle_t railHandle, RAIL_IEEE802154_GOptions_t mask, RAIL_IEEE802154_GOptions_t options)
 Configure certain 802.15.4G-2012 / 802.15.4-2015 SUN PHY features (only for radio configurations designed accordingly).
 
RAIL_Status_t RAIL_IEEE802154_ComputeChannelFromPhyModeId (RAIL_Handle_t railHandle, uint8_t newPhyModeId, uint16_t *pChannel)
 Compute channel to switch to given a targeted PhyMode ID in the context of Wi-SUN mode switching.
 
RAIL_Status_t RAIL_IEEE802154_AcceptFrames (RAIL_Handle_t railHandle, uint8_t framesMask)
 Set which 802.15.4 frame types to accept.
 
RAIL_Status_t RAIL_IEEE802154_EnableEarlyFramePending (RAIL_Handle_t railHandle, bool enable)
 Enable early Frame Pending lookup event notification (RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND).
 
RAIL_Status_t RAIL_IEEE802154_EnableDataFramePending (RAIL_Handle_t railHandle, bool enable)
 Enable Frame Pending lookup event notification (RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND) for MAC Data frames.
 
RAIL_Status_t RAIL_IEEE802154_SetFramePending (RAIL_Handle_t railHandle)
 Change the Frame Pending bit on the outgoing legacy Immediate ACK from the default specified by RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks.
 
RAIL_Status_t RAIL_IEEE802154_GetAddress (RAIL_Handle_t railHandle, RAIL_IEEE802154_Address_t *pAddress)
 Get the source address of the incoming data request.
 
RAIL_Status_t RAIL_IEEE802154_WriteEnhAck (RAIL_Handle_t railHandle, const uint8_t *ackData, uint8_t ackDataLen)
 Write the AutoACK FIFO for the next outgoing 802.15.4E Enhanced ACK.
 
uint8_t RAIL_IEEE802154_ConvertRssiToLqi (uint8_t origLqi, int8_t rssiDbm)
 Convert RSSI into 802.15.4 Link Quality Indication (LQI) metric compatible with the Silicon Labs Zigbee stack.
 
uint8_t RAIL_IEEE802154_ConvertRssiToEd (int8_t rssiDbm)
 Convert RSSI into 802.15.4 Energy Detection (ED) metric compatible with the Silicon Labs Zigbee stack.
 
RAIL_Status_t RAIL_IEEE802154_ConfigSignalIdentifier (RAIL_Handle_t railHandle, RAIL_IEEE802154_SignalIdentifierMode_t signalIdentifierMode)
 Configure signal identifier for 802.15.4 signal detection.
 
RAIL_Status_t RAIL_IEEE802154_EnableSignalDetection (RAIL_Handle_t railHandle, bool enable)
 Enable or disable signal identifier for 802.15.4 signal detection.
 
RAIL_Status_t RAIL_IEEE802154_ConfigCcaMode (RAIL_Handle_t railHandle, RAIL_IEEE802154_CcaMode_t ccaMode)
 Set 802.15.4 CCA mode.

Detailed Description

IEEE 802.15.4 configuration routines.

The functions in this group configure RAIL IEEE 802.15.4 hardware acceleration which includes IEEE 802.15.4 format filtering, address filtering, ACKing, and filtering based on the frame type.

To configure IEEE 802.15.4 functionality, the application must first set up a RAIL instance with RAIL_Init() and other setup functions. Instead of RAIL_ConfigChannels(), however, an application may use RAIL_IEEE802154_Config2p4GHzRadio() to set up the official IEEE 2.4 GHz 802.15.4 PHY. This configuration is shown below.

802.15.4 defines its macAckWaitDuration from the end of the transmitted packet to complete reception of the ACK. RAIL's ackTimeout only covers sync word detection of the ACK. Therefore, subtract the ACK's PHY header and payload time to get RAIL's ackTimeout setting. For 2.4 GHz OQPSK, macAckWaitDuration is specified as 54 symbols; subtracting 2-symbol PHY header and 10-symbol payload yields a RAIL ackTimeout of 42 symbols or 672 microseconds at 16 microseconds/symbol.

static RAIL_Handle_t railHandle = NULL; // Initialized somewhere else.
static const RAIL_IEEE802154_Config_t rail154Config = {
.addresses = NULL,
.ackConfig = {
.enable = true, // Turn on auto ACK for IEEE 802.15.4.
.ackTimeout = 672, // See note above: 54-12 sym * 16 us/sym = 672 us.
.rxTransitions = {
.success = RAIL_RF_STATE_RX, // Return to RX after ACK processing
.error = RAIL_RF_STATE_RX, // Ignored
},
.txTransitions = {
.success = RAIL_RF_STATE_RX, // Return to RX after ACK processing
.error = RAIL_RF_STATE_RX, // Ignored
},
},
.timings = {
.idleToRx = 100,
.idleToTx = 100,
.rxToTx = 192, // 12 symbols * 16 us/symbol = 192 us
.txToRx = 192, // 12 symbols * 16 us/symbol = 192 us
.rxSearchTimeout = 0, // Not used
.txToRxSearchTimeout = 0, // Not used
},
.promiscuousMode = false, // Enable format and address filtering.
.isPanCoordinator = false,
.defaultFramePendingInOutgoingAcks = false,
};
void config154(void)
{
// Configure the radio and channels for 2.4 GHz IEEE 802.15.4.
// Initialize the IEEE 802.15.4 configuration using the static configuration above.
RAIL_IEEE802154_Init(railHandle, &rail154Config);
}

To configure address filtering, call RAIL_IEEE802154_SetAddresses() with a structure containing all addresses or call the individual RAIL_IEEE802154_SetPanId(), RAIL_IEEE802154_SetShortAddress(), and RAIL_IEEE802154_SetLongAddress() APIs. RAIL supports RAIL_IEEE802154_MAX_ADDRESSES number of address pairs to receive packets from multiple IEEE 802.15.4 networks at the same time. Broadcast addresses are supported by default without any additional configuration so they do not consume one of these slots. If the application does not require all address pairs, be sure to set unused ones to the proper disabled value for each type. These can be found in the RAIL_IEEE802154_AddrConfig_t documentation. Below is an example of setting filtering for one set of addresses.

// PanID OTA value of 0x34 0x12.
// Short Address OTA byte order of 0x78 0x56.
// Long address with OTA byte order of 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88.
// Set up all addresses simultaneously.
RAIL_Status_t setup1(void)
{
{ 0x1234, 0xFFFF, 0xFFFF },
{ 0x5678, 0xFFFF, 0xFFFF },
{ { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 },
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }
};
return RAIL_IEEE802154_SetAddresses(railHandle, &nodeAddress);
}
// Alternatively, the addresses can be set up individually as follows:
RAIL_Status_t setup2(void)
{
RAIL_Status_t status;
const uint8_t longAddress[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 };
status = RAIL_IEEE802154_SetPanId(railHandle, 0x1234, 0);
if (status != RAIL_STATUS_NO_ERROR) {
return status
}
status = RAIL_IEEE802154_SetShortAddress(railHandle, 0x5678, 0);
if (status != RAIL_STATUS_NO_ERROR) {
return status
}
status = RAIL_IEEE802154_SetLongAddress(railHandle, longAddress, 0);
if (status != RAIL_STATUS_NO_ERROR) {
return status
}
}

Address filtering will be enabled except when in promiscuous mode, which can be set with RAIL_IEEE802154_SetPromiscuousMode(). The addresses may be changed at runtime. However, if you are receiving a packet while reconfiguring the address filters, you may get undesired behavior so it's safest to do this while not in receive.

Auto ACK is controlled by the ackConfig and timings fields passed to RAIL_IEEE802154_Init(). After initialization, they may be controlled using the normal Auto-ACK and State Transitions APIs. When in IEEE 802.15.4 mode, the ACK will generally have a 5 byte length, its Frame Type will be ACK, its Frame Version 0 (2003), and its Frame Pending bit will be false unless the RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND event is triggered in which case it will default to the RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks setting. If the default Frame Pending setting is incorrect, the app must call RAIL_IEEE802154_ToggleFramePending (formerly RAIL_IEEE802154_SetFramePending) while handling the RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND event.

This event must be turned on by the user and will fire whenever a data request is being received so that the stack can determine if there is pending data. Note that if the default Frame Pending bit needs to be changed, it must be done quickly. Otherwise, the ACK may already have been transmitted with the default setting. Check the return code of RAIL_IEEE802154_ToggleFramePending() to be sure that the bit was changed in time.

Transmit and receive operations are done using the standard RAIL APIs in IEEE 802.15.4 mode. To send packets using the correct CSMA configuration, use RAIL_CSMA_CONFIG_802_15_4_2003_2p4_GHz_OQPSK_CSMA define that can initialize the csmaConfig structure passed to RAIL_StartCcaCsmaTx().

Macro Definition Documentation

◆ RAIL_IEEE802154_ACCEPT_ACK_FRAMES

#define RAIL_IEEE802154_ACCEPT_ACK_FRAMES   (0x04)

When receiving packets, accept 802.15.4 ACK frame types.

Note
Expected ACK frame types will still be accepted regardless of this setting when waiting for an ACK after a transmit that used RAIL_TX_OPTION_WAIT_FOR_ACK and auto-ACK is enabled.

Definition at line 1146 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_ACCEPT_MULTIPURPOSE_FRAMES

#define RAIL_IEEE802154_ACCEPT_MULTIPURPOSE_FRAMES   (0x20)

When receiving packets, accept 802.15.4-2015 Multipurpose frame types.

(Not supported on EFR32XG1.)

Definition at line 1152 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_ACCEPT_STANDARD_FRAMES

#define RAIL_IEEE802154_ACCEPT_STANDARD_FRAMES
Value:
#define RAIL_IEEE802154_ACCEPT_COMMAND_FRAMES
When receiving packets, accept 802.15.4 COMMAND frame types.
Definition: rail_ieee802154.h:1148
#define RAIL_IEEE802154_ACCEPT_DATA_FRAMES
When receiving packets, accept 802.15.4 DATA frame types.
Definition: rail_ieee802154.h:1141
#define RAIL_IEEE802154_ACCEPT_BEACON_FRAMES
When receiving packets, accept 802.15.4 BEACON frame types.
Definition: rail_ieee802154.h:1139

In standard operation, accept BEACON, DATA and COMMAND frames.

Don't receive ACK frames unless waiting for ACK (i.e., only receive expected ACKs).

Definition at line 1157 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_E_OPTION_ENH_ACK

#define RAIL_IEEE802154_E_OPTION_ENH_ACK   (1UL << RAIL_IEEE802154_E_OPTION_ENH_ACK_SHIFT)

An option to enable/disable 802.15.4E-2012 features needed for Enhanced ACKs.

This option requires that RAIL_IEEE802154_E_OPTION_GB868 also be enabled, and is enabled automatically on platforms that support this feature. It exists as a separate flag to allow runtime detection of whether the platform supports this feature or not.

When enabled, only an Enhanced ACK is expected in response to a transmitted ACK-requesting 802.15.4E Version 2 frame. RAIL only knows how to construct 802.15.4 Immediate ACKs but not Enhanced ACKs.

This option causes RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND to be issued for ACK-requesting Version 2 MAC Command frames, Data frames (if RAIL_IEEE802154_EnableDataFramePending() is enabled), and Multipurpose Frames (if RAIL_IEEE802154_ACCEPT_MULTIPURPOSE_FRAMES is enabled).

The application is expected to handle this event by calling RAIL_GetRxIncomingPacketInfo() and parsing the partly-received incoming frame to determine the type of ACK needed:

  • If an Immediate ACK, determine Frame Pending needs based on the packet type and addressing information and call RAIL_IEEE802154_ToggleFramePending() if necessary;
  • If an Enhanced ACK, generate the complete payload of the Enhanced ACK including any Frame Pending information and call RAIL_IEEE802154_WriteEnhAck() in time for that Enhanced ACK to be sent. If not called in time, RAIL_EVENT_TXACK_UNDERFLOW will likely result. Note that if 802.15.4 MAC-level encryption is used with Version 2 frames, the application should decrypt the MAC Command byte in a MAC Command frame to determine whether it is a Data Request or other MAC Command.

An application can also enable RAIL_IEEE802154_EnableEarlyFramePending() if the protocol doesn't need to examine the MAC Command byte of MAC Command frames but can infer it to be a Data Request.

On 802.15.4E GB868 platforms that lack this support, legacy Immediate ACKs are sent/expected for received/transmitted ACK-requesting 802.15.4E Frame Version 2 frames; calls to RAIL_IEEE802154_WriteEnhAck() have no effect. Attempting to use this feature via RAIL_IEEE802154_ConfigEOptions() returns an error.

Definition at line 970 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_E_OPTION_GB868

#define RAIL_IEEE802154_E_OPTION_GB868   (1UL << RAIL_IEEE802154_E_OPTION_GB868_SHIFT)

An option to enable/disable 802.15.4E-2012 features needed for GB868.

When not promiscuous, RAIL normally accepts only 802.15.4 MAC frames whose MAC header Frame Version is 0 (802.15.4-2003) or 1 (802.15.4-2006), filtering out higher Frame Version packets (as RAIL_RX_PACKET_ABORT_FORMAT). Enabling this feature additionally allows Frame Version 2 (802.15.4E-2012 / 802.15.4-2015) packets to be accepted and passed to the application.

Note
Enabling this feature also automatically enables RAIL_IEEE802154_E_OPTION_ENH_ACK on platforms that support that feature.
This feature does not automatically enable receiving Multipurpose frames; that can be enabled via RAIL_IEEE802154_AcceptFrames()'s RAIL_IEEE802154_ACCEPT_MULTIPURPOSE_FRAMES.

Definition at line 924 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_E_OPTION_IMPLICIT_BROADCAST

#define RAIL_IEEE802154_E_OPTION_IMPLICIT_BROADCAST   (1UL << RAIL_IEEE802154_E_OPTION_IMPLICIT_BROADCAST_SHIFT)

An option to enable/disable 802.15.4E-2012 macImplicitBroadcast feature.

When enabled, received Frame Version 2 frames without a destination PAN ID or destination address are treated as though they are addressed to the broadcast PAN ID and broadcast short address. When disabled, such frames are filtered unless the device is the PAN coordinator and appropriate source addressing information exists in the packet

Definition at line 981 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_E_OPTIONS_ALL

#define RAIL_IEEE802154_E_OPTIONS_ALL   0xFFFFFFFFUL

A value representing all possible options.

Definition at line 984 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_E_OPTIONS_DEFAULT

#define RAIL_IEEE802154_E_OPTIONS_DEFAULT   RAIL_IEEE802154_E_OPTIONS_NONE

All options disabled by default .

Definition at line 905 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_E_OPTIONS_NONE

#define RAIL_IEEE802154_E_OPTIONS_NONE   0UL

A value representing no options enabled.

Definition at line 903 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_G_OPTION_DYNFEC

#define RAIL_IEEE802154_G_OPTION_DYNFEC   (1UL << RAIL_IEEE802154_G_OPTION_DYNFEC_SHIFT)

An option to enable/disable 802.15.4G dynamic FEC feature (SUN FSK only).

The syncWord, called start-of-frame delimiter (SFD) in the 15.4 spec, indicates whether the rest of the packet is FEC encoded or not. This feature requires per-packet dual syncWord detection and specific receiver pausing. Note that this feature is only available on platforms where RAIL_IEEE802154_SUPPORTS_G_DYNFEC is true.

Definition at line 1066 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_G_OPTION_GB868

#define RAIL_IEEE802154_G_OPTION_GB868   (1UL << RAIL_IEEE802154_G_OPTION_GB868_SHIFT)

An option to enable/disable 802.15.4G-2012 features needed for GB868.

Normally RAIL supports 802.15.4-2003 and -2006 radio configurations that have the single-byte PHY header allowing frames up to 128 bytes in size. This feature must be enabled for 802.15.4G-2012 or 802.15.4-2015 SUN PHY radio configurations with the two-byte bit-reversed-length PHY header format.

While GB868 only supports whitened non-FEC non-mode-switch frames up to 129 bytes including 2-byte CRC, this option also enables:

  • On platforms where RAIL_FEAT_IEEE802154_G_4BYTE_CRC_SUPPORTED is true: automatic per-packet 2/4-byte Frame Check Sequence (FCS) reception and transmission based on the FCS Type bit in the received/transmitted PHY header. This includes ACK reception and automatically-generated ACKs reflect the CRC size of the incoming frame being acknowledged (i.e., their MAC payload will be increased to 7 bytes when sending 4-byte FCS). On other platforms, only the 2-byte FCS is supported.
  • On platforms where RAIL_FEAT_IEEE802154_G_UNWHITENED_RX_SUPPORTED and/or RAIL_FEAT_IEEE802154_G_UNWHITENED_TX_SUPPORTED are true: automatic per-packet whitened/unwhitened reception and transmission, respectively, based on the Data Whitening bit in the received/transmitted PHY header. This includes ACK reception and automatically-generated ACKs which reflect the whitening of the incoming frame being acknowledged. On other platforms, only whitened frames are supported.
  • Support for frames up to 2049 bytes per the radio configuration's maximum packet length setting.
Note
Sending/receiving whitened frames assumes the radio configuration has established an appropriate 802.15.4-compliant whitening algorithm. RAIL does not itself override the radio configuration's whitening settings other than to enable/disable it per-packet based on the packet's PHY header Data Whitening flag.

Definition at line 1057 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_G_OPTION_WISUN_MODESWITCH

#define RAIL_IEEE802154_G_OPTION_WISUN_MODESWITCH   (1UL << RAIL_IEEE802154_G_OPTION_WISUN_MODESWITCH_SHIFT)

An option to enable/disable Wi-SUN Mode Switch feature.

This feature consists in switching to a new PHY mode with a higher rate typically by sending/receiving a specific Mode Switch packet that indicates the incoming new PHY mode. The Mode Switch packet is an FSK-modulated 2-byte PHY header with no payload. Because this feature relies on specific receiver pausing, note that it is only available on platforms where RAIL_IEEE802154_SUPPORTS_G_DYNFEC is true.

Definition at line 1075 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_G_OPTIONS_ALL

#define RAIL_IEEE802154_G_OPTIONS_ALL   0xFFFFFFFFUL

A value representing all possible options.

Definition at line 1078 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_G_OPTIONS_DEFAULT

#define RAIL_IEEE802154_G_OPTIONS_DEFAULT   RAIL_IEEE802154_G_OPTIONS_NONE

All options disabled by default .

Definition at line 1021 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_G_OPTIONS_NONE

#define RAIL_IEEE802154_G_OPTIONS_NONE   0UL

A value representing no options enabled.

Definition at line 1019 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_MAX_ADDRESSES

#define RAIL_IEEE802154_MAX_ADDRESSES   (3U)

The maximum number of allowed addresses of each type.

Definition at line 229 of file rail_ieee802154.h.

Enumeration Type Documentation

◆ RAIL_IEEE802154_AddressLength_t

Different lengths that an 802.15.4 address can have.

Enumerator
RAIL_IEEE802154_ShortAddress 

2 byte short address.

RAIL_IEEE802154_LongAddress 

8 byte extended address.

Definition at line 194 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_CcaMode_t

Available CCA modes.

Enumerator
RAIL_IEEE802154_CCA_MODE_RSSI 

RSSI-based CCA.

CCA reports a busy medium upon detecting any energy above RAIL_CsmaConfig_t::ccaThreshold.

RAIL_IEEE802154_CCA_MODE_SIGNAL 

Signal Identifier-based CCA.

CCA reports a busy medium only upon the detection of a signal compliant with this standard with the same modulation and spreading characteristics of the PHY that is currently in use.

RAIL_IEEE802154_CCA_MODE_SIGNAL_OR_RSSI 

RSSI or signal identifier-based CCA.

CCA reports a busy medium on either detecting any energy above RAIL_CsmaConfig_t::ccaThreshold or detection of a signal compliant with this standard with the same modulation and spreading characteristics of the PHY that is currently in use.

RAIL_IEEE802154_CCA_MODE_SIGNAL_AND_RSSI 

RSSI and signal identifier-based CCA.

CCA reports a busy medium only on detecting any energy above RAIL_CsmaConfig_t::ccaThreshold of a signal compliant with this standard with the same modulation and spreading characteristics of the PHY that is currently in use.

RAIL_IEEE802154_CCA_MODE_ALWAYS_TRANSMIT 

ALOHA.

Always transmit CCA=1. CCA always reports an idle medium.

RAIL_IEEE802154_CCA_MODE_COUNT 

Number of CCA modes.

Definition at line 1366 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_EOptions_t

802.15.4E-2012 options, in reality a bitmask.

Enumerator
RAIL_IEEE802154_E_OPTION_GB868_SHIFT 

Shift position of RAIL_IEEE802154_E_OPTION_GB868 bit.

Definition at line 895 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_GOptions_t

802.15.4G-2012 options, in reality a bitmask.

Enumerator
RAIL_IEEE802154_G_OPTION_GB868_SHIFT 

Shift position of RAIL_IEEE802154_G_OPTION_GB868 bit.

RAIL_IEEE802154_G_OPTION_DYNFEC_SHIFT 

Shift position of RAIL_IEEE802154_G_OPTION_DYNFEC bit.

RAIL_IEEE802154_G_OPTION_WISUN_MODESWITCH_SHIFT 

Shift position of RAIL_IEEE802154_G_OPTION_WISUN_MODESWITCH bit.

Definition at line 1009 of file rail_ieee802154.h.

◆ RAIL_IEEE802154_PtiRadioConfig_t

802.15.4 PTI radio configuration mode

Enumerator
RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ 

Built-in 2.4 GHz 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_ANTDIV 

Built-in 2.4 GHz 802.15.4 radio configuration with RX antenna diversity support.

RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_COEX 

Built-in 2.4 GHz 802.15.4 radio configuration optimized for radio coexistence.

RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_ANTDIV_COEX 

Built-in 2.4 GHz 802.15.4 radio configuration with RX antenna diversity support optimized for radio coexistence.

RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_FEM 

Built-in 2.4 GHz 802.15.4 radio configuration optimized for front end modules.

RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_FEM_ANTDIV 

Built-in 2.4 GHz 802.15.4 radio configuration with RX antenna diversity support optimized for front end modules.

RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_FEM_COEX 

Built-in 2.4 GHz 802.15.4 radio configuration optimized for radio coexistence and front end modules.

RAIL_IEEE802154_PTI_RADIO_CONFIG_2P4GHZ_FEM_ANTDIV_COEX 

Built-in 2.4 GHz 802.15.4 radio configuration with RX antenna diversity support optimized for radio coexistence and front end modules.

RAIL_IEEE802154_PTI_RADIO_CONFIG_863MHZ_GB868 

Built-in 863 MHz GB868 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_915MHZ_GB868 

Built-in 915 MHz GB868 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_915MHZ_R23_NA_EXT 

External 915 MHz Zigbee R23 802.15.4 NA radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT1_863MHZ 

863 MHz SUN OFDM Option 1 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT1_902MHZ 

902 MHz SUN OFDM Option 1 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT2_863MHZ 

86 3MHz SUN OFDM Option 2 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT2_902MHZ 

902 MHz SUN OFDM Option 2 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT3_863MHZ 

863 MHz SUN OFDM Option 3 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT3_902MHZ 

902 MHz SUN OFDM Option 3 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT4_863MHZ 

863 MHz SUN OFDM Option 4 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OFDM_OPT4_902MHZ 

902 MHz SUN OFDM Option 4 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OQPSK_868MHZ 

868 MHz SUN OQPSK 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_OQPSK_915MHZ 

915 MHz SUN OQPSK 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_FSK_FEC_863MHZ 

863 MHz SUN FSK FEC 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_FSK_FEC_902MHZ 

902 MHz SUN FSK FEC 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_FSK_NOFEC_863MHZ 

863 MHz SUN FSK NO FEC 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_SUN_FSK_NOFEC_902MHZ 

902 MHz SUN FSK NO FEC 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_LEG_OQPSK_868MHZ 

868 MHz Legacy OQPSK 802.15.4 radio configuration.

RAIL_IEEE802154_PTI_RADIO_CONFIG_LEG_OQPSK_915MHZ 

915 MHz Legacy OQPSK 802.15.4 radio configuration.

Definition at line 638 of file rail_ieee802154.h.

Function Documentation

◆ RAIL_IEEE802154_AcceptFrames()

RAIL_Status_t RAIL_IEEE802154_AcceptFrames ( RAIL_Handle_t  railHandle,
uint8_t  framesMask 
)

Set which 802.15.4 frame types to accept.

Parameters
[in]railHandleA handle of RAIL instance.
[in]framesMaskA mask containing which 802.15.4 frame types to receive.
Returns
A status code indicating success of the function call.

This function will fail if 802.15.4 hardware acceleration is not currently enabled or framesMask requests an unsupported frame type. This setting may be changed at any time when 802.15.4 hardware acceleration is enabled. Only Beacon, Data, ACK, Command, and Multipurpose (except on EFR32XG1) frames may be received. The RAIL_IEEE802154_ACCEPT_XXX_FRAMES defines may be combined to create a bitmask to pass into this function.

RAIL_IEEE802154_ACCEPT_ACK_FRAMES behaves slightly different than the other defines. If RAIL_IEEE802154_ACCEPT_ACK_FRAMES is set, the radio will accept an ACK frame during normal packet reception, but only a truly expected ACK will have its RAIL_RxPacketDetails_t::isAck true. If RAIL_IEEE802154_ACCEPT_ACK_FRAMES is not set, ACK frames will be filtered unless they're expected when the radio is waiting for an ACK.

◆ RAIL_IEEE802154_ComputeChannelFromPhyModeId()

RAIL_Status_t RAIL_IEEE802154_ComputeChannelFromPhyModeId ( RAIL_Handle_t  railHandle,
uint8_t  newPhyModeId,
uint16_t *  pChannel 
)

Compute channel to switch to given a targeted PhyMode ID in the context of Wi-SUN mode switching.

Parameters
[in]railHandleA handle of RAIL instance.
[in]newPhyModeIdA targeted PhyMode ID.
[out]pChannelA pointer to the channel to switch to.
Returns
A status code indicating success of the function call.

This function will fail if the targeted PhyModeID is the same as the current PhyMode ID, or if called on a platform that lacks RAIL_IEEE802154_SUPPORTS_G_MODESWITCH. For newPhyModeId associated with a FSK FEC_off PHY, if dynamic FEC is activated (see RAIL_IEEE802154_G_OPTION_DYNFEC), the returned channel can correspond to the associated FSK FEC_on PHY corresponding then to PhyModeID = newPhyModeId + 16

◆ RAIL_IEEE802154_Config2p4GHzRadio()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadio ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation. It takes the place of calling RAIL_ConfigChannels. After this call, channels 11-26 will be available, giving the frequencies of those channels on channel page 0, as defined by IEEE 802.15.4-2011 section 8.1.2.2.

Note
This call implicitly disables all RAIL_IEEE802154_GOptions_t.

◆ RAIL_IEEE802154_Config2p4GHzRadioAntDiv()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioAntDiv ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation with antenna diversity.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation, but with a configuration that supports antenna diversity. It takes the place of calling RAIL_ConfigChannels. After this call, channels 11-26 will be available, giving the frequencies of those channels on channel page 0, as defined by IEEE 802.15.4-2011 section 8.1.2.2.

Note
This call implicitly disables all RAIL_IEEE802154_GOptions_t.

◆ RAIL_IEEE802154_Config2p4GHzRadioAntDivCoex()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioAntDivCoex ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation with antenna diversity optimized for radio coexistence.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation, but with a configuration that supports antenna diversity optimized for radio coexistence. It takes the place of calling RAIL_ConfigChannels. After this call, channels 11-26 will be available, giving the frequencies of those channels on channel page 0, as defined by IEEE 802.15.4-2011 section 8.1.2.2.

Note
This call implicitly disables all RAIL_IEEE802154_GOptions_t.

◆ RAIL_IEEE802154_Config2p4GHzRadioAntDivCoexFem()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioAntDivCoexFem ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation with antenna diversity optimized for radio coexistence and a front end module.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation, but with a configuration that supports antenna diversity, radio coexistence and a front end module. It takes the place of calling RAIL_ConfigChannels. After this call, channels 11-26 will be available, giving the frequencies of those channels on channel page 0, as defined by IEEE 802.15.4-2011 section 8.1.2.2.

Note
This call implicitly disables all RAIL_IEEE802154_GOptions_t.

◆ RAIL_IEEE802154_Config2p4GHzRadioAntDivFem()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioAntDivFem ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation with antenna diversity optimized for a front end module.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation, but with a configuration that supports antenna diversity and a front end module. It takes the place of calling RAIL_ConfigChannels. After this call, channels 11-26 will be available, giving the frequencies of those channels on channel page 0, as defined by IEEE 802.15.4-2011 section 8.1.2.2.

Note
This call implicitly disables all RAIL_IEEE802154_GOptions_t.

◆ RAIL_IEEE802154_Config2p4GHzRadioCoex()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioCoex ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation optimized for radio coexistence.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation, but with a configuration that supports radio coexistence. It takes the place of calling RAIL_ConfigChannels. After this call, channels 11-26 will be available, giving the frequencies of those channels on channel page 0, as defined by IEEE 802.15.4-2011 section 8.1.2.2.

Note
This call implicitly disables all RAIL_IEEE802154_GOptions_t.

◆ RAIL_IEEE802154_Config2p4GHzRadioCoexFem()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioCoexFem ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation optimized for radio coexistence and a front end module.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation, but with a configuration that supports radio coexistence and a front end module. It takes the place of calling RAIL_ConfigChannels. After this call, channels 11-26 will be available, giving the frequencies of those channels on channel page 0, as defined by IEEE 802.15.4-2011 section 8.1.2.2.

Note
This call implicitly disables all RAIL_IEEE802154_GOptions_t.

◆ RAIL_IEEE802154_Config2p4GHzRadioCustom1()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioCustom1 ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation with custom settings.

It enables better interoperability with some proprietary PHYs, but doesn't guarantee data sheet performance.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation with custom settings. It replaces needing to call RAIL_ConfigChannels. Do not call this function unless instructed by Silicon Labs.

Note
This feature is only available on platforms where RAIL_IEEE802154_SUPPORTS_CUSTOM1_PHY is true.

◆ RAIL_IEEE802154_Config2p4GHzRadioFem()

RAIL_Status_t RAIL_IEEE802154_Config2p4GHzRadioFem ( RAIL_Handle_t  railHandle)

Configure the radio for 2.4 GHz 802.15.4 operation with a front end module.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for 2.4 GHz operation, but with a configuration that supports a front end module. It takes the place of calling RAIL_ConfigChannels. After this call, channels 11-26 will be available, giving the frequencies of those channels on channel page 0, as defined by IEEE 802.15.4-2011 section 8.1.2.2.

Note
This call implicitly disables all RAIL_IEEE802154_GOptions_t.

◆ RAIL_IEEE802154_ConfigCcaMode()

RAIL_Status_t RAIL_IEEE802154_ConfigCcaMode ( RAIL_Handle_t  railHandle,
RAIL_IEEE802154_CcaMode_t  ccaMode 
)

Set 802.15.4 CCA mode.

Parameters
[in]railHandleA RAIL instance handle.
[in]ccaModeMode of CCA operation.

This function sets the CCA mode RAIL_IEEE802154_CcaMode_t. If not called, RAIL_IEEE802154_CCA_MODE_RSSI (RSSI-based CCA) is used for CCA.

In RAIL_IEEE802154_CCA_MODE_SIGNAL, RAIL_IEEE802154_CCA_MODE_SIGNAL_OR_RSSI and RAIL_IEEE802154_CCA_MODE_SIGNAL_AND_RSSI signal identifier is enabled for the duration of LBT. If previously enabled by RAIL_IEEE802154_ConfigSignalIdentifier, the signal identifier will remain active until triggered.

This function is only supported by chips where RAIL_IEEE802154_SUPPORTS_SIGNAL_IDENTIFIER and RAIL_IEEE802154_SupportsSignalIdentifier() are true.

Returns
Status code indicating success of the function call. An error should be returned if ccaMode is unsuppported on a given device.

◆ RAIL_IEEE802154_ConfigEOptions()

RAIL_Status_t RAIL_IEEE802154_ConfigEOptions ( RAIL_Handle_t  railHandle,
RAIL_IEEE802154_EOptions_t  mask,
RAIL_IEEE802154_EOptions_t  options 
)

Configure certain 802.15.4E-2012 / 802.15.4-2015 Frame Version 2 features.

Parameters
[in]railHandleA handle of RAIL instance.
[in]maskA bitmask containing which options should be modified.
[in]optionsA bitmask containing desired options settings. Bit positions for each option are found in the RAIL_IEEE802154_EOptions_t.
Returns
A status code indicating success of the function call.

This function will fail if 802.15.4 hardware acceleration is not currently enabled or the platform does not support the feature(s). These settings may be changed at any time when 802.15.4 hardware acceleration is enabled.

◆ RAIL_IEEE802154_ConfigGB863MHzRadio()

RAIL_Status_t RAIL_IEEE802154_ConfigGB863MHzRadio ( RAIL_Handle_t  railHandle)

Configure the radio for SubGHz GB868 863 MHz 802.15.4 operation.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for SubGHz GB868 863 MHz operation. It takes the place of calling RAIL_ConfigChannels. After this call, GB868 channels in the 863 MHz band (channel pages 28, 29, and 30 – logical channels 0x80..0x9A, 0xA0..0xA8, 0xC0..0xDA, respectively) will be available, as defined by Rev 22 of the Zigbee Specification, 2017 document 05-3474-22, section D.10.2.1.3.2.

Note
This call implicitly enables RAIL_IEEE802154_G_OPTION_GB868.

◆ RAIL_IEEE802154_ConfigGB915MHzRadio()

RAIL_Status_t RAIL_IEEE802154_ConfigGB915MHzRadio ( RAIL_Handle_t  railHandle)

Configure the radio for SubGHz GB868 915 MHz 802.15.4 operation.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

This initializes the radio for SubGHz GB868 915 MHz operation. It takes the place of calling RAIL_ConfigChannels. After this call, GB868 channels in the 915 MHz band (channel page 31 – logical channels 0xE0..0xFA) will be available, as defined by Rev 22 of the Zigbee Specification, 2017 document 05-3474-22, section D.10.2.1.3.2.

Note
This call implicitly enables RAIL_IEEE802154_G_OPTION_GB868.

◆ RAIL_IEEE802154_ConfigGOptions()

RAIL_Status_t RAIL_IEEE802154_ConfigGOptions ( RAIL_Handle_t  railHandle,
RAIL_IEEE802154_GOptions_t  mask,
RAIL_IEEE802154_GOptions_t  options 
)

Configure certain 802.15.4G-2012 / 802.15.4-2015 SUN PHY features (only for radio configurations designed accordingly).

Parameters
[in]railHandleA handle of RAIL instance.
[in]maskA bitmask containing which options should be modified.
[in]optionsA bitmask containing desired options settings. Bit positions for each option are found in the RAIL_IEEE802154_GOptions_t.
Returns
A status code indicating success of the function call.

This function will fail if 802.15.4 hardware acceleration is not currently enabled, the platform does not support the feature(s), the radio configuration is not appropriate, or the radio is not idle.

◆ RAIL_IEEE802154_ConfigSignalIdentifier()

RAIL_Status_t RAIL_IEEE802154_ConfigSignalIdentifier ( RAIL_Handle_t  railHandle,
RAIL_IEEE802154_SignalIdentifierMode_t  signalIdentifierMode 
)

Configure signal identifier for 802.15.4 signal detection.

Parameters
[in]railHandleA RAIL instance handle.
[in]signalIdentifierModeMode of signal identifier operation.

This features allows detection of 2.4Ghz 802.15.4 signal on air. This function must be called once before RAIL_IEEE802154_EnableSignalDetection to configure and enable signal identifier.

To enable event for signal detection RAIL_ConfigEvents() must be called for enabling RAIL_EVENT_SIGNAL_DETECTED.

This function is only supported by chips where RAIL_IEEE802154_SUPPORTS_SIGNAL_IDENTIFIER and RAIL_IEEE802154_SupportsSignalIdentifier() are true.

Returns
Status code indicating success of the function call.

◆ RAIL_IEEE802154_ConvertRssiToEd()

uint8_t RAIL_IEEE802154_ConvertRssiToEd ( int8_t  rssiDbm)

Convert RSSI into 802.15.4 Energy Detection (ED) metric compatible with the Silicon Labs Zigbee stack.

Parameters
[in]rssiDbmThe RSSI in dBm, for example from RAIL_RxPacketDetails_t::rssi.
Returns
An Energy Detect value (range 0..255 but not all intermediate values are possible) based on the rssiDbm and the chip's RSSI sensitivity range.

◆ RAIL_IEEE802154_ConvertRssiToLqi()

uint8_t RAIL_IEEE802154_ConvertRssiToLqi ( uint8_t  origLqi,
int8_t  rssiDbm 
)

Convert RSSI into 802.15.4 Link Quality Indication (LQI) metric compatible with the Silicon Labs Zigbee stack.

Parameters
[in]origLqiThe original LQI, for example from RAIL_RxPacketDetails_t::lqi. This parameter is not currently used but may be used in the future.
[in]rssiDbmThe RSSI in dBm, for example from RAIL_RxPacketDetails_t::rssi.
Returns
An LQI value (range 0..255 but not all intermediate values are possible) based on the rssiDbm and the chip's RSSI sensitivity range.

This function is compatible with RAIL_ConvertLqiCallback_t and is suitable to pass to RAIL_ConvertLqi().

◆ RAIL_IEEE802154_Deinit()

RAIL_Status_t RAIL_IEEE802154_Deinit ( RAIL_Handle_t  railHandle)

De-initialize IEEE802.15.4 hardware acceleration.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
A status code indicating success of the function call.

Disables and resets all IEE802.15.4 hardware acceleration features. This function should only be called when the radio is IDLE. This calls the following:

◆ RAIL_IEEE802154_EnableDataFramePending()

RAIL_Status_t RAIL_IEEE802154_EnableDataFramePending ( RAIL_Handle_t  railHandle,
bool  enable 
)

Enable Frame Pending lookup event notification (RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND) for MAC Data frames.

Parameters
[in]railHandleA handle of RAIL instance.
[in]enableTrue to enable, false to disable.
Returns
A status code indicating success of the function call.

Normally RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND is triggered only for ACK-requesting MAC command frames. Enabling this feature causes this event to also be triggered for MAC data frames, at the same point in the packet as RAIL_IEEE802154_EnableEarlyFramePending() would trigger. This feature is necessary to support the Thread Basil-Hayden Enhanced Frame Pending feature in Version 0/1 frames, and to support Version 2 Data frames which require an Enhanced ACK.

This function will fail if 802.15.4 hardware acceleration is not currently enabled. This setting may be changed at any time when 802.15.4 hardware acceleration is enabled.

◆ RAIL_IEEE802154_EnableEarlyFramePending()

RAIL_Status_t RAIL_IEEE802154_EnableEarlyFramePending ( RAIL_Handle_t  railHandle,
bool  enable 
)

Enable early Frame Pending lookup event notification (RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND).

Parameters
[in]railHandleA handle of RAIL instance.
[in]enableTrue to enable, false to disable.
Returns
A status code indicating success of the function call.

Normally, RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND is triggered after receiving the entire MAC header and MAC command byte for an ACK-requesting MAC command frame. Version 0/1 frames also require that command to be a Data Request for this event to occur. Enabling this feature causes this event to be triggered earlier to allow for more time to determine the type of ACK needed (Immediate or Enhanced) and/or perform frame pending lookup to influence the outgoing ACK by using RAIL_IEEE802154_WriteEnhAck() or RAIL_IEEE802154_ToggleFramePending().

For Frame Version 0/1 packets and for Frame Version 2 packets when RAIL_IEEE802154_E_OPTION_ENH_ACK is not in use, "early" means right after receiving the source address information in the MAC header.

For Frame Version 2 packets when RAIL_IEEE802154_E_OPTION_ENH_ACK is in use, "early" means right after receiving any Auxiliary Security header which follows the source address information in the MAC header.

This feature is useful when the protocol knows an ACK-requesting MAC Command must be a data poll without needing to receive the MAC Command byte, giving it a bit more time to adjust Frame Pending or generate an Enhanced ACK.

This function will fail if 802.15.4 hardware acceleration is not currently enabled, or on platforms that do not support this feature. This setting may be changed at any time when 802.15.4 hardware acceleration is enabled.

◆ RAIL_IEEE802154_EnableSignalDetection()

RAIL_Status_t RAIL_IEEE802154_EnableSignalDetection ( RAIL_Handle_t  railHandle,
bool  enable 
)

Enable or disable signal identifier for 802.15.4 signal detection.

Parameters
[in]railHandleA RAIL instance handle.
[in]enableSignal detection is enabled if true, disabled if false.

RAIL_IEEE802154_ConfigSignalIdentifier must be called once before calling this function to configure and enable signal identifier. Once a signal is detected signal detection will be turned off and this function should be called to re-enable the signal detection without needing to call RAIL_IEEE802154_ConfigSignalIdentifier if the signal identifier is already configured and enabled.

This function is only supported by chips where RAIL_IEEE802154_SUPPORTS_SIGNAL_IDENTIFIER and RAIL_IEEE802154_SupportsSignalIdentifier() are true.

Returns
Status code indicating success of the function call.

◆ RAIL_IEEE802154_GetAddress()

RAIL_Status_t RAIL_IEEE802154_GetAddress ( RAIL_Handle_t  railHandle,
RAIL_IEEE802154_Address_t pAddress 
)

Get the source address of the incoming data request.

Parameters
[in]railHandleA RAIL instance handle.
[out]pAddressA pointer to RAIL_IEEE802154_Address_t structure to populate with source address information.
Returns
A status code indicating success of the function call.

This function must only be called when handling the RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND event. This will return RAIL_STATUS_INVALID_STATE if the address information is stale (i.e., it is too late to affect the outgoing ACK).

◆ RAIL_IEEE802154_GetPtiRadioConfig()

RAIL_IEEE802154_PtiRadioConfig_t RAIL_IEEE802154_GetPtiRadioConfig ( RAIL_Handle_t  railHandle)

Return IEEE802.15.4 PTI radio config.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
PTI (Packet Trace Information) radio config ID.

◆ RAIL_IEEE802154_Init()

RAIL_Status_t RAIL_IEEE802154_Init ( RAIL_Handle_t  railHandle,
const RAIL_IEEE802154_Config_t config 
)

Initialize RAIL for IEEE802.15.4 features.

Parameters
[in]railHandleA handle of RAIL instance.
[in]configAn IEEE802154 configuration structure.
Returns
A status code indicating success of the function call.

This function calls the following RAIL functions to configure the radio for IEEE802.15.4 features.

Initializes the following:

  • Enables IEEE802154 hardware acceleration
  • Configures RAIL Auto ACK functionality
  • Configures RAIL Address Filter for 802.15.4 address filtering

It saves having to call the following functions individually:

◆ RAIL_IEEE802154_IsEnabled()

bool RAIL_IEEE802154_IsEnabled ( RAIL_Handle_t  railHandle)

Return whether IEEE802.15.4 hardware acceleration is currently enabled.

Parameters
[in]railHandleA handle of RAIL instance.
Returns
True if IEEE802.15.4 hardware acceleration was enabled to start with and false otherwise.

◆ RAIL_IEEE802154_SetAddresses()

RAIL_Status_t RAIL_IEEE802154_SetAddresses ( RAIL_Handle_t  railHandle,
const RAIL_IEEE802154_AddrConfig_t addresses 
)

Configure the RAIL Address Filter for 802.15.4 filtering.

Parameters
[in]railHandleA handle of RAIL instance.
[in]addressesThe address information that should be used.
Returns
A status code indicating success of the function call. If this returns an error, the 802.15.4 address filter is in an undefined state.

Set up the 802.15.4 address filter to accept messages to the given addresses. This will return false if any of the addresses failed to be set. If NULL is passed in for addresses, all addresses will be set to their reset value.

◆ RAIL_IEEE802154_SetFramePending()

RAIL_Status_t RAIL_IEEE802154_SetFramePending ( RAIL_Handle_t  railHandle)

Change the Frame Pending bit on the outgoing legacy Immediate ACK from the default specified by RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks.

Parameters
[in]railHandleA handle of RAIL instance
Returns
A status code indicating success of the function call.

This function must only be called while processing the RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND if the ACK for this packet should go out with its Frame Pending bit set differently than what was specified by RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks.

It's intended only for use with 802.15.4 legacy immediate ACKs and not 802.15.4E enhanced ACKs. This will return RAIL_STATUS_INVALID_STATE if it is too late to modify the outgoing Immediate ACK.

Note
This function is used to set the Frame Pending bit but its meaning depends on the value of RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks while transmitting ACK. If RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks is not set, then Frame Pending bit is set in outgoing ACK. Whereas, if RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks is set, then Frame Pending bit is cleared in outgoing ACK.

Therefore, this function is to be called if the frame is pending when RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks is not set or if there is no frame pending when RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks is set.

◆ RAIL_IEEE802154_SetLongAddress()

RAIL_Status_t RAIL_IEEE802154_SetLongAddress ( RAIL_Handle_t  railHandle,
const uint8_t *  longAddr,
uint8_t  index 
)

Set a long address for 802.15.4 address filtering.

Parameters
[in]railHandleA handle of RAIL instance.
[in]longAddrA pointer to an 8-byte array containing the long address information. The long address must be in over-the-air byte order. This will be matched against the destination long address of incoming messages. Set to 0x00 00 00 00 00 00 00 00 to disable for this index.
[in]indexIndicates which long address to set. Must be below RAIL_IEEE802154_MAX_ADDRESSES.
Returns
A status code indicating success of the function call.

Set up the 802.15.4 address filter to accept messages to the given long address.

◆ RAIL_IEEE802154_SetPanCoordinator()

RAIL_Status_t RAIL_IEEE802154_SetPanCoordinator ( RAIL_Handle_t  railHandle,
bool  isPanCoordinator 
)

Set whether the current node is a PAN coordinator.

Parameters
[in]railHandleA handle of RAIL instance.
[in]isPanCoordinatorTrue if this device is a PAN coordinator.
Returns
A status code indicating success of the function call.

If the device is a PAN Coordinator, it will accept data and command frames with no destination address. This function will fail if 802.15.4 hardware acceleration is not currently enabled. This setting may be changed at any time when 802.15.4 hardware acceleration is enabled.

◆ RAIL_IEEE802154_SetPanId()

RAIL_Status_t RAIL_IEEE802154_SetPanId ( RAIL_Handle_t  railHandle,
uint16_t  panId,
uint8_t  index 
)

Set a PAN ID for 802.15.4 address filtering.

Parameters
[in]railHandleA handle of RAIL instance.
[in]panIdThe 16-bit PAN ID information. This will be matched against the destination PAN ID of incoming messages. The PAN ID is sent little endian over the air, meaning panId[7:0] is first in the payload followed by panId[15:8]. Set to 0xFFFF to disable for this index.
[in]indexIndicates which PAN ID to set. Must be below RAIL_IEEE802154_MAX_ADDRESSES.
Returns
A status code indicating success of the function call.

Set up the 802.15.4 address filter to accept messages to the given PAN ID.

◆ RAIL_IEEE802154_SetPromiscuousMode()

RAIL_Status_t RAIL_IEEE802154_SetPromiscuousMode ( RAIL_Handle_t  railHandle,
bool  enable 
)

Set whether to enable 802.15.4 promiscuous mode.

Parameters
[in]railHandleA handle of RAIL instance.
[in]enableTrue if all frames and addresses should be accepted.
Returns
A status code indicating success of the function call.

If promiscuous mode is enabled, no frame or address filtering steps will be performed other than checking the CRC. This function will fail if 802.15.4 hardware acceleration is not currently enabled. This setting may be changed at any time when 802.15.4 hardware acceleration is enabled.

◆ RAIL_IEEE802154_SetShortAddress()

RAIL_Status_t RAIL_IEEE802154_SetShortAddress ( RAIL_Handle_t  railHandle,
uint16_t  shortAddr,
uint8_t  index 
)

Set a short address for 802.15.4 address filtering.

Parameters
[in]railHandleA handle of RAIL instance
[in]shortAddr16 bit short address value. This will be matched against the destination short address of incoming messages. The short address is sent little endian over the air meaning shortAddr[7:0] is first in the payload followed by shortAddr[15:8]. Set to 0xFFFF to disable for this index.
[in]indexWhich short address to set. Must be below RAIL_IEEE802154_MAX_ADDRESSES.
Returns
A status code indicating success of the function call.

Set up the 802.15.4 address filter to accept messages to the given short address.

◆ RAIL_IEEE802154_WriteEnhAck()

RAIL_Status_t RAIL_IEEE802154_WriteEnhAck ( RAIL_Handle_t  railHandle,
const uint8_t *  ackData,
uint8_t  ackDataLen 
)

Write the AutoACK FIFO for the next outgoing 802.15.4E Enhanced ACK.

Parameters
[in]railHandleA handle of RAIL instance.
[in]ackDataPointer to ACK data to transmit
[in]ackDataLenLength of ACK data, in bytes
Returns
A status code indicating success of the function call.

This function sets the AutoACK data to use in acknowledging the frame being received. It must only be called while processing the RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND, and is intended for use when packet information from RAIL_GetRxIncomingPacketInfo() indicates an 802.15.4E Enhanced ACK must be sent instead of a legacy Immediate ACK. RAIL_IEEE802154_ToggleFramePending() should not be called for an Enhanced ACK; instead the Enhanced ACK's Frame Control Field should have the Frame Pending bit set appropriately in its ackData. This will return RAIL_STATUS_INVALID_STATE if it is too late to write the outgoing ACK – a situation that will likely trigger a RAIL_EVENT_TXACK_UNDERFLOW event. When successful, the Enhanced ackData will only be sent once. Subsequent packets needing an Enhanced ACK will each need to call this function to write their ACK information.