📄 simple_nwk.c
字号:
/* Description : nwk functions.
*
* $Author: 王琢玉
* $Date: 2007/02/23
* $Name: simple_nwk.c
*/
#define SIMPLE_NWK_GLOBALS
#include "include.h"
/********************************************
Globals
********************************************/
/************************************************************
Function: void NWKInit(void)
Parameter:
Return:
Description: Init the NWK
************************************************************/
void NWKInit(void)
{
}
/************************************************************
Function: void NWKTasks(void)
Parameter:
Return:
Description: check if there is any NWK task.
************************************************************/
void NWKTasks(void)
{
if(Zigbee_Flags.bits.MCPSDataIndication == 1)
{
NWK_FRAME_CONTROL frameControl;
UINT8 BroadcastRadio;
SADDR dstAddr;
Zigbee_Flags.bits.MCPSDataIndication = 0;
frameControl.u8Val = PHYGet();
if(frameControl.bits.FrameType == 0)
{
dstAddr.v[0] = PHYGet();
dstAddr.v[1] = PHYGet();
if((dstAddr.u16Val == Zigbee_PIB.MAC_PIB.aExtendedAddress.u16Val) || \
(dstAddr.u16Val == 0xffff))
{
//是发送给我的
params.NLDE_DATA_indication.SrcAddr.v[0] = PHYGet();
params.NLDE_DATA_indication.SrcAddr.v[1] = PHYGet();
BroadcastRadio = PHYGet();
Zigbee_Flags.bits.NLDEDataIndication = 1;
return;
}
if(dstAddr.u16Val != Zigbee_PIB.MAC_PIB.aExtendedAddress.u16Val)
{
//如果NWK目的地址不是给我的或者是广播帧
//如果NWK目的地址是广播 那么MAC地址也是广播,
if(params.MCPS_DATA_indication.DstAddr.u16Val == 0xffff)
{
if((RxBuffer[11] --) == 0)//如果广播半径为 0 丢弃该帧
{
Zigbee_Flags.bits.RxBufferIsUsed = 0;
return;
}
//广播半径大于0,修改 MAC 源地址后广播发送
RxBuffer[4] = Zigbee_PIB.MAC_PIB.aExtendedAddress.v[0];
RxBuffer[5] = Zigbee_PIB.MAC_PIB.aExtendedAddress.v[1];
// UsedSeqNum[SeqCounter ++] = RxBuffer[1];
params.PD_DATA_request.psdu = RxBuffer;//指向 RxBuffer 指向广播半径
params.PD_DATA_request.psduLength = params.PD_DATA_indication.psduLength + 9;
// N_milliSecondsDelay((UINT32)1000);
PDDataRequest();
}
else //否则 NWK的目的地址既不是我 也不是广播,那么进行路由
{
//if(我支持路由)
//{
// if(路由半径 > 1)
// {
// 路由
// }
}
Zigbee_Flags.bits.RxBufferIsUsed = 0;
}
}
}
}
/************************************************************
Function: UINT8 NLDEDataRequest(void)
Parameter:
Return: Status of Tx
Description: One data Packet is requested to transive by APL
************************************************************/
UINT8 NLDEDataRequest(void)
{
UINT8 status;
UINT8 psduLength;
UINT8 *psdu;
NWK_FRAME_CONTROL frameControl;
psduLength = params.PD_DATA_request.psduLength;
psdu = params.PD_DATA_request.psdu;
if(psdu == NULL) return 0;
*(-- psdu) = params.NLDE_DATA_request.BroadcastRadius;
psduLength ++;
*(-- psdu) = Zigbee_PIB.MAC_PIB.aExtendedAddress.v[1];
*(-- psdu) = Zigbee_PIB.MAC_PIB.aExtendedAddress.v[0];
psduLength += 2;
*(-- psdu) = params.NLDE_DATA_request.DstAddr.v[1];
*(-- psdu) = params.NLDE_DATA_request.DstAddr.v[0];
psduLength += 2;
frameControl.bits.FrameType = 0; //帧控制,数据帧
frameControl.bits.routeDiscovery = 0;//暂时不支持路由
*(-- psdu) = frameControl.u8Val ;
psduLength ++;
params.PD_DATA_request.psduLength = psduLength;
params.PD_DATA_request.psdu = psdu;
if(params.NLDE_DATA_request.BroadcastRadius > 0)//MAC广播
{
params.MCPS_DATA_request.DstAddr.u16Val = 0xffff;
}
else if(frameControl.bits.routeDiscovery == 0)//如果不支持路由
{
params.MCPS_DATA_request.DstAddr.u16Val = params.NLDE_DATA_request.DstAddr.u16Val;
}
else // frameControl.bits.routeDiscovery == 1
{
//暂时还不支持路由
return 0;
}
status = MCPSDataRequest();
return status;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -