Compare commits

..
7 Commits
Author SHA1 Message Date
Gatsby Van 5c5a50e4ad update time sync api. 2023-12-26 11:04:15 +08:00
Gatsby Van b3451b6c0a adapted to new time sync api. 2023-12-26 11:03:57 +08:00
Gatsby Van f29ffb561d better print. 2023-12-26 11:03:19 +08:00
Gatsby Van 34dcdcd0f6 update time sync api. 2023-12-26 11:03:01 +08:00
Gatsby Van 4760abdb96 update net setup event implementation. 2023-12-26 11:02:48 +08:00
Gatsby Van c98472cad7 bugfix 2023-12-26 11:02:26 +08:00
Gatsby Van f2ce6897d2 better print. 2023-12-26 11:00:21 +08:00
7 changed files with 55 additions and 44 deletions
+17 -19
View File
@@ -75,11 +75,11 @@ int HARDWARE_initialize()
// /**********************************************************/ // /**********************************************************/
// Status = HW_ad9371DynamicCfgInit(); // Status = HW_ad9371DynamicCfgInit();
// if (Status != ADIERR_OK){ // if (Status != ADIERR_OK){
// xil_printf("HW:: AD9371 dynamic configuration initialization failed!\n"); // printf("HW:: AD9371 dynamic configuration initialization failed!\n");
// return ADIERR_FAILED; // return ADIERR_FAILED;
// } // }
// //
// xil_printf("HW:: AD9371 ready to be reconfigured!\n"); // printf("HW:: AD9371 ready to be reconfigured!\n");
// //
// // main loop // // main loop
// while(1); // while(1);
@@ -97,8 +97,6 @@ int HARDWARE_ad9371Config(void)
uint8_t obsFramerStatus; uint8_t obsFramerStatus;
uint8_t deframerStatus; uint8_t deframerStatus;
xil_printf("main: Hello\n");
/**********************************************************/ /**********************************************************/
/*********** Initialize Configuration Interface ***********/ /*********** Initialize Configuration Interface ***********/
/**********************************************************/ /**********************************************************/
@@ -112,7 +110,7 @@ int HARDWARE_ad9371Config(void)
return ADIERR_FAILED; return ADIERR_FAILED;
} }
xil_printf("HW:: Initialize configuration interface done!\n"); printf("HW:: Initialize configuration interface done!\n");
/**********************************************************/ /**********************************************************/
/****************** AD9528 Configuration ******************/ /****************** AD9528 Configuration ******************/
@@ -122,14 +120,14 @@ int HARDWARE_ad9371Config(void)
return ADIERR_FAILED; return ADIERR_FAILED;
} }
xil_printf("HW:: AD9528 configuration done!\n"); printf("HW:: AD9528 configuration done!\n");
Status = HW_9528GetLockStatus(ad9528Init, &reg508); Status = HW_9528GetLockStatus(ad9528Init, &reg508);
if (Status != ADIERR_OK){ if (Status != ADIERR_OK){
return ADIERR_FAILED; return ADIERR_FAILED;
} }
xil_printf("HW:: AD9528 REG508: 0x%02x \n",reg508); printf("HW:: AD9528 REG508: 0x%02x\n",reg508);
/**********************************************************/ /**********************************************************/
/****************** AD9371 Configuration ******************/ /****************** AD9371 Configuration ******************/
@@ -153,7 +151,7 @@ int HARDWARE_ad9371Config(void)
printf("HW:: DeframerStatus = 0x%x\n", deframerStatus); printf("HW:: DeframerStatus = 0x%x\n", deframerStatus);
} }
xil_printf("HW:: All configuration done!\n"); printf("HW:: All configuration done!\n");
return ADIERR_OK; return ADIERR_OK;
} }
@@ -232,13 +230,13 @@ int HW_setupIntrSystem(u16 DeviceId, XScuGic * GicPtr)
*/ */
CfgPtr = XScuGic_LookupConfig(DeviceId); CfgPtr = XScuGic_LookupConfig(DeviceId);
if (!CfgPtr) { if (!CfgPtr) {
xil_printf("No interrupt config found for %d\n", DeviceId); printf("No interrupt config found for %d\n", DeviceId);
return XST_FAILURE; return XST_FAILURE;
} }
Status = XScuGic_CfgInitialize(GicPtr, CfgPtr, CfgPtr->CpuBaseAddress); Status = XScuGic_CfgInitialize(GicPtr, CfgPtr, CfgPtr->CpuBaseAddress);
if (Status != XST_SUCCESS) { if (Status != XST_SUCCESS) {
xil_printf("No interrupt config found for %d\n", DeviceId); printf("No interrupt config found for %d\n", DeviceId);
return XST_FAILURE; return XST_FAILURE;
} }
@@ -810,7 +808,7 @@ int HW_9371SmallFrequencyChange(mykonosDevice_t *mykDevice, uint64_t freq_Hz)
*/ */
if((mykError = MYKONOS_radioOff(mykDevice)) != MYKONOS_ERR_OK) if((mykError = MYKONOS_radioOff(mykDevice)) != MYKONOS_ERR_OK)
{ {
xil_printf("Turn radio off failed!\n\r"); printf("Turn radio off failed!\n\r");
return ADIERR_FAILED; return ADIERR_FAILED;
} }
@@ -820,14 +818,14 @@ int HW_9371SmallFrequencyChange(mykonosDevice_t *mykDevice, uint64_t freq_Hz)
if((mykError = MYKONOS_setRfPllFrequency(mykDevice, TX_PLL, if((mykError = MYKONOS_setRfPllFrequency(mykDevice, TX_PLL,
freq_Hz)) != MYKONOS_ERR_OK) freq_Hz)) != MYKONOS_ERR_OK)
{ {
xil_printf("Set TX PLL failed!\n\r"); printf("Set TX PLL failed!\n\r");
return ADIERR_FAILED; return ADIERR_FAILED;
} }
mykError = MYKONOS_checkPllsLockStatus(mykDevice, &pllLockStatus); mykError = MYKONOS_checkPllsLockStatus(mykDevice, &pllLockStatus);
if ((pllLockStatus & 0x07) != 0x07) if ((pllLockStatus & 0x07) != 0x07)
{ {
/*** < Info: Clock, Rx and Tx PLLs not locked > ***/ /*** < Info: Clock, Rx and Tx PLLs not locked > ***/
xil_printf("Not all PLLs locked, lock status: 0x%02x\n", pllLockStatus); printf("Not all PLLs locked, lock status: 0x%02x\n", pllLockStatus);
} }
/* /*
@@ -836,7 +834,7 @@ int HW_9371SmallFrequencyChange(mykonosDevice_t *mykDevice, uint64_t freq_Hz)
// If((mykError = MYKONOS_resetExtTxLolChannel(mykDevice, TX1_TX2)) // If((mykError = MYKONOS_resetExtTxLolChannel(mykDevice, TX1_TX2))
// != MYKONOS_ERR_OK) ; //where TX1_TX2 is part of the enum mykonosTxChannels_t // != MYKONOS_ERR_OK) ; //where TX1_TX2 is part of the enum mykonosTxChannels_t
// { // {
// xil_printf("Reset external channel FAILED!"); // printf("Reset external channel FAILED!");
// } // }
/* /*
@@ -844,7 +842,7 @@ int HW_9371SmallFrequencyChange(mykonosDevice_t *mykDevice, uint64_t freq_Hz)
*/ */
if ((mykError = MYKONOS_radioOn(mykDevice)) != MYKONOS_ERR_OK) if ((mykError = MYKONOS_radioOn(mykDevice)) != MYKONOS_ERR_OK)
{ {
xil_printf("Turn radio on failed!\n\r"); printf("Turn radio on failed!\n\r");
return ADIERR_FAILED; return ADIERR_FAILED;
} }
@@ -854,7 +852,7 @@ int HW_9371SmallFrequencyChange(mykonosDevice_t *mykDevice, uint64_t freq_Hz)
// If((mykError = MYKONOS_MYKONOS_setObsRxPathSource(mykDevice, OBS_INTERNALCALS)) // If((mykError = MYKONOS_MYKONOS_setObsRxPathSource(mykDevice, OBS_INTERNALCALS))
// != MYKONOS_ERR_OK) ; //where TX1_TX2 is part of the enum mykonosTxChannels_t // != MYKONOS_ERR_OK) ; //where TX1_TX2 is part of the enum mykonosTxChannels_t
// { // {
// xil_printf("Reenable tracking calibrations FAILED!"); // printf("Reenable tracking calibrations FAILED!");
// } // }
return ADIERR_OK; return ADIERR_OK;
} }
@@ -877,7 +875,7 @@ int HW_9371LargeFrequencyChange(mykonosDevice_t *mykDevice, uint64_t freq_Hz)
*/ */
if((mykError = MYKONOS_radioOff(mykDevice)) != MYKONOS_ERR_OK) if((mykError = MYKONOS_radioOff(mykDevice)) != MYKONOS_ERR_OK)
{ {
xil_printf("Turn radio off failed!\n\r"); printf("Turn radio off failed!\n\r");
return ADIERR_FAILED; return ADIERR_FAILED;
} }
@@ -894,7 +892,7 @@ int HW_9371LargeFrequencyChange(mykonosDevice_t *mykDevice, uint64_t freq_Hz)
if ((pllLockStatus & 0x07) != 0x07) if ((pllLockStatus & 0x07) != 0x07)
{ {
/*** < Info: Clock, Rx and Tx PLLs not locked > ***/ /*** < Info: Clock, Rx and Tx PLLs not locked > ***/
xil_printf("Not all PLLs locked, lock status: 0x%02x\n", pllLockStatus); printf("Not all PLLs locked, lock status: 0x%02x\n", pllLockStatus);
} }
/* /*
@@ -957,7 +955,7 @@ int HW_9371LargeFrequencyChange(mykonosDevice_t *mykDevice, uint64_t freq_Hz)
*/ */
if ((mykError = MYKONOS_radioOn(mykDevice)) != MYKONOS_ERR_OK) if ((mykError = MYKONOS_radioOn(mykDevice)) != MYKONOS_ERR_OK)
{ {
xil_printf("Turn radio on failed!\n\r"); printf("Turn radio on failed!\n\r");
return ADIERR_FAILED; return ADIERR_FAILED;
} }
+2 -1
View File
@@ -859,6 +859,7 @@ int32_t Linklayer_EventHandler(L2_INST* instPtr, const L2_EVENT* l2Event) {
DBG_INFO("Event L2_EV_NETSETUP_DONE asserted....\n"); DBG_INFO("Event L2_EV_NETSETUP_DONE asserted....\n");
if(L2_GetNodeType(instPtr) != L2_NODE_HEAD){ if(L2_GetNodeType(instPtr) != L2_NODE_HEAD){
instPtr->cxn2Net = true; instPtr->cxn2Net = true;
instPtr->netStartTime = *((uint32_t*)l2Event->msg);
} }
else{ // Head node else{ // Head node
UpdateMainSate(instPtr, L2_NORMAL_STATE); UpdateMainSate(instPtr, L2_NORMAL_STATE);
@@ -997,7 +998,7 @@ int32_t Linklayer_PktHandler(L2_INST* instPtr, L2_FRAME_TYPE frameType) {
Status = ServiceNet_PktHandler(instPtr); Status = ServiceNet_PktHandler(instPtr);
break; break;
default: default:
DBG_WARNING("L2FrameHandler: UNKNOWN L2-FrameType %d", frameType); DBG_WARNING("L2FrameHandler: UNKNOWN L2-FrameType %d\n", frameType);
Status = FAILURE; Status = FAILURE;
break; break;
} }
+1 -1
View File
@@ -171,7 +171,7 @@ L2_FRAME_TYPE L2_GetNextFrameType(L2_INST* instPtr);
L2_TOR_TYPE L2_GetNextTor(L2_INST* instPtr); L2_TOR_TYPE L2_GetNextTor(L2_INST* instPtr);
// Time syncronization // Time syncronization
int32_t L2_TimeAlign(L2_INST* instPtr, uint32_t frameNum, uint32_t slotNum); int32_t L2_TimeAlign(L2_INST* instPtr, uint32_t frameNum, uint32_t slotNum, bool relative);
// RTT // RTT
int32_t RTT_Init(L2_RTT_FSM** rttFsmPtr); int32_t RTT_Init(L2_RTT_FSM** rttFsmPtr);
+3 -3
View File
@@ -425,7 +425,7 @@ static int32_t MgmtMsg_Packing(L2_INST* instPtr, BIT_ARRAY* bitarr, L2_MSG_TYPE
break; break;
default: default:
DBG_ERROR("Unsupported message type: %d", msgType); DBG_ERROR("Unsupported message type: %d\n", msgType);
return EPARAM; return EPARAM;
break; break;
} }
@@ -738,7 +738,7 @@ int32_t MgmtNet_PktHandler(L2_INST* instPtr) {
L2_RstNodeTTL(instPtr->nodeList, mgmtMsgLog->srcNodeId); L2_RstNodeTTL(instPtr->nodeList, mgmtMsgLog->srcNodeId);
// TODO: Check // TODO: Check
if(mgmtMsgLog->srcNodeId == L2_GetHeadId(instPtr)){ if(mgmtMsgLog->srcNodeId == L2_GetHeadId(instPtr)){
L2_TimeAlign(instPtr, L2_GetCurrentFrameNum(instPtr), L2_GetCurrentSlotNum(instPtr)); L2_TimeAlign(instPtr, L2_GetLastFrameNum(instPtr), L2_GetLastSlotNum(instPtr), true);
} }
break; break;
} }
@@ -853,7 +853,7 @@ int32_t MgmtNet_PktHandler(L2_INST* instPtr) {
L2_RstNodeTTL(instPtr->nodeList, rttMsgRspLog->srcAddr & 0x001F); L2_RstNodeTTL(instPtr->nodeList, rttMsgRspLog->srcAddr & 0x001F);
// TODO: Check // TODO: Check
if((rttMsgRspLog->srcAddr&0x001F) == L2_GetHeadId(instPtr)){ if((rttMsgRspLog->srcAddr&0x001F) == L2_GetHeadId(instPtr)){
L2_TimeAlign(instPtr, L2_GetCurrentFrameNum(instPtr), L2_GetCurrentSlotNum(instPtr)); L2_TimeAlign(instPtr, L2_GetLastFrameNum(instPtr), L2_GetLastSlotNum(instPtr), true);
} }
break; break;
} }
+25 -17
View File
@@ -647,7 +647,7 @@ int32_t ScanNet_PktHandler(L2_INST* instPtr) {
if ( L2_isCxn2Net(instPtr) == false ) { if ( L2_isCxn2Net(instPtr) == false ) {
// TODO: Check // TODO: Check
L2_TimeAlign(instPtr, scanFsmPtr->BMrcvLog.frameNum, scanFsmPtr->BMrcvLog.slotNum); L2_TimeAlign(instPtr, scanFsmPtr->BMrcvLog.frameNum, scanFsmPtr->BMrcvLog.slotNum, false);
} }
// trigger flag // trigger flag
BmrecvStateUpdate(scanFsmPtr, true); BmrecvStateUpdate(scanFsmPtr, true);
@@ -738,19 +738,22 @@ int32_t ScanNet_PktHandler(L2_INST* instPtr) {
// TODO: Update node information. // TODO: Update node information.
} }
if(L2_GetNodeType(instPtr) != L2_NODE_HEAD && scanFsmPtr->W2ACQrcvLog.NetStage != L2_NONE_STATE){ if(L2_GetNodeType(instPtr) != L2_NODE_HEAD){
// Update net start time
instPtr->netStartTime = scanFsmPtr->W2ACQrcvLog.NetScanTime;
// sync state with head node
L2_NODE_STATE newState = scanFsmPtr->W2ACQrcvLog.NetStage;
L2_EVENT stateUpEvent = {
.event = L2_EV_MAIN_STATE_UPDATE,
.msg = &newState
};
AssertL2Event(instPtr, &stateUpEvent);
// check if net setup finished. // check if net setup finished.
if(L2_GetMainState(instPtr) == L2_INIT_STATE && L2_isCxn2Net(instPtr) == false){ if(L2_GetMainState(instPtr) == L2_INIT_STATE && L2_isCxn2Net(instPtr) == false){
// Assert net setup done event...
uint32_t netStartTime = scanFsmPtr->W2ACQrcvLog.NetScanTime;
L2_EVENT netSetupDoneEvent = {
.event = L2_EV_NET_SETUP_DONE,
.msg = &netStartTime
};
AssertL2Event(instPtr, &netSetupDoneEvent);
// Update time sync since netStartTime updated.
L2_TimeAlign(instPtr, L2_GetLastFrameNum(instPtr), L2_GetLastSlotNum(instPtr), true);
// Assert update routine event...
L2_RTNE_CONFIG newRtneConfig = {0}; L2_RTNE_CONFIG newRtneConfig = {0};
L2_EVENT rtneUpEvent = { L2_EVENT rtneUpEvent = {
.event = L2_ROUTINE_UPDATE, .event = L2_ROUTINE_UPDATE,
@@ -766,12 +769,17 @@ int32_t ScanNet_PktHandler(L2_INST* instPtr) {
newRtneConfig.rtnePrd = ARRAY_SIZE(intraSeekTable); newRtneConfig.rtnePrd = ARRAY_SIZE(intraSeekTable);
AssertL2Event(instPtr, &rtneUpEvent); AssertL2Event(instPtr, &rtneUpEvent);
} }
L2_EVENT netSetupDoneEvent = {
.event = L2_EV_NET_SETUP_DONE,
.msg = NULL
};
AssertL2Event(instPtr, &netSetupDoneEvent);
} }
// sync state with head node
L2_NODE_STATE newState = scanFsmPtr->W2ACQrcvLog.NetStage;
L2_EVENT stateUpEvent = {
.event = L2_EV_MAIN_STATE_UPDATE,
.msg = &newState
};
AssertL2Event(instPtr, &stateUpEvent);
} }
break; break;
} }
+5 -1
View File
@@ -57,7 +57,7 @@ static void RTT_GetFrameStart(L2_INST* instPtr, TIME_WORD *tmStamp, L2_TOR_TYPE
* *
******************************************************************************/ ******************************************************************************/
// TODO: Check // TODO: Check
int32_t L2_TimeAlign(L2_INST* instPtr, uint32_t frameNum, uint32_t slotNum){ int32_t L2_TimeAlign(L2_INST* instPtr, uint32_t frameNum, uint32_t slotNum, bool relative){
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){
@@ -71,6 +71,10 @@ int32_t L2_TimeAlign(L2_INST* instPtr, uint32_t frameNum, uint32_t slotNum){
expctTime = ((uint64_t)(frameNum * L2_SLOTS_PER_FRAME + slotNum)) * TIME_FRAC_MAX; expctTime = ((uint64_t)(frameNum * L2_SLOTS_PER_FRAME + slotNum)) * TIME_FRAC_MAX;
expctTime += Phy_GetTimeComp(lastRecvdFrame); expctTime += Phy_GetTimeComp(lastRecvdFrame);
if(relative) {
expctTime += (uint64_t)instPtr->netStartTime * L2_SLOTS_PER_FRAME * TIME_FRAC_MAX;
}
Phy_GetFrameSyncTimeStamp(instPtr->config.phyInstPtr, &timeStamp); Phy_GetFrameSyncTimeStamp(instPtr->config.phyInstPtr, &timeStamp);
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;
+1 -1
View File
@@ -338,7 +338,7 @@ int MPC_StateUpload(MPC_INST* instPtr , uint8_t* mgmtBuffer , uint32_t mgmtMsgC
MPC_InsertChunk(mpcTxMsgBuff, STATE_STAGE_OFFSET, STATE_STAGE_LEN, dataChunk); MPC_InsertChunk(mpcTxMsgBuff, STATE_STAGE_OFFSET, STATE_STAGE_LEN, dataChunk);
// Net setup time // Net setup time
dataChunk = (L2_GetNextFrameNum(linkInstPtr) - linkInstPtr->netStartTime) * 1000 + L2_GetNextSlotNum(linkInstPtr) * 5 ; dataChunk = (L2_GetNextFrameNum(linkInstPtr) + linkInstPtr->netStartTime) * 1000 + L2_GetNextSlotNum(linkInstPtr) * 5 ;
MPC_InsertChunk(mpcTxMsgBuff, STATE_SETUP_TIME_OFFSET, STATE_SETUP_TIME_LEN, dataChunk); MPC_InsertChunk(mpcTxMsgBuff, STATE_SETUP_TIME_OFFSET, STATE_SETUP_TIME_LEN, dataChunk);
// number of nodes // number of nodes
dataChunk = L2_GetNodeListLen(linkInstPtr->nodeList); dataChunk = L2_GetNodeListLen(linkInstPtr->nodeList);