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

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

?? unet.c

?? Zigbee模塊的詳細電路原理圖和C代碼.rar
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*******************************************************************************

       UBEC (Uniband Electronic Corp.)

       Project: U-NET01, Ubiquitous network platform

       File: unet.c

       Version: 0.1.2

       Usage: Unet api & unet sub function

       Platform: U-NET01 DK with IAR 8051 C compiler

       Reference:

               Silicon Laboratories: C8051F124

               UBEC: UZ2400

       Note :

               Copyright (C) 2007 Uniband Electronic Corporation, All rights reserved

********************************************************************************/

#include ".\zigbee\unet.h"


UNET_SYS UnetSys;
UINT8 MAC_ADDRESS[8] = {0x11, 0x11, 0x18, 0x11, 0xaa, 0xbb, 0xcc, 0xdd};

MSG_QUEUE CommQueue; // Mac command queue
MSG_QUEUE DataQueue; // Mac data queue
UINT8 RF_RX_BUFF[128+16]; // RF receive buffer
UINT8 RF_TX_BUFF[128]; // RF transmit buffer

/*******************************************************************************/

void unet_active_scan(BOOL AUTO);
UINT8 unet_tx_bcn_req(void);
UINT8 unet_tx_asso_req(void);
UINT16 compute_Cskip(INT8 depth);
UINT16  compute_Parent(INT8 depth, UINT16 Parent);
void unet_init();
UINT8 unet_check_child(UINT16 NwkAddr, struct _child_list_ **CurrPtr);
UINT8 unet_tree_routing(MAC_DATA_PKT *MsgPtr);
INT8 unet_queue_proc(UINT8 frequency, MSG_QUEUE *QueuePtr);
void unet_proc(void);
UINT8 unet_self_healing();
UINT8 unet_tx_pback(UINT16 NwkAddr);

void clear_table(void **HeadAddr);
void *insert_node(void **HeadAddr, void **TailAddr, UINT8 Type);


/*******************************************************************************

	Unet Function
					
********************************************************************************/

void INIT_UNET(){

#ifdef CONSOLE
//	InitUART(); // Uart Initial
#endif

	InitSPI(); //SPI Initial
	UzInit(); //RF Initial
	
#ifdef PAOPEN	
	UzEnablePA();
#endif

	UzSetMacAddress(MAC_ADDRESS); //MAC Address

	unet_init(); //UNET Initial

//	EnabMcuInt(); //Interrupt
}


UINT8 ESTABLISH_UNET(UINT16 PanId, UINT8 Channel)
{
	struct _beacon_list_ *TmPtr;

	if(PanId > 0x3fff) 
          return PANID_INVALID;

	if(Channel > 26 || Channel < 11) 
		return CHANNEL_INVALID;

	UnetSys.JoinPID = PanId;	
	UnetSys.Channel = Channel;
	
	unet_active_scan(0); // Active Scan

	TmPtr = UnetSys.BcnHead;
 
	while(TmPtr != NULL){ // Check received beacon
		if(TmPtr->Channel == Channel && TmPtr->PID == PanId) 
			return PAN_ID_CONFLICT;

		TmPtr = TmPtr->Next;
	}

	UnetSys.NwkAddr = UNET_COORD_ADDRESS; // Coordinator default address
	UnetSys.DevDep = 0;
	UnetSys.NextAddr = UnetSys.NwkAddr + 1;
	UnetSys.AddrInc = compute_Cskip(UnetSys.DevDep);
	UnetSys.BcnPayload.DevDep = UnetSys.DevDep; 
	UnetSys.BcnPayload.EndevCap = 1;
	UnetSys.BcnPayload.ProtID = 0;
	UnetSys.BcnPayload.ProtVer = 0x01;
	UnetSys.BcnPayload.StackPro = 0;
	UnetSys.BcnPayload.RouterCap = 1;
	UnetSys.BcnPayload.Rvd0 = 0;
	UnetSys.Flag.JoinNetwork = 1;
	UnetSys.Flag.PanCoordinator = 1;
	
	UnetSys.Coordinator = 1;
	
	clear_table((void *) &UnetSys.BcnHead);
	
	UzSetPanId(PanId);
	UzSetChannel(Channel);
	UzSetNwkAddr(UnetSys.NwkAddr);
	UzSetCoordinator();
	
	return SUCCESS;

}


