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

📄 simple_mac.c

📁 用于WSN的PDA搜救器
💻 C
字号:
/* Description : phy functions.
 *
 * $Author: 王琢玉
 * $Date: 2007/02/23 
 * $Name:  simple_phy.c 
 */
 
 
#define   SIMPLE_MAC_GLOBALS

#include "include.h"


/************************************************************
Function:    void MACInit(void)

Parameter:   

Return:      
             
Description: Init the MAC.
************************************************************/
void MACInit(void)
{
    PHYInit();
    
    SeqCounter = 0;
    
    MySeqNum = TimeGet().v[3];
}

/************************************************************
Function:    void MACTasks(void)

Parameter:   

Return:      
             
Description: check if there is any MAC task.
************************************************************/
void MACTasks(void)
{
    if(Zigbee_Flags.bits.PDDataIndication == 1)
    {
        MAC_FRAME_CONTROL  frameControl;
        UINT8  sequenceNumber;
        
        frameControl.u8Val = PHYGet();
        sequenceNumber = PHYGet();
        
        Zigbee_Flags.bits.PDDataIndication = 0;
        
        if(frameControl.bits.FrameType == 1)
        {
           //目的 PANID
      //      params.MCPS_DATA_indication.DstPANId.v[0] = PHYGet();
      //      params.MCPS_DATA_indication.DstPANId.v[1] = PHYGet();
        
            //目的 地址
            params.MCPS_DATA_indication.DstAddr.v[0] = PHYGet();
            params.MCPS_DATA_indication.DstAddr.v[1] = PHYGet();
            
            //if(我不是目标地址) 丢弃,并且清空RxBuffer
            if((params.MCPS_DATA_indication.DstAddr.u16Val != Zigbee_PIB.MAC_PIB.aExtendedAddress.u16Val) && \
               (params.MCPS_DATA_indication.DstAddr.u16Val != 0xffff))
            {
                Zigbee_Flags.bits.RxBufferIsUsed = 0;
                return;
            }
            
            if(params.MCPS_DATA_indication.DstAddr.u16Val == 0xffff)
            {
                if((sequenceNumber == UsedSeqNum[0])||(sequenceNumber == UsedSeqNum[1])||(sequenceNumber == UsedSeqNum[2])||(sequenceNumber == UsedSeqNum[3])) 
                {
                    Zigbee_Flags.bits.RxBufferIsUsed = 0;
                    return;
                }
                
                UsedSeqNum[SeqCounter ++] = sequenceNumber;
                if(SeqCounter == 4)SeqCounter = 0;
            }
                        
            //源 PANID
      //      if(frameControl.bits.IntraPAN == 0)
      //      {
      //          params.MCPS_DATA_indication.SrcPANId.v[0] = PHYGet();
      //          params.MCPS_DATA_indication.SrcPANId.v[1] = PHYGet();
      //      }
      //      else
      //      {
      //          params.MCPS_DATA_indication.SrcPANId.u16Val = params.MCPS_DATA_indication.DstPANId.u16Val;
      //      }              
        
            //源 地址
            params.MCPS_DATA_indication.SrcAddr.v[0] = PHYGet();
            params.MCPS_DATA_indication.SrcAddr.v[1] = PHYGet();
            
            //加入邻居表
        
        //    params.MCPS_DATA_indication.msduLength = params.PD_DATA_indication.psduLength;
        //    params.MCPS_DATA_indication.msdu = params.PD_DATA_indication.psdu;
                
            Zigbee_Flags.bits.MCPSDataIndication = 1;
            
            return;
        }
        
    }
}

/************************************************************
Function:    UINT8 MCPSDataRequest(void)

Parameter:   

Return:      Status of Tx
             
Description: One data Packet is requested to transive by NWK   
************************************************************/
UINT8 MCPSDataRequest(void)
{
    UINT8                 status;
    UINT8                 psduLength;
    UINT8                 *psdu;
    MAC_FRAME_CONTROL     framecontrol;
    
    psduLength = params.PD_DATA_request.psduLength;
    psdu = params.PD_DATA_request.psdu;
    
    *(-- psdu) = Zigbee_PIB.MAC_PIB.aExtendedAddress.v[1];
    *(-- psdu) = Zigbee_PIB.MAC_PIB.aExtendedAddress.v[0];
    psduLength += 2;
    
    framecontrol.bits.IntraPAN = 1;
 //   if(params.MCPS_DATA_request.SrcPANId.u16Val != params.MCPS_DATA_request.DstPANId.u16Val)
 //   {
 //       framecontrol.bits.IntraPAN = 0;
        
 //       *(-- psdu) = params.MCPS_DATA_request.SrcPANId.v[1];
 //       *(-- psdu) = params.MCPS_DATA_request.SrcPANId.v[0];
 //       psduLength += 2;
 //   }
    
    *(-- psdu) = params.MCPS_DATA_request.DstAddr.v[1];
    *(-- psdu) = params.MCPS_DATA_request.DstAddr.v[0];
    psduLength += 2;
    
 //   *(-- psdu) = params.MCPS_DATA_request.DstPANId.v[1];
 //   *(-- psdu) = params.MCPS_DATA_request.DstPANId.v[0];
 //   psduLength += 2;
    
    //帧序列号
    *(-- psdu) = MySeqNum; 
    UsedSeqNum[SeqCounter ++] = MySeqNum;
    if(SeqCounter == 4) SeqCounter = 0;
    
    MySeqNum ++;
    
    psduLength ++;
    
    //帧控制字
    framecontrol.bits.FrameType = 1;
    
    *(-- psdu) = framecontrol.u8Val;
    psduLength ++;
    
    /* Send it to the phy for processing */
    params.PD_DATA_request.psdu = psdu;
    params.PD_DATA_request.psduLength = psduLength;
    
    status = PDDataRequest();
    
    return status;
}

/************************************************************
Function:    UINT8 MLMEPAValueSet(UINT8 u8PAValue)

Parameter:   u8PAValue   Value of power

Return:      Status
             
Description: Adjust the MC13192s Output power.
************************************************************/
UINT8 MLMEPAValueSet(UINT8 u8PAValue)
{
    UINT8 status;
    
    status = PLMEPAValueSet(u8PAValue);
    
    return status;
}

/************************************************************
Function:    UINT8 MLMESetChannelRequest(UINT8 u8Channel)

Parameter:   u8Channel        channel
                  0     :    2.405GHz
                  1     :    2.410GHz
                  2     :    2.415GHz
                  3     :    2.420GHz
                  4     :    2.425GHz
                  5     :    2.430GHz
                  6     :    2.435GHz
                  7     :    2.440GHz
                  8     :    2.445GHz
                  9     :    2.450GHz
                  10    :    2.455GHz
                  11    :    2.460GHz
                  12    :    2.465GHz
                  13    :    2.470GHz
                  14    :    2.475GHz
                  15    :    2.480GHz

Return:      
             
Description: Set the MC13192 operating channel
************************************************************/
void MLMESetChannelRequest(UINT8 u8Channel)
{
    PLMESetChannelRequest(u8Channel);
}

/************************************************************
Function:    UINT8 MLMERXEnableRequest(UINT32 u32Timeout)

Parameter:   u32Timeout   time of RX, 0 meams aways in RX mode

Return:      result of request
             
Description: set RF module to RX_MODE   
************************************************************/
UINT8 MLMERXEnableRequest(UINT32 u32Tickout)
{
    TICK currentTick;
    
   // if(gu8RTxMode != IDLE_MODE) return 0;
    
    if(u32Tickout > 0xffffff)
        u32Tickout = 0xffffff;
    
    //开中断
    if(u32Tickout != 0)
    {
        currentTick = TickGet();
        currentTick.u32Val += u32Tickout;
    
        SPIDrvWrite(T1_LO_ADDR,(UINT16)currentTick.u32Val);
        SPIDrvWrite(T1_LO_ADDR,(UINT16)((currentTick.u32Val >> 16) | 0x80000));
    }
    
    PLMESetTrxStateRequest(RX_MODE);
    
    return 1;
}

/************************************************************
Function:    UINT8 MLMERXDisableRequest(void)

Parameter:   

Return:      
             
Description: if RF is in Rx mode, change to idle 
************************************************************/
UINT8 MLMERXDisableRequest(void)
{
    if(gu8RTxMode != RX_MODE) return 0;
    
    //关中断
    SPIDrvWrite(T1_HI_ADDR, 0x8000); // Disables TC1 and clears IRQ  
    SPIDrvWrite(T1_LO_ADDR, 0x0000);
        
    PLMESetTrxStateRequest(IDLE_MODE);
    
    return 1;    
}

/************************************************************
Function:    void MLMESetMC13192ClockRate(UINT8 u8Freq)

Parameter:   u8Freq     Output Frequency
               0           16MHz (Recommended default)
               1            8MHz
               2            4MHz
               3            2MHz
               4            1MHz
               5            62.5kHz
               6            32.786kHz
               7            16.393kHz  
Return:      
             
Description: Set MC13192 CLKo frequency
************************************************************/
//void MLMESetMC13192ClockRate(UINT8 u8Freq)
//{
//    PLMESetMC13192ClockRate(u8Freq);
//}




/*
 * MLMEMC13192PAOutputAdjust : Adjust the Output power of the transmitter
 *
 * Parameters : pa_value - Course Value 
 *
 * Return : Status
 */
//UINT8 MLMEMC13192PAOutputAdjust(UINT8 u8PaValue)
//{
//}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -