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

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

?? zep.c

?? zigbee 2004協(xié)議棧
?? C
字號:
/*
*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
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美腿丝袜亚洲三区| 国产精品美女久久久久高潮| 1000部国产精品成人观看| 久久精品国产秦先生| 日韩一区二区精品| 狠狠色丁香九九婷婷综合五月| 日韩一区二区免费高清| 韩日精品视频一区| 国产精品九色蝌蚪自拍| 91美女在线视频| 天天av天天翘天天综合网 | 亚洲日本va在线观看| 99在线视频精品| 亚洲在线视频一区| 日韩免费一区二区三区在线播放| 国产一区二区视频在线播放| 国产午夜一区二区三区| 不卡一区在线观看| 亚洲成av人片一区二区三区| 欧美一区二区三区四区高清 | 国产亚洲一区二区三区| 成人三级在线视频| 亚洲丰满少妇videoshd| 日韩欧美在线123| 丰满亚洲少妇av| 亚洲一区二区三区四区在线免费观看| 3d动漫精品啪啪| 99久久婷婷国产综合精品电影| 一区二区在线观看视频| 欧美一卡二卡三卡| av不卡在线播放| 免费不卡在线视频| 国产精品白丝在线| 日韩三级视频中文字幕| 成人短视频下载| 久久99久久99| 亚洲精品欧美专区| 久久久久久久久久久久电影| 日本久久精品电影| 国产a久久麻豆| 日韩电影免费在线观看网站| 国产亚洲精品中文字幕| 欧美视频在线观看一区二区| 国产在线精品国自产拍免费| 亚洲免费观看高清| 国产欧美综合在线观看第十页| 欧美日韩精品专区| 成人av高清在线| 美女性感视频久久| av在线不卡免费看| 亚洲欧美综合另类在线卡通| 久久99精品国产91久久来源| 精品裸体舞一区二区三区| 国产精品久久久久久久久久免费看| 从欧美一区二区三区| 国产美女av一区二区三区| 欧美三级视频在线| 日韩福利电影在线观看| 欧美精品久久天天躁| 免费在线观看一区二区三区| 日韩精品一区二区三区四区| 九九精品一区二区| 日韩天堂在线观看| 久久电影国产免费久久电影| 欧美性生活久久| 日韩在线a电影| 日本韩国一区二区三区视频| 亚洲国产精品嫩草影院| 在线视频国内一区二区| 精品制服美女丁香| 久久久久国产一区二区三区四区| 日产欧产美韩系列久久99| 91色porny蝌蚪| 亚洲欧美精品午睡沙发| 欧美性videosxxxxx| 亚洲国产精品一区二区久久恐怖片| 成人app软件下载大全免费| 国产视频一区在线播放| 国产成人亚洲综合a∨婷婷图片| 国产婷婷色一区二区三区在线| 成人一道本在线| 亚洲免费观看高清| 国产日产欧美一区二区视频| 日韩一区二区三免费高清| 久久狠狠亚洲综合| 亚洲精品视频观看| 国产日韩三级在线| 成人免费黄色大片| 欧美久久婷婷综合色| 麻豆91精品视频| 欧美国产精品专区| 成人动漫中文字幕| 成人av网站大全| 91丨porny丨首页| 色婷婷综合久久| 欧美亚洲高清一区| 欧美久久久久中文字幕| 欧美蜜桃一区二区三区| 欧美一区二区在线播放| 日韩精品自拍偷拍| 欧美极品aⅴ影院| 综合中文字幕亚洲| 亚洲大片精品永久免费| 日韩精品亚洲专区| 国产真实乱对白精彩久久| 国产一区二区精品久久| 99久久免费精品高清特色大片| 一本色道久久加勒比精品| 欧美日韩和欧美的一区二区| 日韩一区二区三区在线观看| 国产亚洲精品超碰| 亚洲一区二区欧美激情| 精品一区二区三区av| 成人av网站在线观看| 欧美高清hd18日本| 中文成人综合网| 亚洲国产精品久久久久秋霞影院| 老司机精品视频线观看86| 成人av在线电影| 欧美一区二区三区免费在线看| 国产亚洲一区二区三区| 亚洲国产精品久久久久秋霞影院| 狠狠色狠狠色综合系列| 色婷婷精品久久二区二区蜜臂av| 欧美大肚乱孕交hd孕妇| 国产精品不卡一区二区三区| 日韩国产欧美三级| 99久久伊人网影院| 精品少妇一区二区三区 | 国产精品69毛片高清亚洲| av高清不卡在线| 日韩视频一区二区| 尤物在线观看一区| 国产夫妻精品视频| 7777精品久久久大香线蕉| 亚洲国产精品ⅴa在线观看| 日日夜夜精品视频免费| 99天天综合性| 久久久无码精品亚洲日韩按摩| 亚洲1区2区3区4区| 91首页免费视频| 国产三级欧美三级日产三级99 | 亚瑟在线精品视频| 成人av先锋影音| 精品国产髙清在线看国产毛片| 亚洲综合激情网| 成a人片国产精品| 久久久久久久久久久99999| 日日夜夜免费精品| 欧美精选一区二区| 亚洲最新视频在线播放| 国产成人精品亚洲777人妖| 精品剧情在线观看| 蜜桃av噜噜一区| 制服.丝袜.亚洲.中文.综合| 亚洲免费av高清| 91网站最新地址| 中文字幕在线不卡| 成人黄色一级视频| 国产精品色呦呦| 国产a视频精品免费观看| 久久品道一品道久久精品| 免费国产亚洲视频| 3atv在线一区二区三区| 一区二区三区不卡在线观看| 99久久免费精品高清特色大片| 欧美激情一区二区三区全黄| 国产美女精品在线| 欧美国产精品v| 成人av小说网| 亚洲欧洲精品一区二区精品久久久 | 国产精品亚洲专一区二区三区| 欧美一区二区三区在线看| 天堂久久久久va久久久久| 欧美日韩激情一区| 免费成人你懂的| 精品国产区一区| 国产成人亚洲精品青草天美| 国产欧美久久久精品影院| 粉嫩一区二区三区在线看| 国产性色一区二区| 91啪在线观看| 亚洲国产成人va在线观看天堂| 欧美三区免费完整视频在线观看| 亚洲电影一级黄| 日韩美女一区二区三区四区| 久久99国产乱子伦精品免费| 久久在线观看免费| 成人动漫一区二区在线| 亚洲人成小说网站色在线 | 中文久久乱码一区二区| 91在线小视频| 午夜精品久久久久久久| 欧美大片免费久久精品三p| 国产成人精品三级麻豆| 亚洲久本草在线中文字幕| 欧美日韩精品二区第二页| 韩国女主播一区二区三区| 国产精品色一区二区三区| 欧美色爱综合网|