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

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

?? neighbor.c

?? ZigBee協議棧2.0的程序
?? C
字號:
/*
 *2006/08/16 WXL 2.0
 */

/*
V0.2 added PC-based binding         21/July/2006

*/


/*
Neighbor Table Support and Address assignment support


*/

#include "compiler.h"
#include "lrwpan_config.h"         //user configurations
#include "lrwpan_common_types.h"   //types common acrosss most files
#include "ieee_lrwpan_defs.h"
#include "console.h"
#include "debug.h"
#include "memalloc.h"
#include "hal.h"
#include "halStack.h"
#include "phy.h"
#include "mac.h"


#include "neighbor.h"

//holds pairs of long/short addresses


#ifdef LRWPAN_FFD
NAYBORENTRY mac_nbr_tbl[NTENTRIES];
#endif


//initializes the Address map
//called in halInit()
//also called anytime the Coord forms a network
//or a router joins a network.
//the first entry in the address map is always our own
//that maps long address to short address
void ntInitAddressMap(void){
  BYTE j;
  for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		mac_addr_tbl[j].saddr = LRWPAN_BCAST_SADDR;
	}
}
	

//address map functions
//finds a match in the address map table using a LADDR
BOOL ntFindAddressByLADDR(LADDR *ptr, BYTE *index){
   BYTE j,i;
   BYTE *src,*dst;

   for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) continue;
		src = &ptr->bytes[0];
		dst = &mac_addr_tbl[j].laddr[0];
		for (i=0;i<8;i++, src++, dst++) {
			if (*src != *dst) break;
		}
		if (i== 8) {
			//have a match
		    *index = j;
		    break;
		}		
   }

   if (j != LRWPAN_MAX_ADDRESS_MAP_ENTRIES) return(TRUE);
	else return(FALSE);	

}

void ntAddOurselvesToAddressTable(SADDR saddr){
	BYTE laddr[8];

	halGetProcessorIEEEAddress(&laddr[0]);
	ntNewAddressMapEntry(&laddr[0], saddr);
}


//finds a match in the address map table using a SADDR
BOOL ntFindAddressBySADDR(SADDR saddr, BYTE *index)
{
   BYTE j;

   for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) continue;
		if (mac_addr_tbl[j].saddr != saddr) continue;
		*index = j;
		break;
		
	}

   if (j != LRWPAN_MAX_ADDRESS_MAP_ENTRIES) return(TRUE);
	else return(FALSE);

}

//checks if  laddr, saddr is already in the address map table
//if it is, return map index in 'index'
BOOL ntCheckAddressMapEntry(BYTE *laddr, SADDR saddr, BYTE *index) {
   BYTE j,i;
   BYTE *src,*dst;

   for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) continue;
		if (mac_addr_tbl[j].saddr != saddr) continue;
		src = laddr;
		dst = &mac_addr_tbl[j].laddr[0];
		for (i=0;i<8;i++) {
			if (*src != *dst) break;
			src++; dst++;
		}
		if (i == 8) {
			// we have a match
			*index = j;
			return(TRUE);
		}
	}

	return(FALSE);
}

//enters new laddr, saddr into address map entry
SADDR ntNewAddressMapEntry(BYTE *laddr, SADDR saddr) {
    BYTE j;

	if (ntCheckAddressMapEntry(laddr, saddr, &j)) {
		//entry is already in the table.
		return(mac_addr_tbl[j].saddr);
	}
	//now find free entry in address map table
	for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) break;
	}
	if (j== LRWPAN_MAX_ADDRESS_MAP_ENTRIES) return(LRWPAN_BCAST_SADDR);//error, no room
    halUtilMemCopy(&mac_addr_tbl[j].laddr[0], laddr, 8);
	mac_addr_tbl[j].saddr = saddr;
	return(0);
}





UINT16 ntGetCskip(BYTE depth) {
	switch(depth){
		case 1: return(LRWPAN_CSKIP_1);
		case 2: return(LRWPAN_CSKIP_2);
		case 3: return(LRWPAN_CSKIP_3);
		case 4: return(LRWPAN_CSKIP_4);
		case 5: return(LRWPAN_CSKIP_5);
		case 6: return(LRWPAN_CSKIP_6);
		case 7: return(LRWPAN_CSKIP_7);
		case 8: return(LRWPAN_CSKIP_8);
		case 9: return(LRWPAN_CSKIP_9);
		case 10: return(LRWPAN_CSKIP_10);
	}
return(0);
}

SADDR ntGetMaxSADDR(SADDR router_saddr,BYTE depth){
	//compute the maximum SADDR given the router_saddr and depth

   return(router_saddr + (ntGetCskip(depth)*(LRWPAN_MAX_ROUTERS_PER_PARENT))
	      + LRWPAN_MAX_NON_ROUTER_CHILDREN);
}


//rest of this are neighbor table functions, only needed by FFDs

#ifdef LRWPAN_FFD


NAYBORENTRY *ntFindBySADDR (UINT16 saddr){

	NAYBORENTRY *nt_ptr;
	BYTE j;

	nt_ptr = &mac_nbr_tbl[0];
	for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		if ( nt_ptr->flags.bits.used &&
			mac_addr_tbl[nt_ptr->map_index].saddr == saddr) return(nt_ptr);
		nt_ptr++;
    }
	return(NULL);
}

NAYBORENTRY *ntFindByLADDR (LADDR *ptr){
	NAYBORENTRY *nt_ptr;
	BYTE j,i;

    nt_ptr = &mac_nbr_tbl[0];
	for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		if (!nt_ptr->flags.bits.used) continue;
		for (i=0;i<8;i++) {
			if (mac_addr_tbl[nt_ptr->map_index].laddr[i] != ptr->bytes[i]) break;
		}
		if (i == 8)	return(nt_ptr);
	}
	return(NULL);
}



//Init neighbor table. Called when Network is formed by
//coordinator or when a Router successfully joins a network.
//this also initializes the address table map
void ntInitTable(void) {
	NAYBORENTRY *nt_ptr;
	BYTE j;
	
	nt_ptr = &mac_nbr_tbl[0];
	for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		nt_ptr->flags.val = 0;
	}
	ntInitAddressMap();	
}

void ntInitAddressAssignment(void){
    //also initialize ADDRESS assignment
	mac_pib.ChildRFDs = 0;
	mac_pib.ChildRouters = 0;
	mac_pib.nextChildRFD = macGetShortAddr() + 1+ ntGetCskip(mac_pib.depth+1)*(LRWPAN_MAX_ROUTERS_PER_PARENT);
	mac_pib.nextChildRouter = macGetShortAddr() + 1;
}



//adds a neighbor, and assigns a new SADDR
SADDR ntAddNeighbor(BYTE *ptr, BYTE capinfo) {
	NAYBORENTRY *nt_ptr;
	BYTE j;
	BYTE *tmpptr;

	//First, find free entry in neighbor table
    nt_ptr = &mac_nbr_tbl[0];
	for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		if (!nt_ptr->flags.bits.used) break;
	}
	if (j== NTENTRIES) return(LRWPAN_BCAST_SADDR);//error, no room

	//now find free entry in address map table
	for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) break;
	}
	if (j== LRWPAN_MAX_ADDRESS_MAP_ENTRIES) return(LRWPAN_BCAST_SADDR);//error, no room
    nt_ptr->map_index = j;
	nt_ptr->flags.bits.used = 1;
	nt_ptr->flags.bits.lqi = 0;
	nt_ptr->capinfo = capinfo;

	//now new saddr
	if (LRWPAN_GET_CAPINFO_DEVTYPE(capinfo)) {
		mac_addr_tbl[nt_ptr->map_index].saddr = mac_pib.nextChildRouter;
		mac_pib.nextChildRouter += ntGetCskip(mac_pib.depth+1);
		mac_pib.ChildRouters++;
	}else {
		mac_addr_tbl[nt_ptr->map_index].saddr = mac_pib.nextChildRFD;
        mac_pib.nextChildRFD++;
		mac_pib.ChildRFDs++;
	}
	//now copy long addr
	tmpptr = &mac_addr_tbl[nt_ptr->map_index].laddr[0];
	for(j=0;j<8;j++) {
		*tmpptr = *ptr;
		tmpptr++; ptr++;
	}
	return(mac_addr_tbl[nt_ptr->map_index].saddr);
}




