From a3a93807a58dfe57f31683dde288198aa8ea58f6 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Fri, 21 Aug 2020 10:23:41 +0100 Subject: [PATCH] Add better logging for DG-ID changes. --- DGIdGateway/DGIdGateway.cpp | 11 +++++++---- DGIdGateway/DGIdNetwork.h | 3 +++ DGIdGateway/FCSNetwork.cpp | 5 +++++ DGIdGateway/FCSNetwork.h | 2 ++ DGIdGateway/IMRSNetwork.cpp | 27 +++++++++++++++++++++++---- DGIdGateway/IMRSNetwork.h | 2 ++ DGIdGateway/Version.h | 2 +- DGIdGateway/YSFNetwork.cpp | 5 +++++ DGIdGateway/YSFNetwork.h | 2 ++ 9 files changed, 50 insertions(+), 9 deletions(-) diff --git a/DGIdGateway/DGIdGateway.cpp b/DGIdGateway/DGIdGateway.cpp index 98e13b3..9201aa7 100644 --- a/DGIdGateway/DGIdGateway.cpp +++ b/DGIdGateway/DGIdGateway.cpp @@ -240,7 +240,7 @@ int CDGIdGateway::run() dgIdNetwork[dgid]->m_rfHangTime = rfHangTime; dgIdNetwork[dgid]->m_netHangTime = netHangTime; } - } else if (type == "IMRS") { +/* } else if (type == "IMRS") { if (imrs != NULL) { std::vector destinations = (*it)->m_destinations; std::vector dests; @@ -260,6 +260,7 @@ int CDGIdGateway::run() dgIdNetwork[dgid]->m_rfHangTime = rfHangTime; dgIdNetwork[dgid]->m_netHangTime = netHangTime; } +*/ } else if (type == "Parrot") { in_addr address = CUDPSocket::lookup((*it)->m_address); unsigned int port = (*it)->m_port; @@ -361,7 +362,8 @@ int CDGIdGateway::run() dgIdNetwork[dgId]->link(); } - LogDebug("DG-ID set to %u via RF", dgId); + std::string desc = dgIdNetwork[dgId]->getDesc(); + LogDebug("DG-ID set to %u (%s) via RF", dgId, desc.c_str()); currentDGId = dgId; } @@ -407,7 +409,8 @@ int CDGIdGateway::run() inactivityTimer.start(); if (currentDGId == 0U) { - LogDebug("DG-ID set to %u via Network", i); + std::string desc = dgIdNetwork[i]->getDesc(); + LogDebug("DG-ID set to %u (%s) via Network", i, desc.c_str()); currentDGId = i; } } @@ -437,7 +440,7 @@ int CDGIdGateway::run() dgIdNetwork[currentDGId]->unlink(); } - LogDebug("DG-ID set to 0 via timeout"); + LogDebug("DG-ID set to 0 (None) via timeout"); currentDGId = 0U; inactivityTimer.stop(); diff --git a/DGIdGateway/DGIdNetwork.h b/DGIdGateway/DGIdNetwork.h index f553d31..04d9a70 100644 --- a/DGIdGateway/DGIdNetwork.h +++ b/DGIdGateway/DGIdNetwork.h @@ -19,11 +19,14 @@ #ifndef DGIdNetwork_H #define DGIdNetwork_H +#include class CDGIdNetwork { public: virtual ~CDGIdNetwork() = 0; + virtual std::string getDesc() = 0; + virtual bool open() = 0; virtual void link() = 0; diff --git a/DGIdGateway/FCSNetwork.cpp b/DGIdGateway/FCSNetwork.cpp index d48aa54..3e4efb9 100644 --- a/DGIdGateway/FCSNetwork.cpp +++ b/DGIdGateway/FCSNetwork.cpp @@ -63,6 +63,11 @@ CFCSNetwork::~CFCSNetwork() delete[] m_ping; } +std::string CFCSNetwork::getDesc() +{ + return "FCS: " + m_reflector; +} + bool CFCSNetwork::open() { LogMessage("Resolving FCS00x addresses"); diff --git a/DGIdGateway/FCSNetwork.h b/DGIdGateway/FCSNetwork.h index 9cb61d1..78ea89a 100644 --- a/DGIdGateway/FCSNetwork.h +++ b/DGIdGateway/FCSNetwork.h @@ -40,6 +40,8 @@ public: CFCSNetwork(const std::string& reflector, unsigned int port, const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, const std::string& locator, unsigned int id, bool debug); virtual ~CFCSNetwork(); + virtual std::string getDesc(); + virtual bool open(); virtual void link(); diff --git a/DGIdGateway/IMRSNetwork.cpp b/DGIdGateway/IMRSNetwork.cpp index 75d34ee..ae55003 100644 --- a/DGIdGateway/IMRSNetwork.cpp +++ b/DGIdGateway/IMRSNetwork.cpp @@ -49,6 +49,11 @@ void CIMRSNetwork::addDGId(unsigned int dgId, const std::vector& dest m_dgIds.push_back(f); } +std::string CIMRSNetwork::getDesc() +{ + return "IMRS"; +} + bool CIMRSNetwork::open() { LogMessage("Opening IMRS network connection"); @@ -69,26 +74,43 @@ void CIMRSNetwork::write(unsigned int dgId, const unsigned char* data) unsigned char buffer[200U]; - switch (fich.getDT()) { // XXX + // Create the header + switch (fich.getDT()) { case YSF_DT_VD_MODE1: buffer[0U] = '0'; buffer[1U] = '0'; buffer[2U] = '0'; + // Copy the audio + ::memcpy(buffer + 35U + 0U, data + 35U + 9U, 9U); + ::memcpy(buffer + 35U + 9U, data + 35U + 27U, 9U); + ::memcpy(buffer + 35U + 18U, data + 35U + 45U, 9U); + ::memcpy(buffer + 35U + 27U, data + 35U + 63U, 9U); + ::memcpy(buffer + 35U + 36U, data + 35U + 81U, 9U); break; case YSF_DT_DATA_FR_MODE: buffer[0U] = '1'; buffer[1U] = '1'; buffer[2U] = '1'; + // Copy the audio + ::memcpy(buffer + 35U, data + 45U, 130U); break; case YSF_DT_VD_MODE2: buffer[0U] = '2'; buffer[1U] = '2'; buffer[2U] = '2'; + // Copy the audio + ::memcpy(buffer + 35U, data + 45U, 130U); break; case YSF_DT_VOICE_FR_MODE: buffer[0U] = '3'; buffer[1U] = '3'; buffer[2U] = '3'; + // Copy the audio + ::memcpy(buffer + 35U + 0U, data + 35U + 9U, 18U); + ::memcpy(buffer + 35U + 18U, data + 35U + 27U, 18U); + ::memcpy(buffer + 35U + 36U, data + 35U + 45U, 18U); + ::memcpy(buffer + 35U + 54U, data + 35U + 63U, 18U); + ::memcpy(buffer + 35U + 72U, data + 35U + 81U, 18U); break; default: return; @@ -96,9 +118,6 @@ void CIMRSNetwork::write(unsigned int dgId, const unsigned char* data) // Copy the raw DCH - // Copy the audio - ::memcpy(buffer + 35U, data + 45U, 130U); // XXX - for (std::vector::const_iterator it = ptr->m_destinations.begin(); it != ptr->m_destinations.end(); ++it) { // Set the correct DG-ID for this destination fich.setDGId((*it)->m_dgId); diff --git a/DGIdGateway/IMRSNetwork.h b/DGIdGateway/IMRSNetwork.h index f03b7ee..ea577ad 100644 --- a/DGIdGateway/IMRSNetwork.h +++ b/DGIdGateway/IMRSNetwork.h @@ -54,6 +54,8 @@ public: void addDGId(unsigned int dgId, const std::vector& destinations, bool debug); + virtual std::string getDesc(); + virtual bool open(); virtual void link(); diff --git a/DGIdGateway/Version.h b/DGIdGateway/Version.h index 255970f..b2b8d8a 100644 --- a/DGIdGateway/Version.h +++ b/DGIdGateway/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20200820"; +const char* VERSION = "20200821"; #endif diff --git a/DGIdGateway/YSFNetwork.cpp b/DGIdGateway/YSFNetwork.cpp index 23384fc..9847def 100644 --- a/DGIdGateway/YSFNetwork.cpp +++ b/DGIdGateway/YSFNetwork.cpp @@ -86,6 +86,11 @@ CYSFNetwork::~CYSFNetwork() delete[] m_poll; } +std::string CYSFNetwork::getDesc() +{ + return "YSF: " + m_name; +} + bool CYSFNetwork::open() { LogMessage("Opening YSF network connection"); diff --git a/DGIdGateway/YSFNetwork.h b/DGIdGateway/YSFNetwork.h index 6b774fb..2494f67 100644 --- a/DGIdGateway/YSFNetwork.h +++ b/DGIdGateway/YSFNetwork.h @@ -34,6 +34,8 @@ public: CYSFNetwork(unsigned int localPort, const std::string& name, const in_addr& address, unsigned int port, const std::string& callsign, bool debug); virtual ~CYSFNetwork(); + virtual std::string getDesc(); + virtual bool open(); virtual void link();