📄 nwk.h
字号:
/*
*2006/08/16 WXL 2.0
*/
/*
V0.2 added PC-based binding 21/July/2006 RBR
V0.1 Initial Release 10/July/2006 RBR
*/
#ifndef NWK_H
#define NWK_H
#define NWK_FRM_TYPE_DATA 0
#define NWK_FRM_TYPE_CMD 1
#define NWK_FRM_TYPE_MASK 3
#define NWK_IS_DATA(x) ((x & NWK_FRM_TYPE_MASK)==NWK_FRM_TYPE_DATA)
#define NWK_IS_CMD(x) ((x & NWK_FRM_TYPE_MASK)==NWK_FRM_TYPE_CMD)
#define NWK_SUPPRESS_ROUTE_DISCOVER (0<<6)
#define NWK_ENABLE_ROUTE_DISCOVER (1<<6)
#define NWK_FORCE_ROUTE_DISCOVER (2<<6)
#define NWK_ROUTE_MASK (3 << 6)
#define NWK_GET_ROUTE(x) (x & NWK_ROUTE_MASK)
//this value of zero means that our packets will not
//be recognized as Zibee SPEC packets which is what we
//want. Do not want these packets confused with packets
//from Zigbee compliant devices.
#define NWK_PROTOCOL (0<<2)
#define NWK_PROTOCOL_MASK (15 << 2)
#define NWK_GET_PROTOCOL(x) ((x & NWK_PROTOCOL_MASK) >> 2)
#define NWK_SECURITY_MASK (1 << 1)
#define NWK_GENERIC_RETRIES 3 //number of retries for NWK operations
#define NWK_RXBUFF_SIZE LRWPAN_MAX_NWK_RX_PKTS+1
typedef struct _NWK_FWD_PKT {
BYTE *data; //points to top of original pkt as it sits in the heap
BYTE nwkOffset; //start of the nwkheader in this packet
}NWK_FWD_PKT;
typedef struct _NWK_PIB{
union _NWK_PIB_FLAGS{
BYTE val;
struct {
unsigned nwkFormed:1;
}bits;
}flags;
#ifdef LRWPAN_FFD
BYTE rxTail; //tail pointer of rxBuff
BYTE rxHead; //head pointer of rxBuff
//fifo for RX pkts, holds LRWPAN_MAX_NWK_RX_PKTS
NWK_FWD_PKT rxBuff[NWK_RXBUFF_SIZE]; //buffer for packets to be forwarded
#endif
}NWK_PIB;
typedef struct _NWK_RX_DATA {
MACPKT orgpkt;
BYTE nwkOffset;
//parse these out of the packet for reference
SADDR dstSADDR;
SADDR srcSADDR;
}NWK_RX_DATA;
typedef struct _NWK_TX_DATA {
SADDR dstSADDR;
BYTE *dstLADDR;
SADDR srcSADDR;
BYTE radius;
BYTE fcflsb;
BYTE fcfmsb;
}NWK_TX_DATA;
typedef union _NWK_ARGS {
struct {
UINT32 ScanChannels;
BYTE ScanDuration;
UINT16 PANid;
}form_network;
struct {
UINT32 ScanChannels;
BYTE ScanDuration;
UINT16 PANid;
BOOL RejoinNetwork;
}join_network;
}NWK_ARGS;
typedef enum _NWK_STATE_ENUM {
NWK_STATE_IDLE,
NWK_STATE_COMMAND_START,
NWK_STATE_GENERIC_TX_WAIT,
NWK_STATE_FORM_NETWORK_START,
NWK_STATE_JOIN_NETWORK_START,
NWK_STATE_JOIN_NETWORK_START_WAIT,
NWK_STATE_REJOIN_NETWORK_START,
NWK_STATE_REJOIN_WAIT,
NWK_STATE_JOIN_SEND_BEACON_REQ,
NWK_STATE_JOIN_NWK_WAIT1_BREQ,
NWK_STATE_JOIN_NWK_WAIT2_BREQ,
NWK_STATE_JOIN_MAC_ASSOC_CHANSELECT,
NWK_STATE_JOIN_MAC_ASSOC,
NWK_STATE_JOIN_MAC_ASSOC_WAIT,
NWK_STATE_FWD_WAIT
} NWK_STATE_ENUM;
typedef struct _NWK_SERVICE {
LRWPAN_SVC_ENUM cmd;
NWK_ARGS args;
LRWPAN_STATUS_ENUM status;
}NWK_SERVICE;
extern NWK_SERVICE a_nwk_service;
extern NWK_TX_DATA a_nwk_tx_data;
extern NWK_STATE_ENUM nwkState;
extern NWK_RX_DATA a_nwk_rx_data;
UINT16 nwkGetHopsToDest(SADDR dstSADDR);
BOOL nwkRxBusy(void);
void nwkRxHandoff(void);
extern NWK_PIB nwk_pib;
void nwkFSM(void);
void nwkInit(void);
#define nwkIdle() (nwkState == NWK_STATE_IDLE)
#define nwkBusy() (nwkState != NWK_STATE_IDLE)
#define nwkDoService() \
a_nwk_service.status = LRWPAN_STATUS_NWK_INPROGRESS;\
nwkState = NWK_STATE_COMMAND_START;\
nwkFSM();
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -