Microchip® Advanced Software Framework

atmel_rf4ce/lib/inc/tal.h File Reference
#include <stdint.h>
#include <stdbool.h>
#include "pal.h"
#include "tal_config.h"
#include "bmm.h"
#include "stack_config.h"
#include "return_val.h"
#include "tal_types.h"
#include "mac_build_config.h"

Data Structures

struct  frame_info_tag
 Globally used frame information structure. More...
 
union  pib_value_t
 PIB attribute value type. More...
 

Macros

#define BAND_2400   (1)
 2.4 GHz (channels 11 through 26) More...
 
#define BAND_900   (0)
 868 / 910 MHz (channels 0 through 10) using BPSK More...
 
#define mac_i_pan_coordinator   (0x0B)
 Attribute id of mac_i_pan_coordinator PIB. More...
 
#define MAX_FRAME_DURATION   (NO_OF_SYMBOLS_PREAMBLE_SFD + (aMaxPHYPacketSize + 1) * SYMBOLS_PER_OCTET)
 Maximum number of symbols in a frame for the current PHY. More...
 
#define MAX_SYMBOL_TIME   (0x0FFFFFFF)
 The maximum time in symbols for a 32 bit timer. More...
 
#define NO_OF_SYMBOLS_PREAMBLE_SFD   (NO_SYMBOLS_PREAMBLE + NO_SYMBOLS_SFD)
 Number of symbols forming the synchronization header (SHR) for the current PHY. More...
 
#define NO_SYMBOLS_PREAMBLE   (8)
 
#define NO_SYMBOLS_SFD   (2)
 
#define RF_BAND   BAND_2400
 
#define SYMBOL_MASK   (0x0FFFFFFF)
 Symbol mask for ingnoring most significant nibble. More...
 
#define SYMBOLS_PER_OCTET   (2)
 4 bits form one symbol since O-QPSK is used More...
 
#define TAL_CONVERT_SYMBOLS_TO_US(symbols)   ((uint32_t)(symbols) << 4)
 Conversion of symbols to microseconds. More...
 
#define TAL_CONVERT_US_TO_SYMBOLS(time)   ((time) >> 4)
 Conversion of microseconds to symbols. More...
 
#define TAL_GET_BEACON_INTERVAL_TIME(BO)   ((1UL * aBaseSuperframeDuration) << (BO))
 Beacon Interval time in symbols. More...
 
#define TAL_GET_SUPERFRAME_DURATION_TIME(SO)   ((1UL * aBaseSuperframeDuration) << (SO))
 Superframe Duration time in symbols. More...
 

Typedefs

typedef enum csma_mode_tag csma_mode_t
 CSMA Mode supported by transceiver. More...
 
typedef struct frame_info_tag frame_info_t
 Globally used frame information structure. More...
 
typedef enum sleep_mode_tag sleep_mode_t
 Sleep Mode supported by transceiver. More...
 

Enumerations

enum  csma_mode_tag {
  NO_CSMA_NO_IFS,
  NO_CSMA_WITH_IFS,
  CSMA_UNSLOTTED,
  CSMA_SLOTTED,
  NO_CSMA_NO_IFS,
  NO_CSMA_WITH_IFS,
  CSMA_UNSLOTTED,
  CSMA_SLOTTED
}
 CSMA Mode supported by transceiver. More...
 
enum  SHORTENUM {
  ASSOCIATIONREQUEST = (0x01),
  ASSOCIATIONRESPONSE,
  DISASSOCIATIONNOTIFICATION,
  DATAREQUEST,
  PANIDCONFLICTNOTIFICAION,
  ORPHANNOTIFICATION,
  BEACONREQUEST,
  COORDINATORREALIGNMENT,
  ORPHANREALIGNMENT,
  BEACON_MESSAGE,
  DATAREQUEST_IMPL_POLL,
  NULL_FRAME,
  MCPS_MESSAGE,
  DISCOVERY_REQUEST = 0x01,
  DISCOVERY_RESPONSE = 0x02,
  PAIR_REQUEST = 0x03,
  PAIR_RESPONSE = 0x04,
  UNPAIR_REQUEST = 0x05,
  KEY_SEED = 0x06,
  PING_REQUEST = 0x07,
  PING_RESPONSE = 0x08,
  ASSOCIATIONREQUEST = (0x01),
  ASSOCIATIONRESPONSE,
  DISASSOCIATIONNOTIFICATION,
  DATAREQUEST,
  PANIDCONFLICTNOTIFICAION,
  ORPHANNOTIFICATION,
  BEACONREQUEST,
  COORDINATORREALIGNMENT,
  GTSREQUEST,
  ORPHANREALIGNMENT,
  BEACON_MESSAGE,
  DATAREQUEST_IMPL_POLL,
  NULL_FRAME,
  MCPS_MESSAGE
}
 MAC Message types. More...
 
enum  sleep_mode_tag {
  SLEEP_MODE_1,
  SLEEP_MODE_1
}
 Sleep Mode supported by transceiver. More...
 

Functions

static uint32_t tal_add_time_symbols (uint32_t a, uint32_t b)
 Adds two time values. More...
 
void tal_ed_end_cb (uint8_t energy_level)
 User call back function for finished ED Scan. More...
 
retval_t tal_ed_start (uint8_t scan_duration)
 Starts ED Scan. More...
 
void tal_generate_rand_seed (void)
 Generates a 16-bit random number used as initial seed for srand() More...
 
retval_t tal_init (void)
 Initializes the TAL. More...
 
retval_t tal_pib_get (uint8_t attribute, uint8_t *value)
 Gets a TAL PIB attribute. More...
 
retval_t tal_pib_set (uint8_t attribute, pib_value_t *value)
 Sets a TAL PIB attribute. More...
 
retval_t tal_reset (bool set_default_pib)
 Resets TAL state machine and sets the default PIB values if requested. More...
 
uint8_t tal_rx_enable (uint8_t state)
 Switches receiver on or off. More...
 
void tal_rx_frame_cb (frame_info_t *rx_frame)
 User call back function for frame reception. More...
 
static uint32_t tal_sub_time_symbols (uint32_t a, uint32_t b)
 Subtract two time values. More...
 
void tal_task (void)
 TAL task handling. More...
 
retval_t tal_trx_sleep (sleep_mode_t mode)
 Sets the transceiver to sleep. More...
 
retval_t tal_trx_wakeup (void)
 Wakes up the transceiver from sleep. More...
 
void tal_tx_beacon (frame_info_t *tx_frame)
 Beacon frame transmission. More...
 
retval_t tal_tx_frame (frame_info_t *tx_frame, csma_mode_t csma_mode, bool perform_frame_retry)
 Requests to TAL to transmit frame. More...
 
void tal_tx_frame_done_cb (retval_t status, frame_info_t *frame)
 User call back function for frame transmission. More...
 

Variables

bool tal_pib_BattLifeExt
 Indication of whether battery life extension is enabled or not. More...
 
uint8_t tal_pib_BeaconOrder
 Beacon order. More...
 
uint32_t tal_pib_BeaconTxTime
 Holds the time at which last beacon was transmitted or received. More...
 
uint8_t tal_pib_CCAMode
 CCA Mode. More...
 
uint8_t tal_pib_CurrentChannel
 Current RF channel to be used for all transmissions and receptions. More...
 
uint8_t tal_pib_CurrentPage
 Current channel page. More...
 
uint64_t tal_pib_IeeeAddress
 64-bit (IEEE) address of the node. More...
 
uint8_t tal_pib_MaxBE
 The maximum value of the backoff exponent BE in the CSMA-CA algorithm. More...
 
uint8_t tal_pib_MaxCSMABackoffs
 The maximum number of back-offs the CSMA-CA algorithm will attempt before declaring a CSMA_CA failure. More...
 
uint16_t tal_pib_MaxFrameDuration
 Maximum number of symbols in a frame: = phySHRDuration + ceiling([aMaxPHYPacketSize + 1] x phySymbolsPerOctet) More...
 
uint8_t tal_pib_MaxFrameRetries
 The maximum number of retries allowed after a transmission failure. More...
 
uint8_t tal_pib_MinBE
 The minimum value of the backoff exponent BE in the CSMA-CA algorithm. More...
 
uint16_t tal_pib_PANId
 16-bit PAN ID More...
 
bool tal_pib_PrivatePanCoordinator
 Indicates if the node is a PAN coordinator or not. More...
 
uint16_t tal_pib_ShortAddress
 16-bit short address of the node. More...
 
uint8_t tal_pib_SHRDuration
 Duration of the synchronization header (SHR) in symbols for the current PHY. More...
 
uint8_t tal_pib_SuperFrameOrder
 Superframe order. More...
 
uint32_t tal_pib_SupportedChannels
 Supported channels. More...
 
uint8_t tal_pib_SymbolsPerOctet
 Number of symbols per octet for the current PHY. More...
 
uint8_t tal_pib_TransmitPower
 Default value of transmit power of transceiver using IEEE defined format of phyTransmitPower. More...
 

#define BAND_2400   (1)

2.4 GHz (channels 11 through 26)

#define BAND_900   (0)

868 / 910 MHz (channels 0 through 10) using BPSK

#define mac_i_pan_coordinator   (0x0B)

Attribute id of mac_i_pan_coordinator PIB.

Referenced by mlme_start_request(), tal_pib_get(), and tal_pib_set().

#define MAX_FRAME_DURATION   (NO_OF_SYMBOLS_PREAMBLE_SFD + (aMaxPHYPacketSize + 1) * SYMBOLS_PER_OCTET)

Maximum number of symbols in a frame for the current PHY.

This value is the base for the PHY PIB attribute phyMaxFrameDuration.

Referenced by recalc_macMaxFrameTotalWaitTime().

#define MAX_SYMBOL_TIME   (0x0FFFFFFF)

The maximum time in symbols for a 32 bit timer.

Referenced by tal_sub_time_symbols().

#define NO_OF_SYMBOLS_PREAMBLE_SFD   (NO_SYMBOLS_PREAMBLE + NO_SYMBOLS_SFD)

Number of symbols forming the synchronization header (SHR) for the current PHY.

This value is the base for the PHY PIB attribute phySHRDuration.

#define NO_SYMBOLS_PREAMBLE   (8)
#define NO_SYMBOLS_SFD   (2)
#define RF_BAND   BAND_2400
#define SYMBOL_MASK   (0x0FFFFFFF)

Symbol mask for ingnoring most significant nibble.

Referenced by tal_add_time_symbols(), and tal_sub_time_symbols().

#define SYMBOLS_PER_OCTET   (2)

4 bits form one symbol since O-QPSK is used

Referenced by tx_done_handling().

#define TAL_CONVERT_US_TO_SYMBOLS (   time)    ((time) >> 4)
#define TAL_GET_BEACON_INTERVAL_TIME (   BO)    ((1UL * aBaseSuperframeDuration) << (BO))
#define TAL_GET_SUPERFRAME_DURATION_TIME (   SO)    ((1UL * aBaseSuperframeDuration) << (SO))

Superframe Duration time in symbols.

Referenced by csma_backoff_calculation(), handle_gts_data_req(), mac_t_gts_cb(), and process_data_ind_not_transient().

typedef enum csma_mode_tag csma_mode_t

CSMA Mode supported by transceiver.

typedef struct frame_info_tag frame_info_t

Globally used frame information structure.

Sleep Mode supported by transceiver.

CSMA Mode supported by transceiver.

Enumerator
NO_CSMA_NO_IFS 
NO_CSMA_WITH_IFS 
CSMA_UNSLOTTED 
CSMA_SLOTTED 
NO_CSMA_NO_IFS 
NO_CSMA_WITH_IFS 
CSMA_UNSLOTTED 
CSMA_SLOTTED 
enum SHORTENUM

MAC Message types.

Enumerator
ASSOCIATIONREQUEST 
ASSOCIATIONRESPONSE 
DISASSOCIATIONNOTIFICATION 
DATAREQUEST 
PANIDCONFLICTNOTIFICAION 
ORPHANNOTIFICATION 
BEACONREQUEST 
COORDINATORREALIGNMENT 
ORPHANREALIGNMENT 
BEACON_MESSAGE 
DATAREQUEST_IMPL_POLL 
NULL_FRAME 
MCPS_MESSAGE 
DISCOVERY_REQUEST 
DISCOVERY_RESPONSE 
PAIR_REQUEST 
PAIR_RESPONSE 
UNPAIR_REQUEST 
KEY_SEED 
PING_REQUEST 
PING_RESPONSE 
ASSOCIATIONREQUEST 
ASSOCIATIONRESPONSE 
DISASSOCIATIONNOTIFICATION 
DATAREQUEST 
PANIDCONFLICTNOTIFICAION 
ORPHANNOTIFICATION 
BEACONREQUEST 
COORDINATORREALIGNMENT 
GTSREQUEST 
ORPHANREALIGNMENT 
BEACON_MESSAGE 
DATAREQUEST_IMPL_POLL 
NULL_FRAME 
MCPS_MESSAGE 

Sleep Mode supported by transceiver.

Enumerator
SLEEP_MODE_1 
SLEEP_MODE_1 

static uint32_t tal_add_time_symbols ( uint32_t  a,
uint32_t  b 
)
inlinestatic

Adds two time values.

This function adds two time values

Parameters
aTime value 1
bTime value 2
Returns
value of a + b

References SYMBOL_MASK.

Referenced by check_beacon_reception(), csma_backoff_calculation(), process_data_ind_not_transient(), and tal_tx_frame().

retval_t tal_ed_start ( uint8_t  scan_duration)

Starts ED Scan.

This function starts an ED Scan for the scan duration specified by the MAC layer.

Parameters
scan_durationSpecifies the ED scan duration in symbols
Returns
MAC_SUCCESS - ED scan duration timer started successfully TAL_BUSY - TAL is busy servicing the previous request from MAC TAL_TRX_ASLEEP - Transceiver is currently sleeping FAILURE otherwise

Referenced by per_mode_initiator_ed_end_cb(), and start_ed_scan().

uint8_t tal_rx_enable ( uint8_t  state)

Switches receiver on or off.

This function switches the receiver on (PHY_RX_ON) or off (PHY_TRX_OFF).

Parameters
stateNew state of receiver
Returns
TAL_BUSY if the TAL state machine cannot switch receiver on or off, TRX_OFF if receiver has been switched off, or RX_ON otherwise.
static uint32_t tal_sub_time_symbols ( uint32_t  a,
uint32_t  b 
)
inlinestatic

Subtract two time values.

This function subtracts two time values taking care of roll over.

Parameters
aTime value 1
bTime value 2
Returns
value a - b

References MAX_SYMBOL_TIME, and SYMBOL_MASK.

Referenced by csma_backoff_calculation(), process_data_ind_not_transient(), and tal_tx_frame().

void tal_task ( void  )

TAL task handling.

This function

  • Checks and allocates the receive buffer.
  • Processes the TAL incoming frame queue.
  • Implements the TAL state machine.
retval_t tal_trx_sleep ( sleep_mode_t  mode)

Sets the transceiver to sleep.

This function sets the transceiver to sleep state.

Parameters
modeDefines sleep mode of transceiver SLEEP or PHY_TRX_OFF)
Returns
TAL_BUSY - The transceiver is busy in TX or RX MAC_SUCCESS - The transceiver is put to sleep TAL_TRX_ASLEEP - The transceiver is already asleep MAC_INVALID_PARAMETER - The specified sleep mode is not supported
retval_t tal_trx_wakeup ( void  )

Wakes up the transceiver from sleep.

This function awakes the transceiver from sleep state.

Returns
TAL_TRX_AWAKE - The transceiver is already awake MAC_SUCCESS - The transceiver is woken up from sleep FAILURE - The transceiver did not wake-up from sleep
void tal_tx_beacon ( frame_info_t tx_frame)

Beacon frame transmission.

Parameters
tx_framePointer to the frame_info_t structure
retval_t tal_tx_frame ( frame_info_t tx_frame,
csma_mode_t  csma_mode,
bool  perform_frame_retry 
)

Requests to TAL to transmit frame.

This function is called by the MAC to deliver a frame to the TAL to be transmitted by the transceiver.

Parameters
tx_framePointer to the frame_info_t structure or to frame array to be transmitted
csma_modeIndicates mode of csma-ca to be performed for this frame
perform_frame_retryIndicates whether to retries are to be performed for this frame
Returns
MAC_SUCCESS if the TAL has accepted the data from the MAC for frame transmission TAL_BUSY if the TAL is busy servicing the previous MAC request

bool tal_pib_BattLifeExt

Indication of whether battery life extension is enabled or not.

uint8_t tal_pib_BeaconOrder

Beacon order.

uint32_t tal_pib_BeaconTxTime

Holds the time at which last beacon was transmitted or received.

uint8_t tal_pib_CCAMode

CCA Mode.

uint8_t tal_pib_CurrentChannel

Current RF channel to be used for all transmissions and receptions.

uint8_t tal_pib_CurrentPage

Current channel page.

uint64_t tal_pib_IeeeAddress

64-bit (IEEE) address of the node.

Referenced by main().

uint8_t tal_pib_MaxBE

The maximum value of the backoff exponent BE in the CSMA-CA algorithm.

uint8_t tal_pib_MaxCSMABackoffs

The maximum number of back-offs the CSMA-CA algorithm will attempt before declaring a CSMA_CA failure.

uint16_t tal_pib_MaxFrameDuration

Maximum number of symbols in a frame: = phySHRDuration + ceiling([aMaxPHYPacketSize + 1] x phySymbolsPerOctet)

uint8_t tal_pib_MaxFrameRetries

The maximum number of retries allowed after a transmission failure.

uint8_t tal_pib_MinBE

The minimum value of the backoff exponent BE in the CSMA-CA algorithm.

uint16_t tal_pib_PANId

16-bit PAN ID

bool tal_pib_PrivatePanCoordinator

Indicates if the node is a PAN coordinator or not.

uint16_t tal_pib_ShortAddress

16-bit short address of the node.

uint8_t tal_pib_SHRDuration

Duration of the synchronization header (SHR) in symbols for the current PHY.

uint8_t tal_pib_SuperFrameOrder

Superframe order.

uint32_t tal_pib_SupportedChannels

Supported channels.

uint8_t tal_pib_SymbolsPerOctet

Number of symbols per octet for the current PHY.

uint8_t tal_pib_TransmitPower

Default value of transmit power of transceiver using IEEE defined format of phyTransmitPower.