Compare commits

...
5 Commits
Author SHA1 Message Date
Gatsby Van a3fd398729 bugfix: fix frame type inference. 2024-01-05 16:39:54 +08:00
Gatsby Van 7f852e9ddc update comments. 2024-01-05 16:25:15 +08:00
Gatsby Van aabaaa94c3 fix typo. 2024-01-05 16:14:10 +08:00
Gatsby Van 22a3a7ad57 bugfix: correct the condition of transitioning to seek state. 2024-01-05 16:13:58 +08:00
Gatsby Van 1909df3b9c miscellaneous fix. 2024-01-05 16:12:22 +08:00
3 changed files with 75 additions and 6 deletions
+72 -2
View File
@@ -40,6 +40,7 @@ static void L2_SetSlotNum(L2_INST *instPtr, uint32_t newSlotNum);
static void L2_SetFrameNum(L2_INST *instPtr, uint32_t newFrameNum); static void L2_SetFrameNum(L2_INST *instPtr, uint32_t newFrameNum);
static void L2_UpdateSlotNum(L2_INST *instPtr); static void L2_UpdateSlotNum(L2_INST *instPtr);
static void L2_DataAvailUpdate(L2_INST *instPtr, bool status); static void L2_DataAvailUpdate(L2_INST *instPtr, bool status);
static L2_FRAME_TYPE L2_GetReceiveFrameType(L2_INST *instPtr);
/** /**
* @brief helper function to update linkelayer state * @brief helper function to update linkelayer state
@@ -296,6 +297,34 @@ inline void L2_RcdShift(L2_RCD *rcd, int32_t netxVal)
rcd->next = netxVal; rcd->next = netxVal;
} }
/*****************************************************************************/
/**
* @brief Infer last received frame type.
*
* @param instPtr A pointer to physical layer control instance.
*
* @return L2_FRAME_TYPE.
*
******************************************************************************/
static L2_FRAME_TYPE L2_GetReceiveFrameType(L2_INST *instPtr)
{
if (instPtr->myInfo.nodeType == L2_NODE_HEAD || L2_isCxn2Net(instPtr))
{
return instPtr->frame.curr;
}
switch (instPtr->scanNetFSM->scanStage)
{
case L2_SCAN_INIT_STAGE:
case L2_SCAN_BMADVT_STAGE:
return L2_INTRA_BM_FRAME;
case L2_SCANT_2WAYACQ_STAGE:
return L2_INTRA_W2_ACQ_FRAME;
default:
return L2_NONE_FRAME;
}
}
/*****************************************************************************/ /*****************************************************************************/
/** /**
* @brief Update L2 frame state, check if there is any valid L2 frame data in * @brief Update L2 frame state, check if there is any valid L2 frame data in
@@ -322,7 +351,7 @@ void L2_FrameStateUpdate(L2_INST *instPtr)
Phy_RetrieveRecvData(phyRef, instPtr->recvPktData); Phy_RetrieveRecvData(phyRef, instPtr->recvPktData);
instPtr->log.frameRecv++; instPtr->log.frameRecv++;
switch (instPtr->frame.last) switch (L2_GetReceiveFrameType(instPtr))
{ {
case L2_INTRA_SCAN_FRAME: case L2_INTRA_SCAN_FRAME:
// INTRA_BM_FRAME could be received if current frame type is INTRA_BM_FRAME // INTRA_BM_FRAME could be received if current frame type is INTRA_BM_FRAME
@@ -583,7 +612,7 @@ uint32_t L2_GetFrameLen(L2_FRAME_TYPE l2FrameType)
* @return L1 frame type. * @return L1 frame type.
* *
******************************************************************************/ ******************************************************************************/
#ifndef TEST_200KBPS #ifdef TEST_200KBPS
L1_FRAME_TYPE L2_L2frame2L1frame(L2_FRAME_TYPE l2Frame) L1_FRAME_TYPE L2_L2frame2L1frame(L2_FRAME_TYPE l2Frame)
{ {
switch (l2Frame) switch (l2Frame)
@@ -651,12 +680,14 @@ L1_FRAME_TYPE L2_L2frame2L1frame(L2_FRAME_TYPE l2Frame)
} }
} }
#endif #endif
/*****************************************************************************/ /*****************************************************************************/
/** /**
* @brief Initialize link layer fsm instance, allocate memory to storage fsm * @brief Initialize link layer fsm instance, allocate memory to storage fsm
* data. Apply the default values to fsm. * data. Apply the default values to fsm.
* *
* @param instPtr a pointer to physical layer controller instance * @param instPtr a pointer to physical layer controller instance
* @param config a pointer to configurations
* *
* @return SUCCESS * @return SUCCESS
* Other error code. * Other error code.
@@ -821,6 +852,18 @@ error:
return Status; return Status;
} }
/*****************************************************************************/
/**
* @brief Reconfigure link layer instance, reset all segment and reconfigure
* accordingly.
*
* @param instPtr a pointer to physical layer controller instance
* @param config a pointer to configurations
*
* @return SUCCESS
* Other error code.
*
******************************************************************************/
int32_t Linklayer_Reconfig(L2_INST *instPtr, const L2_CONFIG *config) int32_t Linklayer_Reconfig(L2_INST *instPtr, const L2_CONFIG *config)
{ {
ASSERT(instPtr != NULL); ASSERT(instPtr != NULL);
@@ -888,6 +931,15 @@ int32_t Linklayer_Reconfig(L2_INST *instPtr, const L2_CONFIG *config)
return SUCCESS; return SUCCESS;
} }
/*****************************************************************************/
/**
* @brief Completely destroy link layer instance, free all allocated memory.
*
* @param instPtr a pointer to physical layer controller instance
*
* @return NONE
*
******************************************************************************/
void Linklayer_Destroy(L2_INST *instPtr) void Linklayer_Destroy(L2_INST *instPtr)
{ {
ASSERT(instPtr != NULL); ASSERT(instPtr != NULL);
@@ -907,6 +959,15 @@ void Linklayer_Destroy(L2_INST *instPtr)
free(instPtr); free(instPtr);
} }
/*****************************************************************************/
/**
* @brief Start link layer processing.
*
* @param instPtr a pointer to physical layer controller instance
*
* @return NONE
*
******************************************************************************/
int32_t Linklayer_Start(L2_INST *instPtr) int32_t Linklayer_Start(L2_INST *instPtr)
{ {
ASSERT(instPtr != NULL); ASSERT(instPtr != NULL);
@@ -915,6 +976,15 @@ int32_t Linklayer_Start(L2_INST *instPtr)
return SUCCESS; return SUCCESS;
} }
/*****************************************************************************/
/**
* @brief Halt link layer.
*
* @param instPtr a pointer to physical layer controller instance
*
* @return NONE
*
******************************************************************************/
int32_t Linklayer_Halt(L2_INST *instPtr) int32_t Linklayer_Halt(L2_INST *instPtr)
{ {
ASSERT(instPtr != NULL); ASSERT(instPtr != NULL);
+2 -3
View File
@@ -1043,13 +1043,12 @@ int32_t MgmtNet_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
L2_EVENT stateEvent = { L2_EVENT stateEvent = {
.event = L2_EV_MAIN_STATE_UPDATE, .event = L2_EV_MAIN_STATE_UPDATE,
.msg = &newState}; .msg = &newState};
if (L2_GetNodeListLen(instPtr->nodeList) < instPtr->config.netScale && L2_GetMainState(instPtr) != L2_INTRA_SEEK_STATE) if (L2_GetNodeListLen(instPtr->nodeList) < instPtr->config.netScale - 1)
{ {
newState = L2_INTRA_SEEK_STATE; newState = L2_INTRA_SEEK_STATE;
AssertL2Event(instPtr, &stateEvent); AssertL2Event(instPtr, &stateEvent);
} }
else if (L2_GetNodeListLen(instPtr->nodeList) >= instPtr->config.netScale && else
L2_GetMainState(instPtr) != L2_NORMAL_STATE)
{ {
newState = L2_NORMAL_STATE; newState = L2_NORMAL_STATE;
AssertL2Event(instPtr, &stateEvent); AssertL2Event(instPtr, &stateEvent);
+1 -1
View File
@@ -1070,7 +1070,7 @@ int32_t ScanNet_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
} }
} }
/* Antenna setting (reserved.) */ /* Antenna setting (reserved.) */
L2_SetupNextSlot(instPtr, L2_TOR_TX, L2_INTRA_BM_FRAME); L2_SetupNextSlot(instPtr, torState, L2_INTRA_BM_FRAME);
break; break;
case L2_SLOT_INTER_SCAN_2W: case L2_SLOT_INTER_SCAN_2W:
// TODO: // TODO: