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

📄 mac.h

📁 该演示程序实现温度的采集与显示功能
💻 H
📖 第 1 页 / 共 2 页
字号:
extern MAC_TX_DATA a_mac_tx_data;
extern MAC_RX_DATA a_mac_rx_data;





typedef struct _NODE_INFO
{
    BYTE            addrMode;
    LONG_ADDR       longAddr;
    SHORT_ADDR      shortAddr;
    PAN_ADDR        panID;
} NODE_INFO;




// MAC module state
typedef union _MAC_STATE
{
    struct
    {
        unsigned int bIsAssociated      : 1;        // '1' if this node is associated
        unsigned int bIsTxBusy          : 1;        // '1' if transmission is in progress
        unsigned int bPermitAssociation : 1;        // '1' if other nodes are allowed to associat
        unsigned int bIsEnabled         : 1;        // '1' if PHY is enabled.
        unsigned int bIsPollDone        : 1;        // '1 if a frame of type data has been received
	} bits;
    BYTE Val;
} MAC_STATE;



typedef struct _MAC_FRAME
{
    NODE_INFO dst;
    NODE_INFO src;
    BYTE type;
    BYTE cmd;
    BYTE macDSN;
    BYTE frameLength;
    union
    {
        struct
        {
            unsigned int : 3;                   // Frame type field.  Copied to 'type' member for faster access.
            unsigned int SecurityEnabled : 1;
            unsigned int FramePending : 1;
            unsigned int AckRequest : 1;
            unsigned int IntraPAN : 1;
            unsigned int : 1;                   // Bit 7 is reserved
        } bits;

        BYTE Val;
    } frameCONLSB;
    BYTE_VAL frameCONMSB;

    union
    {
        struct
        {
            unsigned int AltPANCoord : 1;
            unsigned int DeviceType: 1;
            unsigned int PowerSource:1;
            unsigned int ReceiveOnWhenIdle:1;
            unsigned int :2;
            unsigned int SecurityCapability:1;
            unsigned int AllocateAddress:1;
        } bits;
        BYTE Val;
    } capInfo;

    union
    {
        struct
        {
            unsigned int bIsGetReady:1;
            unsigned int bIsValid:1;
            unsigned int bToBeQueued:1;
        } bits;
        BYTE Val;
    } Flags;

} MAC_FRAME;

typedef struct _SUB_MAC_FRAME
{
     BYTE_VAL sub_type;
     SHORT_ADDR sub_dest_addr;
     SHORT_ADDR sub_source_addr;
     BYTE        databytenum;                    //要传送的数据的字节数
     #if defined(USE_TAGRSSI)
        BYTE        data[MAX_GROUPMENBER_NUM*2+8];
	 #else
        BYTE        data[MAX_GROUPMENBER_NUM*2+8];   	
	 #endif
	 BYTE RSSI;
	 BYTE CRC;
}SUB_MAC_FRAME;



// PAN descriptor in decoded manner - this is used by end device to determine whom to associate
typedef struct _PAN_DESC
{
    SHORT_ADDR  CoordPANId;
    union
    {
        SHORT_ADDR shortAddr;
        LONG_ADDR longAddr;
    } CoordAddress;

    BYTE        LogicalChannel;
    WORD_VAL    SuperFrameSpec;
    BYTE        LinkQuality;
    DWORD_VAL   TimeStamp;
    BYTE        ACLEntry;

    union
    {
        struct
        {
            unsigned int CoordAddrMode:1;     // 0 = 16-bit, 1 = 64-bit
            unsigned int GTSPermit:1;
            unsigned int SecurityInUse:1;
            unsigned int SecurityFailure:1;
        } bits;
        BYTE Val;
    } Flags;

} PAN_DESC;




#if defined(I_AM_SECURITY_CAPABLE)
    #define MAC_SECURITY            MAC_SECURITY_YES
#else
    #define MAC_SECURITY            MAC_SECURITY_NO
#endif



typedef struct _MemberInfo
{
   TICK lastConnectTime;
   BYTE ID[2];
   BYTE CallingStatus;	
   BYTE RSSI;
}MemberInfo;

typedef struct _NODE_STUTAS      //节点信息
{
    BYTE     NODEID[2];            //节点ID
    BYTE     NODESTATE;            //节点是团长或团员
    BYTE     MEMBERNUM;            //节点为团长时的团员数
    BYTE     CAPTAINID[2];         //存放节点的团员或所属的团长
    BYTE     LINKEDTOSENSOR;       //是否在终端识别器旁边
    BYTE     RSSI;                 //与探头之间的无线联络信号强度
    BYTE     SensorID[2];             //探头ID
    TICK     RecSenMsgStartTime;   //接收探头广播时间
	BYTE     RecSenMsgTimeVal;     //接收探头广播时间,倒计时(接收时为10,每秒钟减1)
    MemberInfo MEMBERS[MAX_GROUPMENBER_NUM];
	BYTE     CALLINGIDX;                       //点名序号
	BYTE     CALLINGACKPARAM;      // 点名应答附加信息
	BYTE     CALLINGPARAM;         //点名附加信息
}NODE_STUTAS;
extern NODE_STUTAS  ThisNode;

typedef struct _GROUP_DATAINFO                //节点信息
{
    BYTE     CAPTAINID[2];         //团长ID
    BYTE     USED;                 //是否在使用
    BYTE     CHANNEL;              //团用信道
    BYTE     RSSI;                 //信号强度
    TICK     LASTLINKTIME;         //上次联络时间
    BYTE     Disbanded;            //是否已经拆团
    BYTE     MEMBERNUM;            //成员数目
    BYTE     MEMBERID[MAX_GROUPMENBER_NUM*2]; //成员ID号
    #if defined(USE_TAGRSSI)
    BYTE     MEMBERRSSI[MAX_GROUPMENBER_NUM]; //成员RSSI
    #endif
	
}GROUP_DATAINFO;



extern NODE_INFO macInfo;
extern SUB_MAC_FRAME submacCurrentFrame;
extern int TickGetDiff(TICK now,TICK start);  //返回值单位:50m


#define MACSetAssociationPermit(v)      (macState.bits.bPermitAssociation = v)
#define MACIsGetReady()     (macCurrentFrame.Flags.bits.bIsGetReady)
#define TickGet() halGetMACTimer()
#define macGetShortAddr()   (mac_addr_tbl[0].saddr)
#define macSetTxBusy() mac_pib.flags.bits.TxInProgress = 1

void MACPutHeader(NODE_INFO *dst, BYTE frameCON);
void MACPutArray(BYTE *v, BYTE len);
BYTE MACFlush(void);
void macInit(void);
void macFSM(void);
LRWPAN_STATUS_ENUM macInitRadio(void);
LRWPAN_STATUS_ENUM macWarmStartRadio(void);
void macSetPANID(UINT16 panid);
void macSetChannel(BYTE channel);
BYTE macGetChannel();
void macSetShortAddr(UINT16 saddr);

BOOL macRxBuffEmpty(void);
BOOL macRxBuffFull(void);
MACPKT *macGetRxPacket(void);
void macFreeRxPacket();
MACPKT *macRxGetBuffer();


///// bhj /////////////////////////////


#define GROUP_MEMBER  (0x00)
#define GROUP_CAPTAIN (0x01)




#define MSG_SENSOR_IAMSENSOR            (0x00) //0)	 探头:我是终端识别器(广播)
#define MSG_SENSOR_RECEIVEDDATA         (0x01) //1)	 探头:接收到团长上报的数据

#define MSG_CAPTAIN_IAMCAPTAIN          (0x10) //16) 团长:定时广播"我是团长",
#define MSG_CAPTAIN_SENDDATATOSENSOR    (0x11) //17) 团长:把自己的成员发送给该终端识别器
#define MSG_CAPTAIN_CALLINGREQ          (0x12) //18) 团长:点名
#define MSG_CAPTAIN_UNITEREQUEST        (0x13) //19) 团长:发出"拼团请求包";
#define MSG_CAPTAIN_UNITEACCEPT         (0x14) //20) 团长:发出"同意拼团";
#define MSG_CAPTAIN_JOINWITHDATA        (0x15) //21) 团长:带所有成员拼团
#define MSG_CAPTAIN_CHANGECAPTAIN       (0x16) //22) 团长:更换团长通知命令,拼团
#define MSG_CAPTAIN_JOINACCEPT          (0x17) //23) 团长:接收团员加入
#define MSG_CAPTAIN_UNITESUCCESS        (0x18) //24) 团长:拼团成功
#define MSG_CAPTAIN_DISBANDGROUP        (0x19) //25) 团长:发送拆团通知给探头
#define MSG_CAPTAIN_UNITEINVITE         (0x1A) //26) 团长:邀请别人与自己拼团
#define MSG_CAPTAIN_SENDMEMBERDATATOTAG (0x1B) //27) 团长:把成员信息发送给自己的某个团员,团内更换团长用
#define MSG_CAPTAIN_REPLACECAPTAIN      (0x1C) //28) 团长:更换团长通知命令,团内更换团长
#define MSG_CAPTAIN_LEAVEACCEPT         (0x1D) //29) 团长:同意团员离团

#define MSG_TAG_ISANYCAPTAINHERE        (0x20) //32) 标签:有团长在吗?
#define MSG_TAG_JOINREUEST              (0x22) //34) 标签:申请加入某团
#define MSG_TAG_CALLINGACK              (0x23) //35) 标签:点名应答
#define MSG_TAG_RECVMEMBER              (0x24) //36) 标签:接收到团长发出的团员数据

#define MSG_DEBUG_OUT              (0xA0) //37) 调试信息


//////// 调试信息输出 /////////////////////////////////////////////////
#define DEBUG_HARDWARE_RESET    (0) //看门狗复位
#define DEBUG_WATCHDOG_RESET    (1) //看门狗复位
#define DEBUG_TAG_CONN_TIMEOUT  (2) //标签与团长联络超时
#define DEBUG_CAPTAIN_REPLACECAPTION_TIMEOUT  (3) //更换团长超时
#define DEBUG_CAPTAIN_REPLACECAPTION_SUCC  (4) //更换团长成功
#define DEBUG_TAG_BECOME_CAPTAIN  (5) //标签成为团长
#define DEBUG_TAG_OTHERCAPTAIN_CALLING (6) //标签接收到其它团长的点名
#define DEBUG_CAPTAIN_RECV_CALLREQ_INGROUPCHANNEL  (7) //身为团长,却收到了点名信息,在团用信道中
#define DEBUG_CAPTAIN_RECV_CALLREQ_INNORMALCHANNEL  (8) //身为团长,却收到了点名信息,在公用信道中
#define DEBUG_TAG_RECV_IAMCAPTAIN_INGROUPCHANNEL (9) //在团用信道中接收到 我是团长 信息
#define DEBUG_CAPTAIN_RECVSENMSG_TIMEOUT (10) //接收探头信息超时(4s)
#define DEBUG_CAPTAIN_REPERRTIME (11) //团长上报失败次数



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -