?? mac.h
字號:
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_PIB_ATTR;
// MAC 命令幀對應狀態編碼
//?????????????????????????????????????????/不夠區分系統MAC層的狀態,還需要擴展。
typedef enum {
MAC_STATE_UNSTARTED,
MAC_STATE_ASSOC_STARTED,
MAC_STATE_ASSOC_REQ_SENT,
MAC_STATE_ASSOC_WAIT_FOR_RESPONSE,
MAC_STATE_ASSOC_FINISHED,
//5
MAC_STATE_ENERGY_SCAN,
MAC_STATE_ENERGY_SCAN_FINISHED,
//7
MAC_STATE_ACTIVE_PASSIVE_SCAN,
MAC_STATE_ORPHAN_SCAN,
MAC_STATE_ORPHAN_REALIGNED,
//10
MAC_STATE_ACTIVE_PASSIVE_SCAN_FINISHED,
//11
MAC_STATE_ID_CONFLICT,
MAC_STATE_REALIGNMENT,
MAC_STATE_DISASSOCIATED,
//14
MAC_STATE_SYNING,
MAC_STATE_SYNING_END,
//16
MAC_STATE_IDLE,
MAC_STATE_INACTIVE,
MAC_STATE_START_TO_SLEEP,
//MAC_STATE_POLLING
} MAC_STATE_TYPE;
//--------------------------------------------------//
//-------下面為Zigbee中MAC層幀的數據結構定義--------//
//--------------------------------------------------//
//IEEE802.15.4幀的控制字段格式
typedef union _Frame_Control
{
struct {
BYTE FrameType : 3;
BYTE SecurityEnable :1;
BYTE FramePending :1;
BYTE AckReq :1;
BYTE IntraPAN :1;
BYTE :3;
BYTE DestAddrMode :2;
BYTE :3;
BYTE SrcAddrMode :2;
}bits;
BYTE v[2];
WORD w;
}FRAME_CONTROL;
//IEEE802.15.4信標幀中的負載域(payload)格式(zigbee規范pg250,251)
typedef struct _BEACON_PAYLOAD
{
BYTE ProtocolID;
BYTE StackProfile : 4;
BYTE nwkcProtocolVersion :4;
BYTE Reserved_beacon_payload :2;
BYTE RouterCapacity :1;
BYTE Devicedepth ;
BYTE EndDeviceCapacity :1;
BYTE TxOffSetbyte[3];
}BEACON_PAYLOAD;
//IEEE802.15.4信標幀中的pending address規范域
typedef union _PendingAddress
{
struct{
BYTE NumOfShortAddress :3;
BYTE :1;
BYTE NumOfExtAddress :3;
BYTE :1;
}bits;
BYTE bytes;
}PendingAddress;
// IEEE 802.15.4 信標幀中的超幀規范域格式
typedef struct _SUPERFRAME_SPECIFICATION
{
union
{
struct
{
BYTE beaconOrder : 4;
BYTE superframeOrder : 4;
BYTE finalCAPSlot : 4;
BYTE bBatteryLifeExtension : 1;
BYTE : 1;
BYTE bIsPANCoordinator : 1;
BYTE bIsAssociationPermitted : 1;
} fields;
struct
{
BYTE LSB;
BYTE MSB;
} bytes;
WORD Val;
} SF;
} SUPERFRAME_SPECIFICATION;
// IEEE 802.15.4 Beacon Frame GTS information
typedef struct _GTS_SPECIFICATION
{
union
{
struct
{
BYTE GTSDescriptorCount : 3;
BYTE : 3;
BYTE bGTSPermit : 1;
} fields;
BYTE Val;
} GTS;
} GTS_SPECIFICATION;
//IEEE802.15.4中信標幀中GTS方向域
BYTE_VAL GTSDirectionMask ;
//IEEE802.15.4中GTS descriptor定義
typedef struct _GTS_DESCRIPTOR
{
SHORT_ADDR DeviceAddr;
BYTE GTSStartingSlot : 4;
BYTE GTSLength :4;
}GTS_DESCRIPTOR;
//發送association request命令幀時候的節點capability信息
typedef union _Node_Capability
{
struct{
BYTE Alt_PAN_Cord :1;
BYTE Device_Type :1;
BYTE PowerSource :1;
BYTE Recv_On_Idle :1;
BYTE :2;
BYTE Security_Cap :1;
BYTE Alloc_Addr :1;
}bits;
BYTE bytes;
}Node_Capability;
//GTS請求幀的characteristic域
typedef union _GTS_CHARACTERISTIC
{
struct{
BYTE GTS_length : 4;
BYTE GTS_direction :1;
BYTE GTS_characteristic_byte : 1;
BYTE : 2;
}bits;
BYTE bytes;
}GTS_CHARACTERISTIC;
// A 802.15.4 節點地址信息
typedef struct _NODE_INFO
{
BYTE addrMode;
LONG_ADDR longAddr;
SHORT_ADDR shortAddr;
PAN_ADDR panID;
} NODE_INFO;
//MAC層協議的當前幀存儲的信息類型定義,這些信息要被用于轉換成PSDU和計算PSDU長度或反過來從psdu轉換成msdu。
//從而調用pd_data_request函數發送. 該結構主要用于MAC層對MAC幀的處理過程.
//MAC_FRAME_FORMAT是一種通用的定義,對于具體的幀,需要根據幀類型字段和長度等字段確定使用部分字段.
typedef struct _MAC_FRAME_FORMAT
{
NODE_INFO dst; //關于目標設備地址和目標網絡的信息.
NODE_INFO src; //源設備地址和網絡的信息.
BYTE type; //幀類型字段,可以用于快速訪問.
BYTE cmd; //如果是命令幀的話,該域存儲命令幀的類型信息
union{
BYTE macDSN; //幀序列號
BYTE macBSN;
};
BYTE frameLength; //MAC層的幀長度,不計算FCS的總長度
//BYTE txOptions; //傳送的策略
BYTE framehandle;
BYTE lqi;
uint32_t timestamp;
//幀控制字段,共兩個字節
FRAME_CONTROL frame_control_field;
//由于地址域和PANID域都是以字節為單位進行,可以在形成psdu的過程中填寫.
//
//
//網絡層傳遞過來的數據payload或信標payload指針
uint8_t nwk_data_length; //即是msdulength
uint8_t beacon_payload_length;
union
{
BYTE nwk_data_payload[aMaxMACFrameSize];
BYTE beacon_payload[aMaxBeaconPayloadLength];
};
//capinfo主要用在association request幀中
Node_Capability node_capinfo_field;
//如果是信標幀中用到的超幀規范域和地址pending域
SUPERFRAME_SPECIFICATION superframe_field;
PendingAddress pendaddress_field;
uint8_t shortpendingadd_length;
uint8_t longpendingadd_length;
SHORT_ADDR shortaddrpending_list[MAX_PENDING_LIST_SIZE];
LONG_ADDR longaddrpending_list[MAX_PENDING_LIST_SIZE];
//如果是關聯響應幀中用到的分配的短地址信息和關聯狀態值
SHORT_ADDR shortaddralloc;
BYTE association_status;
//如果是撤銷關聯通知幀中可能用到的取消關聯的原因
BYTE disassociation_reason;
//如果是協調者發出的realignment幀中用到的一些域
SHORT_ADDR PAN_ID_field;
SHORT_ADDR coordshortaddr_field;
BYTE logicalchannel_field;
SHORT_ADDR shortaddrallocted;
//如果是GTS請求幀中用到的GTS characteristic域
GTS_CHARACTERISTIC gts_char_field;
//可能需要記錄一些與當前幀相關的標志域
/*union
{
struct
{
unsigned int bIsGetReady:1;
unsigned int bToBeQueued:1;
} bits;
BYTE Val;
} Flags;*/
} MAC_FRAME_FORMAT;
//只用于發送時候
typedef struct _beacon_frame_format
{
SUPERFRAME_SPECIFICATION superframe_field;
PendingAddress pendaddress_field;
uint8_t shortpendingadd_length;
uint8_t longpendingadd_length;
SHORT_ADDR shortaddrpending_list[MAX_PENDING_LIST_SIZE];
LONG_ADDR longaddrpending_list[MAX_PENDING_LIST_SIZE];
uint8_t beacon_payload_length;
BYTE beacon_payload[aMaxBeaconPayloadLength];
}BEACON_FRAME_FORMAT;
//--------------------------------------------------//
//-------下面為Zigbee中MAC層原語的數據類型定義------//
//--------------------------------------------------//
typedef union {
SHORT_ADDR Short;
LONG_ADDR Extended;
} ADDRESS;
typedef struct {
NODE_INFO src;
NODE_INFO dst;
UINT8 mpduLinkQuality;
bool securityUse;
UINT8 aclEntry;
UINT8 msduLength;
BYTE pMsdu[aMaxMACFrameSize];
} MCPS_DATA_INDICATION;
typedef struct {
//UINT8 coordAddrMode;
//WORD coordPanId;
UINT8 logicalChannel;
//ADDRESS coordAddress;
NODE_INFO coordinator;
SUPERFRAME_SPECIFICATION superframeSpec;
bool gtsPermit;
UINT8 linkQuality;
DWORD timeStamp;
bool securityUse;
UINT8 aclEntry;
bool securityFailure;
} PAN_DESCRIPTOR;
typedef struct {
UINT8 bsn;
PAN_DESCRIPTOR panDescriptor;
BYTE pendAddrSpec;
//ADDRESS pAddrList[7];
uint8_t shortpendingadd_length;
uint8_t longpendingadd_length;
SHORT_ADDR shortaddrpending_list[MAX_PENDING_LIST_SIZE];
LONG_ADDR longaddrpending_list[MAX_PENDING_LIST_SIZE];
UINT8 sduLength;
BYTE pSdu[aMaxBeaconPayloadLength];
} MLME_BEACON_NOTIFY_INDICATION;
typedef struct {
ADDRESS orphanAddress;
bool securityUse;
UINT8 aclEntry;
} MLME_ORPHAN_INDICATION;
typedef struct {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -