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

📄 nwk.h

📁 本程序是基于Zigbee协议的无线温度传感器网络系统
💻 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 + -