From 82155893aa4ac0625a2b0a2ab781de62ac5f4d14 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Sun, 18 Jun 2023 12:45:03 -0400 Subject: [PATCH] fix issue where the setup event loop may try to talk to a unconnected modem; --- src/host/setup/SetupApplication.h | 48 ++++++++++++++++--------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/host/setup/SetupApplication.h b/src/host/setup/SetupApplication.h index da4ade79..f4840894 100644 --- a/src/host/setup/SetupApplication.h +++ b/src/host/setup/SetupApplication.h @@ -58,39 +58,41 @@ protected: /// virtual void processExternalUserEvent() { - if (m_setup->m_p25TduTest && m_setup->m_queue.hasSpace(p25::P25_TDU_FRAME_LENGTH_BYTES + 2U)) { - uint8_t data[p25::P25_TDU_FRAME_LENGTH_BYTES + 2U]; - ::memset(data + 2U, 0x00U, p25::P25_TDU_FRAME_LENGTH_BYTES); + if (m_setup->m_isConnected) { + if (m_setup->m_p25TduTest && m_setup->m_queue.hasSpace(p25::P25_TDU_FRAME_LENGTH_BYTES + 2U)) { + uint8_t data[p25::P25_TDU_FRAME_LENGTH_BYTES + 2U]; + ::memset(data + 2U, 0x00U, p25::P25_TDU_FRAME_LENGTH_BYTES); - // Generate Sync - p25::Sync::addP25Sync(data + 2U); + // Generate Sync + p25::Sync::addP25Sync(data + 2U); - // Generate NID - std::unique_ptr nid = new_unique(p25::NID, 1U); - nid->encode(data + 2U, p25::P25_DUID_TDU); + // Generate NID + std::unique_ptr nid = new_unique(p25::NID, 1U); + nid->encode(data + 2U, p25::P25_DUID_TDU); - // Add busy bits - p25::P25Utils::addBusyBits(data + 2U, p25::P25_TDU_FRAME_LENGTH_BITS, true, true); + // Add busy bits + p25::P25Utils::addBusyBits(data + 2U, p25::P25_TDU_FRAME_LENGTH_BITS, true, true); - data[0U] = modem::TAG_EOT; - data[1U] = 0x00U; + data[0U] = modem::TAG_EOT; + data[1U] = 0x00U; - m_setup->addFrame(data, p25::P25_TDU_FRAME_LENGTH_BYTES + 2U, p25::P25_LDU_FRAME_LENGTH_BYTES); - } + m_setup->addFrame(data, p25::P25_TDU_FRAME_LENGTH_BYTES + 2U, p25::P25_LDU_FRAME_LENGTH_BYTES); + } - // ------------------------------------------------------ - // -- Modem Clocking -- - // ------------------------------------------------------ + // ------------------------------------------------------ + // -- Modem Clocking -- + // ------------------------------------------------------ - uint32_t ms = m_setup->m_stopWatch.elapsed(); - m_setup->m_stopWatch.start(); + uint32_t ms = m_setup->m_stopWatch.elapsed(); + m_setup->m_stopWatch.start(); - m_setup->m_modem->clock(ms); + m_setup->m_modem->clock(ms); - m_setup->timerClock(); + m_setup->timerClock(); - if (ms < 2U) - Thread::sleep(1U); + if (ms < 2U) + Thread::sleep(1U); + } } /*