⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac.h

📁 ucos在NEC平台下的移植
💻 H
📖 第 1 页 / 共 3 页
字号:
#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 + -