UINT8 JOIN_UNET(UINT16 PanId, UINT8 Channel)
{
	struct _beacon_list_ *BcnPtr;
	UINT8 rssi = 0, count = 0, State;

	if(PanId > 0x3fff) 
		return PANID_INVALID;

	if(Channel > 26 || Channel < 11) 
		return CHANNEL_INVALID;

	UnetSys.JoinPID = PanId;	
	UnetSys.Channel = Channel;

	UzSetPanId(PanId);
	//UzSetChannel(Channel);
	
	while(1)
	{
		unet_active_scan(0); // Active Scan
	
		BcnPtr = UnetSys.BcnHead;
	
		while(BcnPtr != NULL)
		{
			if(BcnPtr->Channel == Channel && BcnPtr->PID == PanId && (BcnPtr->SfSpec & 0x8000) && BcnPtr->LinkQuality > rssi && BcnPtr->DevDep < UNET_MAX_DEPTH)
			{
				rssi = BcnPtr->LinkQuality;
				UnetSys.JoinParent = BcnPtr->Addr;
				UnetSys.DevDep = BcnPtr->DevDep + 1;
				UnetSys.Flag.FindNetwork = 1;		
			}
			BcnPtr = BcnPtr->Next;
		}
			
		if(UnetSys.Flag.FindNetwork)
		{
			UnetSys.Flag.FindNetwork = 0; //Clear flag
	
			clear_table((void *) &UnetSys.BcnHead);
	
			//UzSetPanId(PanId);
			UzSetChannel(Channel);
		
			while(!unet_tx_asso_req()) // Send association request
				WaitMS(20);
			 
			while(!UnetSys.Flag.RecvAssoRsp) // Wait association response
				unet_proc();
			
			UnetSys.Flag.RecvAssoRsp = 0; // Clear flag
	
			if(UnetSys.Flag.AssoSuccess)
			{ //Check associate result
				UnetSys.Flag.AssoSuccess = 0; // Clear flag
				
				UnetSys.NextAddr = UnetSys.NwkAddr + 1;
				UnetSys.AddrInc = compute_Cskip(UnetSys.DevDep);
				UnetSys.BcnPayload.DevDep = UnetSys.DevDep; 
				UnetSys.BcnPayload.EndevCap = 1;
				UnetSys.BcnPayload.ProtID = 0;
				UnetSys.BcnPayload.ProtVer = 0x01;
				UnetSys.BcnPayload.StackPro = 0;
				UnetSys.BcnPayload.RouterCap = 1;	
				UnetSys.BcnPayload.Rvd0 = 0;
				UnetSys.Flag.JoinNetwork = 1;
				UnetSys.Flag.Router = 1;
				
				UnetSys.Coordinator = 0;
				
				UzSetNwkAddr(UnetSys.NwkAddr);
				return SUCCESS;
			}
			return FAILURE;
		}
		else
		{
			count ++;
			if(count > 5)
			{
				State = ESTABLISH_UNET( PanId, Channel );
				if(State != SUCCESS)
				{
					return State;
				}
				break;
			}
		}
	}
	return SUCCESS;
}


