Atmel Software Framework

mac_pib.c File Reference

Implements the MAC PIB attribute handling.

Copyright (c) 2013-2015 Atmel Corporation. All rights reserved.

#include <compiler.h>
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include "pal.h"
#include "return_val.h"
#include "bmm.h"
#include "qmm.h"
#include "tal.h"
#include "ieee_const.h"
#include "mac_msg_const.h"
#include "mac_api.h"
#include "mac_msg_types.h"
#include "mac_data_structures.h"
#include "stack_config.h"
#include "mac_internal.h"
#include "mac.h"
#include "mac_build_config.h"
#include "private_const.h"

Macros

#define MAX_MAC_PIB_ATTRIBUTE_ID   (macMinSIFSPeriod)
 
#define MAX_PHY_PIB_ATTRIBUTE_ID   (phySymbolsPerOctet)
 
#define MIN(a, b)   (((a) < (b)) ? (a) : (b))
 
#define MIN_MAC_PIB_ATTRIBUTE_ID   (macAckWaitDuration)
 
#define MIN_PRIVATE_PIB_ATTRIBUTE_ID   (macIeeeAddress)
 

Functions

static FLASH_DECLARE (uint8_t phy_pib_size[])
 
uint8_t mac_get_pib_attribute_size (uint8_t pib_attribute_id)
 Gets the size of a PIB attribute. More...
 
retval_t mlme_get (uint8_t attribute, pib_value_t *attribute_value)
 
retval_t mlme_set (uint8_t attribute, pib_value_t *attribute_value, bool set_trx_to_sleep)
 Setting of MAC PIB attributes via functional access. More...
 
void mlme_set_request (uint8_t *m)
 Handles an MLME-SET.request primitive. More...
 
static void recalc_macMaxFrameTotalWaitTime (void)
 Re-caclulates PIB attribute macMaxFrameTotalWaitTime. More...
 
retval_t set_tal_pib_internal (uint8_t attribute, pib_value_t *attribute_value)
 Wakes-up the radio and sets the corresponding TAL PIB attribute. More...
 

#define MAX_MAC_PIB_ATTRIBUTE_ID   (macMinSIFSPeriod)
#define MAX_PHY_PIB_ATTRIBUTE_ID   (phySymbolsPerOctet)
#define MIN (   a,
 
)    (((a) < (b)) ? (a) : (b))
#define MIN_MAC_PIB_ATTRIBUTE_ID   (macAckWaitDuration)
#define MIN_PRIVATE_PIB_ATTRIBUTE_ID   (macIeeeAddress)

static FLASH_DECLARE ( uint8_t  phy_pib_size[])
static
retval_t mlme_set ( uint8_t  attribute,
pib_value_t *  attribute_value,
bool  set_trx_to_sleep 
)

Setting of MAC PIB attributes via functional access.

In case the highest stack layer is above MAC (e.g. NWK or even higher), it is not efficient to change PIB attributes using the standard request / confirm primitive concept via the NHLE_MAC queue. In order to allow a more efficient way to change PIB attributes residing in MAC or TAL, this function replaces the standard primitive access via a functional interface.

An additional parameter allows for forcing the transceiver back to sleep after PIB setting. Otherwise the transceiver will stay awake (if it has been woken up before). This enables the higher layer to change several PIB attributes without waking up the transceiver and putting it back to sleep several times.

Parameters
attributePIB attribute to be set
attribute_indexIndex of the PIB attribute to be set
attribute_valueAttribute value to be set
set_trx_to_sleepSet TRX back to sleep after this PIB access if it was before starting this TRX access. Otherwise the transceiver state will remain as it is, i.e. in case the transceiver was woken up, it will stay awake. The default value for just changing one variable is true, i.e. the transceiver will be put back to sleep if it has been woken up.
Returns
Status of the attempt to set the TAL PIB attribute: MAC_UNSUPPORTED_ATTRIBUTE if the PIB attribute was not found MAC_SUCCESS if the attempt to set the PIB attribute was successful TAL_BUSY if the TAL is not in an idle state to change PIB attributes

References aMaxBeaconPayloadLength, mac_pib_tag::mac_AutoRequest, mac_pib_tag::mac_BattLifeExtPeriods, mac_pib_tag::mac_CoordExtendedAddress, mac_pib_tag::mac_CoordShortAddress, mac_pib_tag::mac_DSN, mac_pib_tag::mac_GTSPermit, MAC_INVALID_INDEX, MAC_INVALID_PARAMETER, mac_pib_tag::mac_MaxFrameTotalWaitTime, mac_pib, mac_pib_tag::mac_ResponseWaitTime, mac_pib_tag::mac_RxOnWhenIdle, mac_pib_tag::mac_SecurityEnabled, mac_sleep_trans(), MAC_SUCCESS, mac_trx_wakeup(), MAC_UNSUPPORTED_ATTRIBUTE, macAckWaitDuration, macAssociatedPANCoord, macAssociationPermit, macAutoRequest, macBattLifeExt, macBattLifeExtPeriods, macBeaconOrder, macBeaconPayload, macBeaconPayloadLength, macBSN, macCoordExtendedAddress, macCoordShortAddress, macDSN, macGTSPermit, macIeeeAddress, macMaxBE, macMaxCSMABackoffs, macMaxFrameRetries, macMaxFrameTotalWaitTime, macMinBE, macPANCoordExtendedAddress, macPANCoordShortAddress, macPANId, macPrivateCCAFailure, macPrivateDisableACK, macPrivateIllegalFrameType, macPrivateNoDataAfterAssocReq, macPrivateVirtualPANs, macPromiscuousMode, macResponseWaitTime, macRxOnWhenIdle, macSecurityEnabled, macShortAddress, macSuperframeOrder, macTransactionPersistenceTime, PHY_RX_ON, phyCCAMode, phyCurrentChannel, phyCurrentPage, phyTransmitPower, mac_pib_tag::privateIllegalFrameType, mac_pib_tag::privateNoDataAfterAssocReq, mac_pib_tag::privateVirtualPANs, recalc_macMaxFrameTotalWaitTime(), SLEEP_MODE_1, status, tal_pib_set(), tal_rx_enable(), TAL_TRX_ASLEEP, tal_trx_sleep(), and tal_trx_wakeup().

Referenced by mlme_set_request().

static void recalc_macMaxFrameTotalWaitTime ( void  )
static

Re-caclulates PIB attribute macMaxFrameTotalWaitTime.

This function re-calculates the MAC PIB attribute macMaxFrameTotalWaitTime whenever one of the following PIB attributes change: macMinBE macMaxBE macMaxCSMABackoffs phyMaxFrameDuration

See IEEE 802.15.4-2006 equation (14) in section 7.4.2.

References aUnitBackoffPeriod, mac_pib_tag::mac_MaxFrameTotalWaitTime, mac_pib, MAX_FRAME_DURATION, MIN, and tal_pib.

Referenced by mlme_set().