diff --git a/radio/src/Makefile b/radio/src/Makefile index f318956e4..d9ea261d8 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -708,7 +708,7 @@ ifeq ($(PCB), $(filter $(PCB), SKY9X 9XRPRO)) SDCARD = YES BUZZER = NO THR_TRACE = YES - CPPDEFS += -DPCBSKY9X -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DHAPTIC -DDSM2 -DDSM2_PPM -DSWR + CPPDEFS += -DPCBSKY9X -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DHAPTIC -DDSM2 -DDSM2_PPM ifeq ($(PCB), SKY9X) CPPDEFS += -DROTARY_ENCODERS=1 CPPSRC += targets/sky9x/rotenc_driver.cpp diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index a5279de17..9df6fac72 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -149,10 +149,8 @@ void writeHeader() #endif #if defined(FRSKY) -#if defined(CPUARM) && defined(SWR) +#if defined(CPUARM) f_puts("SWR,RSSI,", &g_oLogFile); -#elif defined(CPUARM) - f_puts("RSSI,", &g_oLogFile); #else f_puts("Buffer,RX,TX,A1,A2,", &g_oLogFile); #if defined(FRSKY_HUB) @@ -232,7 +230,7 @@ void writeLogs() #endif #if defined(FRSKY) -#if defined(CPUARM) && defined(SWR) +#if defined(CPUARM) f_printf(&g_oLogFile, "%d,%d,", RAW_FRSKY_MINMAX(frskyData.swr), RAW_FRSKY_MINMAX(frskyData.rssi)); #elif defined(CPUARM) f_printf(&g_oLogFile, "%d,", RAW_FRSKY_MINMAX(frskyData.rssi)); diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 0f398bc30..3c96fbf08 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -338,6 +338,12 @@ void telemetryWakeup() } #endif +#if defined(PCBTARANIS) && defined(REVPLUS) + #define FRSKY_BAD_ANTENNA() (IS_VALID_XJT_VERSION() && frskyData.swr.value > 0x33) +#else + #define FRSKY_BAD_ANTENNA() (frskyData.swr.value > 0x33) +#endif + #if defined(CPUARM) static tmr10ms_t alarmsCheckTime = 0; #define SCHEDULE_NEXT_ALARMS_CHECK(seconds) alarmsCheckTime = get_tmr10ms() + (100*(seconds)) @@ -355,8 +361,8 @@ void telemetryWakeup() } } -#if defined(PCBTARANIS) && defined(SWR) - if (IS_FRSKY_SPORT_PROTOCOL() && frskyData.swr.value > 0x33) { +#if defined(PCBTARANIS) + if (IS_FRSKY_SPORT_PROTOCOL() && FRSKY_BAD_ANTENNA()) { AUDIO_SWR_RED(); POPUP_WARNING(STR_ANTENNAPROBLEM); SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/); @@ -499,9 +505,7 @@ void telemetryReset() #if defined(SIMU) #if defined(CPUARM) - #if defined(SWR) frskyData.swr.value = 30; - #endif frskyData.rssi.value = 75; #else frskyData.rssi[0].value = 75; diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 37ff75f23..f0ef38835 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -137,6 +137,7 @@ #define ADC2_ID 0xf103 #define BATT_ID 0xf104 #define SWR_ID 0xf105 +#define XJT_VERSION_ID 0xf106 // Default sensor data IDs (Physical IDs + CRC) #define DATA_ID_VARIO 0x00 // 0 @@ -318,10 +319,9 @@ enum TelemAnas { #if defined(CPUARM) struct FrskyData { -#if defined(SWR) FrskyValueWithMin swr; // TODO Min not needed -#endif FrskyValueWithMin rssi; // TODO Min not needed + uint16_t xjtVersion; }; #else struct FrskyData { @@ -331,6 +331,8 @@ struct FrskyData { }; #endif +#define IS_VALID_XJT_VERSION() (frskyData.xjtVersion != 0 && frskyData.xjtVersion != 0xff) + enum AlarmLevel { alarm_off = 0, alarm_yellow = 1, diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index cf0d29697..dd770d4f1 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -117,16 +117,27 @@ void processSportPacket(uint8_t *packet) data = SPORT_DATA_U8(packet); frskyData.rssi.set(data); } - - else if (appId == SWR_ID) { -#if defined(SWR) - data = SPORT_DATA_U8(packet); - frskyData.swr.set(data); -#else - // SWR skipped (not reliable on Taranis+) - return; -#endif +#if defined(PCBTARANIS) && defined(REVPLUS) + else if (appId == XJT_VERSION_ID) { + frskyData.xjtVersion = HUB_DATA_U16(packet); + if (!IS_VALID_XJT_VERSION()) { + frskyData.swr.set(0x00); + } } + else if (appId == SWR_ID) { + if (IS_VALID_XJT_VERSION()) + frskyData.swr.set(SPORT_DATA_U8(packet)); + else + frskyData.swr.set(0x00); + } +#else + else if (appId == XJT_VERSION_ID) { + frskyData.xjtVersion = HUB_DATA_U16(packet); + } + else if (appId == SWR_ID) { + frskyData.swr.set(SPORT_DATA_U8(packet)); + } +#endif if (TELEMETRY_STREAMING()/* because when Rx is OFF it happens that some old A1/A2 values are sent from the XJT module*/) { if ((appId >> 8) == 0) {