UINT8 SEND_TO_UNET(UINT16 DstAddr, UINT8 *DataPtr, UINT8 Length)
{
	MAC_DATA_PKT *TxPtr;
    UINT8 i;
        
TX_DATA_LABEL:

	if(Length > MAC_MAX_DATA_PAYLOAD_LENGTH -3)
		return DATA_TOO_LONG; // 3: Radius, Network Source address and Destination address

	TxPtr = (MAC_DATA_PKT *) RF_TX_BUFF;

	TxPtr->MHR.Header.val = 0x8801;
	TxPtr->MHR.Seqnum = UnetSys.MacDSN;
	UnetSys.MacDSN++;
	TxPtr->MHR.DstPID = UnetSys.JoinPID;
	TxPtr->MHR.SrcPID = UnetSys.JoinPID;
	TxPtr->MHR.SrcAddr = UnetSys.NwkAddr;
	TxPtr->Radius = UNET_MAX_DEPTH*2;
	TxPtr->NwkDstAddr = DstAddr;
	TxPtr->NwkSrcAddr = UnetSys.NwkAddr;

	if(DstAddr == 0xffff)
	{
		TxPtr->MHR.DstAddr = 0xffff;	//廣播地址
	}
	else if(DstAddr == UnetSys.NwkAddr)
	{
		return DEST_IS_DEVSELF;
	}
	else
	{
		i = unet_tree_routing(TxPtr);

		if(i == NEXT_HOP_NOT_AVAILABLE)
		{  //Check the destination if allready link to devself by self-healing
			//if(!unet_check_child(TxPtr->NwkDstAddr, NULL))
			//	return NEXT_HOP_NOT_AVAILABLE;   // The destination does not link to devself
			TxPtr->MHR.DstAddr = TxPtr->NwkDstAddr; // Send to the child directly
		}
		else if(i == TREE_ROUTING_FAILED)
		{
			return TREE_ROUTING_FAILED;  
		}	
		TxPtr->MHR.Header.val |= 0x0020;
	}
	MSG_Copy(&RF_TX_BUFF[sizeof(MAC_DATA_PKT)], DataPtr, Length);
	
	if(UzTx(RF_TX_BUFF, sizeof(MAC_DATA_PKT) + Length)) return SUCCESS;

#ifndef I_Am_Coordinator
	
	if(TxPtr->MHR.DstAddr == UnetSys.JoinParent)
	{
		if(unet_self_healing() == SELF_HEAL_SUCCESS)
			goto TX_DATA_LABEL;
		
		return SELF_HEAL_FAILED; //Coordinator die
	}
#endif

	return NEXT_HOP_NOT_AVAILABLE;

}


UINT8 RECV_FROM_UNET(UINT8 *Buff){
	struct _data_list_ *TmPtr;
	UINT8 Length;

	if(UnetSys.DataCnt >0)
	{			
		TmPtr = UnetSys.DataHead;
		Length = TmPtr->Length;

		MSG_Copy(Buff, TmPtr->Msg, Length);

		UnetSys.DataHead = TmPtr->Next;
		UnetSys.DataCnt -= 1;
		
		MSG_Free(TmPtr->Msg);
		MSG_Free(TmPtr);
		
		return Length;
	}

	return 0;
}


UINT8 CHECK_UNET_DATA(){

	unet_proc();

	return UnetSys.DataCnt;
}


/*******************************************************************************

	Unet Sub Function
					
********************************************************************************/

void unet_init(){
	void *Temp;
	UINT8 *p;
	
	UnetSys.JoinPID = 0xffff; //Join pan id
	UnetSys.Channel = 0xff; // Join channel
	UnetSys.JoinParent = 0xffff; // Join parent address
	UnetSys.OrigParent = 0xffff; 
	UnetSys.JoinRouterCnt = 0; // Join router count
	UnetSys.JoinEndevCnt = 0; // Join end device count
	UnetSys.NwkAddr = 0xffff; // Network address (short address)
	UnetSys.DevDep = 0xff; // Device depth
	UnetSys.NextAddr = 0xff; // Next available short address
	UnetSys.AddrInc = 0xff; // Address increment
	UnetSys.MacBSN = 0; // Mac broadcast sequence number 
	UnetSys.MacDSN = 0; // Mac packet (Data or Command) sequence number
	
	*((UINT8 *) &UnetSys.IntFlag) = 0; // Interrupt Flag
//	*((UINT16 *) &UnetSys.Flag) = 0; // System Flag
	p = ((UINT8 *) &UnetSys.Flag); // System Flag
	*p = 0; // System Flag
	*(p+1) = 0;
	MSG_Init(&CommQueue);
	MSG_Init(&DataQueue);

	UnetSys.BcnHead = NULL;
	clear_table((void *) &UnetSys.BcnHead);
	clear_table((void *) &UnetSys.ChildHead);
	UnetSys.ChildHead = NULL;
	clear_table((void *) &UnetSys.BroHead);
	UnetSys.BroHead = NULL;

	while(UnetSys.DataHead != NULL){
		Temp = (void *) UnetSys.DataHead; // Temp = Head->Next
		UnetSys.DataHead = ((struct _data_list_ *) Temp)->Next; // Head = Temp-Next
		MSG_Free(((struct _data_list_ *) Temp)->Msg);
		MSG_Free(Temp);
	}
	UnetSys.DataHead = NULL;
	UnetSys.DataCnt = 0;
	
	stAddrList.ucAddrCont = 0;
	stCommandCFM.val = 0;
}


UINT8 unet_tx_bcn(){
	MAC_BCN_PKT *BcnPtr;

	//if(UnetSys.Flag.ChildFull)
	//	return DISCARD_FRAME;

	BcnPtr = (MAC_BCN_PKT *) RF_TX_BUFF;

	BcnPtr->Header.val = 0x8000;
	BcnPtr->SrcAddr = UnetSys.NwkAddr;
	BcnPtr->SrcPID = UnetSys.JoinPID;
	BcnPtr->Seqnum = UnetSys.MacBSN;
	UnetSys.MacBSN++;
	BcnPtr->GTSF = 0;
	BcnPtr->PASF = 0;

	MSG_Copy(&BcnPtr->PAYLOAD,  &UnetSys.BcnPayload, sizeof(MAC_BP));

	if(UnetSys.Flag.PanCoordinator){
		BcnPtr->SFS = 0xc00f;
	}else if(UnetSys.Flag.Router){
		BcnPtr->SFS = 0x800f;
	}
			
	if(UzTx(RF_TX_BUFF, sizeof(MAC_BCN_PKT)))
		return SUCCESS;

	return RETRY_EXCEED;
}


UINT8 unet_tx_bcn_req(void){
	MCP_BCN_REQ *CmdPtr;
	
	CmdPtr = (MCP_BCN_REQ *) RF_TX_BUFF;

	CmdPtr->Header.val = 0x0803;
	CmdPtr->DstAddr = 0xffff;
	CmdPtr->DstPID = 0xffff;
	CmdPtr->Seqnum = UnetSys.MacDSN;	
	UnetSys.MacDSN++;
	CmdPtr->COMM_ID = MT_BEACON_REQ;

	if(UzTx(RF_TX_BUFF, sizeof(MCP_BCN_REQ)))
		return SUCCESS;
	
	return RETRY_EXCEED;
}


UINT8 unet_rx_bcn_ind(MAC_BCN_PKT *BcnPkt, UINT8 Length){
	UINT8 *TmPtr;

	//if(UnetSys.Flag.JoinNetwork){
		// if realiment??
	//}

	TmPtr = (UINT8 *) BcnPkt;

	DBG_tag();

	if(insert_node((void *) &UnetSys.BcnHead ,(void *) &UnetSys.BcnTail, BEACON ) == NULL)
		return FAILURE;

       UnetSys.BcnTail->PID = BcnPkt->SrcPID;
	UnetSys.BcnTail->Addr = BcnPkt->SrcAddr;
	UnetSys.BcnTail->Channel = UnetSys.Channel;
	UnetSys.BcnTail->SfSpec = BcnPkt->SFS;
	UnetSys.BcnTail->DevDep = BcnPkt->PAYLOAD.DevDep;
////	UnetSys.BcnTail->LinkQuality = *(TmPtr+ sizeof(MAC_BCN_PKT) + 3); // 2 + 1 = FCS + LQI, (LinkQuality = RSSI)
	UnetSys.BcnTail->LinkQuality = UzReadRSSI();
	UnetSys.BcnTail->Next = NULL;
	
	return SUCCESS;
}


UINT8 unet_tx_asso_req(void){
	MCP_ASSO_REQ *AssoPtr;

	DBG_tag();

	AssoPtr = (MCP_ASSO_REQ *) RF_TX_BUFF;

	AssoPtr->Header.val = 0xc823;
	AssoPtr->SrcPID = UnetSys.JoinPID;

	MSG_Copy(AssoPtr->SrcAddr, MAC_ADDRESS, 8);
		
	AssoPtr->DstAddr = UnetSys.JoinParent;
	AssoPtr->DstPID = UnetSys.JoinPID;
	AssoPtr->Seqnum = UnetSys.MacDSN;	
	UnetSys.MacDSN++;
	AssoPtr->COMM_ID = MT_ASSO_REQ;
	//AssoPtr->Cap.val = 0xca;
	AssoPtr->Cap = 0xca;

	if(UzTx(RF_TX_BUFF, sizeof(MCP_ASSO_REQ)))
		return SUCCESS;

	return RETRY_EXCEED;
}

