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:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 "
|
||||
|
||||
Reference in New Issue
Block a user