A configuration structure for the LBT transmit algorithm.

One of RAIL's schemes for polite spectrum access is an implementation of a Listen-Before-Talk (LBT) algorithm, loosely based on ETSI 300 220-1. Currently, however, it is constrained by the EFR32's CSMA-oriented hardware so is turned into an equivalent RAIL_CsmaConfig_t configuration and passed to the CSMA engine:

if (lbtMaxBoRand == lbtMinBoRand) {
  // Fixed backoff
  csmaMinBoExp = csmaMaxBoExp = 0;
  if (lbtMinBoRand == 0) {
    ccaBackoff = lbtBackoff;
  } else {
    ccaBackoff = lbtMinBoRand * lbtBackoff;
  }
  ccaDuration = lbtDuration;
} else {
  // Random backoff: map to random range 0 .. (lbtMaxBoRand - lbtMinBoRand)
  csmaMinBoExp = csmaMaxBoExp = ceiling(log2(lbtMaxBoRand - lbtMinBoRand));
  ccaBackoff = round((lbtBackoff * (lbtMaxBoRand - lbtMinBoRand))
                     / (1 << csmaMinBoExp));
  ccaDuration = lbtDuration + (lbtMinBoRand * lbtBackoff);
}
csmaTries    = lbtTries;
ccaThreshold = lbtThreshold;
csmaTimeout  = lbtTimeout;

Public Attributes#

uint8_t

The minimum backoff random multiplier.

uint8_t

The maximum backoff random multiplier.

uint8_t

The number of LBT iterations that can fail before reporting RAIL_EVENT_TX_CHANNEL_BUSY.

int8_t

The LBT RSSI threshold, in dBm, above which the channel is considered 'busy'.

uint16_t

The backoff unit period, in RAIL's microsecond time base.

uint16_t

The minimum desired LBT check duration in microseconds.

An overall timeout, in RAIL's microsecond time base, for the operation.

Public Attribute Documentation#

lbtMinBoRand#

uint8_t RAIL_LbtConfig_t::lbtMinBoRand

The minimum backoff random multiplier.


Definition at line 3400 of file common/rail_types.h

lbtMaxBoRand#

uint8_t RAIL_LbtConfig_t::lbtMaxBoRand

The maximum backoff random multiplier.

It must be greater than or equal to lbtMinBoRand. If both backoff multipliers are identical, a non-random fixed backoff of lbtBackoff times the multiplier (minimum 1) duration results.


Definition at line 3407 of file common/rail_types.h

lbtTries#

uint8_t RAIL_LbtConfig_t::lbtTries

The number of LBT iterations that can fail before reporting RAIL_EVENT_TX_CHANNEL_BUSY.

Typically ranges from 1 to RAIL_MAX_LBT_TRIES; higher values are disallowed. A value 0 always transmits immediately without performing LBT, similar to calling RAIL_StartTx().


Definition at line 3415 of file common/rail_types.h

lbtThreshold#

int8_t RAIL_LbtConfig_t::lbtThreshold

The LBT RSSI threshold, in dBm, above which the channel is considered 'busy'.


Definition at line 3420 of file common/rail_types.h

lbtBackoff#

uint16_t RAIL_LbtConfig_t::lbtBackoff

The backoff unit period, in RAIL's microsecond time base.

It is multiplied by the random backoff multiplier controlled by lbtMinBoRand and lbtMaxBoRand to determine the overall backoff period. For random backoffs, any value above 511 microseconds will be truncated. For fixed backoffs, it can go up to 65535 microseconds.


Definition at line 3428 of file common/rail_types.h

lbtDuration#

uint16_t RAIL_LbtConfig_t::lbtDuration

The minimum desired LBT check duration in microseconds.

Note

  • Depending on the radio configuration, due to hardware constraints, the actual duration may be longer. Also, if the requested duration is too large for the radio to accommodate, RAIL_StartCcaLbtTx() will fail returning RAIL_STATUS_INVALID_PARAMETER.


Definition at line 3437 of file common/rail_types.h

lbtTimeout#

RAIL_Time_t RAIL_LbtConfig_t::lbtTimeout

An overall timeout, in RAIL's microsecond time base, for the operation.

If the transmission doesn't start before this timeout expires, the transmission will fail with RAIL_EVENT_TX_CHANNEL_BUSY. This is important for limiting LBT due to LBT's unbounded requirement that if the channel is busy, the next try must wait for the channel to clear. A value 0 means no timeout is imposed.


Definition at line 3446 of file common/rail_types.h