Skip to content

Commit b3d36eb

Browse files
authored
feat: non inverted SBUS trainer support on serial inputs on H5/H7 (#7133)
1 parent 8a9b52b commit b3d36eb

23 files changed

Lines changed: 171 additions & 128 deletions

File tree

radio/src/dataconstants.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ enum UartModes {
251251
UART_MODE_TELEMETRY_MIRROR,
252252
UART_MODE_TELEMETRY,
253253
UART_MODE_SBUS_TRAINER,
254+
UART_MODE_SBUS_TRAINER_INV,
254255
UART_MODE_LUA,
255256
UART_MODE_CLI,
256257
UART_MODE_GPS,

radio/src/gui/gui_common.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,11 @@ bool isSerialModeAvailable(uint8_t port_nr, int mode)
555555
return false;
556556
#endif
557557

558+
#if defined(STM32F4)
559+
if (mode == UART_MODE_SBUS_TRAINER_INV)
560+
return false;
561+
#endif
562+
558563
#if !defined(LUA)
559564
if (mode == UART_MODE_LUA)
560565
return false;

radio/src/serial.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ static void serialSetCallBacks(int mode, void* ctx, const etx_serial_port_t* por
218218
#endif
219219

220220
case UART_MODE_SBUS_TRAINER:
221+
case UART_MODE_SBUS_TRAINER_INV:
221222
sbusSetReceiveCtx(ctx, drv);
222223
if (drv && drv->setIdleCb) {
223224
drv->setIdleCb(ctx, sbusAuxFrameReceived, nullptr);
@@ -317,6 +318,13 @@ static void serialSetupPort(int mode, etx_serial_init& params)
317318
params.direction = ETX_Dir_RX;
318319
break;
319320

321+
case UART_MODE_SBUS_TRAINER_INV:
322+
params.baudrate = SBUS_BAUDRATE;
323+
params.encoding = ETX_Encoding_8E2,
324+
params.direction = ETX_Dir_RX;
325+
params.polarity = ETX_Pol_Inverted;
326+
break;
327+
320328
#if defined(LUA)
321329
case UART_MODE_LUA:
322330
params.baudrate = LUA_DEFAULT_BAUDRATE;

radio/src/storage/yaml/yaml_datastructs_funcs.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2653,6 +2653,7 @@ static const struct YamlIdStr enum_UartModes[] = {
26532653
{ UART_MODE_TELEMETRY_MIRROR, "TELEMETRY_MIRROR" },
26542654
{ UART_MODE_TELEMETRY, "TELEMETRY_IN" },
26552655
{ UART_MODE_SBUS_TRAINER, "SBUS_TRAINER" },
2656+
{ UART_MODE_SBUS_TRAINER_INV, "SBUS_TRAINER_INV" },
26562657
{ UART_MODE_LUA, "LUA" },
26572658
{ UART_MODE_CLI, "CLI" },
26582659
{ UART_MODE_GPS, "GPS" },

radio/src/targets/common/arm/stm32/stm32_serial_driver.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,13 +281,23 @@ static void* stm32_serial_init(void* hw_def, const etx_serial_init* params)
281281
if (sp->tx_buffer.length > 0) {
282282
st->callbacks.on_send = _on_send_fifo;
283283
}
284+
#if defined(STM32H7) || defined(STM32H7RS) || defined(STM32H5)
285+
if (params->polarity & ETX_Pol_Inverted)
286+
stm32_usart_tx_inversion(usart, true);
287+
#endif
288+
284289
}
285290

286291
if (params->direction & ETX_Dir_RX) {
287292

288293
auto rx_buf = sp->rx_buffer.buffer;
289294
auto buf_len = sp->rx_buffer.length;
290295

296+
#if defined(STM32H7) || defined(STM32H7RS) || defined(STM32H5)
297+
if (params->polarity & ETX_Pol_Inverted)
298+
stm32_usart_rx_inversion(usart, true);
299+
#endif
300+
291301
if (usart->rxDMA) {
292302
stm32_usart_init_rx_dma(usart, rx_buf, buf_len);
293303

radio/src/translations/i18n/cn.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,14 @@
136136
#define TR_AUX_SERIAL_MODES_1 "禁用"
137137
#define TR_AUX_SERIAL_MODES_2 "回传镜像"
138138
#define TR_AUX_SERIAL_MODES_3 "回传输入"
139-
#define TR_AUX_SERIAL_MODES_4 "SBUS教练"
140-
#define TR_AUX_SERIAL_MODES_5 "LUA脚本"
141-
#define TR_AUX_SERIAL_MODES_6 "CLI"
142-
#define TR_AUX_SERIAL_MODES_7 "GPS"
143-
#define TR_AUX_SERIAL_MODES_8 "Debug"
144-
#define TR_AUX_SERIAL_MODES_9 "SpaceMouse"
145-
#define TR_AUX_SERIAL_MODES_10 "外置发射"
139+
#define TR_AUX_SERIAL_MODES_4 TR("SBUS Trn Inv.","SBUS Trainer Inv.")
140+
#define TR_AUX_SERIAL_MODES_5 "SBUS教练"
141+
#define TR_AUX_SERIAL_MODES_6 "LUA脚本"
142+
#define TR_AUX_SERIAL_MODES_7 "CLI"
143+
#define TR_AUX_SERIAL_MODES_8 "GPS"
144+
#define TR_AUX_SERIAL_MODES_9 "Debug"
145+
#define TR_AUX_SERIAL_MODES_10 "SpaceMouse"
146+
#define TR_AUX_SERIAL_MODES_11 "外置发射"
146147
#define TR_SWTYPES_1 "禁用"
147148
#define TR_SWTYPES_2 "回弹"
148149
#define TR_SWTYPES_3 "2段"

radio/src/translations/i18n/cz.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,14 @@
142142
#define TR_AUX_SERIAL_MODES_1 "VYP"
143143
#define TR_AUX_SERIAL_MODES_2 "Telemetrie zrcadlení"
144144
#define TR_AUX_SERIAL_MODES_3 "Telemetrie vstup"
145-
#define TR_AUX_SERIAL_MODES_4 "SBUS Trenér"
146-
#define TR_AUX_SERIAL_MODES_5 "LUA"
147-
#define TR_AUX_SERIAL_MODES_6 "CLI"
148-
#define TR_AUX_SERIAL_MODES_7 "GPS"
149-
#define TR_AUX_SERIAL_MODES_8 "Debug"
150-
#define TR_AUX_SERIAL_MODES_9 "SpaceMouse"
151-
#define TR_AUX_SERIAL_MODES_10 "Externí modul"
145+
#define TR_AUX_SERIAL_MODES_4 TR("SBUS Trn Inv.","SBUS Trainer Inv.")
146+
#define TR_AUX_SERIAL_MODES_5 "SBUS Trenér"
147+
#define TR_AUX_SERIAL_MODES_6 "LUA"
148+
#define TR_AUX_SERIAL_MODES_7 "CLI"
149+
#define TR_AUX_SERIAL_MODES_8 "GPS"
150+
#define TR_AUX_SERIAL_MODES_9 "Debug"
151+
#define TR_AUX_SERIAL_MODES_10 "SpaceMouse"
152+
#define TR_AUX_SERIAL_MODES_11 "Externí modul"
152153
#define TR_SWTYPES_1 "Žádný"
153154
#define TR_SWTYPES_2 "Bez aretace"
154155
#define TR_SWTYPES_3 "2-polohový"

radio/src/translations/i18n/da.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,14 @@
136136
#define TR_AUX_SERIAL_MODES_1 "FRA"
137137
#define TR_AUX_SERIAL_MODES_2 "Telem spejlet"
138138
#define TR_AUX_SERIAL_MODES_3 "Telemetri ind"
139-
#define TR_AUX_SERIAL_MODES_4 "SBUS træner"
140-
#define TR_AUX_SERIAL_MODES_5 "LUA"
141-
#define TR_AUX_SERIAL_MODES_6 "CLI"
142-
#define TR_AUX_SERIAL_MODES_7 "GPS"
143-
#define TR_AUX_SERIAL_MODES_8 "Debug"
144-
#define TR_AUX_SERIAL_MODES_9 "SpaceMouse"
145-
#define TR_AUX_SERIAL_MODES_10 "Eksternt modul"
139+
#define TR_AUX_SERIAL_MODES_4 TR("SBUS Trn Inv.","SBUS Trainer Inv.")
140+
#define TR_AUX_SERIAL_MODES_5 "SBUS træner"
141+
#define TR_AUX_SERIAL_MODES_6 "LUA"
142+
#define TR_AUX_SERIAL_MODES_7 "CLI"
143+
#define TR_AUX_SERIAL_MODES_8 "GPS"
144+
#define TR_AUX_SERIAL_MODES_9 "Debug"
145+
#define TR_AUX_SERIAL_MODES_10 "SpaceMouse"
146+
#define TR_AUX_SERIAL_MODES_11 "Eksternt modul"
146147

147148
#define TR_SWTYPES_1 "Ingen"
148149
#define TR_SWTYPES_2 "2 pos skift"

radio/src/translations/i18n/de.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,14 @@
139139
#define TR_AUX_SERIAL_MODES_1 "AUS"
140140
#define TR_AUX_SERIAL_MODES_2 TR("Telem weiterl.", "Telemetrie weiterleiten")
141141
#define TR_AUX_SERIAL_MODES_3 TR("Telemetrie In", "Telemetrie Eingang")
142-
#define TR_AUX_SERIAL_MODES_4 "SBUS Eingang"
143-
#define TR_AUX_SERIAL_MODES_5 "LUA"
144-
#define TR_AUX_SERIAL_MODES_6 "CLI"
145-
#define TR_AUX_SERIAL_MODES_7 "GPS"
146-
#define TR_AUX_SERIAL_MODES_8 "Debug"
147-
#define TR_AUX_SERIAL_MODES_9 "SpaceMouse"
148-
#define TR_AUX_SERIAL_MODES_10 "Externes Modul"
142+
#define TR_AUX_SERIAL_MODES_4 TR("SBUS Trn Inv.","SBUS Trainer Inv.")
143+
#define TR_AUX_SERIAL_MODES_5 "SBUS Eingang"
144+
#define TR_AUX_SERIAL_MODES_6 "LUA"
145+
#define TR_AUX_SERIAL_MODES_7 "CLI"
146+
#define TR_AUX_SERIAL_MODES_8 "GPS"
147+
#define TR_AUX_SERIAL_MODES_9 "Debug"
148+
#define TR_AUX_SERIAL_MODES_10 "SpaceMouse"
149+
#define TR_AUX_SERIAL_MODES_11 "Externes Modul"
149150
#define TR_SWTYPES_1 "Kein"
150151
#define TR_SWTYPES_2 "Taster"
151152
#define TR_SWTYPES_3 "2POS"

radio/src/translations/i18n/en.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,14 @@
136136
#define TR_AUX_SERIAL_MODES_1 "OFF"
137137
#define TR_AUX_SERIAL_MODES_2 "Telem Mirror"
138138
#define TR_AUX_SERIAL_MODES_3 "Telemetry In"
139-
#define TR_AUX_SERIAL_MODES_4 "SBUS Trainer"
140-
#define TR_AUX_SERIAL_MODES_5 "Lua"
141-
#define TR_AUX_SERIAL_MODES_6 "CLI"
142-
#define TR_AUX_SERIAL_MODES_7 "GPS"
143-
#define TR_AUX_SERIAL_MODES_8 "Debug"
144-
#define TR_AUX_SERIAL_MODES_9 "SpaceMouse"
145-
#define TR_AUX_SERIAL_MODES_10 "External module"
139+
#define TR_AUX_SERIAL_MODES_4 TR("SBUS Trn Inv.",TR("SBUS Trn Inv.","SBUS Trainer Inv."))
140+
#define TR_AUX_SERIAL_MODES_5 "SBUS Trainer"
141+
#define TR_AUX_SERIAL_MODES_6 "LUA"
142+
#define TR_AUX_SERIAL_MODES_7 "CLI"
143+
#define TR_AUX_SERIAL_MODES_8 "GPS"
144+
#define TR_AUX_SERIAL_MODES_9 "Debug"
145+
#define TR_AUX_SERIAL_MODES_10 "SpaceMouse"
146+
#define TR_AUX_SERIAL_MODES_11 "External module"
146147
#define TR_SWTYPES_1 "None"
147148
#define TR_SWTYPES_2 "Toggle"
148149
#define TR_SWTYPES_3 "2POS"

0 commit comments

Comments
 (0)