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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? zep.c

?? ZigBee協(xié)議棧2.0的程序
?? C
字號(hào):
/*
*2006/08/16 WXL 2.0
 *
 */

/*
V0.2 added PC-based binding         21/July/2006
V0.1 Initial Release                10/July/2006

*/


/*
Handles messages for the Zero Endpoint

*/

#include "compiler.h"               //compiler specific
#include "lrwpan_common_types.h"
#include "lrwpan_config.h"
#include "ieee_lrwpan_defs.h"
#include "hal.h"
#include "console.h"
#include "debug.h"
#include "phy.h"
#include "mac.h"
#include "nwk.h"
#include "aps.h"
#include "zep.h"
#include "neighbor.h"
#include "evboard.h"

#ifdef LRWPAN_USE_PC_BIND
#include "pcbind.h"
#endif

ZEP_STATE_ENUM zepState;
ZEP_PIB zep_pib;


static void zepCommonFmt(SADDR dst_saddr, BYTE cluster);

//locals
#ifdef LRWPAN_FFD
static LRWPAN_STATUS_ENUM zepHandleEndDeviceAnnounce(void);
#endif



void zepInit(void){
	zepState = ZEP_STATE_IDLE;
	zep_pib.flags.val = 0;
}

void zepFSM(void) {
	//does not do much right now

	if (zep_pib.flags.bits.Alarm) {
		//flash LED1 at 200ms rate
		if ((halMACTimerNowDelta(zep_pib.alarm_timer)) > MSECS_TO_MACTICKS(200)) {
			//toggle LED1
			if (EVB_LED1_STATE()) {
		     EVB_LED1_OFF();
			 } else {
                  EVB_LED1_ON();
				 }
            zep_pib.alarm_timer = halGetMACTimer();
		}


	}

}

//right now, we only handle simple RX packets.
//This must completely process the current packet and post jobs if this
//needs to be handled.
LRWPAN_STATUS_ENUM zepHandleRxPacket(void) {

     LRWPAN_STATUS_ENUM rstatus;
	 BYTE *ptr;

	 rstatus = LRWPAN_STATUS_SUCCESS;
	 ptr = aplGetRxMsgData();
	switch (a_aps_rx_data.cluster) {
#ifdef LRWPAN_FFD
			   case ZEP_END_DEVICE_ANNOUNCE:
				   rstatus = zepHandleEndDeviceAnnounce();
				   if (rstatus ==LRWPAN_STATUS_SUCCESS) {
					   rstatus = usrZepRxCallback();
				   }
				   break;
#endif
			case ZEP_EXTENDED_CMD:
				   switch(*ptr)
				   {
			          case ZEP_EXT_NODE_INFO_RSP:
#ifdef LRWPAN_COORDINATOR
#ifdef LRWPAN_USE_PC_BIND
							 //forward the ZEP info to the PC client
		                     pbdHandleZepForward();
#endif
#endif
				             rstatus = usrZepRxCallback();
							 break;
					  case ZEP_EXT_PING:
#ifdef LRWPAN_COORDINATOR
#ifdef LRWPAN_USE_PC_BIND
							 //forward the ping to the PC client
		                     pbdHandleZepForward();
#endif
#endif
						     rstatus = LRWPAN_STATUS_SUCCESS;
						     break;

					  case ZEP_EXT_SEND_ALARM:
						     ptr++;
							 //check the mode
							 if (*ptr) {
								 //turn on the alarm
								 zep_pib.flags.bits.Alarm = 1;
								 zep_pib.alarm_timer = halGetMACTimer();
								 if (EVB_LED1_STATE())
								 {EVB_LED1_OFF();
								 } else {
                                   EVB_LED1_ON();
								 }
							 }else {
								 //turn off the alarm
                                 zep_pib.flags.bits.Alarm = 0;
								 //turn off the LED
								 EVB_LED1_OFF();
							 }


						    break;

					  default:
						     break;

				   }
                           break;
		        default:
				   DEBUG_STRING(DBG_INFO,"Unhandled Zero Endpoint Command, discarding.\n");
	}
	return(rstatus);
}

static void zepCommonFmt(SADDR dst_saddr, BYTE cluster){
	a_aps_tx_data.flags.val = 0;
    a_aps_tx_data.srcEP = 0;	//from endpoint 0
	a_aps_tx_data.tsn = apsGenTSN();
	a_aps_tx_data.cluster = cluster;
	a_aps_tx_data.dstMode = APS_DSTMODE_SHORT;
	a_aps_tx_data.dstSADDR = dst_saddr;  //destination
	a_aps_tx_data.dstEP = 0;     //to endpoint 0
	a_aps_tx_data.srcSADDR = macGetShortAddr();
	a_aps_tx_data.af_fcf = (1 | AF_FRM_TYPE_MSG);
	//use an ACK so that we know if this succeeds
	a_aps_tx_data.aps_fcf = APS_FRM_TYPE_DATA | APS_FRM_DLVRMODE_NORMAL | APS_FRM_ACKREQ_MASK;
	//set the loopback flag if this is for us, have to check this for every ZEP format
	if (a_aps_tx_data.dstSADDR == macGetShortAddr()) a_aps_tx_data.flags.bits.loopback = 1;

}

//send a payload that has our short address, so that a ping
//can be used to send our short address to somebody
//The main goal is to the APS ACK back
//as verification that this was delivered
//this ping packet is also forwarded to the PC client
//if PC binding is being used.

void zepFmtPing(SADDR dst_saddr) {
	BYTE *ptr;
   	a_aps_tx_data.usrPlen = 3;
	ptr = &tmpTxBuff[LRWPAN_MAX_FRAME_SIZE-1];
    *ptr = (BYTE) (macGetShortAddr()>>8);
    --ptr;
    *ptr = (BYTE) (macGetShortAddr());
    --ptr;
	*ptr = ZEP_EXT_PING;
	zepCommonFmt(dst_saddr,ZEP_EXTENDED_CMD);
}

//turns an alarm on at the node
//if mode is nonzero, turn on the alarm
//if mode is zero, turn off the alarm
void zepFmtAlarm(SADDR dst_saddr, BYTE mode) {
	BYTE *ptr;
   	a_aps_tx_data.usrPlen = 2;
	ptr = &tmpTxBuff[LRWPAN_MAX_FRAME_SIZE-1];
    *ptr = mode;
    --ptr;
	*ptr = ZEP_EXT_SEND_ALARM;
	zepCommonFmt(dst_saddr,ZEP_EXTENDED_CMD);
}


#ifdef LRWPAN_FFD
//an End Device has sent us its short address, long address information.
//put this in the address map.
static LRWPAN_STATUS_ENUM zepHandleEndDeviceAnnounce(void){
	BYTE *ptr;
	SADDR saddr;

	if (aplGetRxMsgLen() != ZEP_PLEN_END_DEVICE_ANNOUNCE)  return (LRPAN_STATUS_ZEP_FAILED) ;  // wrong message length.
	ptr = aplGetRxMsgData();  //get pointer to data
	//parse the message.
	saddr =  *ptr;
	ptr++;
	saddr += (((UINT16)*ptr) << 8);
	ptr++;
	//enter this into the map
    ntNewAddressMapEntry(ptr, saddr);
	return(LRWPAN_STATUS_SUCCESS);
}

#endif



//put our long address, short address into the tmpTxBuffer
//so that it can be sent to the coordinator.
void zepFmtEndDeviceAnnounce(SADDR dst_saddr){
	BYTE *ptr;

	//first, do the payload
	ptr = &tmpTxBuff[LRWPAN_MAX_FRAME_SIZE] - 8;	
	//copy in the long address
	halGetProcessorIEEEAddress(ptr);
	//now put our short address
	--ptr;
    *ptr = (BYTE) (macGetShortAddr()>>8);

    --ptr;
    *ptr = (BYTE) (macGetShortAddr());
	
    a_aps_tx_data.usrPlen = ZEP_PLEN_END_DEVICE_ANNOUNCE;

	//now, the rest
	zepCommonFmt(dst_saddr,ZEP_END_DEVICE_ANNOUNCE);
		
}

