From 6de3ac2265a928b9a7e4597b35e0036d393d8068 Mon Sep 17 00:00:00 2001 From: Jye <14170229+JyeSmith@users.noreply.github.com> Date: Sun, 15 Sep 2024 13:24:12 +1000 Subject: [PATCH] change-to-sending-expresslrs_RFrates_e-in-sync-packet --- src/include/common.h | 63 ++++++++++++++++----------- src/lib/CONFIG/config.cpp | 4 +- src/lib/CONFIG/config.h | 7 +-- src/lib/LUA/tx_devLUA.cpp | 9 ++-- src/lib/OTA/OTA.h | 4 +- src/src/common.cpp | 106 +++++++++++++++++++++++++--------------------- src/src/rx_main.cpp | 6 +-- src/src/tx_main.cpp | 3 +- 8 files changed, 111 insertions(+), 91 deletions(-) diff --git a/src/include/common.h b/src/include/common.h index e03f8581..6c7c9b98 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -79,26 +79,41 @@ typedef enum typedef enum : uint8_t { - RATE_LORA_4HZ = 0, - RATE_LORA_25HZ, - RATE_LORA_50HZ, - RATE_LORA_100HZ, - RATE_LORA_100HZ_8CH, - RATE_LORA_150HZ, - RATE_LORA_200HZ, - RATE_LORA_250HZ, - RATE_LORA_333HZ_8CH, - RATE_LORA_500HZ, - RATE_DVDA_250HZ, // FLRC - RATE_DVDA_500HZ, // FLRC - RATE_FLRC_500HZ, - RATE_FLRC_1000HZ, - RATE_DVDA_50HZ, - RATE_LORA_200HZ_8CH, - RATE_FSK_2G4_DVDA_500HZ, - RATE_FSK_2G4_1000HZ, - RATE_FSK_900_1000HZ, + // RATE_MODULATION_BAND_RATE_MODE + + RATE_LORA_900_25HZ = 0, + RATE_LORA_900_50HZ, + RATE_LORA_900_100HZ, + RATE_LORA_900_100HZ_8CH, + RATE_LORA_900_150HZ, + RATE_LORA_900_200HZ, + RATE_LORA_900_200HZ_8CH, + RATE_LORA_900_250HZ, + RATE_LORA_900_333HZ_8CH, + RATE_LORA_900_500HZ, + RATE_LORA_900_50HZ_DVDA, RATE_FSK_900_1000HZ_8CH, + + RATE_LORA_DUAL_100HZ_8CH = 100, + RATE_LORA_DUAL_150HZ, + + RATE_LORA_2G4_25HZ = 200, + RATE_LORA_2G4_50HZ, + RATE_LORA_2G4_100HZ, + RATE_LORA_2G4_100HZ_8CH, + RATE_LORA_2G4_150HZ, + RATE_LORA_2G4_200HZ, + RATE_LORA_2G4_200HZ_8CH, + RATE_LORA_2G4_250HZ, + RATE_LORA_2G4_333HZ_8CH, + RATE_LORA_2G4_500HZ, + RATE_FLRC_2G4_250HZ_DVDA, + RATE_FLRC_2G4_500HZ_DVDA, + RATE_FLRC_2G4_500HZ, + RATE_FLRC_2G4_1000HZ, + RATE_FSK_2G4_250HZ_DVDA, + RATE_FSK_2G4_500HZ_DVDA, + RATE_FSK_2G4_1000HZ, } expresslrs_RFrates_e; enum { @@ -273,20 +288,20 @@ enum eAuxChannels : uint8_t #ifndef UNIT_TEST #if defined(RADIO_SX127X) #define RATE_MAX 6 -#define RATE_BINDING RATE_LORA_50HZ +#define RATE_BINDING RATE_LORA_900_50HZ extern SX127xDriver Radio; #elif defined(RADIO_LR1121) -#define RATE_MAX 16 -#define RATE_BINDING RATE_LORA_50HZ -#define RATE_DUALBAND_BINDING 9 // 2.4GHz 50Hz +#define RATE_MAX 20 +#define RATE_BINDING RATE_LORA_900_50HZ +#define RATE_DUALBAND_BINDING RATE_LORA_2G4_50HZ extern LR1121Driver Radio; #elif defined(RADIO_SX128X) #define RATE_MAX 10 // 2xFLRC + 2xDVDA + 4xLoRa + 2xFullRes -#define RATE_BINDING RATE_LORA_50HZ +#define RATE_BINDING RATE_LORA_2G4_50HZ extern SX1280Driver Radio; #endif diff --git a/src/lib/CONFIG/config.cpp b/src/lib/CONFIG/config.cpp index db25a2eb..9b88f37a 100644 --- a/src/lib/CONFIG/config.cpp +++ b/src/lib/CONFIG/config.cpp @@ -656,9 +656,9 @@ TxConfig::SetDefaults(bool commit) { SetModelId(i); #if defined(RADIO_SX127X) || defined(RADIO_LR1121) - SetRate(enumRatetoIndex(RATE_LORA_200HZ)); + SetRate(enumRatetoIndex(RATE_LORA_900_200HZ)); #elif defined(RADIO_SX128X) - SetRate(enumRatetoIndex(RATE_LORA_250HZ)); + SetRate(enumRatetoIndex(RATE_LORA_2G4_250HZ)); #endif SetPower(POWERMGNT::getDefaultPower()); #if defined(PLATFORM_ESP32) diff --git a/src/lib/CONFIG/config.h b/src/lib/CONFIG/config.h index 2c65dfee..74b5a189 100644 --- a/src/lib/CONFIG/config.h +++ b/src/lib/CONFIG/config.h @@ -45,7 +45,7 @@ typedef enum { } headTrackingEnable_t; typedef struct { - uint32_t rate:4, + uint32_t rate:5, tlm:4, power:3, switchMode:2, @@ -55,7 +55,7 @@ typedef struct { txAntenna:2, // FUTURE: Which TX antenna to use, 0=Auto ptrStartChannel:4, ptrEnableChannel:5, - linkMode:3; + linkMode:2; } model_config_t; typedef struct { @@ -220,7 +220,8 @@ typedef struct __attribute__((packed)) { antennaMode:2; // 0=0, 1=1, 2=Diversity uint8_t powerOnCounter:3, forceTlmOff:1, - rateInitialIdx:4; // Rate to start rateCycling at on boot + free:4; + uint8_t rateInitialIdx; // Rate to start rateCycling at on boot uint8_t modelId; uint8_t serialProtocol:4, failsafeMode:2, diff --git a/src/lib/LUA/tx_devLUA.cpp b/src/lib/LUA/tx_devLUA.cpp index e909ecad..e38f318f 100644 --- a/src/lib/LUA/tx_devLUA.cpp +++ b/src/lib/LUA/tx_devLUA.cpp @@ -20,9 +20,9 @@ "D50Hz(-112dBm);25Hz(-123dBm);50Hz(-120dBm);100Hz(-117dBm);100Hz Full(-112dBm);200Hz(-112dBm)" #elif defined(RADIO_LR1121) #define STR_LUA_PACKETRATES \ - "K1000 Full Low Band;DK500 2.4G;200 Full Low Band;250 Low Band;X100 Full;X150;" \ - "50 2.4G;100 Full 2.4G;150 2.4G;250 2.4G;333 Full 2.4G;500 2.4G;" \ - "50 Low Band;100 Low Band;100 Full Low Band;200 Low Band" + "X100F;X150;" \ + "50 2.4G;100F 2.4G;150 2.4G;250 2.4G;333F 2.4G;500 2.4G;DK250 2.4G;DK500 2.4G;K1000 2.4G;" \ + "D50 Low;25 Low;50 Low;100 Low;100F Low;200 Low;200F Low;250 Low;K1000F Low" #elif defined(RADIO_SX128X) #define STR_LUA_PACKETRATES \ "50Hz(-115dBm);100Hz Full(-112dBm);150Hz(-112dBm);250Hz(-108dBm);333Hz Full(-105dBm);500Hz(-105dBm);" \ @@ -588,9 +588,6 @@ static void recalculatePacketRateOptions(int minInterval) for (int i=0 ; i < RATE_MAX ; i++) { uint8_t rate = i; -#if defined(RADIO_LR1121) // Janky fix to order menu correctly - rate = (rate + 4) % RATE_MAX; -#endif rate = RATE_MAX - 1 - rate; bool rateAllowed = get_elrs_airRateConfig(rate)->interval >= minInterval; const char *semi = strchrnul(pos, ';'); diff --git a/src/lib/OTA/OTA.h b/src/lib/OTA/OTA.h index db8243cc..2d6f5109 100644 --- a/src/lib/OTA/OTA.h +++ b/src/lib/OTA/OTA.h @@ -26,10 +26,10 @@ typedef struct { uint8_t fhssIndex; uint8_t nonce; + uint8_t rfRateEnum; uint8_t switchEncMode:1, newTlmRatio:3, - rateIndex:4; - uint8_t UID3; + free:4; uint8_t UID4; uint8_t UID5; } PACKED OTA_Sync_s; diff --git a/src/src/common.cpp b/src/src/common.cpp index d48f76d4..b9dddc01 100644 --- a/src/src/common.cpp +++ b/src/src/common.cpp @@ -7,12 +7,12 @@ SX127xDriver DMA_ATTR Radio; expresslrs_mod_settings_s ExpressLRS_AirRateConfig[RATE_MAX] = { - {0, RADIO_TYPE_SX127x_LORA, RATE_LORA_200HZ, SX127x_BW_500_00_KHZ, SX127x_SF_6, SX127x_CR_4_7, 8, TLM_RATIO_1_64, 4, 5000, OTA4_PACKET_SIZE, 1}, - {1, RADIO_TYPE_SX127x_LORA, RATE_LORA_100HZ_8CH, SX127x_BW_500_00_KHZ, SX127x_SF_6, SX127x_CR_4_8, 8, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, - {2, RADIO_TYPE_SX127x_LORA, RATE_LORA_100HZ, SX127x_BW_500_00_KHZ, SX127x_SF_7, SX127x_CR_4_7, 8, TLM_RATIO_1_32, 4, 10000, OTA4_PACKET_SIZE, 1}, - {3, RADIO_TYPE_SX127x_LORA, RATE_LORA_50HZ, SX127x_BW_500_00_KHZ, SX127x_SF_8, SX127x_CR_4_7, 10, TLM_RATIO_1_16, 4, 20000, OTA4_PACKET_SIZE, 1}, - {4, RADIO_TYPE_SX127x_LORA, RATE_LORA_25HZ, SX127x_BW_500_00_KHZ, SX127x_SF_9, SX127x_CR_4_7, 10, TLM_RATIO_1_8, 2, 40000, OTA4_PACKET_SIZE, 1}, - {5, RADIO_TYPE_SX127x_LORA, RATE_DVDA_50HZ, SX127x_BW_500_00_KHZ, SX127x_SF_6, SX127x_CR_4_7, 8, TLM_RATIO_1_64, 2, 5000, OTA4_PACKET_SIZE, 4}}; + {0, RADIO_TYPE_SX127x_LORA, RATE_LORA_900_200HZ, SX127x_BW_500_00_KHZ, SX127x_SF_6, SX127x_CR_4_7, 8, TLM_RATIO_1_64, 4, 5000, OTA4_PACKET_SIZE, 1}, + {1, RADIO_TYPE_SX127x_LORA, RATE_LORA_900_100HZ_8CH, SX127x_BW_500_00_KHZ, SX127x_SF_6, SX127x_CR_4_8, 8, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, + {2, RADIO_TYPE_SX127x_LORA, RATE_LORA_900_100HZ, SX127x_BW_500_00_KHZ, SX127x_SF_7, SX127x_CR_4_7, 8, TLM_RATIO_1_32, 4, 10000, OTA4_PACKET_SIZE, 1}, + {3, RADIO_TYPE_SX127x_LORA, RATE_LORA_900_50HZ, SX127x_BW_500_00_KHZ, SX127x_SF_8, SX127x_CR_4_7, 10, TLM_RATIO_1_16, 4, 20000, OTA4_PACKET_SIZE, 1}, + {4, RADIO_TYPE_SX127x_LORA, RATE_LORA_900_25HZ, SX127x_BW_500_00_KHZ, SX127x_SF_9, SX127x_CR_4_7, 10, TLM_RATIO_1_8, 2, 40000, OTA4_PACKET_SIZE, 1}, + {5, RADIO_TYPE_SX127x_LORA, RATE_LORA_900_50HZ_DVDA, SX127x_BW_500_00_KHZ, SX127x_SF_6, SX127x_CR_4_7, 8, TLM_RATIO_1_64, 2, 5000, OTA4_PACKET_SIZE, 4}}; expresslrs_rf_pref_params_s ExpressLRS_AirRateRFperf[RATE_MAX] = { {0, -112, 4380, 3000, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, @@ -29,40 +29,48 @@ expresslrs_rf_pref_params_s ExpressLRS_AirRateRFperf[RATE_MAX] = { LR1121Driver DMA_ATTR Radio; expresslrs_mod_settings_s ExpressLRS_AirRateConfig[RATE_MAX] = { - {0, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_200HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_7, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_7, 8, TLM_RATIO_1_64, 4, 5000, OTA4_PACKET_SIZE, 1}, - {1, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_100HZ_8CH, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_8, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_8, 8, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, - {2, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_100HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_4_7, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_4_7, 8, TLM_RATIO_1_32, 4, 10000, OTA4_PACKET_SIZE, 1}, - {3, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_50HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF8, LR11XX_RADIO_LORA_CR_4_7, 10, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF8, LR11XX_RADIO_LORA_CR_4_7, 10, TLM_RATIO_1_16, 4, 20000, OTA4_PACKET_SIZE, 1}, - {4, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_500HZ, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_LI_4_6, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_LI_4_6, 12, TLM_RATIO_1_128, 4, 2000, OTA4_PACKET_SIZE, 1}, - {5, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_333HZ_8CH, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_LI_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_LI_4_8, 12, TLM_RATIO_1_128, 4, 3003, OTA8_PACKET_SIZE, 1}, - {6, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_250HZ, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_LI_4_8, 14, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_LI_4_8, 14, TLM_RATIO_1_64, 4, 4000, OTA4_PACKET_SIZE, 1}, - {7, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_150HZ, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 12, TLM_RATIO_1_32, 4, 6666, OTA4_PACKET_SIZE, 1}, - {8, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_100HZ_8CH, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 12, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, - {9, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_50HZ, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF8, LR11XX_RADIO_LORA_CR_LI_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF8, LR11XX_RADIO_LORA_CR_LI_4_8, 12, TLM_RATIO_1_16, 2, 20000, OTA4_PACKET_SIZE, 1}, - {10, RADIO_TYPE_LR1121_LORA_DUAL, RATE_LORA_150HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_6, 12, TLM_RATIO_1_32, 4, 6666, OTA4_PACKET_SIZE, 1}, - {11, RADIO_TYPE_LR1121_LORA_DUAL, RATE_LORA_100HZ_8CH, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_8, 18, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 14, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, - {12, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_250HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_4_8, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_4_8, 8, TLM_RATIO_1_64, 4, 4000, OTA4_PACKET_SIZE, 1}, - {13, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_200HZ_8CH, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_4_7, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_4_7, 8, TLM_RATIO_1_64, 4, 5000, OTA8_PACKET_SIZE, 1}, - {14, RADIO_TYPE_LR1121_GFSK_2G4, RATE_FSK_2G4_DVDA_500HZ, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 2}, - {15, RADIO_TYPE_LR1121_GFSK_900, RATE_FSK_900_1000HZ_8CH, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, TLM_RATIO_1_128, 2, 1000, OTA8_PACKET_SIZE, 1}}; + {0, RADIO_TYPE_LR1121_GFSK_900, RATE_FSK_900_1000HZ_8CH, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, TLM_RATIO_1_128, 2, 1000, OTA8_PACKET_SIZE, 1}, + {1, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_900_250HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_4_8, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_4_8, 8, TLM_RATIO_1_64, 4, 4000, OTA4_PACKET_SIZE, 1}, + {2, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_900_200HZ_8CH, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_4_7, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_4_7, 8, TLM_RATIO_1_64, 4, 5000, OTA8_PACKET_SIZE, 1}, + {3, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_900_200HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_7, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_7, 8, TLM_RATIO_1_64, 4, 5000, OTA4_PACKET_SIZE, 1}, + {4, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_900_100HZ_8CH, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_8, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_8, 8, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, + {5, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_900_100HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_4_7, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_4_7, 8, TLM_RATIO_1_32, 4, 10000, OTA4_PACKET_SIZE, 1}, + {6, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_900_50HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF8, LR11XX_RADIO_LORA_CR_4_7, 10, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF8, LR11XX_RADIO_LORA_CR_4_7, 10, TLM_RATIO_1_16, 4, 20000, OTA4_PACKET_SIZE, 1}, + {7, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_900_25HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF9, LR11XX_RADIO_LORA_CR_4_7, 10, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF9, LR11XX_RADIO_LORA_CR_4_7, 10, TLM_RATIO_1_8, 2, 40000, OTA4_PACKET_SIZE, 1}, + {8, RADIO_TYPE_LR1121_LORA_900, RATE_LORA_900_50HZ_DVDA, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_7, 8, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_7, 8, TLM_RATIO_1_64, 2, 5000, OTA4_PACKET_SIZE, 4}, + {9, RADIO_TYPE_LR1121_GFSK_2G4, RATE_FSK_2G4_1000HZ, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 1}, + {10, RADIO_TYPE_LR1121_GFSK_2G4, RATE_FSK_2G4_500HZ_DVDA, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 2}, + {11, RADIO_TYPE_LR1121_GFSK_2G4, RATE_FSK_2G4_250HZ_DVDA, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, LR11XX_RADIO_GFSK_BITRATE_300k, LR11XX_RADIO_GFSK_BW_467000, LR11XX_RADIO_GFSK_FDEV_100k, 16, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 4}, + {12, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_2G4_500HZ, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_LI_4_6, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_LI_4_6, 12, TLM_RATIO_1_128, 4, 2000, OTA4_PACKET_SIZE, 1}, + {13, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_2G4_333HZ_8CH, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_LI_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF5, LR11XX_RADIO_LORA_CR_LI_4_8, 12, TLM_RATIO_1_128, 4, 3003, OTA8_PACKET_SIZE, 1}, + {14, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_2G4_250HZ, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_LI_4_8, 14, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_LI_4_8, 14, TLM_RATIO_1_64, 4, 4000, OTA4_PACKET_SIZE, 1}, + {15, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_2G4_150HZ, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 12, TLM_RATIO_1_32, 4, 6666, OTA4_PACKET_SIZE, 1}, + {16, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_2G4_100HZ_8CH, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 12, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, + {17, RADIO_TYPE_LR1121_LORA_2G4, RATE_LORA_2G4_50HZ, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF8, LR11XX_RADIO_LORA_CR_LI_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF8, LR11XX_RADIO_LORA_CR_LI_4_8, 12, TLM_RATIO_1_16, 2, 20000, OTA4_PACKET_SIZE, 1}, + {18, RADIO_TYPE_LR1121_LORA_DUAL, RATE_LORA_DUAL_150HZ, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_8, 12, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_6, 12, TLM_RATIO_1_32, 4, 6666, OTA4_PACKET_SIZE, 1}, + {19, RADIO_TYPE_LR1121_LORA_DUAL, RATE_LORA_DUAL_100HZ_8CH, LR11XX_RADIO_LORA_BW_500, LR11XX_RADIO_LORA_SF6, LR11XX_RADIO_LORA_CR_4_8, 18, LR11XX_RADIO_LORA_BW_800, LR11XX_RADIO_LORA_SF7, LR11XX_RADIO_LORA_CR_LI_4_8, 14, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}}; expresslrs_rf_pref_params_s ExpressLRS_AirRateRFperf[RATE_MAX] = { - {0, -112, 4380, 3000, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, // These SNR_SCALE values all need to be checked! - {1, -112, 6690, 3500, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, - {2, -117, 8770, 3500, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(2.5)}, - {3, -120, 18560, 4000, 2500, 600, 5000, SNR_SCALE(-1), SNR_SCALE(1.5)}, - {4, -105, 1507, 2500, 2500, 3, 5000, SNR_SCALE( 5), SNR_SCALE(9.5)}, - {5, -105, 2374, 2500, 2500, 4, 5000, SNR_SCALE( 5), SNR_SCALE(9.5)}, - {6, -108, 3300, 3000, 2500, 6, 5000, SNR_SCALE( 3), SNR_SCALE(9.5)}, - {7, -112, 5871, 3500, 2500, 10, 5000, SNR_SCALE( 0), SNR_SCALE(8.5)}, - {8, -112, 7605, 3500, 2500, 11, 5000, SNR_SCALE( 0), SNR_SCALE(8.5)}, - {9, -115, 10798, 4000, 2500, 0, 5000, SNR_SCALE(-1), SNR_SCALE(6.5)}, - {10, -112, 5871, 3500, 2500, 10, 5000, SNR_SCALE( 0), SNR_SCALE(8.5)}, - {11, -112, 7456, 3500, 2500, 11, 5000, SNR_SCALE( 0), SNR_SCALE(8.5)}, - {12, -111, 3216, 3500, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, - {13, -111, 4240, 3500, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, - {14, -103, 690, 2500, 2500, 3, 5000, DYNPOWER_SNR_THRESH_NONE, DYNPOWER_SNR_THRESH_NONE}, - {15, -101, 658, 2500, 2500, 3, 5000, DYNPOWER_SNR_THRESH_NONE, DYNPOWER_SNR_THRESH_NONE}}; + {0, -101, 658, 2500, 2500, 3, 5000, DYNPOWER_SNR_THRESH_NONE, DYNPOWER_SNR_THRESH_NONE}, + {1, -111, 3216, 3500, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, // These SNR_SCALE values all need to be checked! + {2, -111, 4240, 3500, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, + {3, -112, 4380, 3000, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, + {4, -112, 6690, 3500, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, + {5, -117, 8770, 3500, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(2.5)}, + {6, -120, 18560, 4000, 2500, 600, 5000, SNR_SCALE(-1), SNR_SCALE(1.5)}, + {7, -123, 29950, 6000, 4000, 600, 5000, SNR_SCALE(-3), SNR_SCALE(0.5)}, + {8, -112, 4380, 3000, 2500, 600, 5000, SNR_SCALE( 1), SNR_SCALE(3.0)}, + {9, -103, 690, 2500, 2500, 3, 5000, DYNPOWER_SNR_THRESH_NONE, DYNPOWER_SNR_THRESH_NONE}, + {10, -103, 690, 2500, 2500, 3, 5000, DYNPOWER_SNR_THRESH_NONE, DYNPOWER_SNR_THRESH_NONE}, + {11, -103, 690, 2500, 2500, 3, 5000, DYNPOWER_SNR_THRESH_NONE, DYNPOWER_SNR_THRESH_NONE}, + {12, -105, 1507, 2500, 2500, 3, 5000, SNR_SCALE( 5), SNR_SCALE(9.5)}, + {13, -105, 2374, 2500, 2500, 4, 5000, SNR_SCALE( 5), SNR_SCALE(9.5)}, + {14, -108, 3300, 3000, 2500, 6, 5000, SNR_SCALE( 3), SNR_SCALE(9.5)}, + {15, -112, 5871, 3500, 2500, 10, 5000, SNR_SCALE( 0), SNR_SCALE(8.5)}, + {16, -112, 7605, 3500, 2500, 11, 5000, SNR_SCALE( 0), SNR_SCALE(8.5)}, + {17, -115, 10798, 4000, 2500, 0, 5000, SNR_SCALE(-1), SNR_SCALE(6.5)}, + {18, -112, 5871, 3500, 2500, 10, 5000, SNR_SCALE( 0), SNR_SCALE(8.5)}, + {18, -112, 7456, 3500, 2500, 11, 5000, SNR_SCALE( 0), SNR_SCALE(8.5)}}; #endif #if defined(RADIO_SX128X) @@ -71,16 +79,16 @@ expresslrs_rf_pref_params_s ExpressLRS_AirRateRFperf[RATE_MAX] = { SX1280Driver DMA_ATTR Radio; expresslrs_mod_settings_s ExpressLRS_AirRateConfig[RATE_MAX] = { - {0, RADIO_TYPE_SX128x_FLRC, RATE_FLRC_1000HZ, SX1280_FLRC_BR_0_650_BW_0_6, SX1280_FLRC_BT_1, SX1280_FLRC_CR_1_2, 32, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 1}, - {1, RADIO_TYPE_SX128x_FLRC, RATE_FLRC_500HZ, SX1280_FLRC_BR_0_650_BW_0_6, SX1280_FLRC_BT_1, SX1280_FLRC_CR_1_2, 32, TLM_RATIO_1_128, 2, 2000, OTA4_PACKET_SIZE, 1}, - {2, RADIO_TYPE_SX128x_FLRC, RATE_DVDA_500HZ, SX1280_FLRC_BR_0_650_BW_0_6, SX1280_FLRC_BT_1, SX1280_FLRC_CR_1_2, 32, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 2}, - {3, RADIO_TYPE_SX128x_FLRC, RATE_DVDA_250HZ, SX1280_FLRC_BR_0_650_BW_0_6, SX1280_FLRC_BT_1, SX1280_FLRC_CR_1_2, 32, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 4}, - {4, RADIO_TYPE_SX128x_LORA, RATE_LORA_500HZ, SX1280_LORA_BW_0800, SX1280_LORA_SF5, SX1280_LORA_CR_LI_4_6, 12, TLM_RATIO_1_128, 4, 2000, OTA4_PACKET_SIZE, 1}, - {5, RADIO_TYPE_SX128x_LORA, RATE_LORA_333HZ_8CH, SX1280_LORA_BW_0800, SX1280_LORA_SF5, SX1280_LORA_CR_LI_4_8, 12, TLM_RATIO_1_128, 4, 3003, OTA8_PACKET_SIZE, 1}, - {6, RADIO_TYPE_SX128x_LORA, RATE_LORA_250HZ, SX1280_LORA_BW_0800, SX1280_LORA_SF6, SX1280_LORA_CR_LI_4_8, 14, TLM_RATIO_1_64, 4, 4000, OTA4_PACKET_SIZE, 1}, - {7, RADIO_TYPE_SX128x_LORA, RATE_LORA_150HZ, SX1280_LORA_BW_0800, SX1280_LORA_SF7, SX1280_LORA_CR_LI_4_8, 12, TLM_RATIO_1_32, 4, 6666, OTA4_PACKET_SIZE, 1}, - {8, RADIO_TYPE_SX128x_LORA, RATE_LORA_100HZ_8CH, SX1280_LORA_BW_0800, SX1280_LORA_SF7, SX1280_LORA_CR_LI_4_8, 12, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, - {9, RADIO_TYPE_SX128x_LORA, RATE_LORA_50HZ, SX1280_LORA_BW_0800, SX1280_LORA_SF8, SX1280_LORA_CR_LI_4_8, 12, TLM_RATIO_1_16, 2, 20000, OTA4_PACKET_SIZE, 1}}; + {0, RADIO_TYPE_SX128x_FLRC, RATE_FLRC_2G4_1000HZ, SX1280_FLRC_BR_0_650_BW_0_6, SX1280_FLRC_BT_1, SX1280_FLRC_CR_1_2, 32, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 1}, + {1, RADIO_TYPE_SX128x_FLRC, RATE_FLRC_2G4_500HZ, SX1280_FLRC_BR_0_650_BW_0_6, SX1280_FLRC_BT_1, SX1280_FLRC_CR_1_2, 32, TLM_RATIO_1_128, 2, 2000, OTA4_PACKET_SIZE, 1}, + {2, RADIO_TYPE_SX128x_FLRC, RATE_FLRC_2G4_500HZ_DVDA, SX1280_FLRC_BR_0_650_BW_0_6, SX1280_FLRC_BT_1, SX1280_FLRC_CR_1_2, 32, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 2}, + {3, RADIO_TYPE_SX128x_FLRC, RATE_FLRC_2G4_250HZ_DVDA, SX1280_FLRC_BR_0_650_BW_0_6, SX1280_FLRC_BT_1, SX1280_FLRC_CR_1_2, 32, TLM_RATIO_1_128, 2, 1000, OTA4_PACKET_SIZE, 4}, + {4, RADIO_TYPE_SX128x_LORA, RATE_LORA_2G4_500HZ, SX1280_LORA_BW_0800, SX1280_LORA_SF5, SX1280_LORA_CR_LI_4_6, 12, TLM_RATIO_1_128, 4, 2000, OTA4_PACKET_SIZE, 1}, + {5, RADIO_TYPE_SX128x_LORA, RATE_LORA_2G4_333HZ_8CH, SX1280_LORA_BW_0800, SX1280_LORA_SF5, SX1280_LORA_CR_LI_4_8, 12, TLM_RATIO_1_128, 4, 3003, OTA8_PACKET_SIZE, 1}, + {6, RADIO_TYPE_SX128x_LORA, RATE_LORA_2G4_250HZ, SX1280_LORA_BW_0800, SX1280_LORA_SF6, SX1280_LORA_CR_LI_4_8, 14, TLM_RATIO_1_64, 4, 4000, OTA4_PACKET_SIZE, 1}, + {7, RADIO_TYPE_SX128x_LORA, RATE_LORA_2G4_150HZ, SX1280_LORA_BW_0800, SX1280_LORA_SF7, SX1280_LORA_CR_LI_4_8, 12, TLM_RATIO_1_32, 4, 6666, OTA4_PACKET_SIZE, 1}, + {8, RADIO_TYPE_SX128x_LORA, RATE_LORA_2G4_100HZ_8CH, SX1280_LORA_BW_0800, SX1280_LORA_SF7, SX1280_LORA_CR_LI_4_8, 12, TLM_RATIO_1_32, 4, 10000, OTA8_PACKET_SIZE, 1}, + {9, RADIO_TYPE_SX128x_LORA, RATE_LORA_2G4_50HZ, SX1280_LORA_BW_0800, SX1280_LORA_SF8, SX1280_LORA_CR_LI_4_8, 12, TLM_RATIO_1_16, 2, 20000, OTA4_PACKET_SIZE, 1}}; expresslrs_rf_pref_params_s ExpressLRS_AirRateRFperf[RATE_MAX] = { {0, -104, 389, 2500, 2500, 3, 5000, DYNPOWER_SNR_THRESH_NONE, DYNPOWER_SNR_THRESH_NONE}, @@ -143,7 +151,7 @@ uint8_t ICACHE_RAM_ATTR enumRatetoIndex(expresslrs_RFrates_e const eRate) } // If 25Hz selected and not available, return the slowest rate available // else return the fastest rate available (500Hz selected but not available) - return (eRate == RATE_LORA_25HZ) ? RATE_MAX - 1 : 0; + return (eRate == RATE_LORA_900_25HZ) ? RATE_MAX - 1 : 0; } // Connection state information diff --git a/src/src/rx_main.cpp b/src/src/rx_main.cpp index 5a73d54c..66272e23 100644 --- a/src/src/rx_main.cpp +++ b/src/src/rx_main.cpp @@ -1054,8 +1054,8 @@ static void ICACHE_RAM_ATTR updateSwitchModePendingFromOta(uint8_t newSwitchMode static bool ICACHE_RAM_ATTR ProcessRfPacket_SYNC(uint32_t const now, OTA_Sync_s const * const otaSync) { - // Verify the first two of three bytes of the binding ID, which should always match - if (otaSync->UID3 != UID[3] || otaSync->UID4 != UID[4]) + // Verify the first byte of the binding ID, which should always match + if (otaSync->UID4 != UID[4]) return false; // The third byte will be XORed with inverse of the ModelId if ModelMatch is on @@ -1070,7 +1070,7 @@ static bool ICACHE_RAM_ATTR ProcessRfPacket_SYNC(uint32_t const now, OTA_Sync_s #endif // Will change the packet air rate in loop() if this changes - ExpressLRS_nextAirRateIndex = otaSync->rateIndex; + ExpressLRS_nextAirRateIndex = enumRatetoIndex((expresslrs_RFrates_e)otaSync->rfRateEnum); updateSwitchModePendingFromOta(otaSync->switchEncMode); // Update TLM ratio, should never be TLM_RATIO_STD/DISARMED, the TX calculates the correct value for the RX diff --git a/src/src/tx_main.cpp b/src/src/tx_main.cpp index cb038be7..bfe33c7b 100644 --- a/src/src/tx_main.cpp +++ b/src/src/tx_main.cpp @@ -326,10 +326,9 @@ void ICACHE_RAM_ATTR GenerateSyncPacketData(OTA_Sync_s * const syncPtr) syncPtr->fhssIndex = FHSSgetCurrIndex(); syncPtr->nonce = OtaNonce; - syncPtr->rateIndex = Index; + syncPtr->rfRateEnum = get_elrs_airRateConfig(Index)->enum_rate; syncPtr->newTlmRatio = newTlmRatio - TLM_RATIO_NO_TLM; syncPtr->switchEncMode = SwitchEncMode; - syncPtr->UID3 = UID[3]; syncPtr->UID4 = UID[4]; syncPtr->UID5 = UID[5]; -- 2.11.4.GIT