⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple_nwk.c

📁 用于WSN的PDA搜救器
💻 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 + -