Fix baud rate defaults

Default value 0 is 400k baud, unless SPORT_MAX_BAUDRATE < 400000 in which case default value 0 is 115k baud.
This commit is contained in:
Paul Kendall
2021-09-17 12:20:43 +12:00
parent 8986d0a5dc
commit 994c739b57
3 changed files with 24 additions and 14 deletions
+2 -2
View File
@@ -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();
});
@@ -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();
}
+20 -10
View File
@@ -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