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

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

?? unet.c

?? 制作Zigbee模塊的詳細電路原理圖和C代碼
?? 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)		//如果當(dāng)前子節(jié)點指針里有東西,(即存在子節(jié)點)
	{
		if(memcmp(ChiPtr->MacAddr, MsgPtr->SrcAddr, 8) == 0) //且該子節(jié)點地址與收到的連接請求幀子地址一樣
		{
			RsPtr->ShortAddr = ChiPtr->NetworkAddress;
			RsPtr->AssoStatus = ASSOCIATION_SUCCESS;
			if(ChiPtr->Available == 0)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国产成人在线| 欧美日韩亚洲不卡| 日韩不卡一区二区三区| 国产日本亚洲高清| 91精品国产综合久久久久久| 国产成+人+日韩+欧美+亚洲| 亚洲成a人在线观看| 国产精品午夜在线| 不卡av电影在线播放| hitomi一区二区三区精品| 日韩电影一区二区三区| 亚洲欧洲精品一区二区三区| 精品国内二区三区| 在线观看视频一区| 成人免费av在线| 久草中文综合在线| 视频精品一区二区| 亚洲另类在线制服丝袜| 国产欧美日韩激情| 久久久精品黄色| 欧美一区二区福利视频| 欧洲av一区二区嗯嗯嗯啊| 成人禁用看黄a在线| 经典三级视频一区| 青草av.久久免费一区| 亚洲亚洲人成综合网络| 亚洲裸体xxx| 欧美国产综合一区二区| 久久亚洲欧美国产精品乐播| 这里只有精品免费| 欧美精品aⅴ在线视频| 在线观看亚洲精品| 91视视频在线观看入口直接观看www | 国产高清久久久| 精品一区二区三区欧美| 日本少妇一区二区| 日本不卡的三区四区五区| 午夜精品福利久久久| 亚洲午夜三级在线| 亚洲成人精品一区二区| 亚洲一线二线三线视频| 依依成人精品视频| 亚洲精品va在线观看| 一区二区三区成人在线视频| 亚洲永久免费视频| 亚洲国产精品麻豆| 午夜久久久久久| 日韩国产一二三区| 日本网站在线观看一区二区三区| 香蕉成人伊视频在线观看| 亚洲成人免费影院| 免费成人在线观看| 国产做a爰片久久毛片| 国产精品一区二区三区网站| 懂色中文一区二区在线播放| 97精品久久久午夜一区二区三区| 91日韩一区二区三区| 精品视频色一区| 欧美一卡2卡三卡4卡5免费| 日韩美女视频在线| 中文字幕国产一区二区| 17c精品麻豆一区二区免费| 亚洲美女屁股眼交3| 爽好多水快深点欧美视频| 精品伊人久久久久7777人| 国产风韵犹存在线视精品| 国产.精品.日韩.另类.中文.在线.播放 | 奇米色777欧美一区二区| 激情都市一区二区| 91在线免费视频观看| 欧美丰满高潮xxxx喷水动漫| 日韩欧美国产一区二区三区| 国产日本欧洲亚洲| 亚洲成人av在线电影| 精品亚洲欧美一区| 99re热这里只有精品免费视频| 欧美日韩一卡二卡| 久久精品欧美一区二区三区不卡| 亚洲欧洲精品天堂一级| 首页国产丝袜综合| 福利一区在线观看| 欧美色大人视频| 久久亚洲一级片| 亚洲成人动漫精品| 成人一区二区三区中文字幕| 欧美日韩中文字幕一区| 久久久99精品免费观看不卡| 一区二区三区日韩精品| 久草这里只有精品视频| 日本道免费精品一区二区三区| 日韩欧美国产高清| 亚洲小少妇裸体bbw| 丁香婷婷综合色啪| 欧美一区二区视频在线观看2020| 中文字幕av不卡| 另类小说综合欧美亚洲| 色天天综合色天天久久| 2021中文字幕一区亚洲| 亚洲图片有声小说| av网站一区二区三区| 精品第一国产综合精品aⅴ| 亚洲午夜羞羞片| 成人国产在线观看| 欧美zozo另类异族| 午夜视频久久久久久| 99久久精品费精品国产一区二区| 5566中文字幕一区二区电影| 亚洲男同性视频| 国产电影一区二区三区| 欧美一区二区日韩一区二区| 亚洲精品国产第一综合99久久 | 精品奇米国产一区二区三区| 亚洲综合在线五月| 成人天堂资源www在线| 日韩精品中文字幕一区| 亚洲va韩国va欧美va| 色婷婷精品大在线视频| 久久精品日韩一区二区三区| 久久99精品久久久久久动态图| 欧美日韩视频在线观看一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 日韩黄色一级片| 欧美性xxxxx极品少妇| 亚洲欧美日韩一区二区| 成人av先锋影音| 国产精品蜜臀av| 国产精品99精品久久免费| 精品免费一区二区三区| 美女视频网站久久| 日韩欧美www| 秋霞午夜av一区二区三区| 在线电影院国产精品| 婷婷中文字幕综合| 欧美日韩免费一区二区三区| 亚洲国产视频一区| 欧美精品乱人伦久久久久久| 亚洲一级不卡视频| 欧美色中文字幕| 午夜a成v人精品| 欧美一区二区免费观在线| 日本成人超碰在线观看| 日韩一区二区不卡| 久久国产人妖系列| 久久午夜老司机| 国产福利精品一区| 国产精品黄色在线观看| 91蜜桃婷婷狠狠久久综合9色| 一区在线播放视频| 91成人网在线| 日韩主播视频在线| 日韩三级视频在线观看| 狠狠色丁香久久婷婷综| 国产无人区一区二区三区| av不卡免费电影| 亚洲小说欧美激情另类| 日韩一区二区高清| 国产成人在线色| 亚洲三级在线看| 欧美日产在线观看| 久久99国产精品久久| 国产欧美日韩在线| 色av综合在线| 秋霞电影网一区二区| 久久精品亚洲精品国产欧美kt∨| 成人亚洲一区二区一| 亚洲一区二区三区免费视频| 日韩欧美一二区| 成人黄色av电影| 亚洲一级电影视频| 26uuuu精品一区二区| 99re8在线精品视频免费播放| 午夜精品成人在线视频| 欧美精品一区二| 一本一道综合狠狠老| 日本在线不卡视频| 国产女主播一区| 欧美美女喷水视频| 国产成人在线视频播放| 一区二区日韩av| 精品国产3级a| 在线观看成人免费视频| 国产一区二区三区四区五区美女| 日韩理论电影院| 精品国产sm最大网站| 色妹子一区二区| 经典三级视频一区| 亚洲国产裸拍裸体视频在线观看乱了| 精品国产免费久久| 欧美主播一区二区三区| 国产高清不卡一区| 亚洲国产日韩a在线播放| 国产午夜精品久久久久久久| 欧美日韩在线一区二区| 岛国精品在线播放| 日本不卡123| 一区二区三区成人在线视频| 国产日韩亚洲欧美综合| 欧美色精品天天在线观看视频| 成人免费毛片片v| 激情综合网av|