diff --git a/src/main/fc/settings.c b/src/main/fc/settings.c index 49063490c..51906b31c 100644 --- a/src/main/fc/settings.c +++ b/src/main/fc/settings.c @@ -60,6 +60,7 @@ #include "io/gps.h" #include "io/ledstrip.h" #include "io/osd.h" +#include "io/vtx_control.h" #include "io/vtx_rtc6705.h" #include "rx/rx.h" @@ -715,13 +716,18 @@ const clivalue_t valueTable[] = { #endif { "pwr_on_arm_grace", VAR_UINT8 | MASTER_VALUE, .config.minmax = { 0, 30 }, PG_SYSTEM_CONFIG, offsetof(systemConfig_t, powerOnArmingGraceTime) }, -// PG_VTX_CONFIG +// PG_VTX_RTC6705_CONFIG #ifdef VTX_RTC6705 { "vtx_band", VAR_UINT8 | MASTER_VALUE, .config.minmax = { 1, 5 }, PG_VTX_RTC6705_CONFIG, offsetof(vtxRTC6705Config_t, band) }, { "vtx_channel", VAR_UINT8 | MASTER_VALUE, .config.minmax = { 1, 8 }, PG_VTX_RTC6705_CONFIG, offsetof(vtxRTC6705Config_t, channel) }, { "vtx_power", VAR_UINT8 | MASTER_VALUE, .config.minmax = { 0, RTC6705_POWER_COUNT - 1 }, PG_VTX_RTC6705_CONFIG, offsetof(vtxRTC6705Config_t, power) }, #endif +// PG_VTX_CONFIG +#if defined(VTX_CONTROL) && defined(VTX_COMMON) + { "vtx_halfduplex", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_VTX_CONFIG, offsetof(vtxConfig_t, halfDuplex) }, +#endif + // PG_VCD_CONFIG #ifdef USE_MAX7456 { "vcd_video_system", VAR_UINT8 | MASTER_VALUE, .config.minmax = { 0, 2 }, PG_VCD_CONFIG, offsetof(vcdProfile_t, video_system) }, diff --git a/src/main/io/vtx_control.c b/src/main/io/vtx_control.c index 622f656e7..eb78d1878 100644 --- a/src/main/io/vtx_control.c +++ b/src/main/io/vtx_control.c @@ -40,7 +40,12 @@ #if defined(VTX_CONTROL) && defined(VTX_COMMON) -PG_REGISTER(vtxConfig_t, vtxConfig, PG_VTX_CONFIG, 1); +PG_REGISTER_WITH_RESET_TEMPLATE(vtxConfig_t, vtxConfig, PG_VTX_CONFIG, 1); + +PG_RESET_TEMPLATE(vtxConfig_t, vtxConfig, +// .vtxChannelActivationConditions = { 0 }, + .halfDuplex = true +); static uint8_t locked = 0; diff --git a/src/main/io/vtx_control.h b/src/main/io/vtx_control.h index 3715b60e0..9c1e19eb8 100644 --- a/src/main/io/vtx_control.h +++ b/src/main/io/vtx_control.h @@ -30,6 +30,7 @@ typedef struct vtxChannelActivationCondition_s { typedef struct vtxConfig_s { vtxChannelActivationCondition_t vtxChannelActivationConditions[MAX_CHANNEL_ACTIVATION_CONDITION_COUNT]; + uint8_t halfDuplex; } vtxConfig_t; PG_DECLARE(vtxConfig_t, vtxConfig); diff --git a/src/main/io/vtx_smartaudio.c b/src/main/io/vtx_smartaudio.c index ea293f39c..1fadb1368 100644 --- a/src/main/io/vtx_smartaudio.c +++ b/src/main/io/vtx_smartaudio.c @@ -49,6 +49,7 @@ #include "flight/pid.h" #include "io/serial.h" +#include "io/vtx_control.h" #include "io/vtx_smartaudio.h" #include "io/vtx_string.h" @@ -622,7 +623,14 @@ bool vtxSmartAudioInit() serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_VTX_SMARTAUDIO); if (portConfig) { - smartAudioSerialPort = openSerialPort(portConfig->identifier, FUNCTION_VTX_SMARTAUDIO, NULL, 4800, MODE_RXTX, SERIAL_BIDIR|SERIAL_BIDIR_PP); + portOptions_e portOptions = 0; +#if defined(VTX_COMMON) + portOptions = portOptions | (vtxConfig()->halfDuplex ? SERIAL_BIDIR | SERIAL_BIDIR_PP : SERIAL_UNIDIR); +#else + portOptions = SERIAL_BIDIR; +#endif + + smartAudioSerialPort = openSerialPort(portConfig->identifier, FUNCTION_VTX_SMARTAUDIO, NULL, 4800, MODE_RXTX, portOptions); } if (!smartAudioSerialPort) { diff --git a/src/main/io/vtx_tramp.c b/src/main/io/vtx_tramp.c index 281eb003d..73eaef16d 100644 --- a/src/main/io/vtx_tramp.c +++ b/src/main/io/vtx_tramp.c @@ -35,11 +35,10 @@ #include "drivers/vtx_common.h" #include "io/serial.h" +#include "io/vtx_control.h" #include "io/vtx_string.h" #include "io/vtx_tramp.h" -#define TRAMP_SERIAL_OPTIONS (SERIAL_BIDIR) - #if defined(CMS) || defined(VTX_COMMON) const uint16_t trampPowerTable[VTX_TRAMP_POWER_COUNT] = { 25, 100, 200, 400, 600 @@ -518,7 +517,14 @@ bool vtxTrampInit(void) serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_VTX_TRAMP); if (portConfig) { - trampSerialPort = openSerialPort(portConfig->identifier, FUNCTION_VTX_TRAMP, NULL, 9600, MODE_RXTX, TRAMP_SERIAL_OPTIONS); + portOptions_e portOptions = 0; +#if defined(VTX_COMMON) + portOptions = portOptions | (vtxConfig()->halfDuplex ? SERIAL_BIDIR : SERIAL_UNIDIR); +#else + portOptions = SERIAL_BIDIR; +#endif + + trampSerialPort = openSerialPort(portConfig->identifier, FUNCTION_VTX_TRAMP, NULL, 9600, MODE_RXTX, portOptions); } if (!trampSerialPort) { diff --git a/src/main/target/SPRACINGF3EVO/target.h b/src/main/target/SPRACINGF3EVO/target.h index 7188b6621..ffc531b98 100644 --- a/src/main/target/SPRACINGF3EVO/target.h +++ b/src/main/target/SPRACINGF3EVO/target.h @@ -41,6 +41,7 @@ #undef USE_UNCOMMON_MIXERS #endif #undef TELEMETRY_JETIEXBUS +#undef USE_SERIALRX_JETIEXBUS #define CONFIG_FASTLOOP_PREFERRED_ACC ACC_DEFAULT