From 442b7e7f6671989f96e4711159beafbef459d73b Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Mon, 8 Aug 2022 11:45:58 -0400 Subject: [PATCH] reorganize how NXDN calibration mode is handled; --- nxdn/CalNXDN.cpp | 16 +++++++++++++--- nxdn/NXDNTX.cpp | 17 ++++++++++++++++- nxdn/NXDNTX.h | 15 +++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/nxdn/CalNXDN.cpp b/nxdn/CalNXDN.cpp index 8546c8f..3521d6f 100644 --- a/nxdn/CalNXDN.cpp +++ b/nxdn/CalNXDN.cpp @@ -88,17 +88,27 @@ CalNXDN::CalNXDN() : /// void CalNXDN::process() { - nxdnTX.process(); + if (m_transmit) { + nxdnTX.setCal(true); + nxdnTX.process(); + } + else { + nxdnTX.setCal(false); + } uint16_t space = nxdnTX.getSpace(); if (space < 1U) return; + if (m_audioSeq > 3U) { + m_audioSeq = 0U; + } + switch (m_state) { case NXDNCAL1K_TX: nxdnTX.writeData(NXDN_CAL1K[m_audioSeq], NXDN_FRAME_LENGTH_BYTES + 1U); - m_audioSeq = (m_audioSeq + 1U) % 4U; - if(!m_transmit) + m_audioSeq++; + if (!m_transmit) m_state = NXDNCAL1K_IDLE; break; default: diff --git a/nxdn/NXDNTX.cpp b/nxdn/NXDNTX.cpp index 36b46f8..99e6026 100644 --- a/nxdn/NXDNTX.cpp +++ b/nxdn/NXDNTX.cpp @@ -44,6 +44,7 @@ using namespace nxdn; /// NXDNTX::NXDNTX() : m_fifo(NXDN_TX_BUFFER_LEN), + m_state(NXDNTXSTATE_NORMAL), m_poBuffer(), m_poLen(0U), m_poPtr(0U), @@ -59,7 +60,8 @@ NXDNTX::NXDNTX() : /// void NXDNTX::process() { - if (m_fifo.getData() == 0U && m_poLen == 0U && m_tailCnt > 0U) { + if (m_fifo.getData() == 0U && m_poLen == 0U && m_tailCnt > 0U && + m_state != NXDNTXSTATE_CAL) { // transmit silence until the hang timer has expired uint16_t space = io.getSpace(); @@ -82,10 +84,14 @@ void NXDNTX::process() } if (m_poLen == 0U) { + if (m_state == NXDNTXSTATE_CAL) + m_tailCnt = 0U; + if (m_fifo.getData() == 0U) return; createData(); + DEBUG2("NXDNTX: process(): poLen", m_poLen); } @@ -165,6 +171,15 @@ void NXDNTX::setTxHang(uint8_t txHang) m_txHang = txHang * 600U; } +/// +/// Helper to set the calibration state for Tx. +/// +/// +void NXDNTX::setCal(bool start) +{ + m_state = start ? NXDNTXSTATE_CAL : NXDNTXSTATE_NORMAL; +} + /// /// Helper to get how much space the ring buffer has for samples. /// diff --git a/nxdn/NXDNTX.h b/nxdn/NXDNTX.h index 16006b4..f869afe 100644 --- a/nxdn/NXDNTX.h +++ b/nxdn/NXDNTX.h @@ -37,6 +37,17 @@ namespace nxdn { + // --------------------------------------------------------------------------- + // Constants + // --------------------------------------------------------------------------- + + #define NXDN_FIXED_TX_HANG 600 + + enum NXDNTXSTATE { + NXDNTXSTATE_NORMAL, + NXDNTXSTATE_CAL + }; + // --------------------------------------------------------------------------- // Class Declaration // Implements transmitter logic for NXDN mode operation. @@ -60,6 +71,8 @@ namespace nxdn void setPreambleCount(uint8_t preambleCnt); /// Sets the transmit hang time. void setTxHang(uint8_t txHang); + /// Helper to set the calibration state for Tx. + void setCal(bool start); /// Helper to get how much space the ring buffer has for samples. uint8_t getSpace() const; @@ -67,6 +80,8 @@ namespace nxdn private: SerialBuffer m_fifo; + NXDNTXSTATE m_state; + uint8_t m_poBuffer[60U]; uint16_t m_poLen; uint16_t m_poPtr;