📄 mac.h
字号:
#ifndef MAC_H
#define MAC_H
//----------------------------------------------------------------------------------------------------------
// MAC framework initialization
#define MAC_INIT() \
do { \
DISABLE_GLOBAL_INT(); \
MAC_PORT_INIT(); \
SPI_INIT(); \
FIFOP_INT_INIT(); \
mschInit(); \
mtimInit(); \
macInfo.state = MAC_STATE_DEFAULT; \
mpmInfo.currentState = MPM_CC2420_XOSC_AND_VREG_OFF; \
mpmInfo.selectedMode = MPM_CC2420_XOSC_AND_VREG_OFF; \
mrxInfo.keepFifopIntOff = TRUE; \
DISABLE_FIFOP_INT(); \
ENABLE_T1_COMPA_INT(); \
ENABLE_GLOBAL_INT(); \
} while (0)
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
// PHY / MAC constants
#define aMaxPHYPacketSize 127
#define aTurnaroundTime 12 // symbol periods
#define aUnitBackoffPeriod 20
// Extended address, must be set by higher layer
extern BYTE aExtendedAddress[8];
// MAC constants
#define aBaseSlotDuration 60
#define aNumSuperframeSlots 16
#define aBaseSuperframeDuration (aBaseSlotDuration * aNumSuperframeSlots)
#define aMaxBE 5
#define aMaxBeaconOverhead 75
#define aMaxBeaconPayloadLength (aMaxPHYPacketSize - aMaxBeaconOverhead)
#define aGTSDescPersistenceTime 4
#define aMaxFrameOverhead 25
#define aMinFrameOverhead 9
#define aMaxFrameResponseTime 1220
#define aMaxFrameRetries 3
#define aMaxLostBeacons 4
#define aMaxMACFrameSize (aMaxPHYPacketSize - aMaxFrameOverhead)
#define aMaxSIFSFrameSize 18
#define aMinCAPLength 440
#define aMinLIFSPeriod 40
#define aMinSIFSPeriod 12
#define aResponseWaitTime (32 * aBaseSuperframeDuration)
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
// MAC ACL and security information bases
#define MAC_SECURITY_NONE 0x00
#define MAC_SECURITY_AES_CTR 0x01
#define MAC_SECURITY_AES_CCM128 0x02
#define MAC_SECURITY_AES_CCM64 0x03
#define MAC_SECURITY_AES_CCM32 0x04
#define MAC_SECURITY_AES_CBC_MAC128 0x05
#define MAC_SECURITY_AES_CBC_MAC64 0x06
#define MAC_SECURITY_AES_CBC_MAC32 0x07
#define MAC_HIGHEST_SECURITY_MODE MAC_SECURITY_AES_CBC_MAC32
#define MAC_UNSECURED_MODE 0x00
#define MAC_ACL_MODE 0x01
#define MAC_SECURED_MODE 0x02
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
// MAC PAN information base
// These constants shall be used with mlmeSetRequest and mlmeGetRequest.
typedef enum {
PHY_TRANSMIT_POWER = 0x02,
MAC_ACK_WAIT_DURATION = 0x40,
MAC_ASSOCIATION_PERMIT,
MAC_AUTO_REQUEST,
MAC_BATT_LIFE_EXT,
MAC_BATT_LIFE_EXT_PERIODS,
MAC_BEACON_PAYLOAD,
MAC_BEACON_PAYLOAD_LENGTH,
MAC_BEACON_ORDER,
MAC_BEACON_TX_TIME,
MAC_BSN,
MAC_COORD_EXTENDED_ADDRESS,
MAC_COORD_SHORT_ADDRESS,
MAC_DSN,
MAC_GTS_PERMIT,
MAC_MAX_CSMA_BACKOFFS,
MAC_MIN_BE,
MAC_PAN_ID,
MAC_PROMISCUOUS_MODE,
MAC_RX_ON_WHEN_IDLE,
MAC_SHORT_ADDRESS,
MAC_SUPERFRAME_ORDER,
MAC_TRANSACTION_PERSISTENCE_TIME,
MAC_ACL_ENTRY_DESCRIPTOR_SET = 0x70,
MAC_ACL_ENTRY_DESCRIPTOR_SETSIZE,
MAC_DEFAULT_SECURITY,
MAC_DEFAULT_SECURITY_MATERIAL_LENGTH,
MAC_DEFAULT_SECURITY_MATERIAL,
MAC_DEFAULT_SECURITY_SUITE,
MAC_SECURITY_MODE,
MAC_ASSOCIATED_PAN_CORDINATOR = 0xE0
} MAC_PIB_ATTR;
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
// PHY transiver output Power values
#define OUTPUT_POWER_0DBM 0x00
#define OUTPUT_POWER_N1DBM 0x21
#define OUTPUT_POWER_N3DBM 0x23
#define OUTPUT_POWER_N5DBM 0x25
#define OUTPUT_POWER_N7DBM 0x27
#define OUTPUT_POWER_N10DBM 0x2A
#define OUTPUT_POWER_N15DBM 0x2F
#define OUTPUT_POWER_N25DBM 0x39
//----------------------------------------------------------------------------------------------------------
// MAC status values
typedef BYTE MAC_ENUM;
#define MAC_SUCCESS 0
#define SUCCESS 0
#define BEACON_LOSS 0xE0
#define CHANNEL_ACCESS_FAILURE 0xE1
#define DENIED 0xE2
#define DISABLE_TRX_FAILURE 0xE3
#define FAILED_SECURITY_CHECK 0xE4
#define FRAME_TOO_LONG 0xE5
#define INVALID_GTS 0xE6
#define INVALID_HANDLE 0xE7
#define INVALID_PARAMETER 0xE8
#define NO_ACK 0xE9
#define NO_BEACON 0xEA
#define MAC_NO_DATA 0xEB
#define NO_SHORT_ADDRESS 0xEC
#define OUT_OF_CAP 0xED
#define PAN_ID_CONFLICT 0xEE
#define REALIGNMENT 0xEF
#define TRANSACTION_EXPIRED 0xF0
#define TRANSACTION_OVERFLOW 0xF1
#define TX_ACTIVE 0xF2
#define UNAVAILABLE_KEY 0xF3
#define UNSUPPORTED_ATTRIBUTE 0xF4
#define RX_DEFERRED 0xF5
// Association status
#define PAN_AT_CAPACITY 1
#define PAN_ACCESS_DENIED 2
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
// DO NOT CHANGE THE ORDER INSIDE THIS STRUCTURE!!!
typedef struct {
BYTE srcAddrMode;
WORD srcPanId;
ADDRESS srcAddr;
BYTE dstAddrMode;
WORD dstPanId;
ADDRESS dstAddr;
UINT8 mpduLinkQuality;
ZBOOL securityUse;
UINT8 aclEntry;
INT8 msduLength;
BYTE pMsdu[aMaxPHYPacketSize - aMinFrameOverhead];
} MCPS_DATA_INDICATION;
// DO NOT CHANGE THE ORDER INSIDE THIS STRUCTURE!!!
typedef struct { // Overlap when shoehorned into MAC_RX_PACKET
ZBOOL securityFailure; // MAC_RX_PACKET.securityStatus
DWORD timeStamp; // MAC_RX_PACKET.timeStamp -> OK
UINT8 coordAddrMode; // MCPS_DATA_INDICATION.srcAddrMode -> OK
WORD coordPanId; // MCPS_DATA_INDICATION.srcPanId -> OK
ADDRESS coordAddress; // MCPS_DATA_INDICATION.srcAddr -> OK
ZBOOL securityUse; // MCPS_DATA_INDICATION.dstAddrMode
WORD superframeSpec; // MCPS_DATA_INDICATION.dstPanId
ZBOOL gtsPermit; // MCPS_DATA_INDICATION.dstAddr
UINT8 linkQuality; // MCPS_DATA_INDICATION.dstAddr
UINT8 aclEntry; // MCPS_DATA_INDICATION.dstAddr
UINT8 logicalChannel; // MCPS_DATA_INDICATION.dstAddr
} PAN_DESCRIPTOR;
// DO NOT CHANGE THE ORDER INSIDE THIS STRUCTURE!!!
typedef struct { // Overlap when shoehorned into MAC_RX_PACKET
UINT8 bsn; // MAC_RX_PACKET.sequenceNumber -> OK
PAN_DESCRIPTOR panDescriptor; // See above...
BYTE pendAddrSpec; // MCPS_DATA_INDICATION.dstAddr
UINT8 sduLength; // MCPS_DATA_INDICATION.dstAddr
ADDRESS pAddrList[7]; // MCPS_DATA_INDICATION.dstAddr to pMsdu
BYTE pSdu[aMaxBeaconPayloadLength]; // MCPS_DATA_INDICATION.pMsdu
} MLME_BEACON_NOTIFY_INDICATION;
// The results returned by mlmeScanRequest (slightly different from MLME_SCAN_CONFIRM used by version 0.6.2
// and earlier)
typedef struct {
BYTE scanType;
DWORD unscannedChannels;
UINT8 resultListSize;
union{
UINT8 pEnergyDetectList[16];
PAN_DESCRIPTOR pPANDescriptorList[MAC_OPT_MAX_PAN_DESCRIPTORS];
}ENERGY_OR_ACTIVE;
} MAC_SCAN_RESULT;
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
// Address modes - for use with mcpsDataRequest only (all other address mode parameters shall use
// AM_SHORT_16 or AM_EXTENDED_64)
#define SRC_ADDR_BM 0xC0
#define SRC_ADDR_NONE 0x00
#define SRC_ADDR_SHORT 0x80
#define SRC_ADDR_EXT 0xC0
#define DEST_ADDR_BM 0x0C
#define DEST_ADDR_NONE 0x00
#define DEST_ADDR_EXT 0x0C
#define DEST_ADDR_SHORT 0x08
// Address modes:
#define AM_NONE 0
#define AM_SHORT_16 2
#define AM_EXTENDED_64 3
// Internal
#define BOTH_ADDR_USED 0x88
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
// TX options - for use with mcpsDataRequest only
#define TX_OPT_SECURITY_ENABLE 0x08
#define TX_OPT_INDIRECT 0x04
#define TX_OPT_GTS 0x02
#define TX_OPT_ACK_REQ 0x01
#define TX_OPT_NONE 0x00
//----------------------------------------------------------------------------------------------------------
/*******************************************************************************************************
*******************************************************************************************************
************************** MCPS Function Prototypes **************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
// void mcpsDataRequest(BYTE addrModes, WORD srcPanId, ADDRESS *pSrcAddr, WORD destPanId, ADDRESS ...)
//
// DESCRIPTION:
// Transmit a data packet.
//
// PARAMETERS:
// BYTE addrModes
// Address mode for source and destination
// (SRC_ADDR_SHORT, SRC_ADDR_EXT or 0) | (DEST_ADDR_SHORT, DEST_ADDR_EXT or 0)
// WORD srcPanId
// Source PAN identifier
// ADDRESS *pSrcAddr
// Pointer to the source address (short or extended)
// WORD destPanId,
// Destination PAN identifier
// ADDRESS *pDestAddr,
// Pointer to the destination address (short or extended)
// UINT8 msduLength,
// The length of pMsdu[]
// BYTE *pMsdu,
// A pointer to the packet payload
// BYTE msduHandle,
// A handle to this packet which is used later on with mcpsPurgeRequest() and mcpsDataConfirm()
// BYTE txOptions
// (TX_OPT_SECURITY_ENABLE | TX_OPT_INDIRECT | TX_OPT_GTS | TX_OPT_ACK_REQ) or TX_OPT_NONE
// Note: Indirect transmission only available for MAC_OPT_FFD=1
//-------------------------------------------------------------------------------------------------------
void mcpsDataRequest(BYTE addrModes, WORD srcPanId, ADDRESS *pSrcAddr, WORD destPanId, ADDRESS *pDestAddr, UINT8 msduLength, BYTE *pMsdu, BYTE msduHandle, BYTE txOptions);
//-------------------------------------------------------------------------------------------------------
// void mcpsDataConfirm(MAC_ENUM status, BYTE msduHandle)
//
// DESCRIPTION:
// MAC callback to the higher layer upon complete processing of a mcpsDataRequest
// Function must be implemented by the higher layer
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -