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

📄 mac.h

📁 无线传感器星型网络的节点的基站程序,采用802.15.4协议
💻 H
📖 第 1 页 / 共 3 页
字号:
    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 + -