From cfc538bd4d5225a5a5c82ac43469b102f62c2ea2 Mon Sep 17 00:00:00 2001 From: bit-cyber-fh <3120225656@bit.edu.cn> Date: Sun, 7 Apr 2024 16:57:29 +0800 Subject: [PATCH] bugfix: avoid confirm frame reception missing --- df_datalink_sp/src/networking/link_layer/scan.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/df_datalink_sp/src/networking/link_layer/scan.c b/df_datalink_sp/src/networking/link_layer/scan.c index 031bb2b..66cb913 100644 --- a/df_datalink_sp/src/networking/link_layer/scan.c +++ b/df_datalink_sp/src/networking/link_layer/scan.c @@ -237,7 +237,6 @@ static int32_t Scan_InitScanHandler(L2_INST *instPtr) } /*****************************************************************************/ - /** * @brief Member node scan net BmAdvt stage handler. * @@ -252,6 +251,7 @@ static int32_t Scan_AdvHandler(L2_INST *instPtr) ASSERT(instPtr != NULL); L2_SCAN_FSM *scanFsmPtr = instPtr->scanFSM; PHY_INST *phyRef = instPtr->config.phyInstPtr; + TMC_INST *tmcRef = instPtr->config.tmcInstPtr; DBG_INFO("** Net-Setup - Advertisement Procedure (Timeout: %" PRIu8 ") **\n", scanFsmPtr->advTimeout); // if received a valid bm frame. @@ -264,7 +264,20 @@ static int32_t Scan_AdvHandler(L2_INST *instPtr) // Update scan stage StageUpdate(scanFsmPtr, L2_SCAN_CFM_STAGE); - DBG_INFO("Received Adv frame, skipping 10ms for turn around...\n"); + + // start a confirm frame reception if in the target slot + if ((TimeCtrl_GetIntCnt(tmcRef) + 1) % CFM_FRAME_SLOTS == 0) + { + // using pull mode to receive confirm frame + // since first time sync procedure is accomplished in ADV stage. + Phy_SetBeamWidth(phyRef, PHY_ANT_BEAM_16); + Phy_SetBeamNo(phyRef, scanFsmPtr->beamNo, PHY_ANT_BEAM_16); + Phy_SetMode(phyRef, PHY_MODE_PULL); + L2_SetupNextSlot(instPtr, L2_TOR_RX, L2_CFM_FRAME); + scanFsmPtr->cfmTimeout++; // increase counter. + instPtr->log.lastBeamWidth = PHY_ANT_BEAM_16; + } + // otherwise skip... return SUCCESS; } // no valid bm frame was received.