From 22f7822499035130208876583243cd0d56047a6a Mon Sep 17 00:00:00 2001 From: Gatsby Van Date: Fri, 19 Jan 2024 16:54:28 +0800 Subject: [PATCH] miscellaneous update, enhance code coherence. --- datalink814_ge/src/linklayer/linklayer814.c | 2 +- datalink814_ge/src/phy_ctrl/phy_antenna.c | 21 ++++-- datalink814_ge/src/phy_ctrl/phy_ctrl.c | 4 +- datalink814_ge/src/phy_ctrl/phy_ctrl.h | 21 +++--- datalink814_sp/src/inter_comm/inter_comm.c | 22 +++--- .../src/networking/phy_layer/phy_antenna.c | 74 ++++++++++++------- .../src/networking/phy_layer/phy_layer.h | 20 ++--- 7 files changed, 97 insertions(+), 67 deletions(-) diff --git a/datalink814_ge/src/linklayer/linklayer814.c b/datalink814_ge/src/linklayer/linklayer814.c index dd61e96..7d5b81d 100644 --- a/datalink814_ge/src/linklayer/linklayer814.c +++ b/datalink814_ge/src/linklayer/linklayer814.c @@ -556,7 +556,7 @@ int32_t L2_SetupNextSlot(L2_INST *instPtr, L2_TOR_TYPE txrxMode, L2_FRAME_TYPE f TIME_WORD pullTime = {0, 0}; pullTime.int_part = TimeCtrl_GetIntCnt(instPtr->config.tmcInstPtr) + 1; - Status = Phy_SetTimeWord(phyRef, &pullTime, TIME_WORD_POLL); + Status = Phy_SetTimeWord(phyRef, &pullTime, PHY_TIME_WORD_POLL); if (Status != SUCCESS) { DBG_ERROR("Physical set pull time failed, with error code: %d\n", Status); diff --git a/datalink814_ge/src/phy_ctrl/phy_antenna.c b/datalink814_ge/src/phy_ctrl/phy_antenna.c index 115a697..8497fb2 100644 --- a/datalink814_ge/src/phy_ctrl/phy_antenna.c +++ b/datalink814_ge/src/phy_ctrl/phy_antenna.c @@ -43,11 +43,15 @@ #define RXTXMODE_RX 0x00 #define RXTXMODE_TX 0x01 +#define RXTXMODE_DEFAULT 0x00 + #define CALIBRMODE_NORMAL 0x00 #define CALIBRMODE_SINGLE_TR_CAL 0x01 #define MODECTRL_DEFAULT 0x00 +// Pair by regex +// Regex: (([0-9]+, ){8}) uint16_t hopPattern_Config[L1_FRAME_MAX_HOPS] = { 0 @@ -113,7 +117,8 @@ uint16_t hopPattern_1M2BPS_5MS[L1_FRAME_1M2BPS_5MS_HOPS] = // Pair by regex // Regex: ((\{\.oaxis = [0-9]+[ ,]+\.raxis = [0-9]+[ ]*\}, ){2}) #if defined(PHY_BEAM_SET_PRESET) -ANT_ANGLE antSubnrrwPattern[NUM_ANT_SUBNRRW_PATTERN] = { +PHY_ANT_ANGLE antSubnrrwPattern[NUM_ANT_SUBNRRW_PATTERN] = +{ {.oaxis = 0 , .raxis = 222}, {.oaxis = 10, .raxis = 85 }, {.oaxis = 14, .raxis = 307}, {.oaxis = 17, .raxis = 170}, {.oaxis = 19, .raxis = 32 }, {.oaxis = 21, .raxis = 255}, @@ -134,7 +139,7 @@ ANT_ANGLE antSubnrrwPattern[NUM_ANT_SUBNRRW_PATTERN] = { {.oaxis = 58, .raxis = 227}, {.oaxis = 59, .raxis = 90 }, {.oaxis = 60, .raxis = 312} }; -ANT_ANGLE antNrrwPattern[NUM_ANT_NRRW_PATTERN] = { +PHY_ANT_ANGLE antNrrwPattern[NUM_ANT_NRRW_PATTERN] = { {.oaxis = 0 , .raxis = 222}, {.oaxis = 7 , .raxis = 85 }, {.oaxis = 10, .raxis = 307}, {.oaxis = 13, .raxis = 170}, {.oaxis = 15, .raxis = 32 }, {.oaxis = 17, .raxis = 255}, @@ -310,7 +315,7 @@ int32_t Phy_AntCoinfoInit(PHY_ANT_CONFIG *antCoinfoPtr) int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo) { - if (instPtr->beamWd.next == ANT_BEAM_8) + if (instPtr->beamWd.next == PHY_ANT_BEAM_8) { if (beamNo >= NUM_ANT_NRRW_PATTERN) { @@ -326,7 +331,7 @@ int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo) return SUCCESS; } } - else if (instPtr->beamWd.next == ANT_BEAM_25) + else if (instPtr->beamWd.next == PHY_ANT_BEAM_25) { if (beamNo >= NUM_ANT_SUBNRRW_PATTERN) { @@ -361,16 +366,16 @@ int32_t Phy_SetBeamWidth(PHY_INST *instPtr, PHY_ANT_BEAM_WIDTH beamWidth) uint8_t beamConfig = instPtr->antCoinfoPtr.antMode & (~ANT_MODE_BEAM_MASK); switch (beamWidth) { - case ANT_BEAM_120: + case PHY_ANT_BEAM_120: beamConfig |= ANT_MODE_WIDE_BEAM_3; break; - case ANT_BEAM_60: + case PHY_ANT_BEAM_60: beamConfig |= ANT_MODE_WIDE_BEAM_2; break; - case ANT_BEAM_25: + case PHY_ANT_BEAM_25: beamConfig |= ANT_MODE_WIDE_BEAM_1; break; - case ANT_BEAM_8: + case PHY_ANT_BEAM_8: beamConfig |= ANT_MODE_NARROR_BEAM; break; default: diff --git a/datalink814_ge/src/phy_ctrl/phy_ctrl.c b/datalink814_ge/src/phy_ctrl/phy_ctrl.c index de5071d..514b643 100644 --- a/datalink814_ge/src/phy_ctrl/phy_ctrl.c +++ b/datalink814_ge/src/phy_ctrl/phy_ctrl.c @@ -798,11 +798,11 @@ int32_t Phy_SetTimeWord(PHY_INST *instPtr, const TIME_WORD *tmWord, PHY_TIME_WOR } switch (tmType) { - case TIME_WORD_POLL: + case PHY_TIME_WORD_POLL: PhyWrite(instPtr, POLLTIME_L, tmWord->frac_part); PhyWrite(instPtr, POLLTIME_H, tmWord->int_part); break; - case TIME_WORD_LISTEN_TIMEOUT: + case PHY_TIME_WORD_LISTEN_TIMEOUT: PhyWrite(instPtr, LISTENTIMEOUT_L, tmWord->frac_part); PhyWrite(instPtr, LISTENTIMEOUT_H, tmWord->int_part); break; diff --git a/datalink814_ge/src/phy_ctrl/phy_ctrl.h b/datalink814_ge/src/phy_ctrl/phy_ctrl.h index 5bcfaad..41f3d6a 100644 --- a/datalink814_ge/src/phy_ctrl/phy_ctrl.h +++ b/datalink814_ge/src/phy_ctrl/phy_ctrl.h @@ -34,7 +34,7 @@ #define NUM_ANT_SUBNRRW_PATTERN 37 #define NUM_ANT_NRRW_PATTERN 61 #define INIT_BEAM_NO 0 -#define INIT_ANT_WD ANT_BEAM_120 +#define INIT_ANT_WD PHY_ANT_BEAM_120 #define INIT_ANT_NO 0 #define L1_FRAME_NONE_HOPS UINT32_MAX @@ -159,18 +159,18 @@ typedef struct typedef enum { - TIME_WORD_NONE = 0, - TIME_WORD_POLL = 1, - TIME_WORD_LISTEN_TIMEOUT = 2 + PHY_TIME_WORD_NONE = 0, + PHY_TIME_WORD_POLL = 1, + PHY_TIME_WORD_LISTEN_TIMEOUT = 2 } PHY_TIME_WORD_TYPE; typedef enum { - ANT_BEAM_NONE = 0, - ANT_BEAM_120 = 1, - ANT_BEAM_60 = 2, - ANT_BEAM_25 = 3, - ANT_BEAM_8 = 4 + PHY_ANT_BEAM_NONE = 0, + PHY_ANT_BEAM_120 = 1, + PHY_ANT_BEAM_60 = 2, + PHY_ANT_BEAM_25 = 3, + PHY_ANT_BEAM_8 = 4 } PHY_ANT_BEAM_WIDTH; typedef enum @@ -215,9 +215,9 @@ typedef struct bool isFrameSync; // if last reception frame sync success bool isDecode; // if last reception decode success bool isValid; // if last reception frame data valid (crc check pass) + bool isPresetHop; // if using preset frequency hop TIME_WORD recvSlotTime; // last slot start time stamp TIME_WORD recvFsTime; // last frame sync time stamp - bool isPresetHop; // if using preset frequency hop PHY_RCD antNo; // antenna number record PHY_RCD beamNo; // beam number record PHY_RCD beamWd; // beam width record @@ -236,6 +236,7 @@ extern uint16_t hopPattern_10KBPS_10MS[L1_FRAME_10KBPS_10MS_HOPS]; extern uint16_t hopPattern_10KBPS_20MS[L1_FRAME_10KBPS_20MS_HOPS]; extern uint16_t hopPattern_40KBPS_10MS[L1_FRAME_40KBPS_10MS_HOPS]; 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]; diff --git a/datalink814_sp/src/inter_comm/inter_comm.c b/datalink814_sp/src/inter_comm/inter_comm.c index 3739a33..62d824f 100644 --- a/datalink814_sp/src/inter_comm/inter_comm.c +++ b/datalink814_sp/src/inter_comm/inter_comm.c @@ -113,7 +113,7 @@ static int32_t EvalPhyConfig(INTER_COMM_INST* instPtr, uint8_t* msgPtr){ PHY_INST* phyRef = instPtr->phyInstPtr; L1_FRAME_TYPE frameType = L1_NONE_FRAME; PHY_TOR_TYPE torState = PHY_TOR_SUSPEND; - PHY_ANT_BEAM_WIDTH beamWidth = ANT_BEAM_NONE; + PHY_ANT_BEAM_WIDTH beamWidth = PHY_ANT_BEAM_NONE; uint32_t beamNo = 0; uint16_t msg_Recv = 0; @@ -199,13 +199,13 @@ static int32_t EvalPhyConfig(INTER_COMM_INST* instPtr, uint8_t* msgPtr){ } } if(msgPtr[INTER_MSG_CTRL_BEAM_MODE_OFFSET] == BEAM_MODE_WIDE){ - beamWidth = ANT_BEAM_120; + beamWidth = PHY_ANT_BEAM_120; } else if(msgPtr[INTER_MSG_CTRL_BEAM_MODE_OFFSET] == BEAM_MODE_SUBNRW){ - beamWidth = ANT_BEAM_25; + beamWidth = PHY_ANT_BEAM_25; } else if(msgPtr[INTER_MSG_CTRL_BEAM_MODE_OFFSET] == BEAM_MODE_NRW){ - beamWidth = ANT_BEAM_8; + beamWidth = PHY_ANT_BEAM_8; } else{ DBG_ERROR("[PHY Control] Beam Width Configure cannot be recognized...\n\r"); @@ -217,9 +217,9 @@ static int32_t EvalPhyConfig(INTER_COMM_INST* instPtr, uint8_t* msgPtr){ return Status; } beamNo = (uint32_t)msgPtr[INTER_MSG_CTRL_BEAM_NO_OFFSET]; - if((beamNolastCtrlTimeTag >> 32); tmWord.frac_part = (uint32_t)(instPtr->lastCtrlTimeTag); - Status = Phy_SetTimeWord(phyRef, &tmWord, TIME_WORD_POLL); + Status = Phy_SetTimeWord(phyRef, &tmWord, PHY_TIME_WORD_POLL); Status = Phy_SetMode(phyRef, PHY_MODE_PULL); Status = Phy_SetupNextSlot(phyRef, torState, frameType, instPtr->phySendBuff); @@ -508,7 +508,7 @@ int32_t InterComm_MsgHandler(INTER_COMM_INST* instPtr){ timeTemp = GetTimeWord(msgRecvPtr + MODESW_START_TIME_OFFSET); tmWord.int_part = (uint32_t)(timeTemp>>32);; tmWord.frac_part = (uint32_t)(timeTemp); - Status = Phy_SetTimeWord(instPtr->phyInstPtr, &tmWord, TIME_WORD_POLL); + Status = Phy_SetTimeWord(instPtr->phyInstPtr, &tmWord, PHY_TIME_WORD_POLL); if(Status != SUCCESS){ return EPARAM; } @@ -516,7 +516,7 @@ int32_t InterComm_MsgHandler(INTER_COMM_INST* instPtr){ if(timeTemp == 0){ tmWord.frac_part = 0; tmWord.int_part = 0; - Status = Phy_SetTimeWord(instPtr->phyInstPtr, &tmWord, TIME_WORD_LISTEN_TIMEOUT); + Status = Phy_SetTimeWord(instPtr->phyInstPtr, &tmWord, PHY_TIME_WORD_LISTEN_TIMEOUT); if(Status != SUCCESS){ return EPARAM; } @@ -526,7 +526,7 @@ int32_t InterComm_MsgHandler(INTER_COMM_INST* instPtr){ tmWord.int_part += (uint32_t)(timeTemp>>32); tmWord.int_part = (tmWord.frac_part >= TMWORD_FRAC_MAX) ? tmWord.int_part + 1:tmWord.int_part; tmWord.frac_part %= TMWORD_FRAC_MAX; - Status = Phy_SetTimeWord(instPtr->phyInstPtr, &tmWord, TIME_WORD_LISTEN_TIMEOUT); + Status = Phy_SetTimeWord(instPtr->phyInstPtr, &tmWord, PHY_TIME_WORD_LISTEN_TIMEOUT); if(Status != SUCCESS){ return EPARAM; } diff --git a/df_datalink/src/networking/phy_layer/phy_antenna.c b/df_datalink/src/networking/phy_layer/phy_antenna.c index 0312e1e..82dce23 100644 --- a/df_datalink/src/networking/phy_layer/phy_antenna.c +++ b/df_datalink/src/networking/phy_layer/phy_antenna.c @@ -38,9 +38,13 @@ #define ANT_MODE_LOWAPOWER 0x04 #define ANT_MODE_STANDBY 0x0F #define ATN_MODE_DEFAULT (ANT_MODE_WIDE_BEAM_1 | ANT_MODE_LOWAPOWER) +#define ATN_MODE_HIGH (ANT_MODE_WIDE_BEAM_1 | ANT_MODE_HIGH_POWER) #define DEFAULT_CENTRTAL_FREQ 0x06D7 // 26.25GHz +#define RXTXMODE_RX 0x00 +#define RXTXMODE_TX 0x01 + #define RXTXMODE_DEFAULT 0x00 #define CALIBRMODE_NORMAL 0x00 @@ -50,57 +54,67 @@ // Pair by regex // Regex: (([0-9]+, ){8}) -uint16_t hopPattern_Config[L1_FRAME_MAX_HOPS] = { +uint16_t hopPattern_Config[L1_FRAME_MAX_HOPS] = +{ 0 }; -uint16_t hopPattern_2KBPS_20MS[L1_FRAME_2KBPS_20MS_HOPS] = { +uint16_t hopPattern_2KBPS_20MS[L1_FRAME_2KBPS_20MS_HOPS] = +{ 1500 }; -//uint16_t hopPattern_2KBPS_100MS[L1_FRAME_2KBPS_100MS_HOPS] = { -// 0, 44, 88, 131, 175, 219, 263, 306, -// 350, 394, 438, 481, 525, 569, 613, 656, -// 700, 744, 788, 831, 875, 919, 963, 1006, -// 1050, 1094, 1138, 1181, 1225, 1269, 1313, 1356, -// 1400, 1444, 1488, 1531, 1575, 1619, 1663, 1706, -// 1750, 1794, 1838, 1881, 1925, 1969, 2013, 2056, -// 2100, 2144, 2188, 2231, 2275, 2319, 2363, 2406, -// 2450, 2494, 2538, 2581, 2625, 2669, 2713, 2756, -// 2800, 2844, 2888, 2931, 2975, 3019, 3063, 3106, -// 3150, 3194, 3238, 3281, 3325, 3369, 3413, 3456, -// 3500 -//}; +// uint16_t hopPattern_2KBPS_100MS[L1_FRAME_2KBPS_100MS_HOPS] = +// { +// 0, 44, 88, 131, 175, 219, 263, 306, +// 350, 394, 438, 481, 525, 569, 613, 656, +// 700, 744, 788, 831, 875, 919, 963, 1006, +// 1050, 1094, 1138, 1181, 1225, 1269, 1313, 1356, +// 1400, 1444, 1488, 1531, 1575, 1619, 1663, 1706, +// 1750, 1794, 1838, 1881, 1925, 1969, 2013, 2056, +// 2100, 2144, 2188, 2231, 2275, 2319, 2363, 2406, +// 2450, 2494, 2538, 2581, 2625, 2669, 2713, 2756, +// 2800, 2844, 2888, 2931, 2975, 3019, 3063, 3106, +// 3150, 3194, 3238, 3281, 3325, 3369, 3413, 3456, +// 3500 +// }; -uint16_t hopPattern_2KBPS_100MS[L1_FRAME_2KBPS_100MS_HOPS] = { +uint16_t hopPattern_2KBPS_100MS[L1_FRAME_2KBPS_100MS_HOPS] = +{ 1500 }; -uint16_t hopPattern_10KBPS_10MS[L1_FRAME_10KBPS_10MS_HOPS] = { +uint16_t hopPattern_10KBPS_10MS[L1_FRAME_10KBPS_10MS_HOPS] = +{ 1500 }; -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, 2000, 1500, 1600, 1700, 1800, 1900 }; -uint16_t hopPattern_40KBPS_20MS[L1_FRAME_40KBPS_20MS_HOPS] = { +uint16_t hopPattern_40KBPS_20MS[L1_FRAME_40KBPS_20MS_HOPS] = +{ 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400 }; -uint16_t hopPattern_40KBPS_10MS[L1_FRAME_40KBPS_10MS_HOPS] = { +uint16_t hopPattern_40KBPS_10MS[L1_FRAME_40KBPS_10MS_HOPS] = +{ 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400 }; -uint16_t hopPattern_200KBPS_5MS[L1_FRAME_200KBPS_5MS_HOPS] ={ +uint16_t hopPattern_200KBPS_5MS[L1_FRAME_200KBPS_5MS_HOPS] = +{ 500, 1600, 1700, 1800, 1900, 2000, 1500, 1600, 1700, 1800, 1900, 2000, 1500, 1600, 1700, 1800, 1900, 2000, 1500, 1500 }; -uint16_t hopPattern_1M2BPS_5MS[L1_FRAME_1M2BPS_5MS_HOPS] = { +uint16_t hopPattern_1M2BPS_5MS[L1_FRAME_1M2BPS_5MS_HOPS] = +{ 500, 600, 700, 800, 900, 1000, 500, 600, 700, 800, 900, 1000, 500, 600, 700, 800, 900, 1000, 500, 500 @@ -109,7 +123,8 @@ uint16_t hopPattern_1M2BPS_5MS[L1_FRAME_1M2BPS_5MS_HOPS] = { // 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] = { +PHY_ANT_ANGLE antSubnrrwPattern[L1_NUM_ANT_SUBNRRW_PATTERN] = +{ {.oaxis = 0 , .raxis = 222}, {.oaxis = 10, .raxis = 85 }, {.oaxis = 14, .raxis = 307}, {.oaxis = 17, .raxis = 170}, {.oaxis = 19, .raxis = 32 }, {.oaxis = 21, .raxis = 255}, @@ -130,7 +145,8 @@ PHY_ANT_ANGLE antSubnrrwPattern[L1_NUM_ANT_SUBNRRW_PATTERN] = { {.oaxis = 58, .raxis = 227}, {.oaxis = 59, .raxis = 90 }, {.oaxis = 60, .raxis = 312} }; -PHY_ANT_ANGLE antNrrwPattern[L1_NUM_ANT_NRRW_PATTERN] = { +PHY_ANT_ANGLE antNrrwPattern[L1_NUM_ANT_NRRW_PATTERN] = +{ {.oaxis = 0 , .raxis = 222}, {.oaxis = 7 , .raxis = 85 }, {.oaxis = 10, .raxis = 307}, {.oaxis = 13, .raxis = 170}, {.oaxis = 15, .raxis = 32 }, {.oaxis = 17, .raxis = 255}, @@ -164,8 +180,14 @@ PHY_ANT_ANGLE antNrrwPattern[L1_NUM_ANT_NRRW_PATTERN] = { {.oaxis = 60, .raxis = 252} }; #else -PHY_ANT_ANGLE antSubnrrwPattern[NUM_ANT_SUBNRRW_PATTERN] = {0}; -PHY_ANT_ANGLE antNrrwPattern[NUM_ANT_NRRW_PATTERN] = {0}; +PHY_ANT_ANGLE antSubnrrwPattern[NUM_ANT_SUBNRRW_PATTERN] = +{ + 0 +}; +PHY_ANT_ANGLE antNrrwPattern[NUM_ANT_NRRW_PATTERN] = +{ + 0 +}; #endif /*****************************************************************************/ /** diff --git a/df_datalink/src/networking/phy_layer/phy_layer.h b/df_datalink/src/networking/phy_layer/phy_layer.h index 4ede60e..4536ab7 100644 --- a/df_datalink/src/networking/phy_layer/phy_layer.h +++ b/df_datalink/src/networking/phy_layer/phy_layer.h @@ -129,8 +129,9 @@ typedef enum { PHY_TIME_WORD_NONE = 0, PHY_TIME_WORD_POLL = 1, - PHY_TIME_WORD_LOCAL_ADJ = 2, - PHY_TIME_WORD_STEP = 3, + PHY_TIME_WORD_LISTEN_TIMEOUT = 2, + PHY_TIME_WORD_LOCAL_ADJ = 3, + PHY_TIME_WORD_STEP = 4, } PHY_TIME_WORD_TYPE; typedef enum @@ -177,12 +178,12 @@ typedef struct typedef struct { PHY_CONFIG phyCofig; // Device address configs - bool isPhyEn; // is physical instance enable - bool isAcq; // is last reception acquisition success - bool isFrameSync; // is last reception frame sync success - bool isDecode; // is last reception decode success - bool isValid; // is last reception frame data valid (crc check pass) - bool isPresetHop; // is using preset frequency hop + bool isPhyEn; // if physical layer running + bool isAcq; // if last reception acquisition success + bool isFrameSync; // if last reception frame sync success + bool isDecode; // if last reception decode success + bool isValid; // if last reception frame data valid (crc check pass) + bool isPresetHop; // if using preset frequency hop PHY_RCD antNo; // antenna number record PHY_RCD beamNo; // beam number record PHY_RCD beamWd; // beam width record @@ -204,8 +205,9 @@ extern uint16_t hopPattern_2KBPS_20MS[L1_FRAME_2KBPS_20MS_HOPS]; extern uint16_t hopPattern_2KBPS_100MS[L1_FRAME_2KBPS_100MS_HOPS]; extern uint16_t hopPattern_10KBPS_10MS[L1_FRAME_10KBPS_10MS_HOPS]; extern uint16_t hopPattern_10KBPS_20MS[L1_FRAME_10KBPS_20MS_HOPS]; -extern uint16_t hopPattern_40KBPS_20MS[L1_FRAME_40KBPS_20MS_HOPS]; extern uint16_t hopPattern_40KBPS_10MS[L1_FRAME_40KBPS_10MS_HOPS]; +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];