diff --git a/datalink814_ge/src/linklayer/linklayer814.c b/datalink814_ge/src/linklayer/linklayer814.c index e3297c4..cf1b807 100644 --- a/datalink814_ge/src/linklayer/linklayer814.c +++ b/datalink814_ge/src/linklayer/linklayer814.c @@ -281,17 +281,6 @@ inline void L2_RcdShift(L2_RCD* rcd, int32_t netxVal) { * @return NONE. * ******************************************************************************/ -// FIXME: Only for test -int w2AcqRecvCnt = 0; -int w2AcqRecvSuccessCnt = 0; -int mgmtRecvCnt = 0; -int mgmtRecvSuccessCnt = 0; -int tsyncRecvCnt = 0; -int tsyncRecvSuccessCnt = 0; -int svcRecvCnt = 0; -int svcRecvSuccessCnt = 0; -int recvCnt = 0; -int frameLen = 0; void L2_FrameStateUpdate(L2_INST* instPtr) { ASSERT(instPtr != NULL); PHY_INST* phyRef = instPtr->config.phyInstPtr; @@ -304,58 +293,51 @@ void L2_FrameStateUpdate(L2_INST* instPtr) { DBG_INFO("A frame received, checking data validation...\n"); DBG_INFO("Last frame type is: %u.\n", instPtr->frame.last); Phy_RetrieveRecvData(phyRef, instPtr->recvPktData); + instPtr->log.frameRecv++; + switch (instPtr->frame.last) { case L2_INTRA_SCAN_FRAME: // INTRA_BM_FRAME could be received if current frame type is INTRA_BM_FRAME case L2_INTRA_BM_FRAME: + instPtr->log.bmRecvCnt++; if (L2_CrcCheck(instPtr->recvPktData, BM_MSG_CRC_OFFSET / 8, BM_MSG_CRC_OFFSET / 8, L2_CRC8_31) == true) { L2_DataAvailUpdate(instPtr, true); + instPtr->log.bmCorrectCnt++; } else { L2_DataAvailUpdate(instPtr, false); } break; case L2_INTRA_W2_ACQ_FRAME: - // FIXME: Only for test - w2AcqRecvCnt++; + instPtr->log.mgmtRecvCnt++; if (L2_CrcCheck(instPtr->recvPktData, W2ACQ_FRAME_CRC_DLEN, W2ACQ_FRAME_CRC_POS, L2_CRC16_8005) == true) { L2_DataAvailUpdate(instPtr, true); - // FIXME: Only for test - w2AcqRecvSuccessCnt++; + instPtr->log.mgmtCorrectCnt++; } else { L2_DataAvailUpdate(instPtr, false); } break; case L2_INTRA_MGMT_FRAME: - // FIXME: Only for test - mgmtRecvCnt++; - recvCnt ++ ; + instPtr->log.mgmtRecvCnt++; L2_DataAvailUpdate(instPtr, true); - // FIXME: Only for test - mgmtRecvSuccessCnt ++; + instPtr->log.mgmtCorrectCnt++; break; case L2_INTRA_TSYNC_FRAME: - // FIXME: Only for test - tsyncRecvCnt++; - recvCnt ++ ; + instPtr->log.tsyncRecvCnt++; L2_DataAvailUpdate(instPtr, true); - // FIXME: Only for test - tsyncRecvSuccessCnt ++; + instPtr->log.tsyncCorrectCnt++; break; case L2_INTRA_SVC_FRAME: - // FIXME: Only for test - svcRecvCnt++; - recvCnt ++ ; + instPtr->log.svcRecvCnt++; if (L2_CrcCheck(instPtr->recvPktData, PDUH0_HEADER_CRC_OFFSET/8, PDUH0_HEADER_CRC_OFFSET/8, L2_CRC8_31) == true) { L2_DataAvailUpdate(instPtr, true); - // FIXME: Only for test - svcRecvSuccessCnt++; + instPtr->log.svcCorrectCnt++; } else { L2_DataAvailUpdate(instPtr, false); @@ -365,6 +347,9 @@ void L2_FrameStateUpdate(L2_INST* instPtr) { L2_DataAvailUpdate(instPtr, false); break; } + if(L2_isDataAvail(instPtr)) { + instPtr->log.frameCorrect++; + } } /*****************************************************************************/ @@ -386,6 +371,55 @@ int32_t L2_SetupNextSlot(L2_INST* instPtr, L2_TOR_TYPE txrxMode, L2_FRAME_TYPE f if (frameType < L2_INTER_SCAN_FRAME || frameType > L2_INTRA_SVC_FRAME) { return FAILURE; } + + // logging + if(txrxMode == L2_TOR_TX) { + instPtr->log.frameTx++; + switch(frameType){ + case L2_INTRA_BM_FRAME: + instPtr->log.bmTxCnt++; + break; + case L2_INTRA_W2_ACQ_FRAME: + instPtr->log.w2acqTxCnt++; + break; + case L2_INTRA_MGMT_FRAME: + instPtr->log.mgmtTxCnt++; + break; + case L2_INTRA_TSYNC_FRAME: + instPtr->log.tsyncTxCnt++; + break; + case L2_INTRA_SVC_FRAME: + instPtr->log.svcTxCnt++; + break; + default: + break; + } + + } + else if (txrxMode == L2_TOR_RX) + { + instPtr->log.frameRx++; + switch(frameType){ + case L2_INTRA_BM_FRAME: + instPtr->log.bmRxCnt++; + break; + case L2_INTRA_W2_ACQ_FRAME: + instPtr->log.w2acqRxCnt++; + break; + case L2_INTRA_MGMT_FRAME: + instPtr->log.mgmtRxCnt++; + break; + case L2_INTRA_TSYNC_FRAME: + instPtr->log.tsyncRxCnt++; + break; + case L2_INTRA_SVC_FRAME: + instPtr->log.svcRxCnt++; + break; + default: + break; + } + } + #if _814_DEBUG_LEVEL >= 3 char* torStr = NULL; char* frameStr = NULL; @@ -735,6 +769,7 @@ int32_t Linklayer_Reconfig(L2_INST* instPtr, const L2_CONFIG *config) { memcpy(&(instPtr->config), config, sizeof(L2_CONFIG)); // Reset basic info + memset(&(instPtr->log), 0x00, sizeof(L2_LOG)); instPtr->netStartTime = UINT32_MAX; instPtr->rtneConfig.last = NULL; instPtr->rtneConfig.curr = NULL; @@ -963,7 +998,6 @@ int32_t Linklayer_PktHandler(L2_INST* instPtr, L2_FRAME_TYPE frameType) { case L2_INTRA_MGMT_FRAME: case L2_INTER_TSYNC_FRAME: case L2_INTRA_TSYNC_FRAME: - // TODO: if(frameType == L2_INTRA_MGMT_FRAME){ if (instPtr->buffSwitch == 0) { memcpy(instPtr->mgmtMsgRecvBuff0 + (size_t)(instPtr->mgmtMsgRecvCnt0*(MGMT_MSG_LEN*ARRAY_SIZE(intraMgmtFrameMsgs)/8)), @@ -981,7 +1015,6 @@ int32_t Linklayer_PktHandler(L2_INST* instPtr, L2_FRAME_TYPE frameType) { break; case L2_INTER_SVC_FRAME: case L2_INTRA_SVC_FRAME: - // TODO: if(frameType == L2_INTRA_SVC_FRAME){ if (instPtr->buffSwitch == 0) { memcpy(instPtr->svcMsgRecvBuff0 + (size_t) (instPtr->svcMsgRecvCnt0 * (INTRA_SVC_FRAME_LENGTH_MAX)), diff --git a/datalink814_ge/src/linklayer/linklayer814.h b/datalink814_ge/src/linklayer/linklayer814.h index 831d63d..75c1668 100644 --- a/datalink814_ge/src/linklayer/linklayer814.h +++ b/datalink814_ge/src/linklayer/linklayer814.h @@ -55,6 +55,38 @@ typedef struct { TIMECTRL_INST* tmcInstPtr; } L2_CONFIG; +typedef struct { + uint32_t frameRx; + uint32_t frameTx; + uint32_t frameRecv; + uint32_t frameCorrect; + + uint32_t bmRxCnt; + uint32_t bmTxCnt; + uint32_t bmRecvCnt; + uint32_t bmCorrectCnt; + + uint32_t w2acqRxCnt; + uint32_t w2acqTxCnt; + uint32_t w2acqRecvCnt; + uint32_t w2acqCorrectCnt; + + uint32_t mgmtRxCnt; + uint32_t mgmtTxCnt; + uint32_t mgmtRecvCnt; + uint32_t mgmtCorrectCnt; + + uint32_t tsyncRxCnt; + uint32_t tsyncTxCnt; + uint32_t tsyncRecvCnt; + uint32_t tsyncCorrectCnt; + + uint32_t svcRxCnt; + uint32_t svcTxCnt; + uint32_t svcRecvCnt; + uint32_t svcCorrectCnt; +} L2_LOG; + typedef struct { L2_CONFIG config; L2_NODE_INFO myInfo; @@ -77,6 +109,7 @@ typedef struct { L2_RTT_FSM* rttFSM; // FSM for RTT (time sync algorithm) uint8_t* sendPktData; uint8_t* recvPktData; + L2_LOG log; // for MPC uint8_t buffSwitch; uint8_t mgmtMsgRecvCnt0;