diff --git a/df_datalink_sp/src/networking/link_layer/scan.c b/df_datalink_sp/src/networking/link_layer/scan.c index 7eac02c..ce8fa7a 100644 --- a/df_datalink_sp/src/networking/link_layer/scan.c +++ b/df_datalink_sp/src/networking/link_layer/scan.c @@ -260,14 +260,14 @@ static int32_t Scan_AdvHandler(L2_INST *instPtr) /* if time out reached, go back to init scan stage. */ if (scanFsmPtr->advTimeout > ADV_LISTEN_TIMEOUT) { - /* Antenna setting (reserved.) */ + /* Antenna setting (reserved, automatically accomplished by physical layer) */ L2_SetupNextSlot(instPtr, L2_TOR_RX, L2_SCAN_FRAME); DBG_WARNING("Adv timeout, restart net scan from L2_SCAN_INIT_STAGE.\n"); L2_Scan_Reset(scanFsmPtr); } else { - /* Antenna setting (reserved.) */ + /* Antenna setting (reserved, automatically accomplished by physical layer) */ L2_SetupNextSlot(instPtr, L2_TOR_RX, L2_ADV_FRAME); scanFsmPtr->advTimeout++; } @@ -333,6 +333,7 @@ static int32_t ScanMsg_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst return EPARAM; } + // Common section of link layer package dataChunk = L2_GetNextFrameNum(instPtr); L2_FrameInsertChunk(buff, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &dataChunk); dataChunk = L2_GetNextSlotNum(instPtr); @@ -419,91 +420,6 @@ static int32_t ScanMsg_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst return SUCCESS; } -/*****************************************************************************/ -/** - * @brief Initialize scan FSM. - * - * @param instPtr - * - * @return - * - ******************************************************************************/ -int32_t L2_Scan_Init(L2_SCAN_FSM **scanFSMPtr) -{ - ASSERT(scanFSMPtr != NULL); - *scanFSMPtr = (L2_SCAN_FSM *)malloc(sizeof(L2_SCAN_FSM)); - if (*scanFSMPtr == NULL) - { - DBG_ERROR("Failed to allocate memory for scanFsmPtr.\n"); - return ENOMEM; - } - L2_Scan_Reset(*scanFSMPtr); - (*scanFSMPtr)->beamNo = 0; - (*scanFSMPtr)->tableNo = 0; - return SUCCESS; -} - -/*****************************************************************************/ -/** - * @brief Reset ScanNet FSM - * - * @param scanFsmPtr a pointer to scan net finite state machine - * - * @return NONE - * - ******************************************************************************/ -void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr) -{ - ASSERT(scanFSMPtr != NULL); - scanFSMPtr->isLocked = false; - scanFSMPtr->isAdvRecvd = false; - scanFSMPtr->isAckPending = false; - scanFSMPtr->scanCnt = 0; - scanFSMPtr->advTimeout = 0; - scanFSMPtr->cfmTimeout = 0; - scanFSMPtr->scanStage = L2_SCAN_NONE_STAGE; -} - -/*****************************************************************************/ -/** - * @brief Destroy ScanNet FSM, free memory - * - * @param scanFsmPtr a pointer to scan net finite state machine - * - * @return NONE - * - ******************************************************************************/ -void L2_Scan_Destroy(L2_SCAN_FSM *scanFSMPtr) -{ - free(scanFSMPtr); -} - -/*****************************************************************************/ -/** - * @brief Refresh scan beam table. - * - * @param instPtr a pointer to linklayer layer instance - * - * @return NONE - * - ******************************************************************************/ -void L2_Scan_RefreashScanTable(L2_INST *instPtr) -{ - ASSERT(instPtr != NULL); - L2_SCAN_FSM *scanFsmPtr = instPtr->scanFSM; - PHY_INST *phyRef = instPtr->config.phyInstPtr; - if (scanFsmPtr->tableNo == 0) - { - Phy_SetBeamTable(phyRef, antNrrwPattern_0, scanFsmPtr->beamNo); - scanFsmPtr->tableNo = 1; - } - else - { - Phy_SetBeamTable(phyRef, antNrrwPattern_1, scanFsmPtr->beamNo); - scanFsmPtr->tableNo = 0; - } -} - /*****************************************************************************/ /** * @brief Scan net packet handler. @@ -702,6 +618,90 @@ int32_t L2_Scan_PktHandler(L2_INST *instPtr, uint8_t *msg) return Status; } +/*****************************************************************************/ +/** + * @brief Initialize scan FSM. + * + * @param instPtr + * + * @return + * + ******************************************************************************/ +int32_t L2_Scan_Init(L2_SCAN_FSM **scanFSMPtr) +{ + ASSERT(scanFSMPtr != NULL); + *scanFSMPtr = (L2_SCAN_FSM *)malloc(sizeof(L2_SCAN_FSM)); + if (*scanFSMPtr == NULL) + { + DBG_ERROR("Failed to allocate memory for scanFsmPtr.\n"); + return ENOMEM; + } + L2_Scan_Reset(*scanFSMPtr); + (*scanFSMPtr)->beamNo = 0; + (*scanFSMPtr)->tableNo = 0; + return SUCCESS; +} + +/*****************************************************************************/ +/** + * @brief Reset ScanNet FSM + * + * @param scanFsmPtr a pointer to scan net finite state machine + * + * @return NONE + * + ******************************************************************************/ +void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr) +{ + ASSERT(scanFSMPtr != NULL); + scanFSMPtr->isLocked = false; + scanFSMPtr->isAdvRecvd = false; + scanFSMPtr->isAckPending = false; + scanFSMPtr->scanCnt = 0; + scanFSMPtr->advTimeout = 0; + scanFSMPtr->cfmTimeout = 0; + scanFSMPtr->scanStage = L2_SCAN_NONE_STAGE; +} + +/*****************************************************************************/ +/** + * @brief Destroy ScanNet FSM, free memory + * + * @param scanFsmPtr a pointer to scan net finite state machine + * + * @return NONE + * + ******************************************************************************/ +void L2_Scan_Destroy(L2_SCAN_FSM *scanFSMPtr) +{ + free(scanFSMPtr); +} + +/*****************************************************************************/ +/** + * @brief Refresh scan beam table. + * + * @param instPtr a pointer to linklayer layer instance + * + * @return NONE + * + ******************************************************************************/ +void L2_Scan_RefreashScanTable(L2_INST *instPtr) +{ + ASSERT(instPtr != NULL); + L2_SCAN_FSM *scanFsmPtr = instPtr->scanFSM; + PHY_INST *phyRef = instPtr->config.phyInstPtr; + if (scanFsmPtr->tableNo == 0) + { + Phy_SetBeamTable(phyRef, antNrrwPattern_0, scanFsmPtr->beamNo); + scanFsmPtr->tableNo = 1; + } + else + { + Phy_SetBeamTable(phyRef, antNrrwPattern_1, scanFsmPtr->beamNo); + scanFsmPtr->tableNo = 0; + } +} /*****************************************************************************/ /** diff --git a/df_datalink_sp/src/networking/link_layer/service.c b/df_datalink_sp/src/networking/link_layer/service.c index 4d0d63d..b396dda 100644 --- a/df_datalink_sp/src/networking/link_layer/service.c +++ b/df_datalink_sp/src/networking/link_layer/service.c @@ -88,6 +88,7 @@ static int32_t Service_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst uint32_t dataChunk; uint8_t *buff = instPtr->sendPktData; + // Common section of link layer package dataChunk = L2_GetNextFrameNum(instPtr); L2_FrameInsertChunk(buff, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &dataChunk); dataChunk = L2_GetNextSlotNum(instPtr); @@ -113,7 +114,7 @@ static int32_t Service_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst L2_FrameInsertChunk(buff, L2_MSG_SVC_SRC_SPEEDZ, L2_MSG_SVC_SRC_SPEEDZ_LEN, &(instPtr->sysInfo.vZ)); uint32_t dataId; - if(L2_GetNodeType(instPtr) == L2_NODE_HEAD) + if (L2_GetNodeType(instPtr) == L2_NODE_HEAD) { SysMonitor_GetSendPayload(buff + L2_MSG_SVC_PAYLOAD, &dataId, PAYLOAD_LEN_FLJ_TX); } @@ -128,12 +129,6 @@ static int32_t Service_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD, L2_MSG_SVC_PAYLOAD_LEN, testData); } - // // packing payload - // uint32_t dataId; - // dataId = DATA_ID_TEST; - // L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD_ID, L2_MSG_SVC_PAYLOAD_ID_LEN, &dataId); - // L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD, L2_MSG_SVC_PAYLOAD_LEN, testData); - Status = L2_CrcAppend(buff, L2_SVC_PACK_LEN - L2_MSG_SVC_CRC_LEN, L2_MSG_SVC_CRC, L2_CRC16_1021); if (Status != SUCCESS) { @@ -159,62 +154,6 @@ static int32_t Service_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst #endif } -/*****************************************************************************/ -/** - * @brief Initialize service net FSM - * - * @param serviceFSM A pointer to service FSM instance. - * - * @return SUCCESS Initialize successfully. - * Other Initialize failed. - * - ******************************************************************************/ -int32_t L2_Service_Init(L2_SVC_FSM **svcFSMPtr) -{ - ASSERT(svcFSMPtr != NULL); - *svcFSMPtr = (L2_SVC_FSM *)malloc(sizeof(L2_SVC_FSM)); - if (*svcFSMPtr == NULL) - { - return ENOMEM; - } - L2_Service_Reset(*svcFSMPtr); - return SUCCESS; -} - -/*****************************************************************************/ -/** - * @brief Reset ServiceNet FSM - * - * @param scanFsmPtr a pointer to service net finite state machine - * - * @return NONE - * - ******************************************************************************/ -void L2_Service_Reset(L2_SVC_FSM *svcFSMPtr) -{ - ASSERT(svcFSMPtr != NULL); - memset((&svcFSMPtr->rxLog), 0x00, sizeof(PAYLOAD)); - memset((&svcFSMPtr->txLog), 0x00, sizeof(PAYLOAD)); -#ifdef DATALINK_ENABLE_BERTEST - svcFSMPtr->bitTotal = 0; - svcFSMPtr->bitError = 0; -#endif -} - -/*****************************************************************************/ -/** - * @brief Destroy ServiceNet FSM, free memory - * - * @param scanFsmPtr a pointer to service net finite state machine - * - * @return NONE - * - ******************************************************************************/ -void L2_Service_Destroy(L2_SVC_FSM *serviceFSM) -{ - free(serviceFSM); -} - /*****************************************************************************/ /** * @brief Handle service received packet. Send data up to MPC @@ -244,7 +183,7 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg) if (node == NULL) { node = L2_AppendNode(instPtr->nodeList, nodeId, L2_NODE_MEMBER); - if(node == NULL) + if (node == NULL) { DBG_ERROR("Failed to append new node [id: %" PRIu8 "]", nodeId); Status = ENOMEM; @@ -255,18 +194,18 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg) // Update node info. float nodePos; L2_FrameGetChunk(msg, L2_MSG_SVC_SRC_POSX, L2_MSG_SVC_SRC_POSX_LEN, &nodePos); - node->nodeInfo.pos.x = (double) nodePos; + node->nodeInfo.pos.x = (double)nodePos; L2_FrameGetChunk(msg, L2_MSG_SVC_SRC_POSY, L2_MSG_SVC_SRC_POSY_LEN, &nodePos); - node->nodeInfo.pos.y = (double) nodePos; + node->nodeInfo.pos.y = (double)nodePos; L2_FrameGetChunk(msg, L2_MSG_SVC_SRC_POSZ, L2_MSG_SVC_SRC_POSZ_LEN, &nodePos); - node->nodeInfo.pos.z = (double) nodePos; + node->nodeInfo.pos.z = (double)nodePos; float nodeSpeed; L2_FrameGetChunk(msg, L2_MSG_SVC_SRC_SPEEDX, L2_MSG_SVC_SRC_SPEEDX_LEN, &nodeSpeed); - node->nodeInfo.speed.x = (double) nodePos; + node->nodeInfo.speed.x = (double)nodePos; L2_FrameGetChunk(msg, L2_MSG_SVC_SRC_SPEEDY, L2_MSG_SVC_SRC_SPEEDY_LEN, &nodeSpeed); - node->nodeInfo.speed.y = (double) nodePos; + node->nodeInfo.speed.y = (double)nodePos; L2_FrameGetChunk(msg, L2_MSG_SVC_SRC_SPEEDZ, L2_MSG_SVC_SRC_SPEEDZ_LEN, &nodeSpeed); - node->nodeInfo.speed.z = (double) nodePos; + node->nodeInfo.speed.z = (double)nodePos; // Reset node ttl node->ttlCnt = 0; @@ -344,6 +283,65 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg) #endif } +/*****************************************************************************/ +/** + * @brief Initialize service net FSM + * + * @param serviceFSM A pointer to service FSM instance. + * + * @return SUCCESS Initialize successfully. + * Other Initialize failed. + * + ******************************************************************************/ +int32_t L2_Service_Init(L2_SVC_FSM **svcFSMPtr) +{ + ASSERT(svcFSMPtr != NULL); + *svcFSMPtr = (L2_SVC_FSM *)malloc(sizeof(L2_SVC_FSM)); + if (*svcFSMPtr == NULL) + { + return ENOMEM; + } + L2_Service_Reset(*svcFSMPtr); + return SUCCESS; +} + +/*****************************************************************************/ +/** + * @brief Reset ServiceNet FSM + * + * @param scanFsmPtr a pointer to service net finite state machine + * + * @return NONE + * + ******************************************************************************/ +void L2_Service_Reset(L2_SVC_FSM *svcFSMPtr) +{ + ASSERT(svcFSMPtr != NULL); + svcFSMPtr->txCnt = 0; + svcFSMPtr->rxCnt = 0; + svcFSMPtr->rxdCnt = 0; +#ifdef DATALINK_ENABLE_BERTEST + svcFSMPtr->bitTotal = 0; + svcFSMPtr->bitError = 0; + svcFSMPtr->lossRate = 0; + svcFSMPtr->errorRate = 0; +#endif +} + +/*****************************************************************************/ +/** + * @brief Destroy ServiceNet FSM, free memory + * + * @param scanFsmPtr a pointer to service net finite state machine + * + * @return NONE + * + ******************************************************************************/ +void L2_Service_Destroy(L2_SVC_FSM *serviceFSM) +{ + free(serviceFSM); +} + /*****************************************************************************/ /** * @brief Service FSM Routine. @@ -364,9 +362,10 @@ int32_t L2_Service_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntr return SUCCESS; // skip } - PHY_INST* phyRef = instPtr->config.phyInstPtr; + PHY_INST *phyRef = instPtr->config.phyInstPtr; + L2_SVC_FSM *svcFSMPtr = instPtr->serviceFSM; L2_TOR_TYPE torState; - const NODE_ENTRY* commNode; + const NODE_ENTRY *commNode; if (rtneEntry->src == L2_GetNodeId(instPtr)) { torState = L2_TOR_TX;