*new time sync api implementation
This commit is contained in:
@@ -32,20 +32,22 @@
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**
|
/**
|
||||||
* @brief a slot alignment, base on physical layer information.
|
* @brief Get time deviation to the specified frame and slot number.
|
||||||
*
|
*
|
||||||
* @param instPtr a pointer to linklayer layer instance
|
* @param instPtr a pointer to linklayer layer instance
|
||||||
* @param frameNum
|
* @param frameNum
|
||||||
* @param slotNum
|
* @param slotNum
|
||||||
|
* @param relative
|
||||||
|
* @param timeDev
|
||||||
*
|
*
|
||||||
* @return SUCCESS Initialize successfully.
|
* @return SUCCESS
|
||||||
* FAILURE Initialization failed, allocate memory fail or initial
|
* EIGNORE there is no received frame
|
||||||
* bram controller fail.
|
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
// TODO: Check
|
int32_t L2_GetTimeDeviation(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool relative, int64_t *timeDev)
|
||||||
int32_t L2_TimeAlign(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool relative)
|
|
||||||
{
|
{
|
||||||
|
ASSERT(instPtr != NULL);
|
||||||
|
ASSERT(timeDev != NULL);
|
||||||
L1_FRAME_TYPE lastRecvdFrame;
|
L1_FRAME_TYPE lastRecvdFrame;
|
||||||
lastRecvdFrame = Phy_GetLastRecvFrameType(instPtr->config.phyInstPtr);
|
lastRecvdFrame = Phy_GetLastRecvFrameType(instPtr->config.phyInstPtr);
|
||||||
if (lastRecvdFrame == L1_NONE_FRAME)
|
if (lastRecvdFrame == L1_NONE_FRAME)
|
||||||
@@ -57,8 +59,7 @@ int32_t L2_TimeAlign(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool
|
|||||||
DBG_INFO("Starting TimeAlign operation...\n");
|
DBG_INFO("Starting TimeAlign operation...\n");
|
||||||
// read nextSendTime from physical layer
|
// read nextSendTime from physical layer
|
||||||
uint64_t currTime, expectTime;
|
uint64_t currTime, expectTime;
|
||||||
int64_t timeDiff;
|
TIME_WORD timeStamp;
|
||||||
TIME_WORD timeStamp, slotTimerAdjmet;
|
|
||||||
expectTime = ((uint64_t)(frameNum * L2_SLOTS_PER_FRAME + slotNum)) * TIME_FRAC_MAX;
|
expectTime = ((uint64_t)(frameNum * L2_SLOTS_PER_FRAME + slotNum)) * TIME_FRAC_MAX;
|
||||||
expectTime += Phy_GetTimeComp(lastRecvdFrame);
|
expectTime += Phy_GetTimeComp(lastRecvdFrame);
|
||||||
|
|
||||||
@@ -71,10 +72,27 @@ int32_t L2_TimeAlign(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool
|
|||||||
currTime = (uint64_t)timeStamp.frac_part;
|
currTime = (uint64_t)timeStamp.frac_part;
|
||||||
currTime += ((uint64_t)timeStamp.int_part) * TIME_FRAC_MAX;
|
currTime += ((uint64_t)timeStamp.int_part) * TIME_FRAC_MAX;
|
||||||
|
|
||||||
timeDiff = (int64_t)(expectTime - currTime);
|
*timeDev = (int64_t)(expectTime - currTime);
|
||||||
|
|
||||||
slotTimerAdjmet.int_part = (uint32_t)(timeDiff / TIME_FRAC_MAX);
|
|
||||||
slotTimerAdjmet.frac_part = (uint32_t)(timeDiff % TIME_FRAC_MAX);
|
|
||||||
TimeCtrl_TimeAdjust(instPtr->config.tmcInstPtr, &slotTimerAdjmet, TM_ADJ_ADD);
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**
|
||||||
|
* @brief Implement time adjustment by applying time deviation.
|
||||||
|
*
|
||||||
|
* @param instPtr a pointer to linklayer layer instance
|
||||||
|
* @param timeDev
|
||||||
|
*
|
||||||
|
* @return NONE
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
void L2_TimeAdjust(L2_INST *instPtr, const int64_t *timeDev)
|
||||||
|
{
|
||||||
|
ASSERT(instPtr != NULL);
|
||||||
|
ASSERT(timeDev != NULL);
|
||||||
|
TIME_WORD slotTimerAdjmet;
|
||||||
|
slotTimerAdjmet.int_part = (uint32_t)(*timeDev / TIME_FRAC_MAX);
|
||||||
|
slotTimerAdjmet.frac_part = (uint32_t)(*timeDev % TIME_FRAC_MAX);
|
||||||
|
TimeCtrl_TimeAdjust(instPtr->config.tmcInstPtr, &slotTimerAdjmet, TM_ADJ_ADD);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user