Radio Control Layer (RCL)
ble5.c File Reference
#include <stdint.h>
#include <stdlib.h>
#include <ti/devices/DeviceFamily.h>
#include <ti/log/Log.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/ble5.h>
#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/utils/Random.h>
+ Include dependency graph for ble5.c:

Data Structures

struct  RCL_TxBufferInfo
 
struct  .common
 
union  .__unnamed__
 
struct  .__unnamed__.adv
 
struct  .__unnamed__.scanInit
 
struct  .__unnamed__.conn
 
struct  .__unnamed__.genericRx
 
struct  .__unnamed__.dtmTx
 
struct  .__unnamed__.txTest
 

Macros

#define RCL_HANDLER_BLE5_RESTORE_NONE   0x0000
 
#define RCL_HANDLER_BLE5_RESTORE_MODCTRL   0x0001
 
#define RCL_HANDLER_BLE5_RESTORE_WHITEN_POLY   0x0002
 
#define BLE_DATA_CHAN_MIN   0U
 
#define BLE_DATA_CHAN_MAX   36U
 
#define BLE_DATA_CHAN_BASE   2404000000U
 
#define BLE_CHAN_SPACE   2000000U
 
#define BLE_ADV_CHAN_LO   37U
 
#define BLE_ADV_CHAN_MID   38U
 
#define BLE_ADV_CHAN_HI   39U
 
#define BLE_PHY_CHAN_MIN   64U
 
#define BLE_PHY_CHAN_MAX   103U
 
#define BLE_ADV_CHAN_LO_FREQ   2402000000U
 
#define BLE_ADV_CHAN_MID_FREQ   2426000000U
 
#define BLE_ADV_CHAN_HI_FREQ   2480000000U
 
#define HIGH_DUTY_CYCLE_INTERVAL   RCL_SCHEDULER_SYSTIM_US(1250)
 
#define TIMESTAMP_ADJUST_1MBPS   267U
 
#define TIMESTAMP_ADJUST_2MBPS   148U
 
#define TIMESTAMP_ADJUST_CODED   1673U
 
#define ADV_ACCESS_ADDRESS   0x8E89BED6U
 
#define DTM_ACCESS_ADDRESS   (~ADV_ACCESS_ADDRESS)
 
#define ADV_CRC_INIT   (0x555555U << 8)
 
#define BACKOFF_UPPER_MAX   8U
 
#define BLE_1MBPS_PACKET_BASE_TIME   RCL_SCHEDULER_SYSTIM_US(80)
 
#define BLE_1MBPS_TIME_PER_BYTE   RCL_SCHEDULER_SYSTIM_US(8)
 
#define BLE_2MBPS_PACKET_BASE_TIME   RCL_SCHEDULER_SYSTIM_US(44)
 
#define BLE_2MBPS_TIME_PER_BYTE   RCL_SCHEDULER_SYSTIM_US(4)
 
#define BLE_CODED_S8_PACKET_BASE_TIME   RCL_SCHEDULER_SYSTIM_US(720)
 
#define BLE_CODED_S8_TIME_PER_BYTE   RCL_SCHEDULER_SYSTIM_US(64)
 
#define BLE_CODED_S2_PACKET_BASE_TIME   RCL_SCHEDULER_SYSTIM_US(462)
 
#define BLE_CODED_S2_TIME_PER_BYTE   RCL_SCHEDULER_SYSTIM_US(16)
 
#define BLE_T_IFS   RCL_SCHEDULER_SYSTIM_US(150)
 
#define BLE_HEADER_LENGTH   2
 
#define BLE_CRC_LENGTH   3
 
#define BLE_MAX_PKT_LEN   255
 
#define BLE_ADV_LEGACY_MAX_PKT_LEN   37
 
#define BLE_ADV_FILTER_POLICY_SCAN   1
 
#define BLE_ADV_FILTER_POLICY_CONN   2
 
#define PBE_NUM_FILTER_ENTRIES   16U
 
#define BLE_PHY_FEATURE_PHY_1MBPS   0
 
#define BLE_PHY_FEATURE_PHY_2MBPS   1
 
#define BLE_PHY_FEATURE_PHY_CODED   2
 
#define BLE_PHY_FEATURE_PHY_MASK   0x0003
 
#define BLE_PHY_FEATURE_CODING_S8   0
 
#define BLE_PHY_FEATURE_CODING_S2   4
 
#define BLE_PHY_FEATURE_CODING_MASK   0x0004
 
#define BLE_DTM_PAYLOAD_TYPE_PRBS9   0x00
 
#define BLE_DTM_PAYLOAD_TYPE_11110000   0x01
 
#define BLE_DTM_PAYLOAD_TYPE_10101010   0x02
 
#define BLE_DTM_PAYLOAD_TYPE_PRBS15   0x03
 
#define BLE_DTM_PAYLOAD_TYPE_11111111   0x04
 
#define BLE_DTM_PAYLOAD_TYPE_00000000   0x05
 
#define BLE_DTM_PAYLOAD_TYPE_00001111   0x06
 
#define BLE_DTM_PAYLOAD_TYPE_01010101   0x07
 
#define RCL_HANDLER_BLE5_PRBS9_POLY   0x08800000
 
#define RCL_HANDLER_BLE5_PRBS9_INIT   0x0000001F
 
