From 68cdde94fc297e882bd6c8c1c27997b47dc6b8f4 Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Wed, 4 Dec 2019 15:49:38 +1300 Subject: [PATCH] SRXL2 failsafe fix for newer receivers (#9189) SRXL2 failsafe fix for newer receivers --- src/main/rx/srxl2.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/rx/srxl2.c b/src/main/rx/srxl2.c index 8bd43232bc..48944bb1fc 100644 --- a/src/main/rx/srxl2.c +++ b/src/main/rx/srxl2.c @@ -168,18 +168,17 @@ bool srxl2ProcessHandshake(const Srxl2Header* header) } void srxl2ProcessChannelData(const Srxl2ChannelDataHeader* channelData, rxRuntimeConfig_t *rxRuntimeConfig) { + globalResult = RX_FRAME_COMPLETE; + if (channelData->rssi >= 0) { const int rssiPercent = channelData->rssi; setRssi(scaleRange(rssiPercent, 0, 100, 0, RSSI_MAX_VALUE), RSSI_SOURCE_RX_PROTOCOL); - } else { - // If dBm value provided, cant properly convert to % without knowing the receivers sensitivity range. Fix at 50% for now. - setRssi(RSSI_MAX_VALUE / 2, RSSI_SOURCE_RX_PROTOCOL); } - if (channelData->rssi == 0) { - globalResult = RX_FRAME_FAILSAFE; - } else { - globalResult = RX_FRAME_COMPLETE; + //If receiver is in a connected state, and a packet is missed, the channel mask will be 0. + if (!channelData->channelMask.u32) { + globalResult |= RX_FRAME_FAILSAFE; + return; } const uint16_t *frameChannels = (const uint16_t *) (channelData + 1); @@ -209,7 +208,7 @@ bool srxl2ProcessControlData(const Srxl2Header* header, rxRuntimeConfig_t *rxRun break; case FailsafeChannelData: { - srxl2ProcessChannelData((const Srxl2ChannelDataHeader *) (controlData + 1), rxRuntimeConfig); + globalResult |= RX_FRAME_FAILSAFE; setRssiDirect(0, RSSI_SOURCE_RX_PROTOCOL); // DEBUG_PRINTF("fs channel data\r\n"); } break;