This module includes the platform abstraction for radio operations.

Functions

otRadioState otPlatRadioGetState ( otInstance *aInstance)
Get current state of the radio.
otError otPlatRadioEnable ( otInstance *aInstance)
Enable the radio.
otError otPlatRadioDisable ( otInstance *aInstance)
Disable the radio.
bool otPlatRadioIsEnabled ( otInstance *aInstance)
Check whether radio is enabled or not.
otError otPlatRadioSleep ( otInstance *aInstance)
Transition the radio from Receive to Sleep (turn off the radio).
otError otPlatRadioReceive ( otInstance *aInstance, uint8_t aChannel)
Transition the radio from Sleep to Receive (turn on the radio).
void otPlatRadioReceiveDone ( otInstance *aInstance, otRadioFrame *aFrame, otError aError)
The radio driver calls this method to notify OpenThread of a received frame.
void otPlatDiagRadioReceiveDone ( otInstance *aInstance, otRadioFrame *aFrame, otError aError)
The radio driver calls this method to notify OpenThread diagnostics module of a received frame.
otRadioFrame * otPlatRadioGetTransmitBuffer ( otInstance *aInstance)
Get the radio transmit frame buffer.
otError otPlatRadioTransmit ( otInstance *aInstance, otRadioFrame *aFrame)
Begin the transmit sequence on the radio.
void otPlatRadioTxStarted ( otInstance *aInstance, otRadioFrame *aFrame)
The radio driver calls this method to notify OpenThread that the transmission has started.
void otPlatRadioTxDone ( otInstance *aInstance, otRadioFrame *aFrame, otRadioFrame *aAckFrame, otError aError)
The radio driver calls this function to notify OpenThread that the transmit operation has completed, providing both the transmitted frame and, if applicable, the received ack frame.
void otPlatDiagRadioTransmitDone ( otInstance *aInstance, otRadioFrame *aFrame, otError aError)
The radio driver calls this method to notify OpenThread diagnostics module that the transmission has completed.
int8_t otPlatRadioGetRssi ( otInstance *aInstance)
Get the most recent RSSI measurement.
otError otPlatRadioEnergyScan ( otInstance *aInstance, uint8_t aScanChannel, uint16_t aScanDuration)
Begin the energy scan sequence on the radio.
void otPlatRadioEnergyScanDone ( otInstance *aInstance, int8_t aEnergyScanMaxRssi)
The radio driver calls this method to notify OpenThread that the energy scan is complete.
void otPlatRadioEnableSrcMatch ( otInstance *aInstance, bool aEnable)
Enable/Disable source address match feature.
otError otPlatRadioAddSrcMatchShortEntry ( otInstance *aInstance, otShortAddress aShortAddress)
Add a short address to the source address match table.
otError otPlatRadioAddSrcMatchExtEntry ( otInstance *aInstance, const otExtAddress *aExtAddress)
Add an extended address to the source address match table.
otError otPlatRadioClearSrcMatchShortEntry ( otInstance *aInstance, otShortAddress aShortAddress)
Remove a short address from the source address match table.
otError otPlatRadioClearSrcMatchExtEntry ( otInstance *aInstance, const otExtAddress *aExtAddress)
Remove an extended address from the source address match table.
void otPlatRadioClearSrcMatchShortEntries ( otInstance *aInstance)
Clear all short addresses from the source address match table.
void otPlatRadioClearSrcMatchExtEntries ( otInstance *aInstance)
Clear all the extended/long addresses from source address match table.
uint32_t otPlatRadioGetSupportedChannelMask ( otInstance *aInstance)
Get the radio supported channel mask that the device is allowed to be on.
uint32_t otPlatRadioGetPreferredChannelMask ( otInstance *aInstance)
Get the radio preferred channel mask that the device prefers to form on.
otError otPlatRadioSetCoexEnabled ( otInstance *aInstance, bool aEnabled)
Enable the radio coex.
bool otPlatRadioIsCoexEnabled ( otInstance *aInstance)
Check whether radio coex is enabled or not.
otError otPlatRadioGetCoexMetrics ( otInstance *aInstance, otRadioCoexMetrics *aCoexMetrics)
Get the radio coexistence metrics.
otError otPlatRadioEnableCsl ( otInstance *aInstance, uint32_t aCslPeriod, const otExtAddress *aExtAddr)
Enable or disable CSL receiver.
void otPlatRadioUpdateCslSampleTime ( otInstance *aInstance, uint32_t aCslSampleTime)
Update CSL sample time in radio driver.

Detailed Description

This module includes the platform abstraction for radio operations.

Function Documentation

otPlatDiagRadioReceiveDone()

void otPlatDiagRadioReceiveDone ( otInstance * aInstance,
otRadioFrame * aFrame,
otError aError
)

The radio driver calls this method to notify OpenThread diagnostics module of a received frame.

This function is used when diagnostics is enabled.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aFrame A pointer to the received frame or NULL if the receive operation failed.
[in] aError OT_ERROR_NONE when successfully received a frame, OT_ERROR_ABORT when reception was aborted and a frame was not received, OT_ERROR_NO_BUFS when a frame could not be received due to lack of rx buffer space.

otPlatDiagRadioTransmitDone()

void otPlatDiagRadioTransmitDone ( otInstance * aInstance,
otRadioFrame * aFrame,
otError aError
)

The radio driver calls this method to notify OpenThread diagnostics module that the transmission has completed.

This function is used when diagnostics is enabled.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aFrame A pointer to the frame that was transmitted.
[in] aError OT_ERROR_NONE when the frame was transmitted, OT_ERROR_CHANNEL_ACCESS_FAILURE tx could not take place due to activity on the channel, OT_ERROR_ABORT when transmission was aborted for other reasons.

otPlatRadioAddSrcMatchExtEntry()

otError otPlatRadioAddSrcMatchExtEntry ( otInstance * aInstance,
const otExtAddress * aExtAddress
)

Add an extended address to the source address match table.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aExtAddress The extended address to be added stored in little-endian byte order.
Return values
OT_ERROR_NONE Successfully added extended address to the source match table.
OT_ERROR_NO_BUFS No available entry in the source match table.

otPlatRadioAddSrcMatchShortEntry()

otError otPlatRadioAddSrcMatchShortEntry ( otInstance * aInstance,
otShortAddress aShortAddress
)

Add a short address to the source address match table.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aShortAddress The short address to be added.
Return values
OT_ERROR_NONE Successfully added short address to the source match table.
OT_ERROR_NO_BUFS No available entry in the source match table.

otPlatRadioClearSrcMatchExtEntries()

void otPlatRadioClearSrcMatchExtEntries ( otInstance * aInstance )

Clear all the extended/long addresses from source address match table.

Parameters
[in] aInstance The OpenThread instance structure.

otPlatRadioClearSrcMatchExtEntry()

otError otPlatRadioClearSrcMatchExtEntry ( otInstance * aInstance,
const otExtAddress * aExtAddress
)

Remove an extended address from the source address match table.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aExtAddress The extended address to be removed stored in little-endian byte order.
Return values
OT_ERROR_NONE Successfully removed the extended address from the source match table.
OT_ERROR_NO_ADDRESS The extended address is not in source address match table.

otPlatRadioClearSrcMatchShortEntries()

void otPlatRadioClearSrcMatchShortEntries ( otInstance * aInstance )

Clear all short addresses from the source address match table.

Parameters
[in] aInstance The OpenThread instance structure.

otPlatRadioClearSrcMatchShortEntry()

otError otPlatRadioClearSrcMatchShortEntry ( otInstance * aInstance,
otShortAddress aShortAddress
)

Remove a short address from the source address match table.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aShortAddress The short address to be removed.
Return values
OT_ERROR_NONE Successfully removed short address from the source match table.
OT_ERROR_NO_ADDRESS The short address is not in source address match table.

otPlatRadioDisable()

otError otPlatRadioDisable ( otInstance * aInstance )

Disable the radio.

Parameters
[in] aInstance The OpenThread instance structure.
Return values
OT_ERROR_NONE Successfully transitioned to Disabled.
OT_ERROR_INVALID_STATE The radio was not in sleep state.

otPlatRadioEnable()

otError otPlatRadioEnable ( otInstance * aInstance )

Enable the radio.

Parameters
[in] aInstance The OpenThread instance structure.
Return values
OT_ERROR_NONE Successfully enabled.
OT_ERROR_FAILED The radio could not be enabled.

otPlatRadioEnableCsl()

otError otPlatRadioEnableCsl ( otInstance * aInstance,
uint32_t aCslPeriod,
const otExtAddress * aExtAddr
)

Enable or disable CSL receiver.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aCslPeriod CSL period, 0 for disabling CSL.
[in] aExtAddr The extended source address of CSL receiver's parent device (when the platforms generate enhanced ack, platforms may need to know acks to which address should include CSL IE).
Return values
OT_ERROR_NOT_SUPPORTED Radio driver doesn't support CSL.
OT_ERROR_FAILED Other platform specific errors.
OT_ERROR_NONE Successfully enabled or disabled CSL.

otPlatRadioEnableSrcMatch()

