From 79d2e9a27e80b07ca40152c22e3dc6cfac27a6a3 Mon Sep 17 00:00:00 2001 From: Silvano Seva Date: Fri, 31 Oct 2025 22:12:53 +0100 Subject: [PATCH] M17: Demodulator: force unlock on EOT frame Signed-off-by: Silvano Seva --- openrtx/src/protocols/M17/M17Demodulator.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/openrtx/src/protocols/M17/M17Demodulator.cpp b/openrtx/src/protocols/M17/M17Demodulator.cpp index aea21d69..e4460dc8 100644 --- a/openrtx/src/protocols/M17/M17Demodulator.cpp +++ b/openrtx/src/protocols/M17/M17Demodulator.cpp @@ -403,13 +403,16 @@ void M17Demodulator::syncUpdateState() uint8_t streamHd = hammingDistance((*demodFrame)[0], STREAM_SYNC_WORD[0]) + hammingDistance((*demodFrame)[1], STREAM_SYNC_WORD[1]); + uint8_t eotHd = hammingDistance((*demodFrame)[0], EOT_SYNC_WORD[0]) + + hammingDistance((*demodFrame)[1], EOT_SYNC_WORD[1]); + if(streamHd <= 1) missedSyncs = 0; else missedSyncs += 1; - // The lock is lost after four consecutive sync misses. - if(missedSyncs > 4) + // The lock is lost after four consecutive sync misses or an EOT frame. + if((missedSyncs > 4) || (eotHd <= 1)) demodState = DemodState::UNLOCKED; else demodState = DemodState::LOCKED;