#define RCL_HANDLER_BLE5_PRBS15_POLY   0x00060000
 
#define RCL_HANDLER_BLE5_PRBS15_INIT   0x00003FFF
 
#define RCL_HANDLER_BLE5_PRBS32_POLY   0x00400007
 
#define RCL_HANDLER_BLE5_PRBS32_INIT   0x00005555
 
#define RCL_HANDLER_BLE5_PRBS_SYNC   0xAB05FA1C
 
#define BLE_CONNECT_MSG_LEN   34U
 
#define BLE_WIN_SIZE_POS   19U
 
#define BLE_WIN_OFFSET_POS   20U
 
#define BLE_INTERVAL_POS   22U
 
#define BLE_TRANSMIT_WINDOW_DELAY_LEGACY   RCL_SCHEDULER_SYSTIM_US(1250)
 
#define BLE_CONNECT_INT_UNIT   RCL_SCHEDULER_SYSTIM_US(1250)
 
#define RCL_BLE5_CONNECT_INT_SUB_DIV   4
 
#define RCL_BLE5_CONNECT_SUB_INT   (BLE_CONNECT_INT_UNIT / RCL_BLE5_CONNECT_INT_SUB_DIV)
 
#define LRF_CLOCK_TICKS_PER_US   48
 
#define RAMREG32(addr)   (*((volatile uint32_t *)(addr)))
 
#define txBuffer_dataByte(buffer, pos)   ((buffer->data) + ((buffer->numPad) - 1 + pos))
 Pointer to a given byte in the data part of a TX buffer. More...
 

Functions

uint32_t RCL_Handler_BLE5_getRandomNumber (void)
 
static void RCL_Handler_BLE5_updateRxCurBufferAndFifo (List_List *rxBuffers)
 
static uint16_t RCL_Handler_BLE5_findWhitenInit (RCL_Ble5Channel channel)
 
static uint32_t RCL_Handler_BLE5_findRfFreq (RCL_Ble5Channel channel)
 
static RCL_Ble5Channel RCL_Handler_BLE5_findAdvChannel (uint32_t advMap, uint32_t order)
 
static RCL_CommandStatus RCL_Handler_BLE5_setPhy (uint16_t phyFeatures)
 
static RCL_CommandStatus RCL_Handler_BLE5_findPbeErrorEndStatus (uint16_t pbeEndStatus)
 
static uint32_t RCL_Handler_BLE5_updateTxBuffers (List_List *txBuffers, uint32_t maxBuffers, RCL_TxBufferInfo *txBufferInfo, bool retransPossible)
 
static void RCL_Handler_BLE5_commitPacket (RCL_MultiBuffer *curBuffer, uint32_t numBytes)
 
static uint32_t RCL_Handler_BLE5_maskEventsByFifoConf (uint32_t mask, uint16_t fifoConfVal)
 
static bool RCL_Handler_BLE5_initAdvScanInitStats (RCL_StatsAdvScanInit *stats, uint32_t startTime)
 
static void RCL_Handler_BLE5_updateAdvScanInitStats (RCL_StatsAdvScanInit *stats, uint32_t startTime)
 
static bool RCL_Handler_BLE5_initConnStats (RCL_StatsConnection *stats, uint32_t startTime)
 
static void RCL_Handler_BLE5_updateConnStats (RCL_StatsConnection *stats, uint32_t startTime)
 
static bool RCL_Handler_BLE5_initGenericRxStats (RCL_StatsGenericRx *stats, uint32_t startTime)
 
static void RCL_Handler_BLE5_updateGenericRxStats (RCL_StatsGenericRx *stats, uint32_t startTime)
 
static void RCL_Handler_BLE5_InitializeFilterList (RCL_FilterList *filterList, uint32_t *pbeFilterList, uint32_t invertMask)
 
static void RCL_Handler_BLE5_updateFilterListEntry (RCL_FilterList *filterList, uint32_t *pbeFilterList, uint32_t invertMask, uint32_t index)
 
static uint32_t RCL_Handler_BLE5_prepareConnectTime (uint32_t *connectTime, uint32_t referenceTime, uint32_t interval)
 
static uint32_t RCL_Handler_BLE5_findConnectTime (uint32_t initialConnectTime, uint32_t referenceTime, uint32_t interval)
 
static uint32_t RCL_Handler_BLE5_findPacketDuration (uint32_t length, uint16_t phyFeatures)
 
static uint32_t RCL_Handler_BLE5_findNumExtraBytes (uint32_t fifoCfg)
 