/* this is a custom Zero End point command that sends data that is spread
across several different Zigbee response commands into one. This info
is needed by the PC client in the binding demo
*/
void zepFmtNodeInfoRsp(SADDR dst_saddr){

	BYTE *ptr;
	BYTE i;

	//endpoints first
	ptr = &tmpTxBuff[LRWPAN_MAX_FRAME_SIZE];
	//do the endpoints first.
	for (i=0;i<aps_pib.activeEPs;i++){
		--ptr;
		*ptr = apsEndPoints[i].epNum;
	}
    --ptr;
	*ptr = aps_pib.activeEPs;
	
	//MAC capability code
    --ptr;
	*ptr = mac_pib.macCapInfo;

	//Node type
    --ptr;
#if defined(LRWPAN_COORDINATOR)
	*ptr = NODE_TYPE_COORD;
#elif defined(LRWPAN_FFD)
	*ptr = NODE_TYPE_ROUTER;
#else
    *ptr = NODE_TYPE_ENDDEVICE;
#endif
    //my parent
	  --ptr;
	*ptr = (mac_pib.macCoordShortAddress >> 8) & 0xFF;
	

	--ptr;	
    *ptr = mac_pib.macCoordShortAddress & 0xFF;


	//my short address
    --ptr;
	*ptr = (macGetShortAddr() >> 8) & 0xFF;
	

	--ptr;	
    *ptr = macGetShortAddr() & 0xFF;

	//copy in the long address
	ptr = ptr - 8;
	halGetProcessorIEEEAddress(ptr);

	//indentify this extended command
	--ptr;
	*ptr = ZEP_EXT_NODE_INFO_RSP;

	a_aps_tx_data.usrPlen = aps_pib.activeEPs + ZEP_PLEN_NODE_INFO_RSP ;

	//now, the rest
	zepCommonFmt(dst_saddr,ZEP_EXTENDED_CMD);

}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女一区二区视频| 国产精品一区专区| 国产免费久久精品| 欧美日韩精品系列| 国产精品一区二区你懂的| 亚洲综合在线视频| 国产日韩欧美精品在线| 91精品婷婷国产综合久久性色| 成人一道本在线| 久久成人久久鬼色| 日韩黄色免费网站| 亚洲欧美aⅴ...| 国产婷婷一区二区| 日韩精品专区在线影院重磅| 91久久精品一区二区| 国产.欧美.日韩| 久久成人免费电影| 美女视频免费一区| 五月天网站亚洲| 一区二区不卡在线视频 午夜欧美不卡在| 久久这里只精品最新地址| 91.com在线观看| 精品视频123区在线观看| 日本久久一区二区三区| 成人a级免费电影| 丁香啪啪综合成人亚洲小说| 国产麻豆精品95视频| 麻豆中文一区二区| 日本aⅴ精品一区二区三区| 舔着乳尖日韩一区| 亚洲午夜电影在线观看| 亚洲一区中文日韩| 夜夜精品视频一区二区| 一区二区三区在线免费| 日韩毛片精品高清免费| 成人欧美一区二区三区| 国产精品乱码久久久久久| 欧美激情在线一区二区三区| 欧美韩国日本综合| 国产精品三级电影| 国产精品久久二区二区| 国产精品久久久久久亚洲毛片| 国产精品久久99| 亚洲欧美激情插| 亚洲一二三四在线| 亚洲h在线观看| 免费久久99精品国产| 麻豆精品一区二区综合av| 久久99国产精品成人| 狠狠色丁香久久婷婷综| 国产成人精品亚洲日本在线桃色 | 九色综合国产一区二区三区| 美女视频网站久久| 国产不卡在线一区| 99久久国产免费看| 欧美日韩国产高清一区二区 | 国产精品视频你懂的| 国产精品久久久久久久久免费丝袜| 中文字幕一区二区三区不卡| 亚洲蜜臀av乱码久久精品| 亚洲第一综合色| 美腿丝袜在线亚洲一区| 国产黄色91视频| 免费不卡在线观看| 国产激情91久久精品导航 | 国产乱人伦精品一区二区在线观看| 国产精品18久久久久| 99视频精品在线| 欧美丰满少妇xxxxx高潮对白| 欧美电视剧免费全集观看| 国产欧美一区二区三区在线老狼| 自拍偷拍欧美精品| 午夜精品久久久久久久久久 | 国产综合色产在线精品| 99国产精品一区| 欧美丰满少妇xxxxx高潮对白 | 国产午夜精品一区二区三区视频| 国产精品狼人久久影院观看方式| 亚洲第一狼人社区| 国产麻豆午夜三级精品| 欧美专区亚洲专区| 久久久久国产精品人| 亚洲综合成人在线视频| 激情综合一区二区三区| 91福利国产精品| 久久一区二区视频| 亚洲在线观看免费| 国产老女人精品毛片久久| 在线观看成人小视频| 国产午夜亚洲精品理论片色戒| 亚洲狠狠爱一区二区三区| 国产999精品久久久久久| 91精选在线观看| 亚洲日本韩国一区| 国产成人精品亚洲午夜麻豆| 69堂精品视频| 亚洲视频免费看| 国产一区二区在线电影| 欧美日韩亚洲国产综合| 亚洲欧洲成人精品av97| 韩国精品在线观看| 9191久久久久久久久久久| 亚洲摸摸操操av| 国产成人精品影视| 久久只精品国产| 看电影不卡的网站| 欧美精品1区2区| 亚洲黄一区二区三区| 成人午夜私人影院| 久久久国产精品不卡| 日本一区中文字幕| 欧美日韩亚洲综合一区| 一区二区三区波多野结衣在线观看 | 波多野结衣中文一区| 日韩欧美在线不卡| 天堂av在线一区| 欧美图片一区二区三区| 专区另类欧美日韩| www.成人在线| 国产精品天干天干在线综合| 国产一区在线看| 精品日韩欧美在线| 免费精品视频最新在线| 91精品久久久久久久99蜜桃| 亚洲国产精品一区二区www在线| 不卡的av电影| 亚洲欧美日本在线| 色哟哟亚洲精品| 亚洲久本草在线中文字幕| 99久久夜色精品国产网站| 中文字幕一区二| 97久久久精品综合88久久| 中文字幕一区二区视频| 成人免费毛片高清视频| 欧美激情中文不卡| 99久久精品一区二区| 亚洲欧洲美洲综合色网| 色婷婷久久一区二区三区麻豆| 亚洲欧美另类小说| 欧美午夜电影一区| 午夜日韩在线观看| 欧美一区二区视频在线观看 | 久久精品国产99国产| 精品久久久久久最新网址| 久久精品99国产精品日本| 精品国精品国产| 国产福利一区二区三区| 国产精品久久久久久久久晋中| 99精品一区二区| 亚洲影院理伦片| 欧美一区二区免费观在线| 久久国产精品露脸对白| 国产蜜臀97一区二区三区 | zzijzzij亚洲日本少妇熟睡| 18欧美亚洲精品| 欧美日韩一区二区在线观看视频| 丝袜美腿亚洲色图| 日韩精品一区二区三区中文不卡| 国产一区二区三区免费播放| 亚洲国产高清在线| 欧美视频你懂的| 蜜桃视频一区二区三区在线观看| 久久夜色精品一区| 色中色一区二区| 日本不卡不码高清免费观看| 久久午夜国产精品| 91麻豆swag| 另类成人小视频在线| 国产精品乱码人人做人人爱| 在线电影院国产精品| 国产麻豆午夜三级精品| 亚洲精品成人a在线观看| 日韩一级免费观看| 成人高清视频在线| 午夜日韩在线电影| 欧美国产丝袜视频| 欧美电影一区二区三区| 国产**成人网毛片九色| 婷婷久久综合九色综合绿巨人| 久久亚洲春色中文字幕久久久| 91视频在线观看| 青青国产91久久久久久| 《视频一区视频二区| 日韩精品自拍偷拍| 色欧美88888久久久久久影院| 久久精品国产一区二区| 亚洲在线观看免费| 久久久精品一品道一区| 8v天堂国产在线一区二区| 成人av网站在线观看免费| 日韩av在线播放中文字幕| 国产精品网站在线观看| 日韩欧美国产三级电影视频| 91视频在线看| 懂色一区二区三区免费观看| 日韩综合一区二区| 亚洲精品视频免费看| 国产欧美视频在线观看| 日韩欧美二区三区| 欧美日韩亚洲综合一区二区三区|