void otPlatRadioEnableSrcMatch ( otInstance * aInstance,
bool aEnable
)

Enable/Disable source address match feature.

The source address match feature controls how the radio layer decides the "frame pending" bit for acks sent in response to data request commands from children.

If disabled, the radio layer must set the "frame pending" on all acks to data request commands.

If enabled, the radio layer uses the source address match table to determine whether to set or clear the "frame pending" bit in an ack to a data request command.

The source address match table provides the list of children for which there is a pending frame. Either a short address or an extended/long address can be added to the source address match table.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aEnable Enable/disable source address match feature.

otPlatRadioEnergyScan()

otError otPlatRadioEnergyScan ( otInstance * aInstance,
uint8_t aScanChannel,
uint16_t aScanDuration
)

Begin the energy scan sequence on the radio.

This function is used when radio provides OT_RADIO_CAPS_ENERGY_SCAN capability.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aScanChannel The channel to perform the energy scan on.
[in] aScanDuration The duration, in milliseconds, for the channel to be scanned.
Return values
OT_ERROR_NONE Successfully started scanning the channel.
OT_ERROR_NOT_IMPLEMENTED The radio doesn't support energy scanning.

otPlatRadioEnergyScanDone()

void otPlatRadioEnergyScanDone ( otInstance * aInstance,
int8_t aEnergyScanMaxRssi
)

The radio driver calls this method to notify OpenThread that the energy scan is complete.

This function is used when radio provides OT_RADIO_CAPS_ENERGY_SCAN capability.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aEnergyScanMaxRssi The maximum RSSI encountered on the scanned channel.

otPlatRadioGetCoexMetrics()

otError otPlatRadioGetCoexMetrics ( otInstance * aInstance,
otRadioCoexMetrics * aCoexMetrics
)

Get the radio coexistence metrics.

This function is used when feature OPENTHREAD_CONFIG_PLATFORM_RADIO_COEX_ENABLE is enabled.

Parameters
[in] aInstance The OpenThread instance structure.
[out] aCoexMetrics A pointer to the coexistence metrics structure.
Return values
OT_ERROR_NONE Successfully retrieved the coex metrics.
OT_ERROR_INVALID_ARGS aCoexMetrics was NULL.

otPlatRadioGetPreferredChannelMask()

uint32_t otPlatRadioGetPreferredChannelMask ( otInstance * aInstance )

Get the radio preferred channel mask that the device prefers to form on.

Parameters
[in] aInstance The OpenThread instance structure.
Returns
The radio preferred channel mask.

otPlatRadioGetRssi()

int8_t otPlatRadioGetRssi ( otInstance * aInstance )

Get the most recent RSSI measurement.

Parameters
[in] aInstance The OpenThread instance structure.
Returns
The RSSI in dBm when it is valid. 127 when RSSI is invalid.

otPlatRadioGetState()

otRadioState otPlatRadioGetState ( otInstance * aInstance )

Get current state of the radio.

This function is not required by OpenThread. It may be used for debugging and/or application-specific purposes.

Note
This function may be not implemented. It does not affect OpenThread.
Parameters
[in] aInstance The OpenThread instance structure.
Returns
Current state of the radio.

otPlatRadioGetSupportedChannelMask()

uint32_t otPlatRadioGetSupportedChannelMask ( otInstance * aInstance )

Get the radio supported channel mask that the device is allowed to be on.

Parameters
[in] aInstance The OpenThread instance structure.
Returns
The radio supported channel mask.

otPlatRadioGetTransmitBuffer()

otRadioFrame * otPlatRadioGetTransmitBuffer ( otInstance * aInstance )

Get the radio transmit frame buffer.

OpenThread forms the IEEE 802.15.4 frame in this buffer then calls otPlatRadioTransmit() to request transmission.

Parameters
[in] aInstance The OpenThread instance structure.
Returns
A pointer to the transmit frame buffer.

otPlatRadioIsCoexEnabled()

bool otPlatRadioIsCoexEnabled ( otInstance * aInstance )

Check whether radio coex is enabled or not.

This function is used when feature OPENTHREAD_CONFIG_PLATFORM_RADIO_COEX_ENABLE is enabled.

Parameters
[in] aInstance The OpenThread instance structure.
Returns
TRUE if the radio coex is enabled, FALSE otherwise.

otPlatRadioIsEnabled()

bool otPlatRadioIsEnabled ( otInstance * aInstance )

Check whether radio is enabled or not.

Parameters
[in] aInstance The OpenThread instance structure.
Returns
TRUE if the radio is enabled, FALSE otherwise.

otPlatRadioReceive()

otError otPlatRadioReceive ( otInstance * aInstance,
uint8_t aChannel
)

Transition the radio from Sleep to Receive (turn on the radio).

Parameters
[in] aInstance The OpenThread instance structure.
[in] aChannel The channel to use for receiving.
Return values
OT_ERROR_NONE Successfully transitioned to Receive.
OT_ERROR_INVALID_STATE The radio was disabled or transmitting.

otPlatRadioReceiveDone()

void otPlatRadioReceiveDone ( otInstance * aInstance,
otRadioFrame * aFrame,
otError aError
)

The radio driver calls this method to notify OpenThread of a received frame.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aFrame A pointer to the received frame or NULL if the receive operation failed.
[in] aError OT_ERROR_NONE when successfully received a frame, OT_ERROR_ABORT when reception was aborted and a frame was not received, OT_ERROR_NO_BUFS when a frame could not be received due to lack of rx buffer space.

otPlatRadioSetCoexEnabled()

otError otPlatRadioSetCoexEnabled ( otInstance * aInstance,
bool aEnabled
)

Enable the radio coex.

This function is used when feature OPENTHREAD_CONFIG_PLATFORM_RADIO_COEX_ENABLE is enabled.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aEnabled TRUE to enable the radio coex, FALSE otherwise.
Return values
OT_ERROR_NONE Successfully enabled.
OT_ERROR_FAILED The radio coex could not be enabled.

otPlatRadioSleep()

otError otPlatRadioSleep ( otInstance * aInstance )

Transition the radio from Receive to Sleep (turn off the radio).

Parameters
[in] aInstance The OpenThread instance structure.
Return values
OT_ERROR_NONE Successfully transitioned to Sleep.
OT_ERROR_BUSY The radio was transmitting.
OT_ERROR_INVALID_STATE The radio was disabled.

otPlatRadioTransmit()

otError otPlatRadioTransmit ( otInstance * aInstance,
otRadioFrame * aFrame
)

Begin the transmit sequence on the radio.

The caller must form the IEEE 802.15.4 frame in the buffer provided by otPlatRadioGetTransmitBuffer() before requesting transmission. The channel and transmit power are also included in the otRadioFrame structure.

The transmit sequence consists of:

  1. Transitioning the radio to Transmit from one of the following states:
    • Receive if RX is on when the device is idle or OT_RADIO_CAPS_SLEEP_TO_TX is not supported
    • Sleep if RX is off when the device is idle and OT_RADIO_CAPS_SLEEP_TO_TX is supported.
  2. Transmits the psdu on the given channel and at the given transmit power.
Parameters
[in] aInstance The OpenThread instance structure.
[in] aFrame A pointer to the frame to be transmitted.
Return values
OT_ERROR_NONE Successfully transitioned to Transmit.
OT_ERROR_INVALID_STATE The radio was not in the Receive state.

otPlatRadioTxDone()

void otPlatRadioTxDone ( otInstance * aInstance,
otRadioFrame * aFrame,
otRadioFrame * aAckFrame,
otError aError
)

The radio driver calls this function to notify OpenThread that the transmit operation has completed, providing both the transmitted frame and, if applicable, the received ack frame.

When radio provides OT_RADIO_CAPS_TRANSMIT_SEC capability, radio platform layer updates aFrame with the security frame counter and key index values maintained by the radio.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aFrame A pointer to the frame that was transmitted.
[in] aAckFrame A pointer to the ACK frame, NULL if no ACK was received.
[in] aError OT_ERROR_NONE when the frame was transmitted, OT_ERROR_NO_ACK when the frame was transmitted but no ACK was received, OT_ERROR_CHANNEL_ACCESS_FAILURE tx could not take place due to activity on the channel, OT_ERROR_ABORT when transmission was aborted for other reasons.

otPlatRadioTxStarted()

void otPlatRadioTxStarted ( otInstance * aInstance,
otRadioFrame * aFrame
)

The radio driver calls this method to notify OpenThread that the transmission has started.

Note
This function should be called by the same thread that executes all of the other OpenThread code. It should not be called by ISR or any other task.
Parameters
[in] aInstance A pointer to the OpenThread instance structure.
[in] aFrame A pointer to the frame that is being transmitted.

otPlatRadioUpdateCslSampleTime()

void otPlatRadioUpdateCslSampleTime ( otInstance * aInstance,
uint32_t aCslSampleTime
)

Update CSL sample time in radio driver.

Sample time is stored in radio driver as a copy to calculate phase when sending ACK with CSL IE.

Parameters
[in] aInstance The OpenThread instance structure.
[in] aCslSampleTime The latest sample time.