📄 simple_mac.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 + -