#29 handle incoming DPRS so that it shows up in log

pull/32/head
Geoffrey Merck 3 years ago
parent d86b36c2f0
commit ae22931034

@ -0,0 +1,55 @@
/*
* Copyright (C) 2021, 2022 by Geoffrey Merck F4FXL / KC3FRA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "DummyAPRSHandlerThread.h"
CDummyAPRSHandlerThread::CDummyAPRSHandlerThread()
{
}
CDummyAPRSHandlerThread::~CDummyAPRSHandlerThread()
{
}
bool CDummyAPRSHandlerThread::start()
{
return true;
}
bool CDummyAPRSHandlerThread::isConnected() const
{
return true;
}
void CDummyAPRSHandlerThread::write(CAPRSFrame &)
{
}
void CDummyAPRSHandlerThread::clock(unsigned int)
{
}
void CDummyAPRSHandlerThread::stop()
{
}
void CDummyAPRSHandlerThread::addReadAPRSCallback(IReadAPRSFrameCallback *)
{
}

@ -0,0 +1,35 @@
/*
* Copyright (C) 2021, 2022 by Geoffrey Merck F4FXL / KC3FRA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#pragma once
#include "IAPRSHandlerThread.h"
class CDummyAPRSHandlerThread : public IAPRSHandlerThread
{
public:
CDummyAPRSHandlerThread();
~CDummyAPRSHandlerThread();
bool start();
bool isConnected() const;
void write(CAPRSFrame& frame);
void clock(unsigned int ms);
void stop();
void addReadAPRSCallback(IReadAPRSFrameCallback* cb);
};

@ -59,7 +59,8 @@ bool CRepeaterHandler::m_dtmfEnabled = true;
CHeaderLogger* CRepeaterHandler::m_headerLogger = NULL; CHeaderLogger* CRepeaterHandler::m_headerLogger = NULL;
CAPRSHandler* CRepeaterHandler::m_aprsWriter = NULL; CAPRSHandler* CRepeaterHandler::m_outgoingAprsWriter = NULL;
CAPRSHandler* CRepeaterHandler::m_incomingAprsWriter = NULL;
CCallsignList* CRepeaterHandler::m_restrictList = NULL; CCallsignList* CRepeaterHandler::m_restrictList = NULL;
@ -352,9 +353,10 @@ void CRepeaterHandler::setHeaderLogger(CHeaderLogger* logger)
m_headerLogger = logger; m_headerLogger = logger;
} }
void CRepeaterHandler::setAPRSWriter(CAPRSHandler* writer) void CRepeaterHandler::setAPRSWriters(CAPRSHandler* outgoingAprsWriter, CAPRSHandler* incomingAprsWriter)
{ {
m_aprsWriter = writer; m_outgoingAprsWriter = outgoingAprsWriter;
m_incomingAprsWriter = incomingAprsWriter;
} }
void CRepeaterHandler::setLocalAddress(const std::string& address) void CRepeaterHandler::setLocalAddress(const std::string& address)
@ -613,8 +615,8 @@ void CRepeaterHandler::processRepeater(CHeaderData& header)
m_text.clear(); m_text.clear();
// Reset the APRS Writer if it's enabled // Reset the APRS Writer if it's enabled
if (m_aprsWriter != NULL) if (m_outgoingAprsWriter != NULL)
m_aprsWriter->writeHeader(m_rptCallsign, header); m_outgoingAprsWriter->writeHeader(m_rptCallsign, header);
// Write to Header.log if it's enabled // Write to Header.log if it's enabled
if (m_headerLogger != NULL) if (m_headerLogger != NULL)
@ -823,8 +825,8 @@ void CRepeaterHandler::processRepeater(CAMBEData& data)
if (m_drats != NULL) if (m_drats != NULL)
m_drats->writeData(data); m_drats->writeData(data);
if (m_aprsWriter != NULL) if (m_outgoingAprsWriter != NULL)
m_aprsWriter->writeData(m_rptCallsign, data); m_outgoingAprsWriter->writeData(m_rptCallsign, data);
if (m_text.empty() && !data.isEnd()) { if (m_text.empty() && !data.isEnd()) {
m_textCollector.writeData(data); m_textCollector.writeData(data);
@ -1173,6 +1175,9 @@ bool CRepeaterHandler::process(CHeaderData& header, DIRECTION, AUDIO_SOURCE sour
if (source == AS_DUP) if (source == AS_DUP)
return true; return true;
if(m_incomingAprsWriter != nullptr)
m_incomingAprsWriter->writeHeader(m_rptCallsign, header);
sendToIncoming(header); sendToIncoming(header);
#ifdef USE_CCS #ifdef USE_CCS
@ -1212,6 +1217,9 @@ bool CRepeaterHandler::process(CAMBEData& data, DIRECTION, AUDIO_SOURCE source)
m_repeaterHandler->writeAMBE(data); m_repeaterHandler->writeAMBE(data);
if(m_incomingAprsWriter != nullptr)
m_incomingAprsWriter->writeData(m_rptCallsign, data);
sendToIncoming(data); sendToIncoming(data);
#ifdef USE_CCS #ifdef USE_CCS
@ -2413,8 +2421,8 @@ void CRepeaterHandler::startupInt()
m_irc->rptrQTH(callsign, m_latitude, m_longitude, m_description1, m_description2, m_url); m_irc->rptrQTH(callsign, m_latitude, m_longitude, m_description1, m_description2, m_url);
} }
if(m_aprsWriter != nullptr) { if(m_outgoingAprsWriter != nullptr) {
m_aprsWriter->addReadAPRSCallback(this); m_outgoingAprsWriter->addReadAPRSCallback(this);
} }
#ifdef USE_CCS #ifdef USE_CCS
@ -2564,8 +2572,8 @@ void CRepeaterHandler::writeLinkingTo(const std::string &callsign)
m_infoAudio->setStatus(m_linkStatus, m_linkRepeater, text); m_infoAudio->setStatus(m_linkStatus, m_linkRepeater, text);
triggerInfo(); triggerInfo();
if(m_aprsWriter != nullptr) if(m_outgoingAprsWriter != nullptr)
m_aprsWriter->writeStatus(m_rptCallsign, text); m_outgoingAprsWriter->writeStatus(m_rptCallsign, text);
#ifdef USE_CCS #ifdef USE_CCS
m_ccsHandler->setReflector(); m_ccsHandler->setReflector();
@ -2619,8 +2627,8 @@ void CRepeaterHandler::writeLinkedTo(const std::string &callsign)
m_infoAudio->setStatus(m_linkStatus, m_linkRepeater, text); m_infoAudio->setStatus(m_linkStatus, m_linkRepeater, text);
triggerInfo(); triggerInfo();
if(m_aprsWriter != nullptr) if(m_outgoingAprsWriter != nullptr)
m_aprsWriter->writeStatus(m_rptCallsign, text); m_outgoingAprsWriter->writeStatus(m_rptCallsign, text);
#ifdef USE_CCS #ifdef USE_CCS
m_ccsHandler->setReflector(callsign); m_ccsHandler->setReflector(callsign);
@ -2674,8 +2682,8 @@ void CRepeaterHandler::writeNotLinked()
m_infoAudio->setStatus(m_linkStatus, m_linkRepeater, text); m_infoAudio->setStatus(m_linkStatus, m_linkRepeater, text);
triggerInfo(); triggerInfo();
if(m_aprsWriter != nullptr) if(m_outgoingAprsWriter != nullptr)
m_aprsWriter->writeStatus(m_rptCallsign, text); m_outgoingAprsWriter->writeStatus(m_rptCallsign, text);
#ifdef USE_CCS #ifdef USE_CCS
m_ccsHandler->setReflector(); m_ccsHandler->setReflector();
@ -2745,8 +2753,8 @@ void CRepeaterHandler::writeIsBusy(const std::string& callsign)
m_infoAudio->setTempStatus(m_linkStatus, m_linkRepeater, tempText); m_infoAudio->setTempStatus(m_linkStatus, m_linkRepeater, tempText);
triggerInfo(); triggerInfo();
if(m_aprsWriter != nullptr) if(m_outgoingAprsWriter != nullptr)
m_aprsWriter->writeStatus(m_rptCallsign, text); m_outgoingAprsWriter->writeStatus(m_rptCallsign, text);
#ifdef USE_CCS #ifdef USE_CCS
m_ccsHandler->setReflector(); m_ccsHandler->setReflector();

@ -74,7 +74,7 @@ public:
static void setDPlusEnabled(bool enabled); static void setDPlusEnabled(bool enabled);
static void setDCSEnabled(bool enabled); static void setDCSEnabled(bool enabled);
static void setHeaderLogger(CHeaderLogger* logger); static void setHeaderLogger(CHeaderLogger* logger);
static void setAPRSWriter(CAPRSHandler* writer); static void setAPRSWriters(CAPRSHandler* outgoingAprsWriter, CAPRSHandler* incomingAprsWriter);
static void setInfoEnabled(bool enabled); static void setInfoEnabled(bool enabled);
static void setEchoEnabled(bool enabled); static void setEchoEnabled(bool enabled);
static void setDTMFEnabled(bool enabled); static void setDTMFEnabled(bool enabled);
@ -169,7 +169,8 @@ private:
static CHeaderLogger* m_headerLogger; static CHeaderLogger* m_headerLogger;
static CAPRSHandler* m_aprsWriter; static CAPRSHandler* m_outgoingAprsWriter;
static CAPRSHandler* m_incomingAprsWriter;
static CCallsignList* m_whiteList; static CCallsignList* m_whiteList;
static CCallsignList* m_blackList; static CCallsignList* m_blackList;

@ -49,6 +49,7 @@
#include "APRSFixedIdFrameProvider.h" #include "APRSFixedIdFrameProvider.h"
#include "Daemon.h" #include "Daemon.h"
#include "APRSHandlerThread.h" #include "APRSHandlerThread.h"
#include "DummyAPRSHandlerThread.h"
CDStarGatewayApp * CDStarGatewayApp::g_app = nullptr; CDStarGatewayApp * CDStarGatewayApp::g_app = nullptr;
const std::string BANNER_1 = CStringUtils::string_format("%s Copyright (C) %s\n", FULL_PRODUCT_NAME.c_str(), VENDOR_NAME.c_str()); const std::string BANNER_1 = CStringUtils::string_format("%s Copyright (C) %s\n", FULL_PRODUCT_NAME.c_str(), VENDOR_NAME.c_str());
@ -193,11 +194,15 @@ bool CDStarGatewayApp::createThread()
// Setup APRS // Setup APRS
TAPRS aprsConfig; TAPRS aprsConfig;
m_config->getAPRS(aprsConfig); m_config->getAPRS(aprsConfig);
CAPRSHandler * aprsWriter = NULL; CAPRSHandler * outgoingAprsWriter = nullptr;
CAPRSHandler * incomingAprsWriter = nullptr;
if(aprsConfig.enabled && !aprsConfig.password.empty()) { if(aprsConfig.enabled && !aprsConfig.password.empty()) {
CAPRSHandlerThread* thread = new CAPRSHandlerThread(gatewayConfig.callsign, aprsConfig.password, gatewayConfig.address, aprsConfig.hostname, aprsConfig.port); CAPRSHandlerThread* thread = new CAPRSHandlerThread(gatewayConfig.callsign, aprsConfig.password, gatewayConfig.address, aprsConfig.hostname, aprsConfig.port);
aprsWriter = new CAPRSHandler((IAPRSHandlerThread *)thread); outgoingAprsWriter = new CAPRSHandler((IAPRSHandlerThread *)thread);
if(aprsWriter->open()) {
incomingAprsWriter = new CAPRSHandler((IAPRSHandlerThread *)new CDummyAPRSHandlerThread());
if(outgoingAprsWriter->open()) {
#ifdef USE_GPSD #ifdef USE_GPSD
CAPRSIdFrameProvider * idFrameProvider = aprsConfig.m_positionSource == POSSRC_GPSD ? (CAPRSIdFrameProvider *)new CAPRSGPSDIdFrameProvider(gatewayConfig.callsign, gpsdConfig.m_address, gpsdConfig.m_port) CAPRSIdFrameProvider * idFrameProvider = aprsConfig.m_positionSource == POSSRC_GPSD ? (CAPRSIdFrameProvider *)new CAPRSGPSDIdFrameProvider(gatewayConfig.callsign, gpsdConfig.m_address, gpsdConfig.m_port)
: new CAPRSFixedIdFrameProvider(gatewayConfig.callsign); : new CAPRSFixedIdFrameProvider(gatewayConfig.callsign);
@ -205,12 +210,12 @@ bool CDStarGatewayApp::createThread()
CAPRSIdFrameProvider * idFrameProvider = new CAPRSFixedIdFrameProvider(gatewayConfig.callsign); CAPRSIdFrameProvider * idFrameProvider = new CAPRSFixedIdFrameProvider(gatewayConfig.callsign);
#endif #endif
idFrameProvider->start(); idFrameProvider->start();
aprsWriter->setIdFrameProvider(idFrameProvider); outgoingAprsWriter->setIdFrameProvider(idFrameProvider);
m_thread->setAPRSWriter(aprsWriter); m_thread->setAPRSWriters(outgoingAprsWriter, incomingAprsWriter);
} }
else { else {
delete aprsWriter; delete outgoingAprsWriter;
aprsWriter = NULL; outgoingAprsWriter = NULL;
} }
} }
@ -280,7 +285,10 @@ bool CDStarGatewayApp::createThread()
rptrConfig.band2, rptrConfig.band2,
rptrConfig.band3); rptrConfig.band3);
aprsWriter->setPort(rptrConfig.callsign, rptrConfig.band, rptrConfig.frequency, rptrConfig.offset, rptrConfig.range, rptrConfig.latitude, rptrConfig.longitude, rptrConfig.agl); if(outgoingAprsWriter != nullptr)
outgoingAprsWriter->setPort(rptrConfig.callsign, rptrConfig.band, rptrConfig.frequency, rptrConfig.offset, rptrConfig.range, rptrConfig.latitude, rptrConfig.longitude, rptrConfig.agl);
if(incomingAprsWriter != nullptr)
incomingAprsWriter->setPort(rptrConfig.callsign, rptrConfig.band, rptrConfig.frequency, rptrConfig.offset, rptrConfig.range, rptrConfig.latitude, rptrConfig.longitude, rptrConfig.agl);
if(!ddEnabled) ddEnabled = rptrConfig.band.length() > 1U; if(!ddEnabled) ddEnabled = rptrConfig.band.length() > 1U;
} }

@ -69,15 +69,16 @@ m_stopped(true),
m_gatewayType(GT_REPEATER), m_gatewayType(GT_REPEATER),
m_gatewayCallsign(), m_gatewayCallsign(),
m_gatewayAddress(), m_gatewayAddress(),
m_icomRepeaterHandler(NULL), m_icomRepeaterHandler(nullptr),
m_hbRepeaterHandler(NULL), m_hbRepeaterHandler(nullptr),
m_dummyRepeaterHandler(NULL), m_dummyRepeaterHandler(nullptr),
m_dextraPool(NULL), m_dextraPool(nullptr),
m_dplusPool(NULL), m_dplusPool(nullptr),
m_dcsPool(NULL), m_dcsPool(nullptr),
m_g2HandlerPool(NULL), m_g2HandlerPool(nullptr),
m_aprsWriter(NULL), m_outgoingAprsWriter(nullptr),
m_irc(NULL), m_incomingAprsWriter(nullptr),
m_irc(nullptr),
m_cache(), m_cache(),
m_language(TL_ENGLISH_UK), m_language(TL_ENGLISH_UK),
m_dextraEnabled(true), m_dextraEnabled(true),
@ -110,9 +111,9 @@ m_status4(),
m_status5(), m_status5(),
m_latitude(0.0), m_latitude(0.0),
m_longitude(0.0), m_longitude(0.0),
m_whiteList(NULL), m_whiteList(nullptr),
m_blackList(NULL), m_blackList(nullptr),
m_restrictList(NULL) m_restrictList(nullptr)
{ {
CHeaderData::initialise(); CHeaderData::initialise();
CG2Handler::initialise(MAX_ROUTES); CG2Handler::initialise(MAX_ROUTES);
@ -250,7 +251,7 @@ void* CDStarGatewayThread::Entry()
CRepeaterHandler::setDPlusEnabled(m_dplusEnabled); CRepeaterHandler::setDPlusEnabled(m_dplusEnabled);
CRepeaterHandler::setDCSEnabled(m_dcsEnabled); CRepeaterHandler::setDCSEnabled(m_dcsEnabled);
CRepeaterHandler::setHeaderLogger(headerLogger); CRepeaterHandler::setHeaderLogger(headerLogger);
CRepeaterHandler::setAPRSWriter(m_aprsWriter); CRepeaterHandler::setAPRSWriters(m_outgoingAprsWriter, m_incomingAprsWriter);
CRepeaterHandler::setInfoEnabled(m_infoEnabled); CRepeaterHandler::setInfoEnabled(m_infoEnabled);
CRepeaterHandler::setEchoEnabled(m_echoEnabled); CRepeaterHandler::setEchoEnabled(m_echoEnabled);
CRepeaterHandler::setDTMFEnabled(m_dtmfEnabled); CRepeaterHandler::setDTMFEnabled(m_dtmfEnabled);
@ -377,8 +378,8 @@ void* CDStarGatewayThread::Entry()
m_statusFileTimer.start(); m_statusFileTimer.start();
} }
if (m_aprsWriter != NULL) if (m_outgoingAprsWriter != NULL)
m_aprsWriter->clock(ms); m_outgoingAprsWriter->clock(ms);
if (m_logEnabled) { if (m_logEnabled) {
m_statusTimer1.clock(ms); m_statusTimer1.clock(ms);
@ -469,9 +470,9 @@ void* CDStarGatewayThread::Entry()
delete m_remote; delete m_remote;
} }
if(m_aprsWriter != nullptr) { if(m_outgoingAprsWriter != nullptr) {
m_aprsWriter->close(); m_outgoingAprsWriter->close();
delete m_aprsWriter; delete m_outgoingAprsWriter;
} }
if (headerLogger != NULL) { if (headerLogger != NULL) {
@ -636,9 +637,10 @@ void CDStarGatewayThread::setLog(bool enabled)
m_logEnabled = enabled; m_logEnabled = enabled;
} }
void CDStarGatewayThread::setAPRSWriter(CAPRSHandler* writer) void CDStarGatewayThread::setAPRSWriters(CAPRSHandler* outgoingWriter, CAPRSHandler* incomingWriter)
{ {
m_aprsWriter = writer; m_outgoingAprsWriter = outgoingWriter;
m_incomingAprsWriter = incomingWriter;
} }
void CDStarGatewayThread::setInfoEnabled(bool enabled) void CDStarGatewayThread::setInfoEnabled(bool enabled)
@ -1244,8 +1246,8 @@ void CDStarGatewayThread::writeStatus()
CDStarGatewayStatusData* CDStarGatewayThread::getStatus() const CDStarGatewayStatusData* CDStarGatewayThread::getStatus() const
{ {
bool aprsStatus = false; bool aprsStatus = false;
if (m_aprsWriter != NULL) if (m_outgoingAprsWriter != NULL)
aprsStatus = m_aprsWriter->isConnected(); aprsStatus = m_outgoingAprsWriter->isConnected();
CDStarGatewayStatusData* status = new CDStarGatewayStatusData(m_lastStatus, aprsStatus); CDStarGatewayStatusData* status = new CDStarGatewayStatusData(m_lastStatus, aprsStatus);

@ -66,7 +66,7 @@ public:
virtual void setCCS(bool enabled, const std::string& host); virtual void setCCS(bool enabled, const std::string& host);
#endif #endif
virtual void setLog(bool enabled); virtual void setLog(bool enabled);
virtual void setAPRSWriter(CAPRSHandler* writer); virtual void setAPRSWriters(CAPRSHandler* outgoingAprsWriter, CAPRSHandler* incomingAPRSHandler);
virtual void setInfoEnabled(bool enabled); virtual void setInfoEnabled(bool enabled);
virtual void setEchoEnabled(bool enabled); virtual void setEchoEnabled(bool enabled);
virtual void setDTMFEnabled(bool enabled); virtual void setDTMFEnabled(bool enabled);
@ -100,7 +100,8 @@ private:
CDPlusProtocolHandlerPool* m_dplusPool; CDPlusProtocolHandlerPool* m_dplusPool;
CDCSProtocolHandlerPool* m_dcsPool; CDCSProtocolHandlerPool* m_dcsPool;
CG2ProtocolHandlerPool* m_g2HandlerPool; CG2ProtocolHandlerPool* m_g2HandlerPool;
CAPRSHandler* m_aprsWriter; CAPRSHandler* m_outgoingAprsWriter;
CAPRSHandler* m_incomingAprsWriter;
CIRCDDB* m_irc; CIRCDDB* m_irc;
CCacheManager m_cache; CCacheManager m_cache;
TEXT_LANG m_language; TEXT_LANG m_language;

Loading…
Cancel
Save

Powered by TurnKey Linux.