forked from gatsby/df_datalink
add beampattern refreash method
This commit is contained in:
@@ -131,6 +131,7 @@ bool L2_CrcCheck(uint8_t *dataBuff, uint32_t dataLen, L2_CRC_TYPE crcType);
|
|||||||
|
|
||||||
// Scanning
|
// Scanning
|
||||||
int32_t L2_Scan_Init(L2_SCAN_FSM **scanFSMPtr);
|
int32_t L2_Scan_Init(L2_SCAN_FSM **scanFSMPtr);
|
||||||
|
void L2_Scan_RefreashScanTable(L2_INST *instPtr);
|
||||||
void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr);
|
void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr);
|
||||||
void L2_Scan_Destroy(L2_SCAN_FSM *scanFSMPtr);
|
void L2_Scan_Destroy(L2_SCAN_FSM *scanFSMPtr);
|
||||||
int32_t L2_Scan_Proc(L2_INST *instPtr);
|
int32_t L2_Scan_Proc(L2_INST *instPtr);
|
||||||
|
|||||||
@@ -194,9 +194,23 @@ static void StageUpdate(L2_SCAN_FSM *scanFsmPtr, SCAN_STAGE newStage)
|
|||||||
static int32_t Scan_InitScanHandler(L2_INST *instPtr)
|
static int32_t Scan_InitScanHandler(L2_INST *instPtr)
|
||||||
{
|
{
|
||||||
ASSERT(instPtr != NULL);
|
ASSERT(instPtr != NULL);
|
||||||
|
PHY_INST *phyRef = instPtr->config.phyInstPtr;
|
||||||
L2_SCAN_FSM *scanFsmPtr = instPtr->scanFSM;
|
L2_SCAN_FSM *scanFsmPtr = instPtr->scanFSM;
|
||||||
DBG_INFO("** Net-Setup - InitScan Procedure (Attempts: %" PRIu8 ")**\n", scanFsmPtr->scanCnt);
|
DBG_INFO("** Net-Setup - InitScan Procedure (Attempts: %" PRIu8 ")**\n", scanFsmPtr->scanCnt);
|
||||||
|
|
||||||
|
if(scanFsmPtr->scanCnt == 0)
|
||||||
|
{
|
||||||
|
// Update scan beam table
|
||||||
|
L2_Scan_RefreashScanTable(instPtr);
|
||||||
|
}
|
||||||
|
else if(Phy_IsFrameDetected(phyRef))
|
||||||
|
{
|
||||||
|
// last scan beam number
|
||||||
|
instPtr->scanFSM->beamNo = Phy_LastScanBeamNo(instPtr->config.phyInstPtr);
|
||||||
|
// Update scan beam table
|
||||||
|
L2_Scan_RefreashScanTable(instPtr);
|
||||||
|
}
|
||||||
|
|
||||||
if (scanFsmPtr->isLocked == true)
|
if (scanFsmPtr->isLocked == true)
|
||||||
{
|
{
|
||||||
StageUpdate(scanFsmPtr, L2_SCAN_ADV_STAGE);
|
StageUpdate(scanFsmPtr, L2_SCAN_ADV_STAGE);
|
||||||
@@ -231,6 +245,9 @@ static int32_t Scan_AdvHandler(L2_INST *instPtr)
|
|||||||
// if received a valid bm frame.
|
// if received a valid bm frame.
|
||||||
if (scanFsmPtr->isAdvRecvd == true)
|
if (scanFsmPtr->isAdvRecvd == true)
|
||||||
{
|
{
|
||||||
|
// last scan beam number
|
||||||
|
instPtr->scanFSM->beamNo = Phy_LastScanBeamNo(instPtr->config.phyInstPtr);
|
||||||
|
|
||||||
scanFsmPtr->advTimeout = 0; /* reset listen counter. */
|
scanFsmPtr->advTimeout = 0; /* reset listen counter. */
|
||||||
DBG_INFO("Received Adv frame, skipping 10ms for turn around...\n");
|
DBG_INFO("Received Adv frame, skipping 10ms for turn around...\n");
|
||||||
// TODO: check functionality.
|
// TODO: check functionality.
|
||||||
@@ -417,6 +434,8 @@ int32_t L2_Scan_Init(L2_SCAN_FSM **scanFSMPtr)
|
|||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
L2_Scan_Reset(*scanFSMPtr);
|
L2_Scan_Reset(*scanFSMPtr);
|
||||||
|
(*scanFSMPtr)->beamNo = 0;
|
||||||
|
(*scanFSMPtr)->tableNo = 0;
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,8 +458,6 @@ void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr)
|
|||||||
scanFSMPtr->advTimeout = 0;
|
scanFSMPtr->advTimeout = 0;
|
||||||
scanFSMPtr->cfmTimeout = 0;
|
scanFSMPtr->cfmTimeout = 0;
|
||||||
scanFSMPtr->scanStage = L2_SCAN_NONE_STAGE;
|
scanFSMPtr->scanStage = L2_SCAN_NONE_STAGE;
|
||||||
scanFSMPtr->beamNo = 0;
|
|
||||||
scanFSMPtr->tableNo = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -537,11 +554,6 @@ int32_t L2_Scan_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
node->nodeInfo.pos.z = (double) nodePos;
|
node->nodeInfo.pos.z = (double) nodePos;
|
||||||
node->nodeInfo.beamNo = Phy_LastScanBeamNo(instPtr->config.phyInstPtr);
|
node->nodeInfo.beamNo = Phy_LastScanBeamNo(instPtr->config.phyInstPtr);
|
||||||
|
|
||||||
// last scan beam number
|
|
||||||
instPtr->scanFSM->beamNo = node->nodeInfo.beamNo;
|
|
||||||
// Update scan beam table
|
|
||||||
L2_Scan_RefreashScanTable(instPtr);
|
|
||||||
|
|
||||||
// Reset node ttl
|
// Reset node ttl
|
||||||
node->ttlCnt = 0;
|
node->ttlCnt = 0;
|
||||||
|
|
||||||
@@ -774,7 +786,7 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
|
|||||||
instPtr->log.lastBeamWidth = PHY_ANT_BEAM_16;
|
instPtr->log.lastBeamWidth = PHY_ANT_BEAM_16;
|
||||||
if (commNode != NULL)
|
if (commNode != NULL)
|
||||||
{
|
{
|
||||||
Phy_SetBeamNo(instPtr->config.phyInstPtr, commNode->nodeInfo.beamNo);
|
Phy_SetBeamNo(instPtr->config.phyInstPtr, commNode->nodeInfo.beamNo, PHY_ANT_BEAM_16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -388,7 +388,7 @@ int32_t L2_Service_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntr
|
|||||||
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD && commNode != NULL)
|
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD && commNode != NULL)
|
||||||
{
|
{
|
||||||
Phy_SetBeamWidth(phyRef, PHY_ANT_BEAM_16);
|
Phy_SetBeamWidth(phyRef, PHY_ANT_BEAM_16);
|
||||||
Phy_SetBeamNo(phyRef, commNode->nodeInfo.beamNo);
|
Phy_SetBeamNo(phyRef, commNode->nodeInfo.beamNo, PHY_ANT_BEAM_16);
|
||||||
instPtr->log.lastBeamWidth = PHY_ANT_BEAM_16;
|
instPtr->log.lastBeamWidth = PHY_ANT_BEAM_16;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -87,10 +87,16 @@ uint16_t hopPattern_10KBPS_10MS[L1_FRAME_10KBPS_10MS_HOPS] =
|
|||||||
1500
|
1500
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//uint16_t hopPattern_10KBPS_20MS[L1_FRAME_10KBPS_20MS_HOPS] =
|
||||||
|
//{
|
||||||
|
// 1500, 1600, 1700, 1800, 1900, 1400, 1300, 1200,
|
||||||
|
// 1100, 1000, 900
|
||||||
|
//};
|
||||||
|
|
||||||
uint16_t hopPattern_10KBPS_20MS[L1_FRAME_10KBPS_20MS_HOPS] =
|
uint16_t hopPattern_10KBPS_20MS[L1_FRAME_10KBPS_20MS_HOPS] =
|
||||||
{
|
{
|
||||||
1500, 1600, 1700, 1800, 1900, 1400, 1300, 1200,
|
1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500,
|
||||||
1100, 1000, 900
|
1500, 1500, 1500
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t hopPattern_40KBPS_10MS[L1_FRAME_40KBPS_10MS_HOPS] =
|
uint16_t hopPattern_40KBPS_10MS[L1_FRAME_40KBPS_10MS_HOPS] =
|
||||||
@@ -99,11 +105,18 @@ uint16_t hopPattern_40KBPS_10MS[L1_FRAME_40KBPS_10MS_HOPS] =
|
|||||||
1500
|
1500
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//uint16_t hopPattern_40KBPS_20MS[L1_FRAME_40KBPS_20MS_HOPS] =
|
||||||
|
//{
|
||||||
|
// 1600, 1650, 1700, 1750, 1800, 1850, 1900, 1550,
|
||||||
|
// 1500, 1450, 1400, 1350, 1300, 1250, 1200, 1150,
|
||||||
|
// 1100, 1050, 1000
|
||||||
|
//};
|
||||||
|
|
||||||
uint16_t hopPattern_40KBPS_20MS[L1_FRAME_40KBPS_20MS_HOPS] =
|
uint16_t hopPattern_40KBPS_20MS[L1_FRAME_40KBPS_20MS_HOPS] =
|
||||||
{
|
{
|
||||||
1600, 1650, 1700, 1750, 1800, 1850, 1900, 1550,
|
1700, 1800, 1900, 2000, 1700, 1700, 1700, 1700,
|
||||||
1500, 1450, 1400, 1350, 1300, 1250, 1200, 1150,
|
1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700,
|
||||||
1100, 1050, 1000
|
1700, 1700, 1700
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t hopPattern_200KBPS_5MS[L1_FRAME_200KBPS_5MS_HOPS] =
|
uint16_t hopPattern_200KBPS_5MS[L1_FRAME_200KBPS_5MS_HOPS] =
|
||||||
@@ -213,6 +226,29 @@ void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode)
|
|||||||
instPtr->antConfig.antMode = config;
|
instPtr->antConfig.antMode = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**
|
||||||
|
* @brief Update antenna beam width setting
|
||||||
|
*
|
||||||
|
* @param instPtr pointer to physical layer instance
|
||||||
|
* @param table new beam table
|
||||||
|
* @param offset table offset
|
||||||
|
*
|
||||||
|
* @return None
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
void Phy_SetBeamTable(PHY_INST *instPtr, PHY_ANT_ANGLE *table, uint32_t offset)
|
||||||
|
{
|
||||||
|
ASSERT(instPtr != NULL);
|
||||||
|
ASSERT(table != NULL);
|
||||||
|
for (int i = 0; i < L1_NUM_ANT_NRRW_PATTERN; i++)
|
||||||
|
{
|
||||||
|
instPtr->antNrrwPattern[i] = table[(i+offset) % L1_NUM_ANT_NRRW_PATTERN];
|
||||||
|
}
|
||||||
|
memcpy((uint32_t*)instPtr->antInfoAddr, instPtr->antNrrwPattern,
|
||||||
|
L1_NUM_ANT_NRRW_PATTERN*sizeof(PHY_ANT_ANGLE));
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**
|
/**
|
||||||
* @brief Update antenna point direction using predefined beam table
|
* @brief Update antenna point direction using predefined beam table
|
||||||
@@ -224,10 +260,11 @@ void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode)
|
|||||||
* FAILURE beamNo exceeds the table size
|
* FAILURE beamNo exceeds the table size
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo)
|
int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo, PHY_ANT_BEAM_WIDTH beamWidth)
|
||||||
{
|
{
|
||||||
ASSERT(instPtr != NULL);
|
ASSERT(instPtr != NULL);
|
||||||
if (instPtr->beamWd.next == PHY_ANT_BEAM_16)
|
|
||||||
|
if (beamWidth == PHY_ANT_BEAM_16)
|
||||||
{
|
{
|
||||||
if (beamNo >= L1_NUM_ANT_NRRW_PATTERN)
|
if (beamNo >= L1_NUM_ANT_NRRW_PATTERN)
|
||||||
{
|
{
|
||||||
@@ -257,27 +294,6 @@ int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/**
|
|
||||||
* @brief Update antenna beam width setting
|
|
||||||
*
|
|
||||||
* @param instPtr pointer to physical layer instance
|
|
||||||
* @param table new beam table
|
|
||||||
* @param offset table offset
|
|
||||||
*
|
|
||||||
* @return None
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
void Phy_SetBeamTable(PHY_INST *instPtr, PHY_ANT_ANGLE *table, uint32_t offset)
|
|
||||||
{
|
|
||||||
ASSERT(instPtr != NULL);
|
|
||||||
ASSERT(table != NULL);
|
|
||||||
for (int i = 0; i < L1_NUM_ANT_NRRW_PATTERN; i++)
|
|
||||||
{
|
|
||||||
instPtr->antNrrwPattern[i] = table[(i+offset) % L1_NUM_ANT_NRRW_PATTERN];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**
|
/**
|
||||||
* @brief Update antenna beam width setting
|
* @brief Update antenna beam width setting
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ void Phy_AntConfigInit(PHY_ANT_CONFIG *antConfig);
|
|||||||
void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode);
|
void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode);
|
||||||
void Phy_SetBeamTable(PHY_INST *instPtr, PHY_ANT_ANGLE *table, uint32_t offset);
|
void Phy_SetBeamTable(PHY_INST *instPtr, PHY_ANT_ANGLE *table, uint32_t offset);
|
||||||
int32_t Phy_SetBeamWidth(PHY_INST *instPtr, PHY_ANT_BEAM_WIDTH beamWidth);
|
int32_t Phy_SetBeamWidth(PHY_INST *instPtr, PHY_ANT_BEAM_WIDTH beamWidth);
|
||||||
int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo);
|
int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo, PHY_ANT_BEAM_WIDTH beamWidth);
|
||||||
int32_t Phy_SetBeamAngle(PHY_INST *phyInstPtr, double offAx, double rndAx);
|
int32_t Phy_SetBeamAngle(PHY_INST *phyInstPtr, double offAx, double rndAx);
|
||||||
int32_t Phy_SetTimeWord(PHY_INST *instPtr, const TIME_WORD *tmWord, PHY_TIME_WORD_TYPE tmType);
|
int32_t Phy_SetTimeWord(PHY_INST *instPtr, const TIME_WORD *tmWord, PHY_TIME_WORD_TYPE tmType);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user