From 36f090b29f4c33c114cb2e50286c043bcef6cadf Mon Sep 17 00:00:00 2001 From: Doug McLain Date: Thu, 18 Jun 2020 00:56:34 -0400 Subject: [PATCH 1/3] Add P252DMR Reflector option to P25Gateway --- P25Gateway/Conf.cpp | 14 ++++++++++++++ P25Gateway/Conf.h | 4 ++++ P25Gateway/P25Gateway.cpp | 2 ++ P25Gateway/P25Gateway.ini | 2 ++ P25Gateway/Reflectors.cpp | 16 ++++++++++++++++ P25Gateway/Reflectors.h | 3 +++ 6 files changed, 41 insertions(+) diff --git a/P25Gateway/Conf.cpp b/P25Gateway/Conf.cpp index 5b430bf..22a7e96 100644 --- a/P25Gateway/Conf.cpp +++ b/P25Gateway/Conf.cpp @@ -151,6 +151,10 @@ bool CConf::read() m_networkParrotAddress = value; else if (::strcmp(key, "ParrotPort") == 0) m_networkParrotPort = (unsigned int)::atoi(value); + else if (::strcmp(key, "P252DMRAddress") == 0) + m_networkP252DMRAddress = value; + else if (::strcmp(key, "P252DMRPort") == 0) + m_networkP252DMRPort = (unsigned int)::atoi(value); else if (::strcmp(key, "Startup") == 0) m_networkStartup = (unsigned int)::atoi(value); else if (::strcmp(key, "InactivityTimeout") == 0) @@ -260,6 +264,16 @@ unsigned int CConf::getNetworkParrotPort() const return m_networkParrotPort; } +std::string CConf::getNetworkP252DMRAddress() const +{ + return m_networkP252DMRAddress; +} + +unsigned int CConf::getNetworkP252DMRPort() const +{ + return m_networkP252DMRPort; +} + unsigned int CConf::getNetworkStartup() const { return m_networkStartup; diff --git a/P25Gateway/Conf.h b/P25Gateway/Conf.h index 798e04b..b1c21f7 100644 --- a/P25Gateway/Conf.h +++ b/P25Gateway/Conf.h @@ -57,6 +57,8 @@ public: unsigned int getNetworkReloadTime() const; std::string getNetworkParrotAddress() const; unsigned int getNetworkParrotPort() const; + std::string getNetworkP252DMRAddress() const; + unsigned int getNetworkP252DMRPort() const; unsigned int getNetworkStartup() const; unsigned int getNetworkInactivityTimeout() const; bool getNetworkDebug() const; @@ -89,6 +91,8 @@ private: unsigned int m_networkReloadTime; std::string m_networkParrotAddress; unsigned int m_networkParrotPort; + std::string m_networkP252DMRAddress; + unsigned int m_networkP252DMRPort; unsigned int m_networkStartup; unsigned int m_networkInactivityTimeout; bool m_networkDebug; diff --git a/P25Gateway/P25Gateway.cpp b/P25Gateway/P25Gateway.cpp index 187ff15..41bd9da 100644 --- a/P25Gateway/P25Gateway.cpp +++ b/P25Gateway/P25Gateway.cpp @@ -198,6 +198,8 @@ void CP25Gateway::run() CReflectors reflectors(m_conf.getNetworkHosts1(), m_conf.getNetworkHosts2(), m_conf.getNetworkReloadTime()); if (m_conf.getNetworkParrotPort() > 0U) reflectors.setParrot(m_conf.getNetworkParrotAddress(), m_conf.getNetworkParrotPort()); + if (m_conf.getNetworkP252DMRPort() > 0U) + reflectors.setP252DMR(m_conf.getNetworkP252DMRAddress(), m_conf.getNetworkP252DMRPort()); reflectors.load(); CDMRLookup* lookup = new CDMRLookup(m_conf.getLookupName(), m_conf.getLookupTime()); diff --git a/P25Gateway/P25Gateway.ini b/P25Gateway/P25Gateway.ini index 501718f..5b9de04 100644 --- a/P25Gateway/P25Gateway.ini +++ b/P25Gateway/P25Gateway.ini @@ -25,6 +25,8 @@ HostsFile2=./private/P25Hosts.txt ReloadTime=60 ParrotAddress=127.0.0.1 ParrotPort=42011 +P252DMRAddress=127.0.0.1 +P252DMRPort=42012 # Startup=10100 InactivityTimeout=10 Debug=0 diff --git a/P25Gateway/Reflectors.cpp b/P25Gateway/Reflectors.cpp index 86f048e..3ccca14 100644 --- a/P25Gateway/Reflectors.cpp +++ b/P25Gateway/Reflectors.cpp @@ -52,6 +52,12 @@ void CReflectors::setParrot(const std::string& address, unsigned int port) m_parrotPort = port; } +void CReflectors::setP252DMR(const std::string& address, unsigned int port) +{ + m_p252dmrAddress = address; + m_p252dmrPort = port; +} + bool CReflectors::load() { // Clear out the old reflector list @@ -134,6 +140,16 @@ bool CReflectors::load() m_reflectors.push_back(refl); LogInfo("Loaded P25 parrot (TG%u)", refl->m_id); } + + // Add the P252DMR entry + if (m_p252dmrPort > 0U) { + CP25Reflector* refl = new CP25Reflector; + refl->m_id = 10U; + refl->m_address = CUDPSocket::lookup(m_p252dmrAddress); + refl->m_port = m_p252dmrPort; + m_reflectors.push_back(refl); + LogInfo("Loaded P25 parrot (TG%u)", refl->m_id); + } size = m_reflectors.size(); if (size == 0U) diff --git a/P25Gateway/Reflectors.h b/P25Gateway/Reflectors.h index 4408330..a2d2d99 100644 --- a/P25Gateway/Reflectors.h +++ b/P25Gateway/Reflectors.h @@ -45,6 +45,7 @@ public: ~CReflectors(); void setParrot(const std::string& address, unsigned int port); + void setP252DMR(const std::string& address, unsigned int port); bool load(); @@ -57,6 +58,8 @@ private: std::string m_hostsFile2; std::string m_parrotAddress; unsigned int m_parrotPort; + std::string m_p252dmrAddress; + unsigned int m_p252dmrPort; std::vector m_reflectors; CTimer m_timer; }; From d1a8772eb5dcd0bc92f81c61d5b5407f88d11bdc Mon Sep 17 00:00:00 2001 From: Doug McLain Date: Thu, 18 Jun 2020 22:25:16 -0400 Subject: [PATCH 2/3] Oops! P252DMR should be TG20 --- P25Gateway/Reflectors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/P25Gateway/Reflectors.cpp b/P25Gateway/Reflectors.cpp index 3ccca14..2bc532c 100644 --- a/P25Gateway/Reflectors.cpp +++ b/P25Gateway/Reflectors.cpp @@ -144,7 +144,7 @@ bool CReflectors::load() // Add the P252DMR entry if (m_p252dmrPort > 0U) { CP25Reflector* refl = new CP25Reflector; - refl->m_id = 10U; + refl->m_id = 20U; refl->m_address = CUDPSocket::lookup(m_p252dmrAddress); refl->m_port = m_p252dmrPort; m_reflectors.push_back(refl); From 79e32705609ddde0227b1ccbccd45ed29122ec15 Mon Sep 17 00:00:00 2001 From: Doug McLain Date: Fri, 19 Jun 2020 14:02:00 -0400 Subject: [PATCH 3/3] When startup id == 20 (P252DMR), then do not change P25 reflectors --- P25Gateway/P25Gateway.cpp | 9 +++++++-- P25Gateway/Reflectors.cpp | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/P25Gateway/P25Gateway.cpp b/P25Gateway/P25Gateway.cpp index 41bd9da..1b5c038 100644 --- a/P25Gateway/P25Gateway.cpp +++ b/P25Gateway/P25Gateway.cpp @@ -232,6 +232,8 @@ void CP25Gateway::run() unsigned int currentPort = 0U; unsigned int startupId = m_conf.getNetworkStartup(); + bool p252dmr_enabled = (startupId == 20) ? true : false; + if (startupId != 9999U) { CP25Reflector* reflector = reflectors.find(startupId); if (reflector != NULL) { @@ -291,8 +293,11 @@ void CP25Gateway::run() srcId = (buffer[1U] << 16) & 0xFF0000U; srcId |= (buffer[2U] << 8) & 0x00FF00U; srcId |= (buffer[3U] << 0) & 0x0000FFU; - - if (dstId != currentId) { + + if(p252dmr_enabled){ + currentId = dstId; + } + else if (dstId != currentId) { CP25Reflector* reflector = NULL; if (dstId != 9999U) reflector = reflectors.find(dstId); diff --git a/P25Gateway/Reflectors.cpp b/P25Gateway/Reflectors.cpp index 2bc532c..bbaa4ff 100644 --- a/P25Gateway/Reflectors.cpp +++ b/P25Gateway/Reflectors.cpp @@ -148,7 +148,7 @@ bool CReflectors::load() refl->m_address = CUDPSocket::lookup(m_p252dmrAddress); refl->m_port = m_p252dmrPort; m_reflectors.push_back(refl); - LogInfo("Loaded P25 parrot (TG%u)", refl->m_id); + LogInfo("Loaded P252DMR (TG%u)", refl->m_id); } size = m_reflectors.size();