/****************************************************************************************
*  	Function: 
*  	Description: 處理連接請求命令幀
*  	Syntax: 
*	Modify: 
*	parameter:  無
*  	Returns:    無
*  	Notes: 
*	Date: 2007-04-03
*	Author: ZijianWang
****************************************************************************************/
UINT8 unet_rx_asso_req(MCP_ASSO_REQ *MsgPtr)
{
	struct _child_list_ *ChiPtr;
	MCP_ASSO_RSP *RsPtr;
	UINT8 i;
	
	DBG_tag();

	RsPtr = (MCP_ASSO_RSP *) RF_TX_BUFF;
	ChiPtr = UnetSys.ChildHead;
	while(ChiPtr != NULL)		//如果當前子節(jié)點指針里有東西,(即存在子節(jié)點)
	{
		if(memcmp(ChiPtr->MacAddr, MsgPtr->SrcAddr, 8) == 0) //且該子節(jié)點地址與收到的連接請求幀子地址一樣
		{
			RsPtr->ShortAddr = ChiPtr->NetworkAddress;
			RsPtr->AssoStatus = ASSOCIATION_SUCCESS;
			if(ChiPtr->Available == 0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜私人影院| 亚洲激情自拍偷拍| 91精品国产免费久久综合| 欧美最猛性xxxxx直播| 成人av免费在线播放| 成人午夜私人影院| 成人免费视频一区| 91视频在线观看| 日本高清无吗v一区| 欧美久久高跟鞋激| 91精品国产综合久久小美女| 日韩视频在线一区二区| 日韩欧美激情在线| 26uuu亚洲综合色欧美| 欧美激情综合网| 亚洲欧美aⅴ...| 日韩精品电影一区亚洲| 日本va欧美va瓶| 国产激情视频一区二区在线观看 | 亚洲人成网站色在线观看| 亚洲视频一二三| 亚洲成人在线观看视频| 免费成人美女在线观看| 国产成人免费xxxxxxxx| 91原创在线视频| 欧美一区二区日韩一区二区| 精品日韩欧美一区二区| 国产精品无码永久免费888| 亚洲男同1069视频| 韩国女主播成人在线观看| 99精品欧美一区二区三区小说| 欧亚一区二区三区| 欧美va亚洲va国产综合| 亚洲欧美日韩国产手机在线| 日本亚洲天堂网| 成人激情文学综合网| 欧美日韩久久久一区| 久久精品亚洲精品国产欧美| 亚洲综合偷拍欧美一区色| 激情综合色综合久久| 日本久久精品电影| 久久人人超碰精品| 日韩影院在线观看| 色婷婷综合久久久久中文| 亚洲精品在线电影| 婷婷成人激情在线网| 99久久99久久精品国产片果冻| 337p亚洲精品色噜噜| 国产精品亲子伦对白| 美女任你摸久久| 在线观看免费亚洲| 国产精品麻豆久久久| 麻豆一区二区在线| 欧美日韩在线观看一区二区 | 亚洲成av人片www| 成人网页在线观看| 日韩久久免费av| 亚洲韩国一区二区三区| 99久久久国产精品免费蜜臀| 国产午夜精品理论片a级大结局| 日本亚洲一区二区| 91精品国模一区二区三区| 亚洲成av人片在线观看| 精品视频1区2区3区| 亚洲私人影院在线观看| 国产精品一区二区三区四区| 日韩免费看的电影| 奇米影视在线99精品| 欧美日韩一区二区三区高清| 亚洲一区二区三区国产| 色婷婷亚洲综合| 亚洲自拍偷拍网站| 欧美调教femdomvk| 亚洲123区在线观看| 欧美日韩国产精品成人| 日韩国产欧美视频| 91精品国产福利| 日产国产高清一区二区三区| 91麻豆精品国产91久久久久久久久| 亚洲最大的成人av| 在线免费一区三区| 五月婷婷综合在线| 日韩一区二区高清| 国产一区啦啦啦在线观看| 久久人人爽爽爽人久久久| 成人免费视频caoporn| 亚洲视频你懂的| 在线观看成人小视频| 午夜视频在线观看一区二区| 3751色影院一区二区三区| 精品一区二区三区久久久| 久久奇米777| 一本一道波多野结衣一区二区| 亚洲人成网站影音先锋播放| 欧美精品vⅰdeose4hd| 久久精品国产久精国产| 中文字幕国产一区| 一本色道亚洲精品aⅴ| 亚洲国产日韩一级| 欧美精品一区二区三区蜜臀| 国产成人综合视频| 亚洲精品美腿丝袜| 欧美一区二区成人| 国产精品1024| 亚洲综合色丁香婷婷六月图片| 69成人精品免费视频| 国产精品夜夜嗨| 亚洲精品成人天堂一二三| 91精品国产麻豆国产自产在线 | 日韩欧美中文字幕制服| 粉嫩av一区二区三区| 亚洲午夜电影网| 久久奇米777| 欧美精品日韩一区| 高清国产一区二区三区| 国产高清成人在线| 亚洲免费观看在线视频| 日韩欧美久久久| 在线观看成人小视频| 国产乱人伦偷精品视频免下载| 亚洲一区二区三区在线看| 久久精品亚洲精品国产欧美| 欧美精品在线视频| 一本到不卡精品视频在线观看| 韩国av一区二区| 亚洲国产日韩av| 亚洲欧美中日韩| 欧美成人精品高清在线播放| 欧美午夜影院一区| 不卡电影一区二区三区| 国产精品中文字幕一区二区三区| 亚洲一区国产视频| 国产精品久久久久久久久果冻传媒| 欧美一级搡bbbb搡bbbb| 欧美自拍偷拍一区| 99re6这里只有精品视频在线观看| 免费在线观看视频一区| 丝袜脚交一区二区| 午夜亚洲福利老司机| 亚洲成年人网站在线观看| 一区二区三区在线看| 亚洲免费成人av| **欧美大码日韩| 亚洲欧洲性图库| 久久天堂av综合合色蜜桃网| 欧美电视剧在线观看完整版| 欧美日韩久久久一区| 欧美日韩成人在线| 欧美日韩免费视频| 欧美日韩国产色站一区二区三区| 91啪亚洲精品| 欧美在线看片a免费观看| 一本在线高清不卡dvd| 色老汉一区二区三区| 在线观看av不卡| 欧美三级三级三级爽爽爽| 欧洲一区二区av| 欧美三区在线观看| 91精品国产色综合久久| 日韩三级高清在线| 中文字幕人成不卡一区| 中文字幕在线观看一区二区| 国产精品乱码一区二区三区软件 | 成人免费视频在线观看| 亚洲色图一区二区三区| 亚洲精品国产视频| 天堂蜜桃一区二区三区| 久久er精品视频| 国产精品系列在线播放| 成人福利在线看| 欧美伊人精品成人久久综合97| 欧美日韩精品免费观看视频| 制服丝袜亚洲精品中文字幕| 久久综合久久99| 国产精品色呦呦| 亚洲国产毛片aaaaa无费看| 日韩和欧美一区二区三区| 国内精品久久久久影院薰衣草| 国产suv精品一区二区6| 91首页免费视频| 91精品国产一区二区人妖| 久久亚洲精品小早川怜子| 国产欧美日韩视频在线观看| 伊人色综合久久天天| 日韩一区精品字幕| 粉嫩aⅴ一区二区三区四区| 欧亚一区二区三区| 久久精品欧美日韩精品| 一区二区三区在线影院| 久久99久久久欧美国产| 99精品视频在线观看| 日韩一区二区三区三四区视频在线观看 | 国产精品久久久久久户外露出| 一区二区日韩电影| 国产成人三级在线观看| 欧美亚洲禁片免费| 国产视频一区不卡| 日韩精品一级中文字幕精品视频免费观看| 国产在线精品视频| 欧美巨大另类极品videosbest|