Radio Control Layer (RCL)
ieee.c File Reference
#include <stdint.h>
#include <stdlib.h>
#include <ti/log/Log.h>
#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/rcl/RCL_Command.h>
#include <ti/drivers/rcl/RCL_Buffer.h>
#include <ti/drivers/rcl/RCL_Scheduler.h>
#include <ti/drivers/rcl/RCL_Profiling.h>
#include <ti/drivers/rcl/hal/hal.h>
#include <ti/drivers/rcl/commands/ieee.h>
#include <ti/devices/DeviceFamily.h>
+ Include dependency graph for ieee.c:

Data Structures

struct  .common
 
union  .__unnamed__
 
struct  .__unnamed__.txTest
 
struct  .__unnamed__.rxTx
 

Macros

#define RCL_HANDLER_IEEE_PRBS9_POLY   0x08800000
 
#define RCL_HANDLER_IEEE_PRBS15_POLY   0x80020000
 
#define RCL_HANDLER_IEEE_PRBS32_POLY   0x00400007
 
#define RCL_HANDLER_IEEE_PRBS_INIT   0x0000001F
 
#define RCL_HANDLER_IEEE_RESTORE_NONE   0x0000
 
#define RCL_HANDLER_IEEE_RESTORE_MODCTRL   0x0001
 
#define RCL_HANDLER_IEEE_RESTORE_WHITEN_POLY   0x0002
 
#define RCL_HANDLER_IEEE_RESTORE_SFD   0x0004
 
#define IEEE_PHY_HDR_LEN   1
 
#define IEEE_MAC_FCF_LEN   2
 
#define IEEE_BACKOFF_PERIOD   RCL_SCHEDULER_SYSTIM_US(320)
 
#define IEEE_CCA_START_TIME_MARGIN   RCL_SCHEDULER_SYSTIM_US(192)
 

Enumerations

enum  RCL_Handler_Ieee_TxState {
  txStateNoTx, txStateNewAction, txStateSetupCca, txStateWaitForCca,
  txStateSetTxTime, txStateWaitForTx, txStateTx, txStateTxRx,
  txStateTxRxAck, txStateCheckAck, txStateWaitForCmdEnd, txStateFinished
}
 
enum  RCL_Handler_Ieee_RxState { rxStateNoRx, rxStateWaitForStart, rxStateRunning }
 
enum  RCL_Handler_Ieee_EventType { noEvent, customEvent, customHardStop }
 

Functions

static void RCL_Handler_Ieee_updateRxCurBufferAndFifo (List_List *rxBuffers)
 
static RCL_CommandStatus RCL_Handler_Ieee_findPbeErrorEndStatus (uint16_t pbeEndStatus)
 
static uint32_t RCL_Handler_Ieee_maskEventsByFifoConf (uint32_t mask, uint16_t fifoConfVal, bool activeUpdate)
 
static void RCL_Handler_Ieee_updateStats (RCL_StatsIeee *stats, uint32_t startTime)
 
static bool RCL_Handler_Ieee_initStats (RCL_StatsIeee *stats, uint32_t startTime)
 
static bool RCL_Handler_Ieee_setCustomEventTime (uint32_t eventTime, uint32_t timeMargin, bool hardStop)
 
static bool RCL_Handler_Ieee_restoreStopTime (void)
 
RCL_Events RCL_Handler_Ieee_RxTx (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_Events RCL_Handler_Ieee_TxTest (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_CommandStatus RCL_IEEE_Tx_submit (RCL_CmdIeeeRxTx *cmd, RCL_CmdIeee_TxAction *txAction)
 Update tx action. More...
 
RCL_CommandStatus RCL_IEEE_Tx_stop (RCL_CmdIeeeRxTx *cmd, RCL_StopType stopType)
 Stop a Tx action in an IEEE command. More...
 

Variables

struct {
   struct {
uint16_t txFifoSize
 
uint16_t rxFifoSize
 
RCL_CommandStatus endStatus
 
bool activeUpdate
 
bool apiHardStopPending
 
RCL_MultiBuffer * curBuffer
 
uint32_t nextEventTime
 
RCL_Handler_Ieee_EventType eventTimeType
 
   } common
 
   union {
      struct {
uint16_t restoreOpt
 
uint32_t storedWhitenPoly
 
uint32_t storedMdmSyncA
 
      } txTest
 
      struct {
RCL_Handler_Ieee_TxState txState
 
RCL_Handler_Ieee_RxState rxState
 
uint8_t ccaContentionWindow
 
bool waitingForValidRssi
 
bool allowTxDelay
 
bool alwaysStoreAck
 
uint8_t expSeqNo
 
uint32_t txStartTime
 
RCL_StopType txActionStop
 
      } rxTx
 
   } 
 
ieeeHandlerState
 

Data Structure Documentation

§ .common

struct .common
Data Fields
uint16_t txFifoSize
uint16_t rxFifoSize
RCL_CommandStatus endStatus
bool activeUpdate
bool apiHardStopPending
RCL_MultiBuffer * curBuffer
uint32_t nextEventTime
RCL_Handler_Ieee_EventType eventTimeType

§ .__unnamed__

union .__unnamed__
Data Fields
__unnamed__ txTest
__unnamed__ rxTx

§ .__unnamed__.txTest

struct .__unnamed__.txTest
Data Fields
uint16_t restoreOpt
uint32_t storedWhitenPoly
uint32_t storedMdmSyncA

§ .__unnamed__.rxTx

struct .__unnamed__.rxTx
Data Fields
RCL_Handler_Ieee_TxState txState
RCL_Handler_Ieee_RxState rxState
uint8_t ccaContentionWindow
bool waitingForValidRssi
bool allowTxDelay
bool alwaysStoreAck
uint8_t expSeqNo
uint32_t txStartTime
RCL_StopType txActionStop

Macro Definition Documentation

§ RCL_HANDLER_IEEE_PRBS9_POLY

#define RCL_HANDLER_IEEE_PRBS9_POLY   0x08800000

Polynomial to use for PRBS9 data

Referenced by RCL_Handler_Ieee_TxTest().

§ RCL_HANDLER_IEEE_PRBS15_POLY

#define RCL_HANDLER_IEEE_PRBS15_POLY   0x80020000

Polynomial to use for PRBS15 data

Referenced by RCL_Handler_Ieee_TxTest().

§ RCL_HANDLER_IEEE_PRBS32_POLY

#define RCL_HANDLER_IEEE_PRBS32_POLY   0x00400007

Polynomial to use for PRBS32 data

Referenced by RCL_Handler_Ieee_TxTest().

§ RCL_HANDLER_IEEE_PRBS_INIT

#define RCL_HANDLER_IEEE_PRBS_INIT   0x0000001F

Referenced by RCL_Handler_Ieee_TxTest().

§ RCL_HANDLER_IEEE_RESTORE_NONE

#define RCL_HANDLER_IEEE_RESTORE_NONE   0x0000

Referenced by RCL_Handler_Ieee_TxTest().

§ RCL_HANDLER_IEEE_RESTORE_MODCTRL

#define RCL_HANDLER_IEEE_RESTORE_MODCTRL   0x0001

Referenced by RCL_Handler_Ieee_TxTest().

§ RCL_HANDLER_IEEE_RESTORE_WHITEN_POLY

#define RCL_HANDLER_IEEE_RESTORE_WHITEN_POLY   0x0002

Referenced by RCL_Handler_Ieee_TxTest().

§ RCL_HANDLER_IEEE_RESTORE_SFD

#define RCL_HANDLER_IEEE_RESTORE_SFD   0x0004

Referenced by RCL_Handler_Ieee_TxTest().

§ IEEE_PHY_HDR_LEN

#define IEEE_PHY_HDR_LEN   1

Referenced by RCL_Handler_Ieee_RxTx().

§ IEEE_MAC_FCF_LEN

#define IEEE_MAC_FCF_LEN   2

Referenced by RCL_Handler_Ieee_RxTx().

§ IEEE_BACKOFF_PERIOD

#define IEEE_BACKOFF_PERIOD   RCL_SCHEDULER_SYSTIM_US(320)

Referenced by RCL_Handler_Ieee_RxTx().

§ IEEE_CCA_START_TIME_MARGIN

#define IEEE_CCA_START_TIME_MARGIN   RCL_SCHEDULER_SYSTIM_US(192)

Referenced by RCL_Handler_Ieee_RxTx().

Enumeration Type Documentation

§ RCL_Handler_Ieee_TxState

Enumerator
txStateNoTx 
txStateNewAction 
txStateSetupCca 
txStateWaitForCca 
txStateSetTxTime 
txStateWaitForTx 
txStateTx 
txStateTxRx 
txStateTxRxAck 
txStateCheckAck 
txStateWaitForCmdEnd 
txStateFinished 

§ RCL_Handler_Ieee_RxState

Enumerator
rxStateNoRx 
rxStateWaitForStart 
rxStateRunning 

§ RCL_Handler_Ieee_EventType

Enumerator
noEvent 
customEvent 
customHardStop 

Function Documentation

§ RCL_Handler_Ieee_updateRxCurBufferAndFifo()

static void RCL_Handler_Ieee_updateRxCurBufferAndFifo ( List_List *  rxBuffers)
static

§ RCL_Handler_Ieee_findPbeErrorEndStatus()

§ RCL_Handler_Ieee_maskEventsByFifoConf()

static uint32_t RCL_Handler_Ieee_maskEventsByFifoConf ( uint32_t  mask,
uint16_t  fifoConfVal,
bool  activeUpdate 
)
static

§ RCL_Handler_Ieee_updateStats()

static void RCL_Handler_Ieee_updateStats ( RCL_StatsIeee *  stats,
uint32_t  startTime 
)
static

Referenced by RCL_Handler_Ieee_RxTx().

§ RCL_Handler_Ieee_initStats()

static bool RCL_Handler_Ieee_initStats ( RCL_StatsIeee *  stats,
uint32_t  startTime 
)
static

References LRF_RSSI_INVALID.

Referenced by RCL_Handler_Ieee_RxTx().

§ RCL_Handler_Ieee_setCustomEventTime()

§ RCL_Handler_Ieee_restoreStopTime()

§ RCL_Handler_Ieee_RxTx()

RCL_Events RCL_Handler_Ieee_RxTx ( RCL_Command *  cmd,
LRF_Events  lrfEvents,
RCL_Events  rclEventsIn 
)

References RCL_SchedulerState::actualStartTime, RCL_CmdIeee_PanConfig::autoAckMode, customEvent, customHardStop, RCL_CmdIeee_PanConfig::defaultPend, hal_setup_sync_found_cap(), IEEE_BACKOFF_PERIOD, IEEE_CCA_START_TIME_MARGIN, IEEE_MAC_FCF_LEN, IEEE_PHY_HDR_LEN, ieeeHandlerState, RCL_CmdIeee_PanConfig::localExtAddr, RCL_CmdIeee_PanConfig::localPanId, RCL_CmdIeee_PanConfig::localShortAddr, LRF_clearHwInterrupt(), LRF_disable(), LRF_disableHwInterrupt(), LRF_disableSynthRefsys(), LRF_enable(), LRF_enableHwInterrupt(), LRF_enableSynthRefsys(), LRF_EventOpDone, LRF_EventOpError, LRF_EventRfesoft0, LRF_EventRxBufFull, LRF_EventRxCtrlAck, LRF_EventRxEmpty, LRF_EventRxIgnored, LRF_EventRxNok, LRF_EventRxOk, LRF_EventTxDone, LRF_getTxFifoWritable(), LRF_peekRxFifo(), LRF_prepareRxFifo(), LRF_prepareTxFifo(), LRF_programFrequency(), LRF_programTxPower(), LRF_readRssi(), LRF_readRxFifoWords(), LRF_RSSI_INVALID, LRF_sendHardStop(), LRF_waitForTopsmReady(), LRF_writeTxFifoWords(), RCL_CmdIeee_PanConfig::maxFrameVersion, noEvent, RCL_CmdIeee_PanConfig::panCoord, RCL_Buffer_DataEntry_paddedLen, RCL_CMD_IEEE_MAX_NUM_PAN, RCL_CmdIeee_AutoAck_ImmAckAutoPendAll, RCL_CmdIeee_AutoAck_ImmAckAutoPendDataReq, RCL_CmdIeee_AutoAck_ImmAckNoAutoPend, RCL_CmdIeee_AutoAck_Off, RCL_CmdIeee_CcaMode1Energy, RCL_CmdIeee_NoCca, RCL_CommandStatus_Active, RCL_CommandStatus_ChannelBusy, RCL_CommandStatus_DescheduledApi, RCL_CommandStatus_Error, RCL_CommandStatus_Error_MissingTxBuffer, RCL_CommandStatus_Error_Param, RCL_CommandStatus_Error_RxBufferCorruption, RCL_CommandStatus_Error_StartTooLate, RCL_CommandStatus_Error_TxBufferCorruption, RCL_CommandStatus_Finished, RCL_CommandStatus_GracefulStopApi, RCL_CommandStatus_HardStopApi, RCL_CommandStatus_isAnyStop, RCL_CommandStatus_NoSync, RCL_CommandStatus_RxErr, RCL_CommandStatus_Scheduled, RCL_Handler_Ieee_findPbeErrorEndStatus(), RCL_Handler_Ieee_initStats(), RCL_Handler_Ieee_maskEventsByFifoConf(), RCL_Handler_Ieee_restoreStopTime(), RCL_Handler_Ieee_setCustomEventTime(), RCL_Handler_Ieee_updateRxCurBufferAndFifo(), RCL_Handler_Ieee_updateStats(), RCL_MultiBuffer_commitBytes(), RCL_MultiBuffer_getBuffer(), RCL_MultiBuffer_getNextWritableByte(), RCL_ProfilingEvent_PostprocStart, RCL_ProfilingEvent_PreprocStop, RCL_Schedule_AbsTime, RCL_Schedule_Now, RCL_Scheduler_delta(), RCL_Scheduler_findStopStatus(), RCL_Scheduler_getCurrentTime(), RCL_Scheduler_isLater(), RCL_Scheduler_setCustomStartStopTimeEarliestStart(), RCL_Scheduler_setNewStartAbsTime(), RCL_Scheduler_setNewStartNow(), RCL_Scheduler_setStartStopTimeEarliestStart(), RCL_StopType_Graceful, RCL_StopType_Hard, RCL_StopType_None, rclSchedulerState, rxStateNoRx, rxStateRunning, rxStateWaitForStart, TxPowerResult_Ok, txStateCheckAck, txStateFinished, txStateNewAction, txStateNoTx, txStateSetTxTime, txStateSetupCca, txStateTx, txStateTxRx, txStateTxRxAck, txStateWaitForCca, txStateWaitForCmdEnd, and txStateWaitForTx.

§ RCL_Handler_Ieee_TxTest()

§ RCL_IEEE_Tx_submit()

RCL_CommandStatus RCL_IEEE_Tx_submit ( RCL_CmdIeeeRxTx *  cmd,
RCL_CmdIeee_TxAction *  txAction 
)

Update tx action.

Parameters
cmdExisting IEEE command to submit the TX on top of
txActionTX action to apply
Returns
RCL_CommandStatus result of the submission

References RCL_SchedulerState::currCmd, ieeeHandlerState, RCL_CommandStatus_Error, RCL_CommandStatus_Error_AlreadySubmitted, RCL_CommandStatus_Finished, RCL_CommandStatus_Idle, RCL_EventHandlerCmdUpdate, RCL_Scheduler_postEvent(), rclSchedulerState, txStateNewAction, and txStateNoTx.

§ RCL_IEEE_Tx_stop()

RCL_CommandStatus RCL_IEEE_Tx_stop ( RCL_CmdIeeeRxTx *  cmd,
RCL_StopType  stopType 
)

Stop a Tx action in an IEEE command.

Sends the message to try to stop a TX action. When the function returns, the command may still be running. Depending on the stop type, the operation may stop after some time.

Parameters
cmd[in] - IEEE command
stopType[in] - Stop type; telling which situations the operation will stop
Returns
Status of the TX operation; if the operation is not finished, a wait is needed.

References ieeeHandlerState, RCL_CommandStatus_Active, RCL_CommandStatus_DescheduledApi, RCL_CommandStatus_Error_Param, RCL_CommandStatus_Finished, RCL_EventHandlerCmdUpdate, and RCL_Scheduler_postEvent().

Variable Documentation

§ ieeeHandlerState