From 80f92305e32105fa140fe8eecdcfb30008d2a79d Mon Sep 17 00:00:00 2001 From: Gatsby Van Date: Wed, 24 Jan 2024 10:57:58 +0800 Subject: [PATCH] update scan FSM. --- .../networking/link_layer/link_layer_types.h | 2 +- .../src/networking/link_layer/scan.c | 26 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/df_datalink_sp/src/networking/link_layer/link_layer_types.h b/df_datalink_sp/src/networking/link_layer/link_layer_types.h index aea86fe..571f042 100644 --- a/df_datalink_sp/src/networking/link_layer/link_layer_types.h +++ b/df_datalink_sp/src/networking/link_layer/link_layer_types.h @@ -190,7 +190,7 @@ typedef struct { bool isLocked; // init acq done. bool isAdvRecvd; // bm received. - bool isAcked; // 2way acq done. + bool isAckPending; // 2way acq done. uint8_t scanCnt; uint8_t beamNo; uint32_t advTimeout; diff --git a/df_datalink_sp/src/networking/link_layer/scan.c b/df_datalink_sp/src/networking/link_layer/scan.c index d29e96f..86c7a11 100644 --- a/df_datalink_sp/src/networking/link_layer/scan.c +++ b/df_datalink_sp/src/networking/link_layer/scan.c @@ -35,9 +35,9 @@ /************************** Function Prototypes ******************************/ static void LockStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state); -static void AdvrecvStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state); -static void CfmStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state); +static void AdvRecvStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state); static void StageUpdate(L2_SCAN_FSM *scanFsmPtr, SCAN_STAGE newStage); +static void PendCfmAck(L2_SCAN_FSM *scanFsmPtr); static int32_t Scan_InitScanHandler(L2_INST *instPtr); static int32_t Scan_AdvHandler(L2_INST *instPtr); @@ -60,11 +60,11 @@ static inline void LockStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state) /** * @brief Update Base-info Advertisement state. */ -static void AdvrecvStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state) +static void AdvRecvStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state) { ASSERT(scanFsmPtr != NULL); DBG_INFO("Update AdvRecvState from [%d] to [%d].\n", - scanFsmPtr->isBmRecvd, state); + scanFsmPtr->isAdvRecvd, state); scanFsmPtr->isAdvRecvd = state; return; } @@ -72,12 +72,11 @@ static void AdvrecvStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state) /** * @brief Update 2-Way Acquisition ack state. */ -static void CfmStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state) +static void PendCfmAck(L2_SCAN_FSM *scanFsmPtr) { ASSERT(scanFsmPtr != NULL); - DBG_INFO("Update CfmAckState from [%d] to [%d].\n", - scanFsmPtr->isAcked, state); - scanFsmPtr->isAcked = state; + DBG_INFO("Pending Cfm-Ack...\n"); + scanFsmPtr->isAckPending = true; return; } @@ -143,7 +142,7 @@ static int32_t Scan_InitScanHandler(L2_INST *instPtr) static int32_t Scan_AdvHandler(L2_INST *instPtr) { L2_SCAN_FSM *scanFsmPtr = instPtr->scanFSM; - DBG_INFO("** Netsetup - Advertisement Procedure (Timeout: %u) **\n", scanFsmPtr->advTimeout); + DBG_INFO("** Net-Setup - Advertisement Procedure (Timeout: %u) **\n", scanFsmPtr->advTimeout); // if received a valid bm frame. if (scanFsmPtr->isAdvRecvd == true) @@ -330,7 +329,7 @@ void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr) ASSERT(scanFSMPtr != NULL); scanFSMPtr->isLocked = false; scanFSMPtr->isAdvRecvd = false; - scanFSMPtr->isAcked = false; + scanFSMPtr->isAckPending = false; scanFSMPtr->scanCnt = 0; scanFSMPtr->beamNo = 0; scanFSMPtr->advTimeout = 0; @@ -622,10 +621,13 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry) case L2_SLOT_CONFIRM: if (torState == L2_TOR_TX) { - if (L2_GetNodeType(instPtr) != L2_NODE_HEAD && L2_isDataAvail(instPtr) == false) + if (L2_GetNodeType(instPtr) != L2_NODE_HEAD) { - DBG_INFO("Member node is not ready to send CFM frame.\n"); + if (instPtr->scanFSM->isAckPending == false) + { + DBG_INFO("Member node has no pending CFM-Ack frame.\n"); break; + } } memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX); if (ScanMsg_Packing(instPtr, L2_CFM_FRAME, rtneEntry->dst) != SUCCESS)