Compare commits
5
Commits
8b46723c20
...
a3fd398729
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a3fd398729 | ||
|
|
7f852e9ddc | ||
|
|
aabaaa94c3 | ||
|
|
22a3a7ad57 | ||
|
|
1909df3b9c |
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user