📄 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 + -