From 356250df0726012da9b601ae6661cfc377dab4f2 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 15 Aug 2017 21:09:20 +0100 Subject: [PATCH] Further integration of the DTMF code. --- YSFGateway/DTMF.cpp | 5 ++-- YSFGateway/DTMF.h | 2 +- YSFGateway/YSFGateway.cpp | 63 ++++++++++++++++++++++----------------- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/YSFGateway/DTMF.cpp b/YSFGateway/DTMF.cpp index eb8e14f..03579dc 100644 --- a/YSFGateway/DTMF.cpp +++ b/YSFGateway/DTMF.cpp @@ -307,13 +307,12 @@ WX_STATUS CDTMF::validate() const return WXS_CONNECT; } -unsigned int CDTMF::getReflector() +std::string CDTMF::getReflector() { std::string command = m_command; reset(); - // XXX FIXME - return 0U; + return command.substr(1U); } void CDTMF::reset() diff --git a/YSFGateway/DTMF.h b/YSFGateway/DTMF.h index 7e64403..ef30457 100644 --- a/YSFGateway/DTMF.h +++ b/YSFGateway/DTMF.h @@ -32,7 +32,7 @@ public: WX_STATUS decodeDN1(const unsigned char* ambe); WX_STATUS decodeDN2(const unsigned char* ambe); - unsigned int getReflector(); + std::string getReflector(); void reset(); diff --git a/YSFGateway/YSFGateway.cpp b/YSFGateway/YSFGateway.cpp index cddeb22..a549862 100644 --- a/YSFGateway/YSFGateway.cpp +++ b/YSFGateway/YSFGateway.cpp @@ -322,46 +322,51 @@ int CYSFGateway::run() break; } - // XXX call reset() on end of transmission. - switch (status) { case WXS_CONNECT: { - unsigned int refl = m_dtmf->getReflector(); - // XXX validate reflector - // XXX Inform Wires-X - m_netNetwork->writeUnlink(); - m_netNetwork->writeUnlink(); - m_netNetwork->writeUnlink(); + std::string refl = m_dtmf->getReflector(); + CYSFReflector* reflector = m_wiresX->getReflector(refl); + if (reflector != NULL) { + m_wiresX->processConnect(reflector); - CYSFReflector* reflector = m_wiresX->getReflector(); - LogMessage("Connect to %5.5s has been requested by %10.10s", reflector->m_id.c_str(), buffer + 14U); + if (m_linked) { + m_netNetwork->writeUnlink(); + m_netNetwork->writeUnlink(); + m_netNetwork->writeUnlink(); + } - m_netNetwork->setDestination(reflector->m_address, reflector->m_port); - m_netNetwork->writePoll(); - m_netNetwork->writePoll(); - m_netNetwork->writePoll(); + LogMessage("Connect via DTMF to %5.5s has been requested by %10.10s", reflector->m_id.c_str(), buffer + 14U); + + m_netNetwork->setDestination(reflector->m_address, reflector->m_port); + m_netNetwork->writePoll(); + m_netNetwork->writePoll(); + m_netNetwork->writePoll(); - inactivityTimer.start(); - lostTimer.start(); - pollTimer.start(); + inactivityTimer.start(); + lostTimer.start(); + pollTimer.start(); - m_linked = true; + m_linked = true; + } } break; case WXS_DISCONNECT: - // XXX Inform Wires-X - LogMessage("Disconnect has been requested by %10.10s", buffer + 14U); + if (m_linked) { + m_wiresX->processDisconnect(); - m_netNetwork->writeUnlink(); - m_netNetwork->writeUnlink(); - m_netNetwork->writeUnlink(); - m_netNetwork->clearDestination(); + LogMessage("Disconnect via DTMF has been requested by %10.10s", buffer + 14U); - inactivityTimer.stop(); - lostTimer.stop(); - pollTimer.stop(); + m_netNetwork->writeUnlink(); + m_netNetwork->writeUnlink(); + m_netNetwork->writeUnlink(); + m_netNetwork->clearDestination(); - m_linked = false; + inactivityTimer.stop(); + lostTimer.stop(); + pollTimer.stop(); + + m_linked = false; + } break; default: break; @@ -381,6 +386,8 @@ int CYSFGateway::run() if ((buffer[34U] & 0x01U) == 0x01U) { if (m_gps != NULL) m_gps->reset(); + if (m_dtmf != NULL) + m_dtmf->reset(); m_exclude = false; } }