Allow selecting higher baud rates (#640)

* higher baud rates

* Update colorlcd models to support selectable baud tp 3.75M

# Conflicts:
#	radio/src/gui/colorlcd/radio_hardware.cpp

Co-authored-by: Jye <JyeSmith@users.noreply.github.com>
Co-authored-by: Paul Kendall <pkendall64@gmail.com>
This commit is contained in:
Jye
2021-09-12 06:46:43 +10:00
committed by GitHub
co-authored by Jye Paul Kendall
parent 3778ed26dd
commit 884bcec13c
6 changed files with 43 additions and 14 deletions
+25 -2
View File
@@ -149,6 +149,21 @@ class BluetoothConfigWindow : public FormGroup
};
#endif
void restartExternalModule()
{
if (!IS_EXTERNAL_MODULE_ON()) {
return;
}
pauseMixerCalculations();
pausePulses();
EXTERNAL_MODULE_OFF();
RTOS_WAIT_MS(20); // 20ms so that the pulses interrupt will reinit the frame rate
telemetryProtocol = 255; // force telemetry port + module reinitialization
EXTERNAL_MODULE_ON();
resumePulses();
resumeMixerCalculations();
}
void RadioHardwarePage::build(FormWindow * window)
{
FormGridLayout grid;
@@ -259,10 +274,18 @@ void RadioHardwarePage::build(FormWindow * window)
new CheckBox(window, grid.getFieldSlot(1,0), GET_SET_INVERTED(g_eeGeneral.disableRtcWarning ));
grid.nextLine();
#if defined(CROSSFIRE) && SPORT_MAX_BAUDRATE < 400000
#if defined(CROSSFIRE)
// Max baud for external modules
new StaticText(window, grid.getLabelSlot(), STR_MAXBAUDRATE, 0, COLOR_THEME_PRIMARY1);
new Choice(window, grid.getFieldSlot(1,0), STR_CRSF_BAUDRATE, 0, 1, GET_SET_DEFAULT(g_eeGeneral.telemetryBaudrate));
new Choice(window, grid.getFieldSlot(1,0), STR_CRSF_BAUDRATE, 0, DIM(CROSSFIRE_BAUDRATES) - 1,
[=]() -> int {
return DIM(CROSSFIRE_BAUDRATES) - 1 - g_eeGeneral.telemetryBaudrate;
},
[=](int newValue) {
g_eeGeneral.telemetryBaudrate = DIM(CROSSFIRE_BAUDRATES) - 1 - newValue;
SET_DIRTY();
restartExternalModule();
});
grid.nextLine();
#endif
@@ -165,7 +165,7 @@ enum {
ITEM_RADIO_HARDWARE_CAPACITY_CALIB,
#endif
#if (defined(CROSSFIRE) || defined(GHOST)) && SPORT_MAX_BAUDRATE < 400000
#if (defined(CROSSFIRE) || defined(GHOST))
ITEM_RADIO_HARDWARE_SERIAL_BAUDRATE,
#endif
@@ -287,7 +287,7 @@ enum {
#define TX_CAPACITY_MEASUREMENT_ROWS
#endif
#if (defined(CROSSFIRE) || defined(GHOST)) && (SPORT_MAX_BAUDRATE < 400000 || defined(DEBUG))
#if (defined(CROSSFIRE) || defined(GHOST))
#define MAX_BAUD_ROWS 0,
#else
#define MAX_BAUD_ROWS
@@ -575,7 +575,7 @@ void menuRadioHardware(event_t event)
break;
#endif
#if (defined(CROSSFIRE) || defined(GHOST)) && SPORT_MAX_BAUDRATE < 400000
#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);
+3 -1
View File
@@ -65,11 +65,13 @@ void telemetryPortInit(uint32_t baudrate, uint8_t mode)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_Init(TELEMETRY_GPIO, &GPIO_InitStructure);
telemetryInitDirPin();
USART_OverSampling8Cmd(TELEMETRY_USART, ENABLE);
USART_InitStructure.USART_BaudRate = baudrate;
if (mode & TELEMETRY_SERIAL_8E2) {
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
@@ -57,12 +57,15 @@ void telemetryPortInit(uint32_t baudrate, uint8_t mode)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_Init(TELEMETRY_GPIO, &GPIO_InitStructure);
telemetryInitDirPin();
USART_DeInit(TELEMETRY_USART);
USART_OverSampling8Cmd(TELEMETRY_USART, ENABLE);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = baudrate;
if (mode & TELEMETRY_SERIAL_8E2) {
+6 -5
View File
@@ -95,20 +95,21 @@ 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,
};
const uint8_t CROSSFIRE_FRAME_PERIODS[] = {
4,
4,
4,
4,
16,
};
#if SPORT_MAX_BAUDRATE < 400000 || defined(DEBUG)
#define CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate]
#define CROSSFIRE_PERIOD (CROSSFIRE_FRAME_PERIODS[g_eeGeneral.telemetryBaudrate] * 1000)
#else
#define CROSSFIRE_BAUDRATE 400000
#define CROSSFIRE_PERIOD 4000 /* us; 250 Hz */
#endif
#define CROSSFIRE_TELEM_MIRROR_BAUDRATE 115200
+2 -2
View File
@@ -91,8 +91,8 @@
#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_GYR_VSRCRAW "MAX\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW
#define LEN_CRSF_BAUDRATE "\004"
#define TR_CRSF_BAUDRATE "115k""400k"
#define LEN_CRSF_BAUDRATE "\005"
#define TR_CRSF_BAUDRATE "115k\0""400k\0""921k\0""1.87m""3.75m"
#if defined(MODULE_PROTOCOL_FLEX)
#define TR_MODULE_R9M_LITE "R9ML\0 "