📄 mac.h
字号:
#ifndef MAC_H
#define MAC_H
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// 公用相关配置 ///// ////////////////////////////////////////////////////////////////////////////////////
#define USE_TAGRSSI //是否使用标签RSSI
#define SMALLMODULE
#define IAMTAG
//#define IAMSENSOR
#ifdef IAMTAG
#define BAUD_RATE (57600) // (9600)// (19200)//(115200)//
#define REPDUBUGINFO //是否显示调试信息(上报调试用的字符串等信息)
#else
#define BAUD_RATE (9600)// (57600) // (19200)//(115200)//
#define REPDUBUGINFO //是否显示调试信息(上报调试用的字符串等信息)
#endif
#define DEFAULTID (1027) //ID//
#define COMMCHANNEL 26 //公用信道(11-26)
#define DEBUGCHANNEL 25 //调试信道(11-26)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////// 标签相关配置 ///// //////////////////////////////////////////////////////////////////////////////////
#define TAG_TXPOWER 7 //(0~7) //标签发送功率
////
//#define CC2420PHYSLEEP //是否为关断休眠(物理休眠)
#define CAPTAINSLEEP
#define MEMBERSLEEP
//
//
//#define ADDITIONALLISTEN
#define AUTOCHANGECAPTAIN
#define MEMBERACKANYCAPTAIN
#define EVERYCALLINGTIMESREPLACE 5 //每几轮点名后进行一次更换团长
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////// 探头相关配置 ////////////////////////////////////////////////////////////////////////////////////////////
#define AUTO_REPORTDATA
//#define REPORTALLGROUPDATA
#define REPORTSINGLEGROUPDATA
//#define REPDATATOSTATION
#define REPDATATOCOMPUTER
#define USEHARDWAREADDR
#define SENSOR_TXPOWER 7 //0-7 发送功率
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define MAXGROUP 6
#define MINCHANNEL 11
#define MAXCHANNEL 26
#define MAX_GROUPMENBER_NUM (100)
#define MAX_GROUPINSENSOR_NUM (10)
#define TAG_LEAVEGROUPTIME (CAPTAIN_MAXCALLINGTIME*3)
#define TAG_STARTUPWAITTIME (1000)
#define TAG_JOINREQTIMEOUT (100)
#define CAPTAIN_MAXCALLINGTIME (2000)
#define CAPTAIN_UNITEERQTIMEOUT (300)
#define CAPTAIN_TAGCONNTIMEOUT (4500)
#define CAPTAIN_BROADCASTTIME (2000)
#define CAPTAIN_CALLINGTIMEOUT (100)
#define CAPTAIN_SENDDATATOSENSORTIME (400)
#define CAPTAIN_RESENDDATATOSENSORINTERVAL (140)
#define SENSOR_BROADCASTTIME (100)
#define SENSOR_GROUPCONNTIMEOUT (5000)
#define SENSOR_REPORTTIME (500)
#define MAC_DST_NO_ADDR (0x00)
#define MAC_DST_SHORT_ADDR (0x08)
#define MAC_DST_LONG_ADDR (0x0c)
#define MAC_DST_ADDR_RESERVED (0x04)
#define MAC_SRC_NO_ADDR (0x00)
#define MAC_SRC_SHORT_ADDR (0x80)
#define MAC_SRC_LONG_ADDR (0xc0)
#define MAC_SRC_ADDR_RESERVED (0x40)
#define MAC_FRAME_TYPE_MASK (0x03)
#define MAC_FRAME_BEACON (0x00)
#define MAC_FRAME_DATA (0x01)
#define MAC_FRAME_ACK (0x02)
#define MAC_FRAME_CMD (0x03)
#define MAC_CMD_ASSOCIATE_REQ (0x01)
#define MAC_CMD_ASSOCIATE_RPLY (0x02)
#define MAC_CMD_DISASSOCIATE_NOTICE (0x03)
#define MAC_CMD_DATA_REQ (0x04)
#define MAC_CMD_PAN_ID_CONFLICT (0x05)
#define MAC_CMD_ORPHAN_NOTICE (0x06)
#define MAC_CMD_BEACON_REQ (0x07)
#define MAC_CMD_COORD_REALIGNMENT (0x08)
#define MAC_CMD_GTS_REQ (0x09)
#define MAC_FRAME_INVALID (0x07)
#define MAC_SECURITY_YES (0x08)
#define MAC_SECURITY_NO (0x00)
#define MAC_FRAME_PENDING_YES (0x10)
#define MAC_FRAME_PENDING_NO (0x00)
#define MAC_ACK_YES (0x20)
#define MAC_ACK_NO (0x00)
#define MAC_INTRA_PAN_YES (0x40)
#define MAC_INTRA_PAN_NO (0x00)
#define MAC_BEACON_YES (0x40)
#define MAC_BEACON_NO (0x00)
#define MACSetLongAddrByte0(b) (macInfo.longAddr.v[0] = b)
#define MACSetLongAddrByte1(b) (macInfo.longAddr.v[1] = b)
#define MACSetLongAddrByte2(b) (macInfo.longAddr.v[2] = b)
#define MACSetLongAddrByte3(b) (macInfo.longAddr.v[3] = b)
#define MACSetLongAddrByte4(b) (macInfo.longAddr.v[4] = b)
#define MACSetLongAddrByte5(b) (macInfo.longAddr.v[5] = b)
#define MACSetLongAddrByte6(b) (macInfo.longAddr.v[6] = b)
#define MACSetLongAddrByte7(b) (macInfo.longAddr.v[7] = b)
#define MACGetLongAddrByte0() (macInfo.longAddr.v[0])
#define MACGetLongAddrByte1() (macInfo.longAddr.v[1])
#define MACGetLongAddrByte2() (macInfo.longAddr.v[2])
#define MACGetLongAddrByte3() (macInfo.longAddr.v[3])
#define MACGetLongAddrByte4() (macInfo.longAddr.v[4])
#define MACGetLongAddrByte5() (macInfo.longAddr.v[5])
#define MACGetLongAddrByte6() (macInfo.longAddr.v[6])
#define MACGetLongAddrByte7() (macInfo.longAddr.v[7])
#define MACSetShortAddrLSB(b) (macInfo.shortAddr.byte.LSB = b)
#define MACSetShortAddrMSB(b) (macInfo.shortAddr.byte.MSB = b)
#define MACGetShortAddrLSB() (macInfo.shortAddr.byte.LSB)
#define MACGetShortAddrMSB() (macInfo.shortAddr.byte.MSB)
#define MACSetPANIdLSB(b) (macInfo.panID.byte.LSB = b)
#define MACSetPANIdMSB(b) (macInfo.panID.byte.MSB = b)
#define MACGetPANIdLSB() (macInfo.panID.byte.LSB)
#define MACGetPANIdMSB() (macInfo.panID.byte.MSB)
#define aMaxBE 5
#define aMinBE 0
#define aUnitBackoffPeriod 20 //in symbols
#define macMaxCSMABackoffs 4
#define MAC_RXBUFF_SIZE LRWPAN_MAX_MAC_RX_PKTS+1
typedef struct _MAC_PIB {
UINT32 macAckWaitDuration;
union _MAC_PIB_flags {
UINT32 val;
struct {
unsigned macAssociationPermit:1;
unsigned macAutoRequest:1;
unsigned macBattLifeExt:1;
unsigned macGTSPermit:1;
unsigned macPromiscousMode:1;
unsigned macPanCoordinator:1;
unsigned ackPending:1;
unsigned TxInProgress:1; //MAC TX FSM state
unsigned GotBeaconResponse:1; //set to a '1' when get Beacon Response
unsigned WaitingForBeaconResponse:1; //set to '1' when waiting for Response
unsigned macPending:1; //mac CMD pending in the RX buffer
unsigned macIsAssociated:1;
unsigned WaitingForAssocResponse:1;
unsigned GotOrphanResponse:1;
unsigned WaitingForOrphanResponse:1;
}bits;
}flags;
LADDR macCoordExtendedAddress;
SADDR macCoordShortAddress;
UINT16 macPANID;
BYTE macDSN;
BYTE depth; //depth in the network
BYTE macCapInfo;
//BYTE macMaxAckRetries;
struct {
unsigned maxMaxCSMABackoffs:3;
unsigned macMinBE:2;
}misc;
UINT32 tx_start_time; //time that packet was sent
UINT32 last_data_rx_time; //time that last data rx packet was received that was accepted by this node
BYTE bcnDepth;
SADDR bcnSADDR;
UINT16 bcnPANID;
BYTE bcnRSSI;
//BYTE currentAckRetries;
BYTE rxTail; //tail pointer of rxBuff
BYTE rxHead; //head pointer of rxBuff
//fifo for RX pkts, holds LRWPAN_MAX_MAC_RX_PKTS
MACPKT rxBuff[MAC_RXBUFF_SIZE]; //buffer for packets not yet processed
}MAC_PIB;
typedef struct _MAC_RX_DATA {
MACPKT *orgpkt; //original packet
BYTE fcflsb;
BYTE fcfmsb;
UINT16 DestPANID;
LADDR_UNION DestAddr; //dst address, either short or long
UINT16 SrcPANID;
LADDR_UNION SrcAddr; //src address, either short or long
BYTE pload_offset; //start of payload
}MAC_RX_DATA;
typedef struct _MAX_TX_DATA {
UINT16 DestPANID;
LADDR_UNION DestAddr; //dst address, either short or long
UINT16 SrcPANID;
SADDR SrcAddr; //src address, either short or long, this holds short address version
//if long is needed, then get this from HAL layer
BYTE fcflsb; //frame control bits specify header bits
BYTE fcfmsb;
union {
BYTE val;
struct _MAC_TX_DATA_OPTIONS_bits {
unsigned gts:1;
unsigned indirect:1;
}bits;
}options;
}MAC_TX_DATA;
typedef struct _LONG_ADDR
{
BYTE v[8];
} LONG_ADDR;
typedef union _SHORT_ADDR
{
struct
{
BYTE LSB;
BYTE MSB;
} byte;
WORD Val;
BYTE v[2];
} SHORT_ADDR;
typedef SHORT_ADDR PAN_ADDR;
extern MAC_PIB mac_pib;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -