From 90ff130c5138a761076dc68538e186571b092982 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 10 May 2016 06:35:53 +0100 Subject: [PATCH] Small CW Id cleanups. --- CWIdTX.cpp | 18 ++++++++++++++---- CWIdTX.h | 2 ++ SerialPort.cpp | 5 +++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/CWIdTX.cpp b/CWIdTX.cpp index a5433ee..c75196f 100644 --- a/CWIdTX.cpp +++ b/CWIdTX.cpp @@ -140,7 +140,7 @@ uint8_t CCWIdTX::write(const uint8_t* data, uint8_t length) bool b = (SYMBOL_LIST[j].pattern & MASK) == MASK; WRITE_BIT1(m_poBuffer, m_poLen, b); - if (m_poLen >= 1000U) { + if (m_poLen >= 995U) { m_poLen = 0U; return 4U; } @@ -151,13 +151,23 @@ uint8_t CCWIdTX::write(const uint8_t* data, uint8_t length) } } - if (m_poLen == 8U) + // An empty message + if (m_poLen == 8U) { m_poLen = 0U; - else - m_poLen += 5U; + return 4U; + } + + m_poLen += 5U; DEBUG2("Message created with length", m_poLen); return 0U; } +void CCWIdTX::reset() +{ + m_poLen = 0U; + m_poPtr = 0U; + m_n = 0U; +} + diff --git a/CWIdTX.h b/CWIdTX.h index 4722dfa..70f67ea 100644 --- a/CWIdTX.h +++ b/CWIdTX.h @@ -30,6 +30,8 @@ public: uint8_t write(const uint8_t* data, uint8_t length); + void reset(); + private: uint8_t m_poBuffer[1000U]; uint16_t m_poLen; diff --git a/SerialPort.cpp b/SerialPort.cpp index 22d5767..b2b2fcb 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -276,18 +276,21 @@ void CSerialPort::setMode(MMDVM_STATE modemState) DEBUG1("Mode set to DMR"); dstarRX.reset(); ysfRX.reset(); + cwIdTX.reset(); break; case STATE_DSTAR: DEBUG1("Mode set to D-Star"); dmrIdleRX.reset(); dmrRX.reset(); ysfRX.reset(); + cwIdTX.reset(); break; case STATE_YSF: DEBUG1("Mode set to System Fusion"); dmrIdleRX.reset(); dmrRX.reset(); dstarRX.reset(); + cwIdTX.reset(); break; case STATE_DSTARCAL: DEBUG1("Mode set to D-Star Calibrate"); @@ -295,6 +298,7 @@ void CSerialPort::setMode(MMDVM_STATE modemState) dmrRX.reset(); dstarRX.reset(); ysfRX.reset(); + cwIdTX.reset(); break; case STATE_DMRCAL: DEBUG1("Mode set to DMR Calibrate"); @@ -302,6 +306,7 @@ void CSerialPort::setMode(MMDVM_STATE modemState) dmrRX.reset(); dstarRX.reset(); ysfRX.reset(); + cwIdTX.reset(); break; default: DEBUG1("Mode set to Idle");