From dda5ac7c57c851e4c9285bef0f3d0e66b6da3d84 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 5 Jul 2016 19:35:32 +0100 Subject: [PATCH] Allow link to reflector at startup. --- YSFGateway/Conf.cpp | 8 ++++++++ YSFGateway/Conf.h | 2 ++ YSFGateway/WiresX.cpp | 7 +++++++ YSFGateway/WiresX.h | 1 + YSFGateway/YSFGateway.cpp | 21 ++++++++++++++++++++- YSFGateway/YSFGateway.h | 2 ++ YSFGateway/YSFGateway.ini | 1 + 7 files changed, 41 insertions(+), 1 deletion(-) diff --git a/YSFGateway/Conf.cpp b/YSFGateway/Conf.cpp index d94a195..0c7fd3f 100644 --- a/YSFGateway/Conf.cpp +++ b/YSFGateway/Conf.cpp @@ -64,6 +64,7 @@ m_networkEnabled(false), m_networkDataPort(0U), m_networkStatusPort(0U), m_networkHosts(), +m_networkStartup(), m_networkDebug(false) { } @@ -174,6 +175,8 @@ bool CConf::read() m_networkStatusPort = (unsigned int)::atoi(value); else if (::strcmp(key, "Hosts") == 0) m_networkHosts = value; + else if (::strcmp(key, "Startup") == 0) + m_networkStartup = value; else if (::strcmp(key, "Debug") == 0) m_networkDebug = ::atoi(value) == 1; } @@ -319,6 +322,11 @@ std::string CConf::getNetworkHosts() const return m_networkHosts; } +std::string CConf::getNetworkStartup() const +{ + return m_networkStartup; +} + bool CConf::getNetworkDebug() const { return m_networkDebug; diff --git a/YSFGateway/Conf.h b/YSFGateway/Conf.h index 9457aa9..24d0349 100644 --- a/YSFGateway/Conf.h +++ b/YSFGateway/Conf.h @@ -66,6 +66,7 @@ public: unsigned int getNetworkDataPort() const; unsigned int getNetworkStatusPort() const; std::string getNetworkHosts() const; + std::string getNetworkStartup() const; bool getNetworkDebug() const; private: @@ -101,6 +102,7 @@ private: unsigned int m_networkDataPort; unsigned int m_networkStatusPort; std::string m_networkHosts; + std::string m_networkStartup; bool m_networkDebug; }; diff --git a/YSFGateway/WiresX.cpp b/YSFGateway/WiresX.cpp index fb082f8..0f01072 100644 --- a/YSFGateway/WiresX.cpp +++ b/YSFGateway/WiresX.cpp @@ -221,6 +221,13 @@ CYSFReflector* CWiresX::getReflector() const return m_reflector; } +CYSFReflector* CWiresX::getReflector(const std::string& id) +{ + m_reflector = m_reflectors.find(id); + + return m_reflector; +} + void CWiresX::processDX(const unsigned char* source) { ::LogDebug("Received DX from %10.10s", source); diff --git a/YSFGateway/WiresX.h b/YSFGateway/WiresX.h index 0d39ac7..9f703a0 100644 --- a/YSFGateway/WiresX.h +++ b/YSFGateway/WiresX.h @@ -52,6 +52,7 @@ public: WX_STATUS process(const unsigned char* data, const unsigned char* source, unsigned char fi, unsigned char dt, unsigned char fn, unsigned char ft); CYSFReflector* getReflector() const; + CYSFReflector* getReflector(const std::string& id); void clock(unsigned int ms); diff --git a/YSFGateway/YSFGateway.cpp b/YSFGateway/YSFGateway.cpp index 6938d39..346acd9 100644 --- a/YSFGateway/YSFGateway.cpp +++ b/YSFGateway/YSFGateway.cpp @@ -81,7 +81,9 @@ m_gps(NULL), m_wiresX(NULL), m_netNetwork(NULL), m_linked(false), -m_exclude(false) +m_exclude(false), +m_startupTimer(1000U, 30U), +m_startup() { } @@ -204,6 +206,10 @@ int CYSFGateway::run() m_wiresX->setInfo(name, txFrequency, rxFrequency); m_wiresX->start(); + + m_startup = m_conf.getNetworkStartup(); + if (!m_startup.empty()) + m_startupTimer.start(); } CStopWatch stopWatch; @@ -239,12 +245,14 @@ int CYSFGateway::run() CYSFReflector* reflector = m_wiresX->getReflector(); LogMessage("Connect 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_startupTimer.stop(); m_linked = true; } break; case WXS_DISCONNECT: LogMessage("Disconnect has been requested by %10.10s", buffer + 14U); m_netNetwork->setDestination(); + m_startupTimer.stop(); m_linked = false; break; default: @@ -291,6 +299,17 @@ int CYSFGateway::run() m_exclude = false; } + m_startupTimer.clock(ms); + if (m_startupTimer.isRunning() && m_startupTimer.hasExpired()) { + CYSFReflector* reflector = m_wiresX->getReflector(m_startup); + if (reflector != NULL) { + LogMessage("Automatic connection to %5.5s", reflector->m_id.c_str()); + m_netNetwork->setDestination(reflector->m_address, reflector->m_port); + m_startupTimer.stop(); + m_linked = true; + } + } + if (ms < 5U) CThread::sleep(5U); } diff --git a/YSFGateway/YSFGateway.h b/YSFGateway/YSFGateway.h index 9c3f413..24dc615 100644 --- a/YSFGateway/YSFGateway.h +++ b/YSFGateway/YSFGateway.h @@ -43,6 +43,8 @@ private: CNetwork* m_netNetwork; bool m_linked; bool m_exclude; + CTimer m_startupTimer; + std::string m_startup; void createGPS(); }; diff --git a/YSFGateway/YSFGateway.ini b/YSFGateway/YSFGateway.ini index 03fa894..8c79961 100644 --- a/YSFGateway/YSFGateway.ini +++ b/YSFGateway/YSFGateway.ini @@ -37,4 +37,5 @@ Enable=1 DataPort=42000 StatusPort=42001 Hosts=./YSFHosts.txt +Startup= Debug=0