//determine where this packet is going based on its short address
SADDR ntFindNewDst(SADDR dstSADDR){
	SADDR tmpSADDR;
	NAYBORENTRY *nt_ptr;
	BYTE j;

  if (dstSADDR == macGetShortAddr()) {
	  //trying to send to myself, this is an error
	  return(0xFFFF);
	}
  //if destination is coordinator, has to go to our parent
  if (dstSADDR == 0) return(mac_pib.macCoordShortAddress);
  // See if this destination is within my routing range
  // if not, then have to send it to my parent
#ifndef LRWPAN_COORDINATOR
  //do not check this for coordinator, as all nodes in range of coordinator.
  tmpSADDR = ntGetMaxSADDR(macGetShortAddr(),mac_pib.depth+1);
  if (!((dstSADDR > macGetShortAddr()) &&
	  (dstSADDR <= tmpSADDR))) {
		  //not in my range, must go to parent.
		  return(mac_pib.macCoordShortAddress);
	  }
#endif

  //goes to one of my children, check out each one.	  	
  nt_ptr = &mac_nbr_tbl[0];

  for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		if (!nt_ptr->flags.bits.used) continue;
		if (LRWPAN_GET_CAPINFO_DEVTYPE(nt_ptr->capinfo)) {
			//router. check its range, the range is mac_pib.depth+2 because we need
			//the depth of the my child's child (grandchild).
			tmpSADDR = ntGetMaxSADDR(mac_addr_tbl[nt_ptr->map_index].saddr,mac_pib.depth+2);
			if ((dstSADDR >= mac_addr_tbl[nt_ptr->map_index].saddr) && (dstSADDR <= tmpSADDR)) {
				//either for my child router or one of its children.
				return(mac_addr_tbl[nt_ptr->map_index].saddr);
			}
		}else {
			//if for a non-router child, return
			if (dstSADDR == mac_addr_tbl[nt_ptr->map_index].saddr) return(mac_addr_tbl[nt_ptr->map_index].saddr);
		}
  }
  //if get here, then packet is undeliverable
  return(0xFFFF);
}


#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品影视| 日本成人中文字幕在线视频| www.欧美色图| 国产精品国产三级国产| 91美女精品福利| 亚洲综合免费观看高清完整版 | 国产传媒久久文化传媒| 国产欧美久久久精品影院| 91日韩精品一区| 亚瑟在线精品视频| 久久久99精品免费观看不卡| av电影在线观看一区| 亚洲成人免费视频| 久久在线免费观看| 色综合视频一区二区三区高清| 亚洲国产欧美日韩另类综合 | 国产精品18久久久久| 18欧美亚洲精品| 日韩一级二级三级| 99久久精品免费精品国产| 亚洲成a人v欧美综合天堂下载| 日韩免费高清电影| 97se亚洲国产综合在线| 日韩国产精品大片| 国产精品成人免费在线| 91精品国产麻豆国产自产在线| 国产一区二区免费看| 夜夜操天天操亚洲| 久久综合久久99| 91福利国产成人精品照片| 精品综合免费视频观看| 亚洲精品五月天| 久久午夜羞羞影院免费观看| 91国产免费看| 成人综合婷婷国产精品久久| 天天射综合影视| 亚洲免费av高清| 国产亚洲欧洲997久久综合| 正在播放一区二区| 一本大道久久精品懂色aⅴ| 精品一区二区国语对白| 亚洲一区二区精品久久av| 中文字幕在线视频一区| 精品999在线播放| 欧美精选午夜久久久乱码6080| eeuss影院一区二区三区| 精品一区二区三区久久久| 亚洲国产一区二区视频| 日韩久久一区二区| 国产人成亚洲第一网站在线播放 | 久久综合色综合88| 91麻豆精品国产91久久久资源速度| 成人精品一区二区三区四区 | 国产精品久久久爽爽爽麻豆色哟哟| 91精品国产综合久久精品性色| 99久久亚洲一区二区三区青草 | 久久99久久99| 日本免费在线视频不卡一不卡二 | 日韩精品一区二| 56国语精品自产拍在线观看| 91久久久免费一区二区| www.亚洲精品| 懂色av一区二区夜夜嗨| 国产福利一区二区三区视频在线| 久久超级碰视频| 久久国产精品99久久人人澡| 另类欧美日韩国产在线| 蜜臀久久久久久久| 久色婷婷小香蕉久久| 青青草97国产精品免费观看| 视频一区二区三区在线| 日韩精品一区第一页| 香蕉成人啪国产精品视频综合网| 亚洲一区中文日韩| 亚洲国产精品一区二区尤物区| 亚洲一区视频在线观看视频| 亚洲图片欧美色图| 日韩和的一区二区| 毛片不卡一区二区| 国产综合色在线视频区| 国产成人av在线影院| av中文一区二区三区| 在线国产电影不卡| 4438亚洲最大| 久久影院午夜片一区| 中文字幕不卡的av| 最新中文字幕一区二区三区 | 日韩黄色小视频| 久久超碰97中文字幕| 国产精品亚洲а∨天堂免在线| 国产精品一区二区久久精品爱涩 | av欧美精品.com| 在线看一区二区| 欧美精品国产精品| 欧美成人乱码一区二区三区| 精品日本一线二线三线不卡| 国产色婷婷亚洲99精品小说| 亚洲日本韩国一区| 日精品一区二区三区| 国产成人在线视频网站| 色综合视频一区二区三区高清| 7777精品伊人久久久大香线蕉经典版下载| 欧美日韩国产123区| 欧美精品一区二区久久婷婷| 中文天堂在线一区| 亚洲一区在线观看网站| 麻豆精品视频在线| 97精品国产97久久久久久久久久久久 | 不卡视频一二三四| 欧美日韩免费视频| 国产三级精品视频| 亚洲最色的网站| 狠狠色综合日日| 一本色道久久综合亚洲91| 欧美一级片在线观看| 国产精品久久久久久妇女6080| 婷婷久久综合九色综合绿巨人| 国产麻豆91精品| 欧美精品1区2区3区| 国产精品婷婷午夜在线观看| 午夜精品在线视频一区| 国产99久久久国产精品| 欧美精品日韩一区| 成人欧美一区二区三区1314| 六月丁香综合在线视频| 欧美亚一区二区| 中文无字幕一区二区三区| 日韩av电影一区| 色老汉av一区二区三区| 26uuu精品一区二区在线观看| 亚洲一区二区三区四区不卡 | 99国产欧美另类久久久精品| 日韩亚洲欧美成人一区| 亚洲精品视频在线观看免费| 韩国欧美一区二区| 欧美男生操女生| 亚洲人成网站色在线观看 | eeuss鲁一区二区三区| 亚洲精品一区二区精华| 婷婷一区二区三区| 色视频成人在线观看免| 国产精品久久国产精麻豆99网站| 日韩不卡一二三区| 欧美色区777第一页| 一区二区三区在线看| 成人美女视频在线看| 国产视频一区在线播放| 国内成+人亚洲+欧美+综合在线 | 国产传媒一区在线| 精品国产欧美一区二区| 日本va欧美va精品发布| 欧美视频精品在线观看| 亚洲女人小视频在线观看| 99re热这里只有精品视频| 中文字幕乱码一区二区免费| 国产美女娇喘av呻吟久久| 欧美成人aa大片| 韩国成人在线视频| 欧美tickle裸体挠脚心vk| 美女视频网站久久| 欧美一级二级三级蜜桃| 石原莉奈在线亚洲三区| 777色狠狠一区二区三区| 秋霞电影网一区二区| 91精品国产全国免费观看| 婷婷国产v国产偷v亚洲高清| 欧美日韩国产首页在线观看| 亚洲成人免费观看| 欧美一级夜夜爽| 久久精品久久精品| 久久久蜜臀国产一区二区| 国产大片一区二区| 亚洲三级在线观看| 在线日韩国产精品| 亚洲va天堂va国产va久| 欧美一区二区黄色| 久久草av在线| 欧美国产一区二区在线观看| 国产成人自拍在线| 日韩理论片网站| 欧美视频在线一区二区三区| 日韩精品一二三四| 久久综合狠狠综合久久综合88| 福利一区二区在线| 亚洲欧美日韩国产另类专区| 欧美无砖砖区免费| 久久99热这里只有精品| 国产精品视频麻豆| 欧美亚一区二区| 狠狠色综合日日| 亚洲色图一区二区| 777午夜精品免费视频| 国产黄人亚洲片| 亚洲免费观看高清完整版在线| 制服.丝袜.亚洲.中文.综合| 国产精品综合在线视频| 一区二区三区四区在线播放| 欧美一区二区三区爱爱| aaa欧美色吧激情视频| 三级影片在线观看欧美日韩一区二区|