📄 phy.c
字号:
#include "compiler.h"
#include "lrwpan_config.h" //user configurations
#include "lrwpan_common_types.h" //types common acrosss most files
#include "ieee_lrwpan_defs.h"
#include "hal.h"
#include "halStack.h"
#include "console.h"
#include "phy.h"
#include "evboard.h"
PHY_PIB phy_pib;
PHY_SERVICE a_phy_service;
PHY_STATE_ENUM phyState;
BYTE tmpTxBuff[LRWPAN_MAX_FRAME_SIZE];
void phyInit(void ) {
phyState = PHY_STATE_IDLE;
phy_pib.flags.val = 0;
phy_pib.flags.bits.txFinished=1;
}
void phyRxCallback(void)
{
}
void phyTxStartCallBack(void)
{
phy_pib.txStartTime = halGetMACTimer();
}
void phyFSM(void) {
switch (phyState)
{
case PHY_STATE_IDLE:
break;
case PHY_STATE_COMMAND_START:
switch(a_phy_service.cmd)
{
case LRWPAN_SVC_PHY_TX_DATA:
phy_pib.flags.bits.txFinished = 0;
a_phy_service.status =halSendPacket(phy_pib.currentTxFlen,tmpTxBuff);
if (a_phy_service.status == LRWPAN_STATUS_SUCCESS)
{
phyState = PHY_STATE_TX_WAIT;//TX started, wait for it to end.
}
else
{
DEBUG_STRING(1,"PHY: TX did not start\n");
phyState = PHY_STATE_IDLE;
}
break;
default: break;
}//end switch cmd
break;
case PHY_STATE_TX_WAIT: //wait for TX out of radio to complete or timeout
if (phy_pib.flags.bits.txFinished)
{
phyState = PHY_STATE_IDLE;
phyReleaseTxLock();
}
else if (halMACTimerNowDelta(phy_pib.txStartTime) > MAX_TX_TRANSMIT_TIME)
{
//DEBUG_STRING(1,"PHY: MAX_TX_TRANSMIT_TIME timeout\n");//should not happen, indicate an error to console
a_phy_service.status = LRWPAN_STATUS_PHY_TX_FINISH_FAILED;
phyState = PHY_STATE_IDLE;
phyReleaseTxLock();
}
break;
default: break;
}//end switch phyState
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -