From ef1c41b500a3de26c8ca71a119b568fa153175e3 Mon Sep 17 00:00:00 2001 From: Gatsby Van Date: Thu, 14 Mar 2024 21:24:22 +0800 Subject: [PATCH] update beam scan scheme --- .../src/networking/link_layer/link_layer.c | 11 +- .../networking/link_layer/link_layer_types.h | 3 +- .../src/networking/link_layer/scan.c | 118 ++++++++++++- .../src/networking/phy_layer/phy_antenna.c | 119 +++---------- .../src/networking/phy_layer/phy_layer.c | 166 +++++++++--------- .../src/networking/phy_layer/phy_layer.h | 13 +- 6 files changed, 236 insertions(+), 194 deletions(-) diff --git a/df_datalink_sp/src/networking/link_layer/link_layer.c b/df_datalink_sp/src/networking/link_layer/link_layer.c index fbe8005..081c3a1 100644 --- a/df_datalink_sp/src/networking/link_layer/link_layer.c +++ b/df_datalink_sp/src/networking/link_layer/link_layer.c @@ -32,6 +32,7 @@ /************************** Constant Definitions *****************************/ #define NET_START_TIME_INFTY UINT32_MAX #define LINK_BROCK_THRESHOLD (3 * 200) // 3 secods + /************************** Variable Definitions *****************************/ /***************** Macros (Inline Functions) Definitions *********************/ /**************************** Type Definitions *******************************/ @@ -989,7 +990,8 @@ int32_t Linklayer_EventHandler(L2_INST *instPtr, const L2_EVENT *l2Event) } else { - DBG_WARNING("Unsupported routine state [%" PRId8 "], Continue withe previous routine table.\n", instPtr->nextState); + DBG_WARNING("Unsupported routine state [%" PRId8 "], " + "Continue with previous routine table.\n", instPtr->nextState); } break; } @@ -1237,17 +1239,16 @@ int32_t Linklayer_Proc(L2_INST *instPtr) // Update link layer state. instPtr->mainState = instPtr->nextState; - instPtr->linkLog.tuNum = instPtr->frameNum.curr; instPtr->linkLog.slotNum = (uint8_t)instPtr->slotNum.curr; instPtr->linkLog.nodeType = (instPtr->config.myType == L2_NODE_HEAD) ? 0xAA : 0xCC; instPtr->linkLog.cxnStatus = (instPtr->cxn2Net) ? 0x11 : 0x00; instPtr->linkLog.linkStage = (instPtr->mainState == L2_INIT_STATE) ? 0x11 : 0x22; instPtr->linkLog.recxnCnt = instPtr->log.reconnectCnt; - instPtr->linkLog.beamNo = instPtr->log.scanBeamNo; + instPtr->linkLog.beamNo = instPtr->scanFSM->beamNo; instPtr->linkLog.beamWidth = instPtr->log.lastBeamWidth; - instPtr->linkLog.beamAz = antSubnrrwPattern[instPtr->log.scanBeamNo].oaxis; - instPtr->linkLog.beamEl = antSubnrrwPattern[instPtr->log.scanBeamNo].raxis; + instPtr->linkLog.beamAz = instPtr->config.phyInstPtr->antNrrwPattern[instPtr->scanFSM->beamNo].oaxis; + instPtr->linkLog.beamEl = instPtr->config.phyInstPtr->antNrrwPattern[instPtr->scanFSM->beamNo].raxis; instPtr->linkLog.advTxCnt = (uint16_t)instPtr->log.advTxCnt; instPtr->linkLog.advRecvCnt = (uint16_t)instPtr->log.advRecvCnt; instPtr->linkLog.advCorrectCnt = (uint16_t)instPtr->log.advCorrectCnt; 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 b1dc338..56b8382 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 @@ -195,10 +195,11 @@ typedef struct bool isAdvRecvd; // bm received. bool isAckPending; // 2way acq done. uint8_t scanCnt; - uint8_t beamNo; uint8_t advTimeout; uint8_t cfmTimeout; SCAN_STAGE scanStage; // only for member node + uint8_t beamNo; + uint8_t tableNo; } L2_SCAN_FSM; diff --git a/df_datalink_sp/src/networking/link_layer/scan.c b/df_datalink_sp/src/networking/link_layer/scan.c index fa3c3a3..d7bfcef 100644 --- a/df_datalink_sp/src/networking/link_layer/scan.c +++ b/df_datalink_sp/src/networking/link_layer/scan.c @@ -34,7 +34,89 @@ /**************************** Type Definitions *******************************/ /************************** Variable Definitions *****************************/ +// Pair by regex +// Regex: ((\{\.oaxis = [0-9]+[ ,]+\.raxis = [0-9]+[ ]*\}, ){2}) +PHY_ANT_ANGLE antNrrwPattern_0[L1_NUM_ANT_NRRW_PATTERN] = +{ + {.oaxis = 0 , .raxis = 0 }, + {.oaxis = 139, .raxis = 2225}, + {.oaxis = 152, .raxis = 850 }, + {.oaxis = 138, .raxis = 3155}, + {.oaxis = 159, .raxis = 1680}, + {.oaxis = 168, .raxis = 285 }, + {.oaxis = 195, .raxis = 2630}, + {.oaxis = 211, .raxis = 1204}, + {.oaxis = 225, .raxis = 3429}, + {.oaxis = 249, .raxis = 2022}, + {.oaxis = 272, .raxis = 629 }, + {.oaxis = 265, .raxis = 2934}, + {.oaxis = 277, .raxis = 1499}, + {.oaxis = 289, .raxis = 124 }, + {.oaxis = 300, .raxis = 2349}, + {.oaxis = 311, .raxis = 959 }, + {.oaxis = 321, .raxis = 3199}, + {.oaxis = 331, .raxis = 1824}, + {.oaxis = 341, .raxis = 389 }, + {.oaxis = 351, .raxis = 2674}, + {.oaxis = 360, .raxis = 1268}, + {.oaxis = 364, .raxis = 3483}, + {.oaxis = 378, .raxis = 2118}, + {.oaxis = 387, .raxis = 733 }, + {.oaxis = 416, .raxis = 3028}, + {.oaxis = 404, .raxis = 1623}, + {.oaxis = 433, .raxis = 248 }, + {.oaxis = 421, .raxis = 2473}, + {.oaxis = 429, .raxis = 1098}, + {.oaxis = 437, .raxis = 3303}, + {.oaxis = 445, .raxis = 1948}, + {.oaxis = 443, .raxis = 543 }, + {.oaxis = 450, .raxis = 2828}, + {.oaxis = 448, .raxis = 1422}, + {.oaxis = 455, .raxis = 47 }, + {.oaxis = 453, .raxis = 2272}, + {.oaxis = 450, .raxis = 897 } +}; +PHY_ANT_ANGLE antNrrwPattern_1[L1_NUM_ANT_NRRW_PATTERN] = +{ + {.oaxis = 0 , .raxis = 0 }, + {.oaxis = 139, .raxis = 1155}, + {.oaxis = 152, .raxis = 3380}, + {.oaxis = 138, .raxis = 2085}, + {.oaxis = 159, .raxis = 610 }, + {.oaxis = 168, .raxis = 2815}, + {.oaxis = 195, .raxis = 1560}, + {.oaxis = 211, .raxis = 134 }, + {.oaxis = 225, .raxis = 2359}, + {.oaxis = 249, .raxis = 952 }, + {.oaxis = 272, .raxis = 3159}, + {.oaxis = 265, .raxis = 1864}, + {.oaxis = 277, .raxis = 429 }, + {.oaxis = 289, .raxis = 2654}, + {.oaxis = 300, .raxis = 1279}, + {.oaxis = 311, .raxis = 3489}, + {.oaxis = 321, .raxis = 2129}, + {.oaxis = 331, .raxis = 754 }, + {.oaxis = 341, .raxis = 2919}, + {.oaxis = 351, .raxis = 1604}, + {.oaxis = 360, .raxis = 198 }, + {.oaxis = 364, .raxis = 2413}, + {.oaxis = 378, .raxis = 1048}, + {.oaxis = 387, .raxis = 3263}, + {.oaxis = 416, .raxis = 1958}, + {.oaxis = 404, .raxis = 553 }, + {.oaxis = 433, .raxis = 2778}, + {.oaxis = 421, .raxis = 1403}, + {.oaxis = 429, .raxis = 28 }, + {.oaxis = 437, .raxis = 2233}, + {.oaxis = 445, .raxis = 878 }, + {.oaxis = 443, .raxis = 3073}, + {.oaxis = 450, .raxis = 1758}, + {.oaxis = 448, .raxis = 352 }, + {.oaxis = 455, .raxis = 2577}, + {.oaxis = 453, .raxis = 1202}, + {.oaxis = 450, .raxis = 3427}, +}; /************************** Function Prototypes ******************************/ static void LockStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state); static void AdvRecvStateUpdate(L2_SCAN_FSM *scanFsmPtr, bool state); @@ -334,10 +416,11 @@ void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr) scanFSMPtr->isAdvRecvd = false; scanFSMPtr->isAckPending = false; scanFSMPtr->scanCnt = 0; - scanFSMPtr->beamNo = 0; scanFSMPtr->advTimeout = 0; scanFSMPtr->cfmTimeout = 0; scanFSMPtr->scanStage = L2_SCAN_NONE_STAGE; + scanFSMPtr->beamNo = 0; + scanFSMPtr->tableNo = 0; } /*****************************************************************************/ @@ -354,10 +437,37 @@ void L2_Scan_Destroy(L2_SCAN_FSM *scanFSMPtr) free(scanFSMPtr); } +/*****************************************************************************/ +/** + * @brief Refresh scan beam table. + * + * @param instPtr a pointer to linklayer layer instance + * + * @return NONE + * + ******************************************************************************/ +void L2_Scan_RefreashScanTable(L2_INST *instPtr) +{ + ASSERT(instPtr != NULL); + L2_SCAN_FSM *scanFsmPtr = instPtr->scanFSM; + PHY_INST *phyRef = instPtr->config.phyInstPtr; + if (scanFsmPtr->tableNo == 0) + { + Phy_SetBeamTable(phyRef, antNrrwPattern_0, scanFsmPtr->beamNo); + scanFsmPtr->tableNo = 1; + } + else + { + Phy_SetBeamTable(phyRef, antNrrwPattern_1, scanFsmPtr->beamNo); + scanFsmPtr->tableNo = 0; + } +} + /*****************************************************************************/ /** * @brief Scan net packet handler. * + * @param instPtr a pointer to linklayer layer instance * @param msg A pointer to frame data buffer. * * @return @@ -407,8 +517,10 @@ int32_t L2_Scan_PktHandler(L2_INST *instPtr, uint8_t *msg) node->nodeInfo.pos.z = (double) nodePos; node->nodeInfo.beamNo = Phy_LastScanBeamNo(instPtr->config.phyInstPtr); - // log last scan beam number - instPtr->log.scanBeamNo = node->nodeInfo.beamNo; + // last scan beam number + instPtr->scanFSM->beamNo = node->nodeInfo.beamNo; + // Update scan beam table + L2_Scan_RefreashScanTable(instPtr); // Reset node ttl node->ttlCnt = 0; diff --git a/df_datalink_sp/src/networking/phy_layer/phy_antenna.c b/df_datalink_sp/src/networking/phy_layer/phy_antenna.c index fda913d..6bd73f8 100644 --- a/df_datalink_sp/src/networking/phy_layer/phy_antenna.c +++ b/df_datalink_sp/src/networking/phy_layer/phy_antenna.c @@ -120,76 +120,6 @@ uint16_t hopPattern_1M2BPS_5MS[L1_FRAME_1M2BPS_5MS_HOPS] = 900, 1000, 500, 500 }; -// Pair by regex -// Regex: ((\{\.oaxis = [0-9]+[ ,]+\.raxis = [0-9]+[ ]*\}, ){2}) -#ifdef PHY_BEAM_SET_PRESET -PHY_ANT_ANGLE antSubnrrwPattern[L1_NUM_ANT_SUBNRRW_PATTERN] = -{ - {.oaxis = 0 , .raxis = 0 }, {.oaxis = 10, .raxis = 85 }, - {.oaxis = 14, .raxis = 307}, {.oaxis = 17, .raxis = 170}, - {.oaxis = 19, .raxis = 32 }, {.oaxis = 21, .raxis = 255}, - {.oaxis = 24, .raxis = 117}, {.oaxis = 25, .raxis = 340}, - {.oaxis = 27, .raxis = 202}, {.oaxis = 29, .raxis = 65 }, - {.oaxis = 31, .raxis = 287}, {.oaxis = 32, .raxis = 150}, - {.oaxis = 34, .raxis = 12 }, {.oaxis = 35, .raxis = 235}, - {.oaxis = 36, .raxis = 97 }, {.oaxis = 38, .raxis = 320}, - {.oaxis = 39, .raxis = 182}, {.oaxis = 40, .raxis = 45 }, - {.oaxis = 41, .raxis = 267}, {.oaxis = 43, .raxis = 130}, - {.oaxis = 44, .raxis = 352}, {.oaxis = 45, .raxis = 215}, - {.oaxis = 46, .raxis = 77 }, {.oaxis = 47, .raxis = 300}, - {.oaxis = 48, .raxis = 162}, {.oaxis = 49, .raxis = 25 }, - {.oaxis = 50, .raxis = 247}, {.oaxis = 51, .raxis = 110}, - {.oaxis = 52, .raxis = 332}, {.oaxis = 53, .raxis = 195}, - {.oaxis = 54, .raxis = 57 }, {.oaxis = 55, .raxis = 280}, - {.oaxis = 56, .raxis = 142}, {.oaxis = 57, .raxis = 5 }, - {.oaxis = 58, .raxis = 227}, {.oaxis = 59, .raxis = 90 }, - {.oaxis = 60, .raxis = 312} -}; -PHY_ANT_ANGLE antNrrwPattern[L1_NUM_ANT_NRRW_PATTERN] = -{ - {.oaxis = 0 , .raxis = 0 }, {.oaxis = 7 , .raxis = 85 }, - {.oaxis = 10, .raxis = 307}, {.oaxis = 13, .raxis = 170}, - {.oaxis = 15, .raxis = 32 }, {.oaxis = 17, .raxis = 255}, - {.oaxis = 18, .raxis = 117}, {.oaxis = 20, .raxis = 340}, - {.oaxis = 21, .raxis = 202}, {.oaxis = 22, .raxis = 65 }, - {.oaxis = 24, .raxis = 287}, {.oaxis = 25, .raxis = 150}, - {.oaxis = 26, .raxis = 12 }, {.oaxis = 27, .raxis = 235}, - {.oaxis = 28, .raxis = 97 }, {.oaxis = 29, .raxis = 320}, - {.oaxis = 30, .raxis = 182}, {.oaxis = 31, .raxis = 45 }, - {.oaxis = 32, .raxis = 267}, {.oaxis = 33, .raxis = 130}, - {.oaxis = 34, .raxis = 352}, {.oaxis = 34, .raxis = 215}, - {.oaxis = 35, .raxis = 77 }, {.oaxis = 36, .raxis = 300}, - {.oaxis = 37, .raxis = 162}, {.oaxis = 38, .raxis = 25 }, - {.oaxis = 38, .raxis = 247}, {.oaxis = 39, .raxis = 110}, - {.oaxis = 40, .raxis = 332}, {.oaxis = 41, .raxis = 195}, - {.oaxis = 41, .raxis = 57 }, {.oaxis = 42, .raxis = 280}, - {.oaxis = 43, .raxis = 142}, {.oaxis = 44, .raxis = 5 }, - {.oaxis = 44, .raxis = 227}, {.oaxis = 45, .raxis = 90 }, - {.oaxis = 46, .raxis = 312}, {.oaxis = 46, .raxis = 175}, - {.oaxis = 47, .raxis = 37 }, {.oaxis = 48, .raxis = 260}, - {.oaxis = 48, .raxis = 122}, {.oaxis = 49, .raxis = 345}, - {.oaxis = 49, .raxis = 207}, {.oaxis = 50, .raxis = 70 }, - {.oaxis = 51, .raxis = 292}, {.oaxis = 51, .raxis = 155}, - {.oaxis = 52, .raxis = 17 }, {.oaxis = 53, .raxis = 240}, - {.oaxis = 53, .raxis = 102}, {.oaxis = 54, .raxis = 325}, - {.oaxis = 54, .raxis = 187}, {.oaxis = 55, .raxis = 50 }, - {.oaxis = 55, .raxis = 272}, {.oaxis = 56, .raxis = 135}, - {.oaxis = 57, .raxis = 357}, {.oaxis = 57, .raxis = 220}, - {.oaxis = 58, .raxis = 82 }, {.oaxis = 58, .raxis = 305}, - {.oaxis = 59, .raxis = 167}, {.oaxis = 59, .raxis = 30 }, - {.oaxis = 60, .raxis = 252} -}; -#else -PHY_ANT_ANGLE antSubnrrwPattern[L1_NUM_ANT_SUBNRRW_PATTERN] = -{ - 0 -}; -PHY_ANT_ANGLE antNrrwPattern[L1_NUM_ANT_NRRW_PATTERN] = -{ - 0 -}; -#endif - /*****************************************************************************/ /** * @brief Initialize antenna configurations (load preset values) @@ -297,7 +227,7 @@ void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode) int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo) { ASSERT(instPtr != NULL); - if (instPtr->beamWd.next == PHY_ANT_BEAM_8) + if (instPtr->beamWd.next == PHY_ANT_BEAM_16) { if (beamNo >= L1_NUM_ANT_NRRW_PATTERN) { @@ -306,26 +236,10 @@ int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo) else { instPtr->beamNo.next = beamNo; - instPtr->antConfig.oaxis[0] = (uint8_t)(antNrrwPattern[beamNo].oaxis >> 8); - instPtr->antConfig.oaxis[1] = (uint8_t)(antNrrwPattern[beamNo].oaxis); - instPtr->antConfig.raxis[0] = (uint8_t)(antNrrwPattern[beamNo].raxis >> 8); - instPtr->antConfig.raxis[1] = (uint8_t)(antNrrwPattern[beamNo].raxis); - return SUCCESS; - } - } - else if (instPtr->beamWd.next == PHY_ANT_BEAM_25) - { - if (beamNo >= L1_NUM_ANT_SUBNRRW_PATTERN) - { - return FAILURE; - } - else - { - instPtr->beamNo.next = beamNo; - instPtr->antConfig.oaxis[0] = (uint8_t)(antSubnrrwPattern[beamNo].oaxis >> 8); - instPtr->antConfig.oaxis[1] = (uint8_t)(antSubnrrwPattern[beamNo].oaxis); - instPtr->antConfig.raxis[0] = (uint8_t)(antSubnrrwPattern[beamNo].raxis >> 8); - instPtr->antConfig.raxis[1] = (uint8_t)(antSubnrrwPattern[beamNo].raxis); + instPtr->antConfig.oaxis[0] = (uint8_t)(instPtr->antNrrwPattern[beamNo].oaxis >> 8); + instPtr->antConfig.oaxis[1] = (uint8_t)(instPtr->antNrrwPattern[beamNo].oaxis); + instPtr->antConfig.raxis[0] = (uint8_t)(instPtr->antNrrwPattern[beamNo].raxis >> 8); + instPtr->antConfig.raxis[1] = (uint8_t)(instPtr->antNrrwPattern[beamNo].raxis); return SUCCESS; } } @@ -343,6 +257,27 @@ 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 @@ -369,7 +304,7 @@ int32_t Phy_SetBeamWidth(PHY_INST *instPtr, PHY_ANT_BEAM_WIDTH beamWidth) case PHY_ANT_BEAM_25: beamConfig |= ANT_BEAM_SUBNARROR_0; break; - case PHY_ANT_BEAM_8: + case PHY_ANT_BEAM_16: beamConfig |= ANT_BEAM_NARROR; break; default: diff --git a/df_datalink_sp/src/networking/phy_layer/phy_layer.c b/df_datalink_sp/src/networking/phy_layer/phy_layer.c index 355a425..abd2e31 100644 --- a/df_datalink_sp/src/networking/phy_layer/phy_layer.c +++ b/df_datalink_sp/src/networking/phy_layer/phy_layer.c @@ -34,7 +34,6 @@ #include "xadcps.h" #endif - /************************** Constant Definitions *****************************/ #define L1_FRAME_LEN_MAX (8192 / 8) // byte #define L1_FRAME_2KBPS_20MS_LEN 0 // byte @@ -185,24 +184,25 @@ inline L1_FRAME_TYPE Phy_GetLastRecvFrameType(PHY_INST *instPtr) return L1_NONE_FRAME; } int32_t frame_type = (PhyRead(instPtr, COASE_FREQEST) & COASE_TYPE_MASK); - switch (frame_type) { - case COASE_TYPE_2KBPS_20MS: + switch (frame_type) + { + case COASE_TYPE_2KBPS_20MS: return L1_2KBPS_20MS_FRAME; - case COASE_TYPE_2KBPS_100MS: + case COASE_TYPE_2KBPS_100MS: return L1_2KBPS_100MS_FRAME; - case COASE_TYPE_10KBPS_10MS: + case COASE_TYPE_10KBPS_10MS: return L1_10KBPS_10MS_FRAME; - case COASE_TYPE_10KBPS_20MS: + case COASE_TYPE_10KBPS_20MS: return L1_10KBPS_20MS_FRAME; - case COASE_TYPE_40KBPS_20MS: + case COASE_TYPE_40KBPS_20MS: return L1_40KBPS_20MS_FRAME; - case COASE_TYPE_40KBPS_10MS: + case COASE_TYPE_40KBPS_10MS: return L1_40KBPS_10MS_FRAME; - case COASE_TYPE_200KBPS_5MS: + case COASE_TYPE_200KBPS_5MS: return L1_200KBPS_5MS_FRAME; - case COASE_TYPE_1M2BPS_5MS: + case COASE_TYPE_1M2BPS_5MS: return L1_1M2BPS_5MS_FRAME; - default: + default: return L1_NONE_FRAME; } } @@ -362,6 +362,7 @@ int32_t Phy_InstInit(PHY_INST **instPtr, PHY_CONFIG *phyConfig) { return ENOMEM; } + memset(*instPtr, 0x00, sizeof(PHY_INST)); memcpy(&((*instPtr)->phyCofig), phyConfig, sizeof(PHY_CONFIG)); (*instPtr)->isPhyEn = false; @@ -470,28 +471,30 @@ int32_t Phy_InstInit(PHY_INST **instPtr, PHY_CONFIG *phyConfig) goto init_error; } Status = XBram_CfgInitialize(&antInfoBram, bramConfigPtr, - bramConfigPtr->CtrlBaseAddress); + bramConfigPtr->CtrlBaseAddress); if (Status != SUCCESS) { goto init_error; } /* - * Execute the BRAM driver selftest. - */ - Status = XBram_SelfTest(&antConfigBram, 0); + * Execute the BRAM driver self test. + */ + Status = XBram_SelfTest(&antInfoBram, 0); if (Status != SUCCESS) { goto init_error; } - - memcpy((void*)antConfigBram.Config.MemBaseAddress, - antSubnrrwPattern, sizeof(antSubnrrwPattern)); + (*instPtr)->antInfoAddr = antInfoBram.Config.MemBaseAddress; uint32_t phyMainCtrl = PhyRead(*instPtr, PHY_MAIN_CTRL); phyMainCtrl &= ~PHY_MAIN_CTRL_NSCAN_MASK; phyMainCtrl |= PHY_MAIN_CTRL_NSCAN_MASK & - (L1_NUM_ANT_SUBNRRW_PATTERN << PHY_MAIN_CTRL_NSCAN_SHIFT); + (L1_NUM_ANT_NRRW_PATTERN << PHY_MAIN_CTRL_NSCAN_SHIFT); PhyWrite(*instPtr, PHY_MAIN_CTRL, phyMainCtrl); } + else + { + (*instPtr)->antInfoAddr = NULL; + } /* Initialize the XAdc driver. */ XAdcPs_Config *xadcConfigPtr; @@ -687,52 +690,52 @@ int32_t Phy_SetupNextSlot(PHY_INST *instPtr, PHY_TOR_TYPE txrxMode, } else { - switch (frameType) - { - case L1_2KBPS_20MS_FRAME: - phyModeCtrl |= PHY_MODE_CTRL_FRAME_2KBPS_20MS; - hopNum = L1_FRAME_2KBPS_20MS_HOPS; - hopPattern = hopPattern_2KBPS_20MS; - break; - case L1_2KBPS_100MS_FRAME: - phyModeCtrl |= PHY_MODE_CTRL_FRAME_2KBPS_100MS; - hopNum = L1_FRAME_2KBPS_100MS_HOPS; - hopPattern = hopPattern_2KBPS_100MS; - break; - case L1_10KBPS_10MS_FRAME: - phyModeCtrl |= PHY_MODE_CTRL_FRAME_10KBPS_10MS; - hopNum = L1_FRAME_10KBPS_20MS_HOPS; - hopPattern = hopPattern_10KBPS_20MS; - break; - case L1_10KBPS_20MS_FRAME: - phyModeCtrl |= PHY_MODE_CTRL_FRAME_10KBPS_20MS; - hopNum = L1_FRAME_10KBPS_20MS_HOPS; - hopPattern = hopPattern_10KBPS_20MS; - break; - case L1_40KBPS_20MS_FRAME: - phyModeCtrl |= PHY_MODE_CTRL_FRAME_40KBPS_20MS; - hopNum = L1_FRAME_40KBPS_20MS_HOPS; - hopPattern = hopPattern_40KBPS_20MS; - break; - case L1_40KBPS_10MS_FRAME: - phyModeCtrl |= PHY_MODE_CTRL_FRAME_40KBPS_10MS; - hopNum = L1_FRAME_40KBPS_10MS_HOPS; - hopPattern = hopPattern_40KBPS_10MS; - break; - case L1_200KBPS_5MS_FRAME: - phyModeCtrl |= PHY_MODE_CTRL_FRAME_200KBPS_5MS; - hopNum = L1_FRAME_200KBPS_5MS_HOPS; - hopPattern = hopPattern_200KBPS_5MS; - break; - case L1_1M2BPS_5MS_FRAME: - phyModeCtrl |= PHY_MODE_CTRL_FRAME_1M2BPS_5MS; - hopNum = L1_FRAME_1M2BPS_5MS_HOPS; - hopPattern = hopPattern_1M2BPS_5MS; - break; - default: - return EPARAM; - break; - } + switch (frameType) + { + case L1_2KBPS_20MS_FRAME: + phyModeCtrl |= PHY_MODE_CTRL_FRAME_2KBPS_20MS; + hopNum = L1_FRAME_2KBPS_20MS_HOPS; + hopPattern = hopPattern_2KBPS_20MS; + break; + case L1_2KBPS_100MS_FRAME: + phyModeCtrl |= PHY_MODE_CTRL_FRAME_2KBPS_100MS; + hopNum = L1_FRAME_2KBPS_100MS_HOPS; + hopPattern = hopPattern_2KBPS_100MS; + break; + case L1_10KBPS_10MS_FRAME: + phyModeCtrl |= PHY_MODE_CTRL_FRAME_10KBPS_10MS; + hopNum = L1_FRAME_10KBPS_20MS_HOPS; + hopPattern = hopPattern_10KBPS_20MS; + break; + case L1_10KBPS_20MS_FRAME: + phyModeCtrl |= PHY_MODE_CTRL_FRAME_10KBPS_20MS; + hopNum = L1_FRAME_10KBPS_20MS_HOPS; + hopPattern = hopPattern_10KBPS_20MS; + break; + case L1_40KBPS_20MS_FRAME: + phyModeCtrl |= PHY_MODE_CTRL_FRAME_40KBPS_20MS; + hopNum = L1_FRAME_40KBPS_20MS_HOPS; + hopPattern = hopPattern_40KBPS_20MS; + break; + case L1_40KBPS_10MS_FRAME: + phyModeCtrl |= PHY_MODE_CTRL_FRAME_40KBPS_10MS; + hopNum = L1_FRAME_40KBPS_10MS_HOPS; + hopPattern = hopPattern_40KBPS_10MS; + break; + case L1_200KBPS_5MS_FRAME: + phyModeCtrl |= PHY_MODE_CTRL_FRAME_200KBPS_5MS; + hopNum = L1_FRAME_200KBPS_5MS_HOPS; + hopPattern = hopPattern_200KBPS_5MS; + break; + case L1_1M2BPS_5MS_FRAME: + phyModeCtrl |= PHY_MODE_CTRL_FRAME_1M2BPS_5MS; + hopNum = L1_FRAME_1M2BPS_5MS_HOPS; + hopPattern = hopPattern_1M2BPS_5MS; + break; + default: + return EPARAM; + break; + } } // Set frame configs @@ -746,12 +749,10 @@ int32_t Phy_SetupNextSlot(PHY_INST *instPtr, PHY_TOR_TYPE txrxMode, instPtr->antConfig.antFreq[1] = (uint8_t)hopPattern[i]; instPtr->antConfig.rfFreq[0] = (uint8_t)(hopPattern[i] >> 8); instPtr->antConfig.rfFreq[1] = (uint8_t)hopPattern[i]; - memcpy((uint8_t *)(antConfigAddr + i *ANT_COINFO_LEN), + memcpy((uint8_t *)(antConfigAddr + i * ANT_COINFO_LEN), dataSrcPtr, sizeof(PHY_ANT_CONFIG)); } - uint32_t antCtrl = (instPtr->antConfigOffset & ANT_CONFIG_OFFSET_MASK) - | ((hopNum << ANT_CONFIG_NUM_SHIFT) & ANT_CONFIG_NUM_MASK) - | ((ANT_COINFO_LEN << ANT_CONFIG_LEN_SHIFT) & ANT_CONFIG_LEN_MASK); + uint32_t antCtrl = (instPtr->antConfigOffset & ANT_CONFIG_OFFSET_MASK) | ((hopNum << ANT_CONFIG_NUM_SHIFT) & ANT_CONFIG_NUM_MASK) | ((ANT_COINFO_LEN << ANT_CONFIG_LEN_SHIFT) & ANT_CONFIG_LEN_MASK); /* memcpy((uint8_t*)antConfigDataAddr, hopPattern, hopNum*sizeof(uint16_t)); @@ -891,7 +892,6 @@ double Phy_GetFreqEst(PHY_INST *instPtr) L1_FRAME_TYPE frameType; double coarse, fine; - frameType = Phy_GetLastRecvFrameType(instPtr); if (frameType > L1_1M2BPS_5MS_FRAME || frameType <= L1_NONE_FRAME) { @@ -909,7 +909,7 @@ double Phy_GetFreqEst(PHY_INST *instPtr) coarse = (double)(8 - acqFreqIdx) * (250e3 / 4); coarse += (double)syncFreqIdx * 12e6 / 64 / 128; - fine = 48e6/2048*((double)estAbs)/8192.0; + fine = 48e6 / 2048 * ((double)estAbs) / 8192.0; } else { @@ -917,11 +917,10 @@ double Phy_GetFreqEst(PHY_INST *instPtr) coarse = (double)(80 - acqFreqIdx) * (31.25e3 / 4); coarse += (double)syncFreqIdx * 1.5e6 / 64 / 128; - fine = 12e6/2048*((double)estAbs)/8192.0; + fine = 12e6 / 2048 * ((double)estAbs) / 8192.0; } - fine = ((fineReg & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ? - -fine : fine; + fine = ((fineReg & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ? -fine : fine; return (coarse + fine); } @@ -993,15 +992,14 @@ double Phy_GetFineFreqEst(PHY_INST *instPtr) if (frameType >= L1_200KBPS_5MS_FRAME) { // 12M Rc - freqEst = 48e6/2048*((double)estAbs)/8192.0; + freqEst = 48e6 / 2048 * ((double)estAbs) / 8192.0; } else { // 1.5M Rc - freqEst = 12e6/2048*((double)estAbs)/8192.0; + freqEst = 12e6 / 2048 * ((double)estAbs) / 8192.0; } - freqEst = ((regValue & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ? - -freqEst : freqEst; + freqEst = ((regValue & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ? -freqEst : freqEst; return freqEst; } @@ -1132,7 +1130,6 @@ void Phy_GetLastReceivedSlotStartTimeStamp(PHY_INST *instPtr, TIME_WORD *slotSta memcpy(slotStart, &(instPtr->recvSlotTime), sizeof(TIME_WORD)); } - /*****************************************************************************/ /** * @brief Copy ans store the received data, if received data valid. @@ -1272,11 +1269,9 @@ void Phy_RefreshHwSate(PHY_INST *instPtr) rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_TEMP); evalData = XAdcPs_RawToTemperature(rawData); instPtr->hwSate.spFpgaTemp = (evalData > TEMPERATURE_MAX) - ? INT8_MAX - : ((evalData < TEMPERATURE_MIN) ? INT8_MIN : (int8_t) round(evalData/TEMPERATURE_LSB)); - instPtr->hwSate.isSpOk = (instPtr->hwSate.spFpgaVolt == (VOLT_PS_OK | VOLT_PSAUX_OK | VOLT_DDR_OK | VOLT_PL_OK | VOLT_PLAUX_OK | VOLT_BRAM_OK)) - && (instPtr->hwSate.spClkState == (CLK_SP_PLL0_LOCK | CLK_SP_PLL1_LOCK)) - && (instPtr->hwSate.spAdLockState == (CLK_AD0_BBPLL_LOCK | CLK_AD0_RFPLL_LOCK | CLK_AD1_BBPLL_LOCK | CLK_AD1_RFPLL_LOCK)); + ? INT8_MAX + : ((evalData < TEMPERATURE_MIN) ? INT8_MIN : (int8_t)round(evalData / TEMPERATURE_LSB)); + instPtr->hwSate.isSpOk = (instPtr->hwSate.spFpgaVolt == (VOLT_PS_OK | VOLT_PSAUX_OK | VOLT_DDR_OK | VOLT_PL_OK | VOLT_PLAUX_OK | VOLT_BRAM_OK)) && (instPtr->hwSate.spClkState == (CLK_SP_PLL0_LOCK | CLK_SP_PLL1_LOCK)) && (instPtr->hwSate.spAdLockState == (CLK_AD0_BBPLL_LOCK | CLK_AD0_RFPLL_LOCK | CLK_AD1_BBPLL_LOCK | CLK_AD1_RFPLL_LOCK)); #else instPtr->hwSate.isSpOk = true; #endif @@ -1317,8 +1312,7 @@ void Phy_RefreshHwSate(PHY_INST *instPtr) instPtr->hwSate.antMgc1 |= (rawData & ANT_RF_MGC_CH4_MASK) >> 24; // Determin if antenna is ok. - instPtr->hwSate.isAntOk = (instPtr->hwSate.antVolt == (VOLT_ANT_PROC_OK | VOLT_ANT_RF_OK | VOLT_ANT_NIL_OK | ANT_STATE_OK)) - && (instPtr->hwSate.antPll == (CLK_ANT_BBPLL_LOCK | CLK_ANT_RFPLL0_LOCK | CLK_ANT_RFPLL1_LOCK)); + instPtr->hwSate.isAntOk = (instPtr->hwSate.antVolt == (VOLT_ANT_PROC_OK | VOLT_ANT_RF_OK | VOLT_ANT_NIL_OK | ANT_STATE_OK)) && (instPtr->hwSate.antPll == (CLK_ANT_BBPLL_LOCK | CLK_ANT_RFPLL0_LOCK | CLK_ANT_RFPLL1_LOCK)); memset(instPtr->hwSate.reserve, 0x00, sizeof(instPtr->hwSate.reserve)); diff --git a/df_datalink_sp/src/networking/phy_layer/phy_layer.h b/df_datalink_sp/src/networking/phy_layer/phy_layer.h index 41d0bcc..6b6ccc8 100644 --- a/df_datalink_sp/src/networking/phy_layer/phy_layer.h +++ b/df_datalink_sp/src/networking/phy_layer/phy_layer.h @@ -35,8 +35,7 @@ #include "../../system_monitor.h" #include "../../time_ctrl/time_ctrl.h" /************************** Constant Definitions *****************************/ -#define L1_NUM_ANT_SUBNRRW_PATTERN 37 -#define L1_NUM_ANT_NRRW_PATTERN 61 +#define L1_NUM_ANT_NRRW_PATTERN 37 #define L1_INIT_BEAM_NO 0 #define L1_INIT_ANT_WD PHY_ANT_BEAM_120 #define L1_INIT_ANT_NO 0 @@ -149,7 +148,7 @@ typedef enum PHY_ANT_BEAM_120 = 1, PHY_ANT_BEAM_60 = 2, PHY_ANT_BEAM_25 = 3, - PHY_ANT_BEAM_8 = 4 + PHY_ANT_BEAM_16 = 4 } PHY_ANT_BEAM_WIDTH; typedef enum @@ -205,6 +204,7 @@ typedef struct uintptr_t recvDataAddr; uintptr_t sendDataAddr; uintptr_t antConfigAddr; + uintptr_t antInfoAddr; bool isPhyEn; // if physical layer running bool isAcq; // if last reception acquisition success bool isFrameSync; // if last reception frame sync success @@ -224,6 +224,7 @@ typedef struct #ifndef EMULATION XAdcPs hwXadc; #endif + PHY_ANT_ANGLE antNrrwPattern[L1_NUM_ANT_NRRW_PATTERN]; HWSTATE hwSate; PHYLOG phyLog; } PHY_INST; @@ -240,9 +241,6 @@ extern uint16_t hopPattern_40KBPS_20MS[L1_FRAME_40KBPS_20MS_HOPS]; extern uint16_t hopPattern_200KBPS_5MS[L1_FRAME_200KBPS_5MS_HOPS]; extern uint16_t hopPattern_1M2BPS_5MS[L1_FRAME_1M2BPS_5MS_HOPS]; -extern PHY_ANT_ANGLE antSubnrrwPattern[L1_NUM_ANT_SUBNRRW_PATTERN]; -extern PHY_ANT_ANGLE antNrrwPattern[L1_NUM_ANT_NRRW_PATTERN]; - /************************** Function Prototypes ******************************/ int32_t Phy_InstInit(PHY_INST **instPtr, PHY_CONFIG *phyConfig); void Phy_Destroy(PHY_INST *instPtr); @@ -272,6 +270,7 @@ uint32_t Phy_GetTimeComp(L1_FRAME_TYPE frameType); void Phy_AntConfigInit(PHY_ANT_CONFIG *antConfig); void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode); +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_SetBeamNo(PHY_INST *instPtr, int32_t beamNo); int32_t Phy_SetBeamAngle(PHY_INST *phyInstPtr, double offAx, double rndAx); @@ -285,4 +284,4 @@ void Phy_GetFrameSyncTimeStamp(PHY_INST *instPtr, TIME_WORD *frameSyncT); void Phy_GetLastReceivedFrameSyncTimeStamp(PHY_INST *instPtr, TIME_WORD *frameSyncT); void Phy_GetSlotStartTimeStamp(PHY_INST *instPtr, TIME_WORD *slotStart); void Phy_GetLastReceivedSlotStartTimeStamp(PHY_INST *instPtr, TIME_WORD *slotStart); -#endif /* PHY_CTRL_H_ */ +#endif // PHY_CTRL_H_ \ No newline at end of file