From d3996c47583e8d08b7750986467297f2c4f2aca8 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 9 Jan 2018 07:41:04 +0000 Subject: [PATCH] Fix self-only in YSF. --- YSFControl.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/YSFControl.cpp b/YSFControl.cpp index 0eb3225..f203c61 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017 Jonathan Naylor, G4KLX + * Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -120,6 +120,14 @@ bool CYSFControl::writeModem(unsigned char *data, unsigned int len) return false; } + if (type == TAG_LOST && m_rfState == RS_RF_REJECTED) { + m_rfPayload.reset(); + m_rfSource = NULL; + m_rfDest = NULL; + m_rfState = RS_RF_LISTENING; + return false; + } + if (type == TAG_LOST) { m_rfPayload.reset(); m_rfState = RS_RF_LISTENING; @@ -288,7 +296,10 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data) } } else if (valid && fi == YSF_FI_TERMINATOR) { if (m_rfState == RS_RF_REJECTED) { - m_rfState = RS_RF_LISTENING; + m_rfPayload.reset(); + m_rfSource = NULL; + m_rfDest = NULL; + m_rfState = RS_RF_LISTENING; } else if (m_rfState == RS_RF_AUDIO) { m_rfPayload.processHeaderData(data + 2U); @@ -471,7 +482,10 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) } } else if (valid && fi == YSF_FI_TERMINATOR) { if (m_rfState == RS_RF_REJECTED) { - m_rfState = RS_RF_LISTENING; + m_rfPayload.reset(); + m_rfSource = NULL; + m_rfDest = NULL; + m_rfState = RS_RF_LISTENING; } else if (m_rfState == RS_RF_AUDIO) { m_rfPayload.processHeaderData(data + 2U); @@ -807,7 +821,10 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data) } } else if (valid && fi == YSF_FI_TERMINATOR) { if (m_rfState == RS_RF_REJECTED) { - m_rfState = RS_RF_LISTENING; + m_rfPayload.reset(); + m_rfSource = NULL; + m_rfDest = NULL; + m_rfState = RS_RF_LISTENING; } else if (m_rfState == RS_RF_DATA) { m_rfPayload.processHeaderData(data + 2U);