RCL_Events RCL_Handler_BLE5_adv (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_Events RCL_Handler_BLE5_scan_init (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_Events RCL_Handler_BLE5_conn (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_Events RCL_Handler_BLE5_dtmTx (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_Events RCL_Handler_BLE5_genericRx (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_Events RCL_Handler_BLE5_genericTx (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_Events RCL_Handler_Ble5_txTest (RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEventsIn)
 
RCL_BLE5_FilterListUpdateResult RCL_BLE5_updateFilterList (const RCL_FL_Entry *newEntry, RCL_FilterList *filterList, uint32_t index)
 Update filter list. More...
 
void RCL_BLE5_setDefaultRfFrequency (uint32_t rfFrequency)
 Set RF frequency to use if custom frequency is specified. More...
 
RCL_Ble5_RxPktStatus RCL_BLE5_getRxStatus (const RCL_Buffer_DataEntry *rxEntry)
 Get received status field from packet. More...
 
int8_t RCL_BLE5_getRxRssi (const RCL_Buffer_DataEntry *rxEntry)
 Get received RSSI from packet. More...
 
uint32_t RCL_BLE5_getRxTimestamp (const RCL_Buffer_DataEntry *rxEntry)
 Get received timestamp from packet. More...
 
void RCL_BLE5_setAccessAddressModification (bool enable)
 
 __attribute__ ((weak))
 

Variables

struct {
   struct {
uint32_t defaultRfFrequency
 
bool accessAddressModification
 
RCL_CommandStatus endStatus
 
bool activeUpdate
 
RCL_Ble5Channel channel
 
uint16_t rxFifoSz
 
uint16_t txFifoSz
 
uint16_t phyFeatures
 
uint16_t fifoCfg
 
int8_t filterListUpdateIndex
 
RCL_MultiBuffer * curBuffer
 
uint32_t timestampAdjust
 
RCL_FilterList * updatableFilterList
 
   } common
 
   union {
      struct {
uint8_t chanMap
 
bool runRx
 
bool gracefulStopObserved
 
      } adv
 
      struct {
bool initiator
 
bool dynamicWinOffset
 
uint8_t advPktLen
 
uint16_t * winOffsetFifoPtr
 
uint16_t * winOffsetBufferPtr
 
uint16_t transmitWindowOffset
 
uint16_t connectInterval
 
uint16_t filterListInvertMask
 
      } scanInit
 
      struct {
RCL_TxBufferInfo txBufferInfo
 
bool isPeripheral
 
      } conn
 
      struct {
uint16_t demc1be0
 
uint16_t demc1be1
 
uint16_t demc1be2
 
bool restoreThresh
 
      } genericRx
 
      struct {
uint16_t storedPbeTimPre
 
      } dtmTx
 
      struct {
uint8_t restoreSelector
 
uint32_t storedWhitenPoly
 
      } txTest
 
   } 
 
ble5HandlerState
 

Data Structure Documentation

◆ RCL_TxBufferInfo

struct RCL_TxBufferInfo
Data Fields
RCL_Buffer_TxBuffer * lastEnteredTxBuffer
uint8_t * lastTxHdr
uint16_t numBytes
uint16_t numBuffers

◆ .common

struct .common
Data Fields
uint32_t defaultRfFrequency
bool accessAddressModification
RCL_CommandStatus endStatus
bool activeUpdate
RCL_Ble5Channel channel
uint16_t rxFifoSz
uint16_t txFifoSz
uint16_t phyFeatures
uint16_t fifoCfg
int8_t filterListUpdateIndex
RCL_MultiBuffer * curBuffer
uint32_t timestampAdjust
RCL_FilterList * updatableFilterList

◆ .__unnamed__

union .__unnamed__
Data Fields
__unnamed__ adv
__unnamed__ scanInit
__unnamed__ conn
__unnamed__ genericRx
__unnamed__ dtmTx
__unnamed__ txTest

◆ .__unnamed__.adv

struct .__unnamed__.adv
Data Fields
uint8_t chanMap
bool runRx
bool gracefulStopObserved

◆ .__unnamed__.scanInit

struct .__unnamed__.scanInit
Data Fields
bool initiator
bool dynamicWinOffset
uint8_t advPktLen
uint16_t * winOffsetFifoPtr
uint16_t * winOffsetBufferPtr
uint16_t transmitWindowOffset
uint16_t connectInterval
uint16_t filterListInvertMask

◆ .__unnamed__.conn

struct .__unnamed__.conn
Data Fields
RCL_TxBufferInfo txBufferInfo
bool isPeripheral

◆ .__unnamed__.genericRx

struct .__unnamed__.genericRx
Data Fields
uint16_t demc1be0
uint16_t demc1be1
uint16_t demc1be2
bool restoreThresh

◆ .__unnamed__.dtmTx

struct .__unnamed__.dtmTx
Data Fields
uint16_t storedPbeTimPre

◆ .__unnamed__.txTest

struct .__unnamed__.txTest
Data Fields
uint8_t restoreSelector
uint32_t storedWhitenPoly

Macro Definition Documentation

◆ RCL_HANDLER_BLE5_RESTORE_NONE

#define RCL_HANDLER_BLE5_RESTORE_NONE   0x0000

◆ RCL_HANDLER_BLE5_RESTORE_MODCTRL

#define RCL_HANDLER_BLE5_RESTORE_MODCTRL   0x0001

◆ RCL_HANDLER_BLE5_RESTORE_WHITEN_POLY

#define RCL_HANDLER_BLE5_RESTORE_WHITEN_POLY   0x0002

◆ BLE_DATA_CHAN_MIN

#define BLE_DATA_CHAN_MIN   0U

◆ BLE_DATA_CHAN_MAX

#define BLE_DATA_CHAN_MAX   36U

◆ BLE_DATA_CHAN_BASE

#define BLE_DATA_CHAN_BASE   2404000000U

◆ BLE_CHAN_SPACE

#define BLE_CHAN_SPACE   2000000U

◆ BLE_ADV_CHAN_LO

#define BLE_ADV_CHAN_LO   37U

◆ BLE_ADV_CHAN_MID

#define BLE_ADV_CHAN_MID   38U

◆ BLE_ADV_CHAN_HI

#define BLE_ADV_CHAN_HI   39U

◆ BLE_PHY_CHAN_MIN

#define BLE_PHY_CHAN_MIN   64U

◆ BLE_PHY_CHAN_MAX

#define BLE_PHY_CHAN_MAX   103U

◆ BLE_ADV_CHAN_LO_FREQ

#define BLE_ADV_CHAN_LO_FREQ   2402000000U

◆ BLE_ADV_CHAN_MID_FREQ

#define BLE_ADV_CHAN_MID_FREQ   2426000000U

◆ BLE_ADV_CHAN_HI_FREQ

#define BLE_ADV_CHAN_HI_FREQ   2480000000U

◆ HIGH_DUTY_CYCLE_INTERVAL

#define HIGH_DUTY_CYCLE_INTERVAL   RCL_SCHEDULER_SYSTIM_US(1250)

◆ TIMESTAMP_ADJUST_1MBPS

#define TIMESTAMP_ADJUST_1MBPS   267U

◆ TIMESTAMP_ADJUST_2MBPS

#define TIMESTAMP_ADJUST_2MBPS   148U

◆ TIMESTAMP_ADJUST_CODED

#define TIMESTAMP_ADJUST_CODED   1673U

◆ ADV_ACCESS_ADDRESS

#define ADV_ACCESS_ADDRESS   0x8E89BED6U

◆ DTM_ACCESS_ADDRESS

#define DTM_ACCESS_ADDRESS   (~ADV_ACCESS_ADDRESS)

◆ ADV_CRC_INIT

#define ADV_CRC_INIT   (0x555555U << 8)

◆ BACKOFF_UPPER_MAX

#define BACKOFF_UPPER_MAX   8U

◆ BLE_1MBPS_PACKET_BASE_TIME

#define BLE_1MBPS_PACKET_BASE_TIME   RCL_SCHEDULER_SYSTIM_US(80)

◆ BLE_1MBPS_TIME_PER_BYTE

#define BLE_1MBPS_TIME_PER_BYTE   RCL_SCHEDULER_SYSTIM_US(8)

◆ BLE_2MBPS_PACKET_BASE_TIME

#define BLE_2MBPS_PACKET_BASE_TIME   RCL_SCHEDULER_SYSTIM_US(44)

◆ BLE_2MBPS_TIME_PER_BYTE

#define BLE_2MBPS_TIME_PER_BYTE   RCL_SCHEDULER_SYSTIM_US(4)

◆ BLE_CODED_S8_PACKET_BASE_TIME

#define BLE_CODED_S8_PACKET_BASE_TIME   RCL_SCHEDULER_SYSTIM_US(720)

◆ BLE_CODED_S8_TIME_PER_BYTE

#define BLE_CODED_S8_TIME_PER_BYTE   RCL_SCHEDULER_SYSTIM_US(64)

◆ BLE_CODED_S2_PACKET_BASE_TIME

#define BLE_CODED_S2_PACKET_BASE_TIME   RCL_SCHEDULER_SYSTIM_US(462)

◆ BLE_CODED_S2_TIME_PER_BYTE

#define BLE_CODED_S2_TIME_PER_BYTE   RCL_SCHEDULER_SYSTIM_US(16)

◆ BLE_T_IFS

#define BLE_T_IFS   RCL_SCHEDULER_SYSTIM_US(150)

◆ BLE_HEADER_LENGTH

#define BLE_HEADER_LENGTH   2

◆ BLE_CRC_LENGTH

#define BLE_CRC_LENGTH   3

◆ BLE_MAX_PKT_LEN

#define BLE_MAX_PKT_LEN   255

◆ BLE_ADV_LEGACY_MAX_PKT_LEN

#define BLE_ADV_LEGACY_MAX_PKT_LEN   37

◆ BLE_ADV_FILTER_POLICY_SCAN

#define BLE_ADV_FILTER_POLICY_SCAN   1

◆ BLE_ADV_FILTER_POLICY_CONN

#define BLE_ADV_FILTER_POLICY_CONN   2

◆ PBE_NUM_FILTER_ENTRIES

#define PBE_NUM_FILTER_ENTRIES   16U

◆ BLE_PHY_FEATURE_PHY_1MBPS

#define BLE_PHY_FEATURE_PHY_1MBPS   0

◆ BLE_PHY_FEATURE_PHY_2MBPS

#define BLE_PHY_FEATURE_PHY_2MBPS   1

◆ BLE_PHY_FEATURE_PHY_CODED

#define BLE_PHY_FEATURE_PHY_CODED   2

◆ BLE_PHY_FEATURE_PHY_MASK

#define BLE_PHY_FEATURE_PHY_MASK   0x0003

◆ BLE_PHY_FEATURE_CODING_S8

#define BLE_PHY_FEATURE_CODING_S8   0

◆ BLE_PHY_FEATURE_CODING_S2

#define BLE_PHY_FEATURE_CODING_S2   4

◆ BLE_PHY_FEATURE_CODING_MASK

#define BLE_PHY_FEATURE_CODING_MASK   0x0004

◆ BLE_DTM_PAYLOAD_TYPE_PRBS9

#define BLE_DTM_PAYLOAD_TYPE_PRBS9   0x00

◆ BLE_DTM_PAYLOAD_TYPE_11110000

#define BLE_DTM_PAYLOAD_TYPE_11110000   0x01

◆ BLE_DTM_PAYLOAD_TYPE_10101010

#define BLE_DTM_PAYLOAD_TYPE_10101010   0x02

◆ BLE_DTM_PAYLOAD_TYPE_PRBS15

#define BLE_DTM_PAYLOAD_TYPE_PRBS15   0x03

◆ BLE_DTM_PAYLOAD_TYPE_11111111

#define BLE_DTM_PAYLOAD_TYPE_11111111   0x04

◆ BLE_DTM_PAYLOAD_TYPE_00000000

#define BLE_DTM_PAYLOAD_TYPE_00000000   0x05

◆ BLE_DTM_PAYLOAD_TYPE_00001111

#define BLE_DTM_PAYLOAD_TYPE_00001111   0x06

◆ BLE_DTM_PAYLOAD_TYPE_01010101

#define BLE_DTM_PAYLOAD_TYPE_01010101   0x07

◆ RCL_HANDLER_BLE5_PRBS9_POLY

#define RCL_HANDLER_BLE5_PRBS9_POLY   0x08800000

Polynomial to use for PRBS9 data

◆ RCL_HANDLER_BLE5_PRBS9_INIT

#define RCL_HANDLER_BLE5_PRBS9_INIT   0x0000001F

◆ RCL_HANDLER_BLE5_PRBS15_POLY

#define RCL_HANDLER_BLE5_PRBS15_POLY   0x00060000

Polynomial to use for PRBS15 data

◆ RCL_HANDLER_BLE5_PRBS15_INIT

#define RCL_HANDLER_BLE5_PRBS15_INIT   0x00003FFF

◆ RCL_HANDLER_BLE5_PRBS32_POLY

#define RCL_HANDLER_BLE5_PRBS32_POLY   0x00400007

Polynomial to use for PRBS32 data

◆ RCL_HANDLER_BLE5_PRBS32_INIT

#define RCL_HANDLER_BLE5_PRBS32_INIT   0x00005555

◆ RCL_HANDLER_BLE5_PRBS_SYNC

#define RCL_HANDLER_BLE5_PRBS_SYNC   0xAB05FA1C

◆ BLE_CONNECT_MSG_LEN

#define BLE_CONNECT_MSG_LEN   34U

◆ BLE_WIN_SIZE_POS

#define BLE_WIN_SIZE_POS   19U

◆ BLE_WIN_OFFSET_POS

#define BLE_WIN_OFFSET_POS   20U

◆ BLE_INTERVAL_POS

#define BLE_INTERVAL_POS   22U

◆ BLE_TRANSMIT_WINDOW_DELAY_LEGACY

#define BLE_TRANSMIT_WINDOW_DELAY_LEGACY   RCL_SCHEDULER_SYSTIM_US(1250)

◆ BLE_CONNECT_INT_UNIT

#define BLE_CONNECT_INT_UNIT   RCL_SCHEDULER_SYSTIM_US(1250)

◆ RCL_BLE5_CONNECT_INT_SUB_DIV

#define RCL_BLE5_CONNECT_INT_SUB_DIV   4

◆ RCL_BLE5_CONNECT_SUB_INT

#define RCL_BLE5_CONNECT_SUB_INT   (BLE_CONNECT_INT_UNIT / RCL_BLE5_CONNECT_INT_SUB_DIV)

◆ LRF_CLOCK_TICKS_PER_US

#define LRF_CLOCK_TICKS_PER_US   48

◆ RAMREG32

#define RAMREG32 (   addr)    (*((volatile uint32_t *)(addr)))

◆ txBuffer_dataByte

#define txBuffer_dataByte (   buffer,
  pos 
)    ((buffer->data) + ((buffer->numPad) - 1 + pos))

Pointer to a given byte in the data part of a TX buffer.

Parameters
bufferPointer to TX buffer
posPosition

Function Documentation

◆ RCL_Handler_BLE5_getRandomNumber()

uint32_t RCL_Handler_BLE5_getRandomNumber ( void  )

◆ RCL_Handler_BLE5_updateRxCurBufferAndFifo()

◆ RCL_Handler_BLE5_findWhitenInit()

◆ RCL_Handler_BLE5_findRfFreq()

◆ RCL_Handler_BLE5_findAdvChannel()

static RCL_Ble5Channel RCL_Handler_BLE5_findAdvChannel ( uint32_t  advMap,
uint32_t  order 
)
static

References BLE_CUSTOM_FREQ_BM.

Referenced by RCL_Handler_BLE5_adv().

◆ RCL_Handler_BLE5_setPhy()

◆ RCL_Handler_BLE5_findPbeErrorEndStatus()

◆ RCL_Handler_BLE5_updateTxBuffers()

◆ RCL_Handler_BLE5_commitPacket()

static void RCL_Handler_BLE5_commitPacket ( RCL_MultiBuffer *  curBuffer,
uint32_t  numBytes 
)
static

◆ RCL_Handler_BLE5_maskEventsByFifoConf()

static uint32_t RCL_Handler_BLE5_maskEventsByFifoConf ( uint32_t  mask,
uint16_t  fifoConfVal 
)
static

◆ RCL_Handler_BLE5_initAdvScanInitStats()

static bool RCL_Handler_BLE5_initAdvScanInitStats ( RCL_StatsAdvScanInit *  stats,
uint32_t  startTime 
)
static

◆ RCL_Handler_BLE5_updateAdvScanInitStats()

static void RCL_Handler_BLE5_updateAdvScanInitStats ( RCL_StatsAdvScanInit *  stats,
uint32_t  startTime 
)
static

◆ RCL_Handler_BLE5_initConnStats()

static bool RCL_Handler_BLE5_initConnStats ( RCL_StatsConnection *  stats,
uint32_t  startTime 
)
static

References LRF_RSSI_INVALID, and RAMREG32.

Referenced by RCL_Handler_BLE5_conn().

◆ RCL_Handler_BLE5_updateConnStats()

static void RCL_Handler_BLE5_updateConnStats ( RCL_StatsConnection *  stats,
uint32_t  startTime 
)
static

References ble5HandlerState, and RAMREG32.

Referenced by RCL_Handler_BLE5_conn().

◆ RCL_Handler_BLE5_initGenericRxStats()

static bool RCL_Handler_BLE5_initGenericRxStats ( RCL_StatsGenericRx *  stats,
uint32_t  startTime 
)
static

References LRF_RSSI_INVALID, and RAMREG32.

Referenced by RCL_Handler_BLE5_genericRx().

◆ RCL_Handler_BLE5_updateGenericRxStats()

static void RCL_Handler_BLE5_updateGenericRxStats ( RCL_StatsGenericRx *  stats,
uint32_t  startTime 
)
static

References ble5HandlerState, and RAMREG32.

Referenced by RCL_Handler_BLE5_genericRx().

◆ RCL_Handler_BLE5_InitializeFilterList()

static void RCL_Handler_BLE5_InitializeFilterList ( RCL_FilterList *  filterList,
uint32_t *  pbeFilterList,
uint32_t  invertMask 
)
static

◆ RCL_Handler_BLE5_updateFilterListEntry()

static void RCL_Handler_BLE5_updateFilterListEntry ( RCL_FilterList *  filterList,
uint32_t *  pbeFilterList,
uint32_t  invertMask,
uint32_t  index 
)
static

◆ RCL_Handler_BLE5_prepareConnectTime()

static uint32_t RCL_Handler_BLE5_prepareConnectTime ( uint32_t *  connectTime,
uint32_t  referenceTime,
uint32_t  interval 
)
static

◆ RCL_Handler_BLE5_findConnectTime()

static uint32_t RCL_Handler_BLE5_findConnectTime ( uint32_t  initialConnectTime,
uint32_t  referenceTime,
uint32_t  interval 
)
static

◆ RCL_Handler_BLE5_findPacketDuration()

◆ RCL_Handler_BLE5_findNumExtraBytes()

static uint32_t RCL_Handler_BLE5_findNumExtraBytes ( uint32_t  fifoCfg)
static

◆ RCL_Handler_BLE5_adv()

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

References RCL_SchedulerState::actualStartTime, ADV_ACCESS_ADDRESS, ADV_CRC_INIT, ble5HandlerState, BLE_ADV_FILTER_POLICY_CONN, BLE_ADV_FILTER_POLICY_SCAN, BLE_CUSTOM_FREQ_BM, RCL_SchedulerStopInfo::cmdStopEnabled, RCL_SchedulerState::gracefulStopInfo, hal_enable_graceful_stop_time_irq(), hal_setup_sync_found_cap(), HIGH_DUTY_CYCLE_INTERVAL, LRF_disable(), LRF_disableSynthRefsys(), LRF_enable(), LRF_enableSynthRefsys(), LRF_EventOpDone, LRF_EventOpError, LRF_EventRxIgnored, LRF_EventRxNok, LRF_EventRxOk, LRF_peekRxFifo(), LRF_prepareRxFifo(), LRF_prepareTxFifo(), LRF_programFrequency(), LRF_programTxPower(), LRF_readRxFifoWords(), LRF_waitForTopsmReady(), RAMREG32, RCL_Buffer_DataEntry_paddedLen, RCL_CommandStatus_Active, RCL_CommandStatus_Connect, RCL_CommandStatus_Error_MissingTxBuffer, RCL_CommandStatus_Error_Param, RCL_CommandStatus_Error_RxBufferCorruption, RCL_CommandStatus_Finished, RCL_CommandStatus_GracefulStop, RCL_CommandStatus_HardStop, RCL_Handler_BLE5_commitPacket(), RCL_Handler_BLE5_findAdvChannel(), RCL_Handler_BLE5_findNumExtraBytes(), RCL_Handler_BLE5_findPbeErrorEndStatus(), RCL_Handler_BLE5_findRfFreq(), RCL_Handler_BLE5_findWhitenInit(), RCL_Handler_BLE5_initAdvScanInitStats(), RCL_Handler_BLE5_InitializeFilterList(), RCL_Handler_BLE5_maskEventsByFifoConf(), RCL_Handler_BLE5_setPhy(), RCL_Handler_BLE5_updateAdvScanInitStats(), RCL_Handler_BLE5_updateRxCurBufferAndFifo(), RCL_Handler_BLE5_updateTxBuffers(), RCL_MultiBuffer_getBuffer(), RCL_MultiBuffer_getNextWritableByte(), RCL_ProfilingEvent_PostprocStart, RCL_ProfilingEvent_PreprocStop, RCL_Scheduler_setNewStartNow(), RCL_Scheduler_setNewStartRelTime(), RCL_Scheduler_setStartStopTimeEarliestStart(), RCL_TxBuffer_head(), rclSchedulerState, RCL_SchedulerStopInfo::schedStopEnabled, and TxPowerResult_Ok.

◆ RCL_Handler_BLE5_scan_init()

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

References RCL_SchedulerState::actualStartTime, ADV_ACCESS_ADDRESS, ADV_CRC_INIT, RCL_SchedulerStopInfo::apiStopEnabled, BACKOFF_UPPER_MAX, ble5HandlerState, BLE_ADV_LEGACY_MAX_PKT_LEN, BLE_CONNECT_INT_UNIT, BLE_CONNECT_MSG_LEN, BLE_HEADER_LENGTH, BLE_INTERVAL_POS, BLE_T_IFS, BLE_TRANSMIT_WINDOW_DELAY_LEGACY, BLE_WIN_OFFSET_POS, BLE_WIN_SIZE_POS, RCL_SchedulerState::gracefulStopInfo, hal_setup_sync_found_cap(), RCL_SchedulerState::hardStopInfo, LRF_disable(), LRF_disableSynthRefsys(), LRF_enable(), LRF_enableSynthRefsys(), LRF_EventOpDone, LRF_EventOpError, LRF_EventRxIgnored, LRF_EventRxNok, LRF_EventRxOk, LRF_getTxFifoWrAddr(), LRF_peekRxFifo(), LRF_prepareRxFifo(), LRF_prepareTxFifo(), LRF_programFrequency(), LRF_programTxPower(), LRF_readRxFifoWords(), LRF_waitForTopsmReady(), RAMREG32, RCL_BLE5_CONNECT_INT_SUB_DIV, RCL_BLE5_CONNECT_SUB_INT, RCL_Buffer_DataEntry_paddedLen, RCL_CMDID_BLE5_INITIATOR, RCL_CommandStatus_Active, RCL_CommandStatus_Connect, RCL_CommandStatus_Error_MissingTxBuffer, RCL_CommandStatus_Error_Param, RCL_CommandStatus_Error_RxBufferCorruption, RCL_CommandStatus_Finished, RCL_CommandStatus_GracefulStop, RCL_CommandStatus_HardStop, RCL_EventNone, RCL_Handler_BLE5_commitPacket(), RCL_Handler_BLE5_findConnectTime(), RCL_Handler_BLE5_findNumExtraBytes(), RCL_Handler_BLE5_findPacketDuration(), RCL_Handler_BLE5_findPbeErrorEndStatus(), RCL_Handler_BLE5_findRfFreq(), RCL_Handler_BLE5_findWhitenInit(), RCL_Handler_BLE5_getRandomNumber(), RCL_Handler_BLE5_initAdvScanInitStats(), RCL_Handler_BLE5_InitializeFilterList(), RCL_Handler_BLE5_maskEventsByFifoConf(), RCL_Handler_BLE5_prepareConnectTime(), RCL_Handler_BLE5_setPhy(), RCL_Handler_BLE5_updateAdvScanInitStats(), RCL_Handler_BLE5_updateFilterListEntry(), RCL_Handler_BLE5_updateRxCurBufferAndFifo(), RCL_Handler_BLE5_updateTxBuffers(), RCL_MultiBuffer_getBuffer(), RCL_MultiBuffer_getNextWritableByte(), RCL_ProfilingEvent_PreprocStop, RCL_Scheduler_setNewStartNow(), RCL_Scheduler_setStartStopTimeEarliestStart(), RCL_TxBuffer_head(), rclSchedulerState, txBuffer_dataByte, and TxPowerResult_Ok.

◆ RCL_Handler_BLE5_conn()

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

References RCL_SchedulerState::actualStartTime, ble5HandlerState, BLE_MAX_PKT_LEN, hal_setup_sync_found_cap(), LRF_disable(), LRF_disableSynthRefsys(), LRF_enable(), LRF_enableSynthRefsys(), LRF_EventOpDone, LRF_EventOpError, LRF_EventRxEmpty, LRF_EventRxIgnored, LRF_EventRxNok, LRF_EventRxOk, LRF_EventTxDone, LRF_getTxFifoWritable(), LRF_peekRxFifo(), LRF_prepareRxFifo(), LRF_prepareTxFifo(), LRF_programFrequency(), LRF_programTxPower(), LRF_readRxFifoWords(), LRF_waitForTopsmReady(), RAMREG32, RCL_Buffer_DataEntry_paddedLen, RCL_BufferStateFinished, RCL_CommandStatus_Active, RCL_CommandStatus_Error_Param, RCL_CommandStatus_Error_RxBufferCorruption, RCL_CommandStatus_Error_TxBufferCorruption, RCL_CommandStatus_Finished, RCL_CommandStatus_GracefulStop, RCL_CommandStatus_MaxNak, RCL_CommandStatus_NoSync, RCL_CommandStatus_RxErr, RCL_CommandStatus_RxTimeout, RCL_Handler_BLE5_commitPacket(), RCL_Handler_BLE5_findNumExtraBytes(), RCL_Handler_BLE5_findPbeErrorEndStatus(), RCL_Handler_BLE5_findRfFreq(), RCL_Handler_BLE5_findWhitenInit(), RCL_Handler_BLE5_initConnStats(), RCL_Handler_BLE5_maskEventsByFifoConf(), RCL_Handler_BLE5_setPhy(), RCL_Handler_BLE5_updateConnStats(), RCL_Handler_BLE5_updateRxCurBufferAndFifo(), RCL_Handler_BLE5_updateTxBuffers(), RCL_MultiBuffer_getBuffer(), RCL_MultiBuffer_getNextWritableByte(), RCL_ProfilingEvent_PostprocStart, RCL_ProfilingEvent_PreprocStop, RCL_Schedule_AbsTime, RCL_Scheduler_setStartStopTimeEarliestStart(), RCL_TxBuffer_get(), rclSchedulerState, and TxPowerResult_Ok.

◆ RCL_Handler_BLE5_dtmTx()

◆ RCL_Handler_BLE5_genericRx()

◆ RCL_Handler_BLE5_genericTx()

◆ RCL_Handler_Ble5_txTest()

◆ RCL_BLE5_updateFilterList()

RCL_BLE5_FilterListUpdateResult RCL_BLE5_updateFilterList ( const RCL_FL_Entry *  newEntry,
RCL_FilterList *  filterList,
uint32_t  index 
)

Update filter list.

Update the given filter list in a way that is safe even if a running command is using the filter list. The contents of newEntry will be copied into filterList->entries[index].

If a scanner or initiator function is running, the filter list in use in the radio will also be updated in a way that ensures no match will be found on a non-existing entry. In a short time, neither the old nor new entry will give a match.

If an advertiser command is running, the update will not apply until the next time the advertiser is started

Parameters
newEntryNew filter list entry to apply
filterListFilter accept list to update
indexIndex into filter accept list to update
Returns
Result telling if update was successful

References ble5HandlerState, RCL_SchedulerState::currCmd, PBE_NUM_FILTER_ENTRIES, RCL_BLE5_FilterListUpdateIndexError, RCL_BLE5_FilterListUpdateOk, RCL_EventHandlerCmdUpdate, RCL_Scheduler_postEvent(), and rclSchedulerState.

◆ RCL_BLE5_setDefaultRfFrequency()

void RCL_BLE5_setDefaultRfFrequency ( uint32_t  rfFrequency)

Set RF frequency to use if custom frequency is specified.

If a command specifies to use a custom frequncy, it will program the freuqncy last set using this function.

Parameters
rfFrequencyRF frequency in Hz

References ble5HandlerState.

◆ RCL_BLE5_getRxStatus()

RCL_Ble5_RxPktStatus RCL_BLE5_getRxStatus ( const RCL_Buffer_DataEntry *  rxEntry)

Get received status field from packet.

Returns the packet status field of a received packet, or {.value = RCL_BLE5_RX_PKT_STATUS_INVALID} if status is not enabled

Parameters
rxEntryReceived data entry
Returns
Receive packet status

References ble5HandlerState, RCL_BLE5_RX_PKT_STATUS_INVALID, RCL_Handler_BLE5_findNumExtraBytes(), and RCL_Ble5_RxPktStatus::value.

◆ RCL_BLE5_getRxRssi()

int8_t RCL_BLE5_getRxRssi ( const RCL_Buffer_DataEntry *  rxEntry)

Get received RSSI from packet.

Returns the RSSI field of a received packet, or LRF_RSSI_INVALID if RSSI is not enabled

Parameters
rxEntryReceived data entry
Returns
Reported RSSI of received packet

References ble5HandlerState, LRF_RSSI_INVALID, and RCL_Handler_BLE5_findNumExtraBytes().

◆ RCL_BLE5_getRxTimestamp()

uint32_t RCL_BLE5_getRxTimestamp ( const RCL_Buffer_DataEntry *  rxEntry)

Get received timestamp from packet.

Returns the timestamp a received packet, adjusted according to the PHY it was received on (1 Mbps assumed if packet status is not available). If timestamp is not enabled, 0 is returned. Note that this is a valid value, so it can not be used for error checking.

Parameters
rxEntryReceived data entry
Returns
Timestamp of received packet

References ble5HandlerState, RCL_Ble5_RxPhy1Mbps, RCL_Ble5_RxPhy2Mbps, RCL_Ble5_RxPhyCodedS2, RCL_Ble5_RxPhyCodedS8, RCL_Handler_BLE5_findNumExtraBytes(), TIMESTAMP_ADJUST_1MBPS, TIMESTAMP_ADJUST_2MBPS, and TIMESTAMP_ADJUST_CODED.

◆ RCL_BLE5_setAccessAddressModification()

void RCL_BLE5_setAccessAddressModification ( bool  enable)

References ble5HandlerState.

◆ __attribute__()

__attribute__ ( (weak)  )

Variable Documentation

◆ ble5HandlerState