亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一本一道波多野结衣一区二区| 2023国产精品视频| 日韩视频免费直播| 日本一区二区综合亚洲| 亚洲成人免费影院| 成人av综合一区| 日韩欧美亚洲国产另类| 一区二区在线观看视频在线观看| 久久99精品久久久久久久久久久久| av一本久道久久综合久久鬼色| 欧美一区二区三区不卡| 亚洲色图欧美在线| 国产一本一道久久香蕉| 欧美日韩免费不卡视频一区二区三区| 国产午夜精品一区二区三区嫩草| 日韩精品国产精品| 欧美色电影在线| 亚洲欧美日韩电影| 成人av网站在线| 国产婷婷色一区二区三区在线| 日本不卡一区二区三区 | 6080yy午夜一二三区久久| 国产精品每日更新在线播放网址| 国内精品视频666| 日韩视频中午一区| 亚洲永久精品大片| 色狠狠综合天天综合综合| 国产精品久久久久久久午夜片| 国产高清一区日本| 国产视频视频一区| 粉嫩在线一区二区三区视频| 国产欧美日韩亚州综合| 国产激情视频一区二区在线观看 | 欧美高清性hdvideosex| 一区二区三区四区精品在线视频| av午夜一区麻豆| 中文字幕一区二| 色综合久久天天综合网| 亚洲一区在线观看网站| 欧美日韩一区二区三区视频 | 国产精品毛片无遮挡高清| 国产成人综合亚洲网站| 欧美—级在线免费片| 成人v精品蜜桃久久一区| 亚洲视频 欧洲视频| 色八戒一区二区三区| 亚洲.国产.中文慕字在线| 日韩午夜电影av| 国产麻豆日韩欧美久久| 中文字幕第一区二区| 色播五月激情综合网| 天天av天天翘天天综合网色鬼国产 | 精品视频免费看| 免费一级片91| 国产三级精品三级| 91色porny蝌蚪| 日韩av中文字幕一区二区三区| 精品剧情在线观看| jlzzjlzz亚洲女人18| 亚洲午夜电影在线观看| 欧美女孩性生活视频| 国产一区欧美一区| 亚洲欧美日韩国产另类专区| 制服视频三区第一页精品| 久草中文综合在线| 亚洲精品一二三| 日韩午夜中文字幕| 99国产欧美另类久久久精品| 日本成人在线看| 亚洲色图欧美在线| 欧美mv和日韩mv的网站| 一道本成人在线| 久久97超碰国产精品超碰| 亚洲欧美电影一区二区| 精品国产青草久久久久福利| 色激情天天射综合网| 韩国成人福利片在线播放| 亚洲午夜激情av| 中文在线资源观看网站视频免费不卡| 欧美性极品少妇| 成人综合在线视频| 美女脱光内衣内裤视频久久网站 | 国产精品久久精品日日| 7777精品伊人久久久大香线蕉完整版 | 国产视频一区二区三区在线观看| 欧美午夜免费电影| 成人手机在线视频| 激情六月婷婷久久| 五月婷婷另类国产| 亚洲影院在线观看| 国产精品传媒入口麻豆| 久久久久久**毛片大全| 日韩欧美美女一区二区三区| 欧美性生活影院| 91美女视频网站| 成人做爰69片免费看网站| 国内成人精品2018免费看| 奇米综合一区二区三区精品视频 | 在线区一区二视频| av高清不卡在线| 国产不卡免费视频| 国产精品资源在线看| 久久电影网站中文字幕| 日韩高清一级片| 午夜精品一区在线观看| 午夜av电影一区| 日韩成人av影视| 青青草国产精品亚洲专区无| 亚洲va在线va天堂| 亚洲成人一区在线| 午夜伊人狠狠久久| 日韩电影免费一区| 蜜臀av在线播放一区二区三区| 爽爽淫人综合网网站| 午夜精品视频在线观看| 日韩中文字幕区一区有砖一区 | 狠狠色丁香婷综合久久| 国产一区二区女| 国产精品一区三区| 国产精品538一区二区在线| 国产一区 二区| 国产成人av影院| 成年人国产精品| 在线免费观看日本欧美| 欧美三级欧美一级| 日韩一级片在线观看| 久久综合色综合88| 国产精品国产三级国产有无不卡| 亚洲国产精品精华液2区45| ●精品国产综合乱码久久久久| 亚洲天堂成人在线观看| 亚洲国产成人va在线观看天堂| 午夜私人影院久久久久| 九色综合国产一区二区三区| 国产综合色在线视频区| 天堂av在线一区| 国内久久精品视频| 国产精品77777竹菊影视小说| 激情都市一区二区| 国产美女视频一区| 国产一区二区三区四| 成人午夜av在线| 91色|porny| 欧美xxxx老人做受| 91国产视频在线观看| 欧洲生活片亚洲生活在线观看| 欧美狂野另类xxxxoooo| 日韩片之四级片| 国产亲近乱来精品视频| 一区2区3区在线看| 久久电影网站中文字幕 | 精品99999| 国产精品久久久久婷婷| 日产国产欧美视频一区精品 | 91黄色激情网站| 欧美不卡一二三| 亚洲欧美日韩中文播放 | 美女视频黄 久久| 成人黄色片在线观看| 欧美疯狂性受xxxxx喷水图片| 国产三级三级三级精品8ⅰ区| 亚洲一二三四区不卡| 国产激情一区二区三区| 91麻豆精品91久久久久久清纯| 国产精品少妇自拍| 老色鬼精品视频在线观看播放| 99国产精品国产精品久久| 精品国产乱码久久久久久浪潮| 一区二区在线观看免费| 国产一区二区三区四区五区美女| 欧美日韩精品一区二区三区| 中文字幕一区二区三| 国产一区欧美二区| 91精品视频网| 亚洲午夜视频在线| 91丝袜国产在线播放| 久久―日本道色综合久久| 日韩电影网1区2区| 欧美视频一区二区| 亚洲久本草在线中文字幕| 粉嫩嫩av羞羞动漫久久久| 欧美电视剧在线看免费| 午夜电影网亚洲视频| 欧美在线你懂得| 亚洲美女区一区| 波多野结衣欧美| 国产亚洲精久久久久久| 国产一区二区精品久久| 欧美va日韩va| 久久99精品久久久久久| 日韩久久免费av| 美国三级日本三级久久99| 91精品国产综合久久久久久漫画| 一区二区三区不卡视频| 欧美亚洲尤物久久| 亚洲一区二区3| 在线免费不卡电影| 无码av免费一区二区三区试看 | 国产精品日韩成人| 成人爱爱电影网址|