update scan FSM.

This commit is contained in:
Gatsby Van
2024-01-24 10:57:58 +08:00
parent a289c84c8f
commit 80f92305e3
2 changed files with 15 additions and 13 deletions
@@ -190,7 +190,7 @@ typedef struct
{ {
bool isLocked; // init acq done. bool isLocked; // init acq done.
bool isAdvRecvd; // bm received. bool isAdvRecvd; // bm received.
bool isAcked; // 2way acq done. bool isAckPending; // 2way acq done.
uint8_t scanCnt; uint8_t scanCnt;
uint8_t beamNo; uint8_t beamNo;
uint32_t advTimeout; uint32_t advTimeout;
+14 -12
View File
@@ -35,9 +35,9 @@
/************************** Function Prototypes ******************************/ /************************** Function Prototypes ******************************/
static void LockStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state); static void LockStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state);
static void AdvrecvStateUpdate(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 StageUpdate(L2_SCAN_FSM *scanFsmPtr, SCAN_STAGE newStage); 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_InitScanHandler(L2_INST *instPtr);
static int32_t Scan_AdvHandler(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. * @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); ASSERT(scanFsmPtr != NULL);
DBG_INFO("Update AdvRecvState from [%d] to [%d].\n", DBG_INFO("Update AdvRecvState from [%d] to [%d].\n",
scanFsmPtr->isBmRecvd, state); scanFsmPtr->isAdvRecvd, state);
scanFsmPtr->isAdvRecvd = state; scanFsmPtr->isAdvRecvd = state;
return; return;
} }
@@ -72,12 +72,11 @@ static void AdvrecvStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state)
/** /**
* @brief Update 2-Way Acquisition ack 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); ASSERT(scanFsmPtr != NULL);
DBG_INFO("Update CfmAckState from [%d] to [%d].\n", DBG_INFO("Pending Cfm-Ack...\n");
scanFsmPtr->isAcked, state); scanFsmPtr->isAckPending = true;
scanFsmPtr->isAcked = state;
return; return;
} }
@@ -143,7 +142,7 @@ static int32_t Scan_InitScanHandler(L2_INST *instPtr)
static int32_t Scan_AdvHandler(L2_INST *instPtr) static int32_t Scan_AdvHandler(L2_INST *instPtr)
{ {
L2_SCAN_FSM *scanFsmPtr = instPtr->scanFSM; 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 received a valid bm frame.
if (scanFsmPtr->isAdvRecvd == true) if (scanFsmPtr->isAdvRecvd == true)
@@ -330,7 +329,7 @@ void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr)
ASSERT(scanFSMPtr != NULL); ASSERT(scanFSMPtr != NULL);
scanFSMPtr->isLocked = false; scanFSMPtr->isLocked = false;
scanFSMPtr->isAdvRecvd = false; scanFSMPtr->isAdvRecvd = false;
scanFSMPtr->isAcked = false; scanFSMPtr->isAckPending = false;
scanFSMPtr->scanCnt = 0; scanFSMPtr->scanCnt = 0;
scanFSMPtr->beamNo = 0; scanFSMPtr->beamNo = 0;
scanFSMPtr->advTimeout = 0; scanFSMPtr->advTimeout = 0;
@@ -622,11 +621,14 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
case L2_SLOT_CONFIRM: case L2_SLOT_CONFIRM:
if (torState == L2_TOR_TX) 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; break;
} }
}
memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX); memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX);
if (ScanMsg_Packing(instPtr, L2_CFM_FRAME, rtneEntry->dst) != SUCCESS) if (ScanMsg_Packing(instPtr, L2_CFM_FRAME, rtneEntry->dst) != SUCCESS)
{ {