亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? macp.nc

?? IEEE802.15.4標準下的基于ZIGBEE協議棧的物理及鏈路層的代碼
?? NC
?? 第 1 頁 / 共 3 頁
字號:
/** * */#include "ZBMAC.h"module MacP {	provides interface Init;	provides interface SplitControl;	provides interface MldeSap;	provides interface MlmeSap;	uses interface SplitControl as PhyControl;  	uses interface PdSap;	uses interface PlmeSap;  	uses interface Alarm<T32khz,uint32_t> as MacTimer;		uses interface Mem;	uses interface ZbCache<mac_send_cache_t> as SendCache;		uses interface ZbCache<mac_receive_cache_t> as ReceiveCache;		uses interface Leds;}implementation {/** * request beacon frame * FCF(2)+DSN(1)+DST_PANID(2)+DST_SADDR(2)+CMD_TYPE(1)+FCS(2) * * beacon frame format * FCF(2)+DSN(1)+SOURCE_PANID(2)+SOURCE_SADDR(2)+BEACON_INFO(2)+|-->PROTOCOL_ID(1)+NWK_INFO(2)+IEEEADDR(8)<--| * * assoc request packet * FCF(2)+DSN(1)+DST_PANID(2)+DST_SADDR(2)+SOURCE_PANID(2,0xffff)+SOURCE_LADDR(8)+CMD_TYPE(1)+CAP_INFO(1)+|ZIGBEE_NUM(4)| * length = 2+1+2+2+2+8+1+1+4 = 23  * * association response frame format:  * FCF(2)+DSN(1)+DST_PANID(2)+DST_LADDR(8)+SOURCE_PANID(2)+SOURCE_LADDR(8)+CMD_TYPE(1)+SADDR(2)+ASSOC_STATUS(1) * length = 2+1+2+8+2+8+1+2+1 = 27 **/  #define BEACON_REQ_FRAME_LEN		2+1+2+2+1#define BEACON_DEF_PAYLOAD_LEN	1+2+8#define BEACON_MAX_PAYLOAD_LEN	BEACON_DEF_PAYLOAD_LEN#define BEACON_FRAME_LEN			BEACON_MAX_PAYLOAD_LEN + 2 + 1 + 2 + 2 + 2 #define ASSOC_REQ_FRAME_LEN		2+1+2+2+2+8+1+1+4#define ASSOC_WAIT_TIME			1024*32	//32us unit #define ASSOC_RESPON_FRAME_LEN	2+1+2+8+2+8+1+2+1#define PHY_HEAD_LEN	1		//1 byte length field/*** mac state enum ****/typedef enum {	S_STOPPED,	S_STARTING,	S_IDLE,	S_SCANNING,	S_SCAN_DONE,	#ifdef IS_COORD	S_ESTABLISHING,	S_ESTABLISHED,#endif#ifndef IS_COORD				S_JOINING,	S_JOINED,#endif		S_STOPPING,} mac_state_t;  /**** send state enum *****/ typedef enum {	SEND_IDLE,	SEND_BUSY,} send_state_t;/******** send task use mac_send_cache_t.type to distinguish packet. ********/enum {	TYPE_DATA,	TYPE_BEACON,	CMD_ASSOC_REQ,	CMD_ASSOC_RESPON,	CMD_BEACON_REQ,	CMD_ORPHAN_NOTIFY,	CMD_COORD_REALIGN,	CMD_DISASSOC_NOTIFY,};		  /*** next hight layer's parameter store into this type when sending data ***/ typedef struct {	uint8_t length;	mem_head_t* pmsdu;	error_t error;} send_parameter_t;/** below variable use to control next high layer send data. **/norace bool dataSendPending = FALSE;send_parameter_t sendParameter;task void sendDone_task();norace send_state_t send_state = SEND_IDLE;norace mac_state_t mac_state = S_STOPPED;norace mac_pib_t macPib;/** use by positive scanning **/ pan_descriptor_t panDescriptorTable[MAX_PAN_DESCRIPTOR_NUM];/*** if this value is 0, indicate scan failed beacause no pan_descriptor_t have store in panDescriptorTable. **/uint8_t panDescriptorNum;/** scan done task **/task void positiveScanDone_task();/** next high layer should get and set beaconPayload contents ***/uint8_t beaconPayload[BEACON_MAX_PAYLOAD_LEN];/** received mac frame header parameter **/typedef struct {	uint16_t fcf;	uint8_t type;	uint8_t dstAddrMode;	uint8_t srcAddrMode;		nxle_uint8_t dsn;	nxle_uint16_t dstPanId;	addr_union_t dstAddr;	nxle_uint16_t srcPanId;	addr_union_t srcAddr;} receive_head_t;/** used by parseHead() function **/receive_head_t receiveHead;/** receiveTask call this function to parse mac head into receiveHead **/void parseHead(mem_head_t* pMacPkt);/** join done task **/task void joinDone_task();/** used for joinDone_task() **/mac_error_t joinDoneError;saddr_t joinAssignedAddr;/** sendTask's task is getting a packet from mac_send_cache and send it. **/task void sendTask();/** receiveTask's task is to getting a packet from mac_receive_cache and handle it. **/task void receiveTask();/** use to fill in pBeaconPkt with propriety beacon parameter. **/void generateBeacon(mem_head_t* pBeaconPkt);/** store beacon parameter into panDescritorTable. **/void handleBeacon(uint8_t length, uint8_t* pBuf, uint8_t lqi); /***************** function start *********************/command error_t Init.init(){	mac_state = S_STOPPED;		send_state = SEND_IDLE;	return SUCCESS;}command error_t SplitControl.start(){	if(mac_state != S_STOPPED){		return FAIL;	}	mac_state = S_STARTING;	call PhyControl.start();		return SUCCESS;}command error_t SplitControl.stop(){	if(mac_state != S_IDLE){		return FAIL;	}	mac_state = S_STOPPING;	call PhyControl.stop();		return SUCCESS;}/** * shuld set all mac layer module variable into default value if error == SUCCESS.  **/event void PhyControl.startDone(error_t error){	if(error == SUCCESS){		/** set mac_state ***/		mac_state = S_IDLE;				/** set pan descriptor table **/		panDescriptorNum = 0;				/*** there shuld only one next high layer frame pending in SendCache ***/			dataSendPending = FALSE;	  				/*** set mac pib ***/		macPib.bits.macAssociationPermit = TRUE;		macPib.bits.ifReceiveAllFrame = TRUE;		macPib.bits.macRxOnWhenIdle = FALSE;				/*** set mac dsn to 0 ***/		macPib.macDsn = 0;				/*** set macPib.pPanId point at phyPib.panId ***/		macPib.pPanId = call PlmeSap.getPanId();				/*** set macPib.pShortAddr point at phyPib.shortAddress **/		macPib.pShortAddr = call PlmeSap.getShortAddr();  				/*** set macPib.pLongAddr point at phyPib.longAddress ***/		macPib.pLongAddr = call PlmeSap.getLongAddr();				signal SplitControl.startDone(SUCCESS);	}	else{		mac_state = S_STOPPED;		signal SplitControl.startDone(FAIL);	}		}event void PhyControl.stopDone(error_t error){	if(error == SUCCESS){		mac_state = S_STOPPED;		signal SplitControl.stopDone(SUCCESS);			}	else{		mac_state = S_IDLE;		signal SplitControl.stopDone(FAIL);	}				}event void PlmeSap.directSetShortAddrDone(error_t error){	#ifndef IS_COORD	if(error == SUCCESS){		mac_state = S_JOINED;		post joinDone_task();	}	else{		mac_state = S_SCAN_DONE;		joinDoneError = FAIL;		post joinDone_task();		}		#endif	}/** * currently only use default channel, parameter scanChannel is not use  * * scanDuration range from 0-14, * scan time is ( aBaseSuperframeDuration (60*16symbol period) ) * ( 2**scanDuration + 1 ) * symbol period is 64k. * * request beacon frame * FCF(2)+DSN(1)+DST_PANID(2)+DST_SADDR(2)+CMD_TYPE(1) **/  command error_t MlmeSap.positiveScan(uint32_t scanChannel, uint8_t scanDuration){	uint8_t i;		/*** use for calculate scan time duration ***/	uint32_t scanTime = 1;		/*** point to beacon request frame memory block ***/	mem_head_t* pScanPkt;		/*** use to fill data **/	uint8_t* p;		/*** a SendCache element pointer ***/	mac_send_cache_t* pSendCache;		if(mac_state != S_IDLE){		return FAIL;	}	if(scanDuration > 14){		return FAIL;	}		/** malloc beacon request frame memory block and get a pointer to SendCache element **/ 	if( ( call Mem.malloc( &pScanPkt, (BEACON_REQ_FRAME_LEN + PHY_HEAD_LEN) ) ) != SUCCESS ){		return FAIL;	}	if( ( pSendCache = call SendCache.fetchFree() ) == NULL ){		call Mem.free(pScanPkt);		return FAIL;	}			/** set p point at end of memory block **/		p = (uint8_t*)pScanPkt + call Mem.getSize(pScanPkt);		/** set mac cmd type **/	p--;	*p = MAC_CMD_TYPE_BEACON_REQ;		/** add destination broadcast address **/	p -= 2;	*(nxle_uint16_t*)p = 0xFFFF;		/** add destination broadcast pan id **/	p -= 2;	*(nxle_uint16_t*)p = 0xFFFF;		/** set mac dsn **/	p--;	*p = macPib.macDsn++;		/** set fcf **/	p -= 2;	*(nxle_uint16_t*)p = ( MAC_FRAME_TYPE_CMD << POS_MAC_FRAME_TYPE ) |					 ( 0 << POS_MAC_SECURITY ) |					 ( 0 << POS_MAC_FRAME_PENDING ) |					 ( 0 << POS_MAC_ACK_REQUEST ) |					 ( 1 << POS_MAC_INTRA_PAN ) |					 ( MAC_ADDR_MODE_SHORT << POS_MAC_DEST_ADDR_MODE ) |				 					 ( MAC_ADDR_MODE_NONE << POS_MAC_SOURCE_ADDR_MODE );					 	/*** set memory current position **/				 	call Mem.setCurrentPos( pScanPkt, (p - (uint8_t*)pScanPkt) );		/** calculate scan time, in symbol unit **/	for(i=0; i<scanDuration; i++){		scanTime *= 2;	}	scanTime++;		/*** 60*16)/2 is aBaseSuperframeDuration in 32k time unit ***/	scanTime *= (60*16)/2;			/** fill SendCache element **/	pSendCache->type = CMD_BEACON_REQ;	pSendCache->psdu = pScanPkt;	pSendCache->isAckSend = FALSE;		/*** dsn isn't use when isAckSend == FALSE ***/	pSendCache->dsn = macPib.macDsn - 1;			/** put it into SendCache **/	call SendCache.putFull(pSendCache);	post sendTask();		mac_state = S_SCANNING;		/*** set scan duration timer ***/	call MacTimer.start(scanTime);	return SUCCESS;		 	  	}#ifdef IS_COORD/*** * **/command error_t MlmeSap.establish(uint8_t channel, panid_t panId){	uint8_t* p = beaconPayload;	uint8_t i;		if(mac_state != S_IDLE){		return FAIL;	}		/** 	 * set beacon payload.	 * if this node is a router, beacon payload shuld be set by next high layer after signal joinDone.	 **/	macPib.beaconPayloadLen = BEACON_DEF_PAYLOAD_LEN;			/*** set PROTOCOL_ID ***/	*p = PROTOCOL_ID;	p++;			/*** set NWK_INFO filed ***/	*(nxle_uint16_t*)p = ( NWK_INFO_STACK_PROFILE_ID << POS_NWK_INFO_STACK_PROFILE ) |					 ( NWK_INFO_VERSION_ID << POS_NWK_INFO_VERSION ) |					 ( 1 << POS_NWK_INFO_ROUTER_CAP ) |					 ( 0 << POS_NWK_INFO_DEPTH ) |					 ( 1 << POS_NWK_INFO_END_DEVICE_CAP );		/*** set IEEE address field ***/   	p += 2;//	*(laddr_t*)p = *(macPib.pLongAddr);		for(i=0; i<8; i++){		*p++ = macPib.pLongAddr->bytes[i];	}		/*** set short address to 0 **/	call PlmeSap.setShortAddr(0);		/*** set pan id ***/	call PlmeSap.setPanId(panId);		/*** sync with cc2420 ram ***/	call PlmeSap.sync();	mac_state = S_ESTABLISHING;		return SUCCESS;}#endifevent void PlmeSap.syncDone(error_t error){	/*** coordinator establishing ***/	#ifdef IS_COORD	if(error == SUCCESS){		mac_state = S_ESTABLISHED;		signal MlmeSap.establishDone(SUCCESS);	}	else{		mac_state = S_IDLE;		signal MlmeSap.establishDone(FAIL);	}	#endif		/**** router or rfd joinning ***/	#ifndef IS_COORD	if(error == SUCCESS){		mac_state = S_JOINED;		signal MlmeSap.joinDone(joinAssignedAddr, joinDoneError);	}	else{		mac_state = S_SCAN_DONE;		joinDoneError = FAIL;		signal MlmeSap.joinDone(joinAssignedAddr, joinDoneError);	}	 	#endif}#ifndef IS_COORD/** * assoc request packet * FCF(2)+DSN(1)+DST_PANID(2)+DST_SADDR(2)+SOURCE_PANID(2,0xffff)+SOURCE_LADDR(8)+CMD_TYPE(1)+CAP_INFO(1)+|ZIGBEE_NUM(4)|+FCS(2) * length = 2+1+2+2+2+8+1+1+4 = 23 **/command error_t MlmeSap.joinRequest(uint8_t descriptorSequence, uint8_t myCapInfo){	mac_send_cache_t* pSendCache;	mem_head_t* pJoinPkt;	pan_descriptor_t* pdt;	uint8_t* p;	uint8_t i;		if( descriptorSequence >= MAX_PAN_DESCRIPTOR_NUM ){		return FAIL;	}	if(mac_state != S_SCAN_DONE){		return FAIL;	}		/** malloc associate request frame memory block and get a pointer to SendCache element **/ 		if( ( call Mem.malloc(&pJoinPkt, ASSOC_REQ_FRAME_LEN+PHY_HEAD_LEN) ) != SUCCESS){		return FAIL;	}	if( ( pSendCache = call SendCache.fetchFree() ) == NULL ){		call Mem.free(pJoinPkt);		return FAIL;	}		/** set pdt point at intent father node's descriptor **/	pdt = &panDescriptorTable[descriptorSequence]; 		/*** pre set intent father's pan id, short address and long address **/ 	call PlmeSap.setPanId(pdt->panId);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜激情在线| 亚洲一区二区成人在线观看| 欧美色视频在线观看| 99精品久久只有精品| 国产91丝袜在线播放0| 国产综合成人久久大片91| 免费在线视频一区| 久久精品噜噜噜成人av农村| 日韩电影网1区2区| 美女一区二区三区在线观看| 欧美三级视频在线| 欧美视频精品在线| 欧美久久久一区| 欧美调教femdomvk| 91麻豆精品国产91久久久更新时间 | 另类人妖一区二区av| 免费精品视频在线| 国内精品嫩模私拍在线| 国产精品影音先锋| 99国产精品国产精品久久| 色综合一个色综合| 91麻豆精品国产自产在线观看一区| 91精品久久久久久蜜臀| 久久一留热品黄| 18欧美亚洲精品| 丝袜美腿一区二区三区| 另类调教123区| 本田岬高潮一区二区三区| 欧洲激情一区二区| 精品日韩成人av| 亚洲视频综合在线| 美女脱光内衣内裤视频久久网站| 国产在线看一区| 91免费观看在线| 日韩欧美在线123| 自拍av一区二区三区| 日韩有码一区二区三区| 高清av一区二区| 欧美理论电影在线| 中文字幕第一区| 免费精品视频在线| 99久久精品99国产精品| 日韩免费福利电影在线观看| 国产精品久久久久久福利一牛影视 | 日本一区二区三级电影在线观看 | 欧美丰满一区二区免费视频| 国产色综合久久| 日韩电影免费一区| 麻豆专区一区二区三区四区五区| 国产v综合v亚洲欧| 日韩美女在线视频| 一区二区欧美国产| 国产白丝网站精品污在线入口| 欧美日韩成人综合| 亚洲视频 欧洲视频| 国产在线精品一区二区不卡了| 欧美这里有精品| 国产精品区一区二区三区| 日本不卡的三区四区五区| 99久久久免费精品国产一区二区| 精品少妇一区二区三区视频免付费| 亚洲人成7777| 成人h动漫精品一区二| 精品日韩在线观看| 日韩不卡在线观看日韩不卡视频| 91视视频在线观看入口直接观看www| 日韩一级欧美一级| 日本在线播放一区二区三区| 91成人在线精品| 亚洲色大成网站www久久九九| 国产91综合一区在线观看| 久久综合九色欧美综合狠狠| 免费观看日韩电影| 日韩欧美成人激情| 久久99国产乱子伦精品免费| 国产亚洲短视频| 丰满少妇久久久久久久| 亚洲成va人在线观看| 99精品热视频| 亚洲图片你懂的| 91麻豆国产在线观看| 亚洲欧洲一区二区在线播放| 成人av免费网站| 日韩美女久久久| 在线视频亚洲一区| 亚洲午夜在线电影| 欧美高清性hdvideosex| 免费在线观看精品| 精品久久久久久亚洲综合网| 久久精品99国产精品日本| 精品国内片67194| 精品一区二区三区的国产在线播放| 777久久久精品| 久久99蜜桃精品| 国产香蕉久久精品综合网| 精一区二区三区| 欧美日韩在线播放三区四区| 日韩中文字幕91| 日韩一区二区三区电影| 青娱乐精品视频| 欧美哺乳videos| 国产精品1区二区.| 亚洲卡通欧美制服中文| 色婷婷综合久久久久中文| 亚洲女女做受ⅹxx高潮| 欧美天堂一区二区三区| 亚洲一区二区三区四区在线观看 | 国产精品99久久久久久久vr| 欧美韩日一区二区三区| 不卡的看片网站| 亚洲图片欧美综合| 欧美一区二区国产| 国产一区不卡视频| 国产欧美日韩激情| 欧美日韩一区视频| 久久国产乱子精品免费女| 久久久久88色偷偷免费| 91麻豆国产在线观看| 性感美女极品91精品| 色综合久久中文综合久久97| 日韩福利电影在线观看| 久久无码av三级| 91美女精品福利| 日欧美一区二区| 日本一区二区三区免费乱视频| www..com久久爱| 亚洲主播在线播放| 国产亚洲欧美在线| 国产精品久久久久永久免费观看 | 秋霞影院一区二区| 精品国产一区二区三区av性色| 成人黄色电影在线| 亚洲妇熟xx妇色黄| 国产欧美日韩精品一区| 在线看不卡av| 国产乱淫av一区二区三区| 日韩成人av影视| 亚洲码国产岛国毛片在线| 欧美变态口味重另类| 91麻豆国产自产在线观看| 国产在线播放一区二区三区| 国产精品另类一区| 久久精品一级爱片| 欧美一区二区在线不卡| 色综合久久久久综合体| 精品一区二区三区在线播放视频| 亚洲免费观看在线观看| 91精品国产91热久久久做人人 | 日韩免费电影网站| 粉嫩av一区二区三区在线播放| 精品伊人久久久久7777人| 亚洲自拍偷拍网站| 中文字幕一区二区三区不卡| 欧美成人aa大片| 在线综合+亚洲+欧美中文字幕| 欧美日韩三级一区二区| 精品福利av导航| 国产拍欧美日韩视频二区| 欧美日韩电影一区| 欧美在线观看一区| 色综合久久久久综合| 国产乱色国产精品免费视频| 国精产品一区一区三区mba视频| 午夜婷婷国产麻豆精品| 亚洲影视在线观看| 亚洲男女毛片无遮挡| 亚洲免费毛片网站| 亚洲日韩欧美一区二区在线| 国产精品美女一区二区三区| 国产区在线观看成人精品| 2017欧美狠狠色| 久久亚洲精品小早川怜子| www国产成人| 久久色成人在线| 精品成人一区二区三区| 精品欧美乱码久久久久久1区2区| 7777精品伊人久久久大香线蕉完整版| 欧美亚洲一区二区三区四区| 日本道在线观看一区二区| 色婷婷av一区二区三区软件 | 4hu四虎永久在线影院成人| 欧美亚州韩日在线看免费版国语版| 一本在线高清不卡dvd| 在线观看日韩国产| 91精品福利在线一区二区三区| 91豆麻精品91久久久久久| 欧美日韩免费观看一区三区| 欧美肥胖老妇做爰| 日韩一级大片在线观看| 欧美一二三四区在线| 中文字幕欧美日本乱码一线二线| 国产精品女主播av| 一区二区成人在线观看| 免费一级片91| 国产裸体歌舞团一区二区| 色噜噜狠狠色综合欧洲selulu| 欧美猛男gaygay网站| 精品毛片乱码1区2区3区| 国产精品麻豆99久久久久久| 国产精品卡一卡二卡三|