📄 nwkmacinterface.h
字号:
/************************************************************************************
* This header file is provided as part of the interface to the Freescale 802.15.4
* MAC and PHY layer.
*
* The file covers the interface to the MLME and MCPS.
*
* Author(s): BPPED1
*
* (c) Copyright 2005, Freescale, Inc. All rights reserved.
*
* Freescale Confidential Proprietary
* Digianswer Confidential
*
* No part of this document must be reproduced in any form - including copied,
* transcribed, printed or by any electronic means - without specific written
* permission from Freescale.
*
************************************************************************************/
#ifndef _NWK_MAC_INTERFACE_H_
#define _NWK_MAC_INTERFACE_H_
#include "EmbeddedTypes.h"
#include "AppToMacPhyConfig.h" // For gSchedulerIntegration_d
#if gSchedulerIntegration_d
#include "TS_Interface.h"
#endif /* gSchedulerIntegration_d */
/************************************************************************************
*************************************************************************************
* Public type definitions
*************************************************************************************
************************************************************************************/
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
// General constants used in MAC primitives
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
// Address modes used by mlmeAssociateReq_t, mlmePollReq_t, mcpsDataReq_t,
// nwkCommStatusInd_t, mcpsDataInd_t, and panDescriptor_t
enum {
gAddrModeNone_c = 0,
gAddrModeShort_c = 2,
gAddrModeLong_c = 3
};
// Logical channel used by mlmeAssociateReq_t, mlmeStartReq_t
// mlmeSyncReq_t, and panDescriptor_t.
enum {
gLogicalChannel11_c = 11,
gLogicalChannel12_c = 12,
gLogicalChannel13_c = 13,
gLogicalChannel14_c = 14,
gLogicalChannel15_c = 15,
gLogicalChannel16_c = 16,
gLogicalChannel17_c = 17,
gLogicalChannel18_c = 18,
gLogicalChannel19_c = 19,
gLogicalChannel20_c = 20,
gLogicalChannel21_c = 21,
gLogicalChannel22_c = 22,
gLogicalChannel23_c = 23,
gLogicalChannel24_c = 24,
gLogicalChannel25_c = 25,
gLogicalChannel26_c = 26
};
// Used for the parameters securityUse, and
// securityEnable in relevant primitives.
enum {
gSecurityDisabled_c = 0,
gSecurityEnabled_c = 1
};
// The capability info is an array of 8 bits. The following constants are
// the bits that can be set or examined in the capability info field.
enum {
gCapInfoAltPanCoord_c = 1<<0, // Unit has the capability of becoming a PAN coordinator
gCapInfoDeviceFfd_c = 1<<1, // Unit is an FFD.
gCapInfoPowerMains_c = 1<<2, // Unit is mains-powered, and not battery-powered.
gCapInfoRxWhenIdle_c = 1<<3, // Receiver is on when unit is idle.
gCapInfoSecurity_c = 1<<6, // Unit can send/receive secured MAC frames.
gCapInfoAllocAddr_c = 1<<7 // Ask coordinator to allocate short address during association.
};
// Scan Modes
enum {
gScanModeED_c = 0,
gScanModeActive_c = 1,
gScanModePassive_c = 2,
gScanModeOrphan_c = 3
};
// Superframe specification bit fields
enum {
gSuperFrameSpecLsbBO_c = 0x0F,
gSuperFrameSpecLsbSO_c = 0xF0,
gSuperFrameSpecMsbFinalCapSlot_c = 0x0F,
gSuperFrameSpecMsbBattlifeExt_c = 0x10,
gSuperFrameSpecMsbReserved_c = 0x20,
gSuperFrameSpecMsbPanCoord_c = 0x40,
gSuperFrameSpecMsbAssocPermit_c = 0x80
};
// TX option bit fields
enum {
gTxOptsAck_c = 1<<0,
gTxOptsGts_c = 1<<1,
gTxOptsIndirect_c = 1<<2,
gTxOptsSecurity_c = 1<<3
};
// GTS Characteristics field masks
enum {
gGtsLength_c = 0x0F, // Number of superframe slots requested for the GTS
gGtsDirection_c = 0x10, // Clr: Transmit slot only, Set: Receive slot only.
gGtsType_c = 0x20 // Clr: Deallocate GTS slot, Set: Allocate GTS slot.
};
// Security Suites
enum {
// Security suite 0 - no security operations are performed.
gSecSuiteNoSecurity_c = 0x00,
// Security suite 1-7 - various levels of security.
gSecSuiteAesCtr_c = 0x01,
gSecSuiteAesCcm128_c = 0x02,
gSecSuiteAesCcm64_c = 0x03,
gSecSuiteAesCcm32_c = 0x04,
gSecSuiteAesCbcMac128_c = 0x05,
gSecSuiteAesCbcMac64_c = 0x06,
gSecSuiteAesCbcMac32_c = 0x07,
// The value 0x08 signifies that no security suite is used
gSecSuiteNone_c = 0x08
};
// Beacon, and Superframe orders (T = (960*(2^Order))*16E-6)
enum {
gOrder000s015ms_c = 0, // 15.36ms
gOrder000s031ms_c = 1, // 30.72ms
gOrder000s061ms_c = 2, // 61.44ms
gOrder000s123ms_c = 3, // 122.88ms
gOrder000s246ms_c = 4, // 245.76ms
gOrder000s492ms_c = 5, // 491.52ms
gOrder000s983ms_c = 6, // 0.98304sec
gOrder001s966ms_c = 7, // 1.96608sec
gOrder003s932ms_c = 8, // 3.93216sec
gOrder007s864ms_c = 9, // 7.86432sec
gOrder015s729ms_c = 10, // 15.72864sec
gOrder031s457ms_c = 11, // 31.45728sec
gOrder062s915ms_c = 12, // 1min, 2.91456sec
gOrder125s829ms_c = 13, // 2min, 5.82912sec
gOrder251s658ms_c = 14, // 4min, 11.65824sec
gOrderNone_c = 15 // No beacon
};
// MAC PIB attributes
enum {
// Vendor specific attributes
gMPibRole_c = 0x20,
gMPibLogicalChannel_c = 0x21,
gMPibTreemodeStartTime_c = 0x22,
gMPibPanIdConflictDetection_c = 0x23,
// General MAC PIB attributes
gMPibAckWaitDuration_c = 0x40,
gMPibAssociationPermit_c = 0x41,
gMPibAutoRequest_c = 0x42,
gMPibBattLifeExt_c = 0x43,
gMPibBattLifeExtPeriods_c = 0x44,
gMPibBeaconPayload_c = 0x45,
gMPibBeaconPayloadLength_c = 0x46,
gMPibBeaconOrder_c = 0x47,
gMPibBeaconTxTime_c = 0x48,
gMPibBsn_c = 0x49,
gMPibCoordExtendedAddress_c = 0x4A,
gMPibCoordShortAddress_c = 0x4B,
gMPibDsn_c = 0x4C,
gMPibGtsPermit_c = 0x4D,
gMPibMaxCsmaBackoffs_c = 0x4E,
gMPibMinBe_c = 0x4F,
gMPibPanId_c = 0x50,
gMPibPromiscuousMode_c = 0x51,
gMPibRxOnWhenIdle_c = 0x52,
gMPibShortAddress_c = 0x53,
gMPibSuperFrameOrder_c = 0x54,
gMPibTransactionPersistenceTime_c = 0x55,
// Security specific MAC PIB attributes
gMPibAclEntryDescriptorSet_c = 0x70,
gMPibAclEntryDescriptorSetSize_c = 0x71,
gMPibDefaultSecurity_c = 0x72,
gMPibDefaultSecurityMaterialLength_c = 0x73,
gMPibDefaultSecurityMaterial_c = 0x74,
gMPibDefaultSecuritySuite_c = 0x75,
gMPibSecurityMode_c = 0x76,
// Vendor specific. Used for selecting current
// entry in ACL descriptor table.
gMPibAclEntryCurrent_c = 0x77,
// The following attributes are mapped to elements
// in the gMPibAclEntryDescriptorSet_c attribute.
gMPibAclEntryExtAddress_c = 0x78,
gMPibAclEntryShortAddress_c = 0x79,
gMPibAclEntryPanId_c = 0x7A,
gMPibAclEntrySecurityMaterialLength_c = 0x7B,
gMPibAclEntrySecurityMaterial_c = 0x7C,
gMPibAclEntrySecuritySuite_c = 0x7D
};
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
// Primitives in the MLME to NWK direction
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
enum {
gNwkAssociateInd_c,
gNwkAssociateCnf_c,
gNwkDisassociateInd_c,
gNwkDisassociateCnf_c,
gNwkBeaconNotifyInd_c,
gNwkGetCnf_c,
gNwkGtsInd_c,
gNwkGtsCnf_c,
gNwkOrphanInd_c,
gNwkResetCnf_c,
gNwkRxEnableCnf_c,
gNwkScanCnf_c,
gNwkCommStatusInd_c,
gNwkSetCnf_c,
gNwkStartCnf_c,
gNwkSyncLossInd_c,
gNwkPollCnf_c,
gNwkErrorCnf_c,
gNwkBeaconStartInd_c, // Proprietart primitive : Beacon start indication
gNwkMaintenanceScanCnf_c, // Proprietary primitive : Tree mode maintenance scan confirm
gNwkMaxPrimitives_c
};
typedef uint8_t primMlmeToNwk_t;
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
// Events to the MLME main task when running with task scheduler
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
enum {
gMacEventNwkMlmeMsgQueued_c = 1 << 0, /* A message from NWK to MLME was queued */
gMacEventNwkMcpsMsgQueued_c = 1 << 1, /* A message from NWK to MCPS was queued */
gMacEventMemMlmeMsgQueued_c = 1 << 2, /* A message from MEM to MLME was queued */
gMacEventMemAspMsgQueued_c = 1 << 3, /* A message from MEM to ASP was queued */
gMacEventPanIdConflict_c = 1 << 4, /* SEQ signals that a PAN Id Conflict has occured */
gMacEventGtsActionRequired_c= 1 << 5, /* MEM or MLME that a Gts Action is required in the main task */
gMacEventBeaconCntrUpdated_c= 1 << 6, /* MEM indicates that the beacon counter has been updated */
};
// PAN descriptor. Used in Scan Confirm,
// and Beacon Notfiy Indication.
typedef struct panDescriptor_tag {
uint8_t coordAddress[8];
uint8_t coordPanId[2];
uint8_t coordAddrMode;
uint8_t logicalChannel;
bool_t securityUse;
uint8_t aclEntry;
bool_t securityFailure;
uint8_t superFrameSpec[2];
bool_t gtsPermit;
uint8_t linkQuality;
uint8_t timeStamp[3];
} panDescriptor_t;
// Security material used in ACL entries
typedef struct securityMaterial_tag {
uint8_t key[16];
uint8_t frameCounter[4];
uint8_t keySeqCounter;
uint8_t optFrameCounter[4];
uint8_t optKeySeqCounter;
} securityMaterial_t;
// ACL entry descriptor. Can be used for e.g. MLME-GET/SET operations.
typedef struct aclEntryDescriptor_tag {
uint8_t aclExtendedAddress[8]; // 64 bit addr of the device in this ACL entry
uint8_t aclShortAddress[2]; // 16 bit addr of the device in this ACL entry
uint8_t aclPanId[2]; // PAN ID of the device in this ACL entry
uint8_t aclSecurityMaterialLength; // Number of bytes in 'aclSecurityMaterial' (<=26)
uint8_t aclSecurityMaterial[sizeof(securityMaterial_t)]; // Key for protecting frames
uint8_t aclSecuritySuite; // Security suite used for the device in this ACL entry.
} aclEntryDescriptor_t;
// Type: gNwkAssociateInd_c
typedef struct nwkAssociateInd_tag {
uint8_t deviceAddress[8];
bool_t securityUse;
uint8_t AclEntry;
uint8_t capabilityInfo;
} nwkAssociateInd_t;
// Type: gNwkAssociateCnf_c
typedef struct nwkAssociateCnf_tag {
uint8_t assocShortAddress[2];
uint8_t status;
} nwkAssociateCnf_t;
// Type: gNwkDisassociateInd_c
typedef struct nwkDisassociateInd_tag {
uint8_t deviceAddress[8];
bool_t securityUse;
uint8_t aclEntry;
uint8_t disassociateReason;
} nwkDisassociateInd_t;
// Type: gNwkDisassociateCnf_c
typedef struct nwkDisassociateCnf_tag {
uint8_t status;
} nwkDisassociateCnf_t;
// Type: gNwkBeaconNotifyInd_c,
typedef struct nwkBeaconNotifyInd_tag {
uint8_t bsn;
uint8_t pendAddrSpec;
uint8_t sduLength;
uint8_t *pAddrList; // Points to address list in buffer
panDescriptor_t *pPanDescriptor; // Points to pan descripter in buffer
uint8_t *pSdu; // Points to beacon payload in buffer
void *pBufferRoot; // Upper layer must free this buffer before freeing the indication message,
// E.g. MSG_Free(pBeaconInd->pBufferRoot); MSG_Free(pBeaconInd);
} nwkBeaconNotifyInd_t;
// Type: gNwkGetCnf_c - not used,
typedef struct nwkGetCnf_tag {
uint8_t status;
uint8_t pibAttribute;
uint8_t *pibAttributeValue;
} nwkGetCnf_t;
// Type: gNwkGtsInd_c,
typedef struct nwkGtsInd_tag {
uint8_t devAddress[2];
bool_t securityUse;
uint8_t AclEntry;
uint8_t gtsCharacteristics;
} nwkGtsInd_t;
// Type: gNwkGtsCnf_c,
typedef struct nwkGtsCnf_tag {
uint8_t status;
uint8_t gtsCharacteristics;
} nwkGtsCnf_t;
// Type: gNwkOrphanInd_c,
typedef struct nwkOrphanInd_tag {
uint8_t orphanAddress[8];
bool_t securityUse;
uint8_t AclEntry;
} nwkOrphanInd_t;
// Type: gNwkResetCnf_c - not used,
typedef struct nwkResetCnf_tag {
uint8_t status;
} nwkResetCnf_t;
// Type: gNwkRxEnableCnf_c,
typedef struct nwkRxEnableCnf_tag {
uint8_t status;
} nwkRxEnableCnf_t;
// Type: gNwkScanCnf_c,
typedef struct nwkScanCnf_tag {
uint8_t status;
uint8_t scanType;
uint8_t resultListSize;
uint8_t unscannedChannels[4];
union {
uint8_t *pEnergyDetectList; // pointer to 16 byte static buffer
panDescriptor_t *pPanDescriptorList; // Array of pan descriptors [5] - this one must be freed by MM_Free();
} resList;
} nwkScanCnf_t;
// Type: gNwkCommStatusInd_c,
typedef struct nwkCommStatusInd_tag {
uint8_t srcAddress[8];
uint8_t panId[2];
uint8_t srcAddrMode;
uint8_t destAddress[8];
uint8_t destAddrMode;
uint8_t status;
} nwkCommStatusInd_t;
// Type: gNwkSetCnf_c - not used,
typedef struct nwkSetCnf_tag {
uint8_t status;
uint8_t pibAttribute;
} nwkSetCnf_t;
// Type: gNwkStartCnf_c,
typedef struct nwkStartCnf_tag {
uint8_t status;
} nwkStartCnf_t;
// Type: gNwkSyncLossInd_c,
typedef struct nwkSyncLossInd_tag {
uint8_t lossReason;
} nwkSyncLossInd_t;
// Type: gNwkPollCnf_c,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -