📄 mac.h
字号:
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 + -