From 994c739b57cdf47411b8668890f94e705d6a473d Mon Sep 17 00:00:00 2001 From: Paul Kendall Date: Fri, 17 Sep 2021 12:20:43 +1200 Subject: [PATCH 1/2] Fix baud rate defaults Default value 0 is 400k baud, unless SPORT_MAX_BAUDRATE < 400000 in which case default value 0 is 115k baud. --- radio/src/gui/colorlcd/radio_hardware.cpp | 4 +-- .../src/gui/common/stdlcd/radio_hardware.cpp | 4 +-- radio/src/telemetry/crossfire.h | 30 ++++++++++++------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_hardware.cpp b/radio/src/gui/colorlcd/radio_hardware.cpp index f6b603803..d072dfa67 100644 --- a/radio/src/gui/colorlcd/radio_hardware.cpp +++ b/radio/src/gui/colorlcd/radio_hardware.cpp @@ -325,10 +325,10 @@ void RadioHardwarePage::build(FormWindow * window) new StaticText(window, grid.getLabelSlot(), STR_MAXBAUDRATE, 0, COLOR_THEME_PRIMARY1); new Choice(window, grid.getFieldSlot(1,0), STR_CRSF_BAUDRATE, 0, DIM(CROSSFIRE_BAUDRATES) - 1, [=]() -> int { - return DIM(CROSSFIRE_BAUDRATES) - 1 - g_eeGeneral.telemetryBaudrate; + return CROSSFIRE_STORE_TO_INDEX(g_eeGeneral.telemetryBaudrate); }, [=](int newValue) { - g_eeGeneral.telemetryBaudrate = DIM(CROSSFIRE_BAUDRATES) - 1 - newValue; + g_eeGeneral.telemetryBaudrate = CROSSFIRE_INDEX_TO_STORE(newValue); SET_DIRTY(); restartExternalModule(); }); diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index c23739621..f9be2be8e 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -578,9 +578,9 @@ void menuRadioHardware(event_t event) #if (defined(CROSSFIRE) || defined(GHOST)) case ITEM_RADIO_HARDWARE_SERIAL_BAUDRATE: lcdDrawTextAlignedLeft(y, STR_MAXBAUDRATE); - lcdDrawNumber(HW_SETTINGS_COLUMN2, y, CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate], attr|LEFT); + lcdDrawNumber(HW_SETTINGS_COLUMN2, y, CROSSFIRE_BAUDRATE, attr|LEFT); if (attr) { - g_eeGeneral.telemetryBaudrate = DIM(CROSSFIRE_BAUDRATES) - 1 - checkIncDecModel(event, DIM(CROSSFIRE_BAUDRATES) - 1 - g_eeGeneral.telemetryBaudrate, 0, DIM(CROSSFIRE_BAUDRATES) - 1); + g_eeGeneral.telemetryBaudrate = CROSSFIRE_INDEX_TO_STORE(checkIncDecModel(event, CROSSFIRE_STORE_TO_INDEX(g_eeGeneral.telemetryBaudrate), 0, DIM(CROSSFIRE_BAUDRATES) - 1)); if (checkIncDec_Ret) { restartExternalModule(); } diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index 559f37b91..430af2dad 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -95,21 +95,31 @@ void crossfireSetDefault(int index, uint8_t id, uint8_t subId); uint8_t createCrossfireModelIDFrame(uint8_t * frame); const uint32_t CROSSFIRE_BAUDRATES[] = { - 3750000, - 1870000, - 921600, - 400000, 115200, + 400000, + 921600, + 1870000, + 3750000, }; const uint8_t CROSSFIRE_FRAME_PERIODS[] = { - 4, - 4, - 4, - 4, 16, + 4, + 4, + 4, + 4, }; -#define CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate] -#define CROSSFIRE_PERIOD (CROSSFIRE_FRAME_PERIODS[g_eeGeneral.telemetryBaudrate] * 1000) +#if SPORT_MAX_BAUDRATE < 400000 + // index 0 (115200) is the default 0 value + #define CROSSFIRE_STORE_TO_INDEX(v) v + #define CROSSFIRE_INDEX_TO_STORE(i) i +#else + // index 1 (400000) is the default 0 value + #define CROSSFIRE_STORE_TO_INDEX(v) (v + 1) % DIM(CROSSFIRE_BAUDRATES) + #define CROSSFIRE_INDEX_TO_STORE(i) (i + 4) % DIM(CROSSFIRE_BAUDRATES) +#endif + +#define CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[CROSSFIRE_STORE_TO_INDEX(g_eeGeneral.telemetryBaudrate)] +#define CROSSFIRE_PERIOD (CROSSFIRE_FRAME_PERIODS[CROSSFIRE_STORE_TO_INDEX(g_eeGeneral.telemetryBaudrate)] * 1000) #define CROSSFIRE_TELEM_MIRROR_BAUDRATE 115200 From e312298e5260c897e5a8436af1c4c1e0e3db031d Mon Sep 17 00:00:00 2001 From: Paul Kendall Date: Fri, 17 Sep 2021 18:21:30 +1200 Subject: [PATCH 2/2] Fix as per review --- radio/src/telemetry/crossfire.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index 430af2dad..6007de2c2 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -114,8 +114,12 @@ const uint8_t CROSSFIRE_FRAME_PERIODS[] = { #define CROSSFIRE_INDEX_TO_STORE(i) i #else // index 1 (400000) is the default 0 value - #define CROSSFIRE_STORE_TO_INDEX(v) (v + 1) % DIM(CROSSFIRE_BAUDRATES) - #define CROSSFIRE_INDEX_TO_STORE(i) (i + 4) % DIM(CROSSFIRE_BAUDRATES) + #define CROSSFIRE_DEFAULT_INDEX 1 + #define CROSSFIRE_STORE_TO_INDEX(v) \ + (v + CROSSFIRE_DEFAULT_INDEX) % DIM(CROSSFIRE_BAUDRATES) + #define CROSSFIRE_INDEX_TO_STORE(i) \ + (i + (DIM(CROSSFIRE_BAUDRATES) - CROSSFIRE_DEFAULT_INDEX)) \ + % DIM(CROSSFIRE_BAUDRATES) #endif #define CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[CROSSFIRE_STORE_TO_INDEX(g_eeGeneral.telemetryBaudrate)]