1
0
Fork 0

Begin adding FCS specific code.

ycs232-kbc
Jonathan Naylor 7 years ago
parent c84df3db5e
commit 05c0cce1db

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -32,7 +32,8 @@ enum SECTION {
SECTION_INFO, SECTION_INFO,
SECTION_LOG, SECTION_LOG,
SECTION_APRS_FI, SECTION_APRS_FI,
SECTION_NETWORK SECTION_YSF_NETWORK,
SECTION_FCS_NETWORK
}; };
CConf::CConf(const std::string& file) : CConf::CConf(const std::string& file) :
@ -61,18 +62,21 @@ m_aprsServer(),
m_aprsPort(0U), m_aprsPort(0U),
m_aprsPassword(), m_aprsPassword(),
m_aprsDescription(), m_aprsDescription(),
m_networkEnabled(false), m_ysfNetworkEnabled(false),
m_networkPort(0U), m_ysfNetworkPort(0U),
m_networkHosts(), m_ysfNetworkHosts(),
m_networkReloadTime(0U), m_ysfNetworkReloadTime(0U),
m_networkParrotAddress("127.0.0.1"), m_ysfNetworkParrotAddress("127.0.0.1"),
m_networkParrotPort(0U), m_ysfNetworkParrotPort(0U),
m_networkYSF2DMRAddress("127.0.0.1"), m_ysfNetworkYSF2DMRAddress("127.0.0.1"),
m_networkYSF2DMRPort(0U), m_ysfNetworkYSF2DMRPort(0U),
m_networkStartup(), m_ysfNetworkStartup(),
m_networkInactivityTimeout(0U), m_ysfNetworkInactivityTimeout(0U),
m_networkRevert(false), m_ysfNetworkRevert(false),
m_networkDebug(false) m_ysfNetworkDebug(false),
m_fcsNetworkEnabled(false),
m_fcsNetworkPort(0U),
m_fcsNetworkDebug(false)
{ {
} }
@ -102,10 +106,12 @@ bool CConf::read()
section = SECTION_INFO; section = SECTION_INFO;
else if (::strncmp(buffer, "[Log]", 5U) == 0) else if (::strncmp(buffer, "[Log]", 5U) == 0)
section = SECTION_LOG; section = SECTION_LOG;
else if (::strncmp(buffer, "[aprs.fi]", 5U) == 0) else if (::strncmp(buffer, "[aprs.fi]", 9U) == 0)
section = SECTION_APRS_FI; section = SECTION_APRS_FI;
else if (::strncmp(buffer, "[Network]", 5U) == 0) else if (::strncmp(buffer, "[YSF Network]", 13U) == 0)
section = SECTION_NETWORK; section = SECTION_YSF_NETWORK;
else if (::strncmp(buffer, "[FCS Network]", 13U) == 0)
section = SECTION_FCS_NETWORK;
else else
section = SECTION_NONE; section = SECTION_NONE;
@ -175,31 +181,38 @@ bool CConf::read()
m_aprsPassword = value; m_aprsPassword = value;
else if (::strcmp(key, "Description") == 0) else if (::strcmp(key, "Description") == 0)
m_aprsDescription = value; m_aprsDescription = value;
} else if (section == SECTION_NETWORK) { } else if (section == SECTION_YSF_NETWORK) {
if (::strcmp(key, "Enable") == 0) if (::strcmp(key, "Enable") == 0)
m_networkEnabled = ::atoi(value) == 1; m_ysfNetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Port") == 0) else if (::strcmp(key, "Port") == 0)
m_networkPort = (unsigned int)::atoi(value); m_ysfNetworkPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "Hosts") == 0) else if (::strcmp(key, "Hosts") == 0)
m_networkHosts = value; m_ysfNetworkHosts = value;
else if (::strcmp(key, "ReloadTime") == 0) else if (::strcmp(key, "ReloadTime") == 0)
m_networkReloadTime = (unsigned int)::atoi(value); m_ysfNetworkReloadTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "ParrotAddress") == 0) else if (::strcmp(key, "ParrotAddress") == 0)
m_networkParrotAddress = value; m_ysfNetworkParrotAddress = value;
else if (::strcmp(key, "ParrotPort") == 0) else if (::strcmp(key, "ParrotPort") == 0)
m_networkParrotPort = (unsigned int)::atoi(value); m_ysfNetworkParrotPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "YSF2DMRAddress") == 0) else if (::strcmp(key, "YSF2DMRAddress") == 0)
m_networkYSF2DMRAddress = value; m_ysfNetworkYSF2DMRAddress = value;
else if (::strcmp(key, "YSF2DMRPort") == 0) else if (::strcmp(key, "YSF2DMRPort") == 0)
m_networkYSF2DMRPort = (unsigned int)::atoi(value); m_ysfNetworkYSF2DMRPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "Startup") == 0) else if (::strcmp(key, "Startup") == 0)
m_networkStartup = value; m_ysfNetworkStartup = value;
else if (::strcmp(key, "InactivityTimeout") == 0) else if (::strcmp(key, "InactivityTimeout") == 0)
m_networkInactivityTimeout = (unsigned int)::atoi(value); m_ysfNetworkInactivityTimeout = (unsigned int)::atoi(value);
else if (::strcmp(key, "Revert") == 0) else if (::strcmp(key, "Revert") == 0)
m_networkRevert = ::atoi(value) == 1; m_ysfNetworkRevert = ::atoi(value) == 1;
else if (::strcmp(key, "Debug") == 0) else if (::strcmp(key, "Debug") == 0)
m_networkDebug = ::atoi(value) == 1; m_ysfNetworkDebug = ::atoi(value) == 1;
} else if (section == SECTION_FCS_NETWORK) {
if (::strcmp(key, "Enable") == 0)
m_fcsNetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Port") == 0)
m_fcsNetworkPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "Debug") == 0)
m_fcsNetworkDebug = ::atoi(value) == 1;
} }
} }
@ -328,62 +341,77 @@ std::string CConf::getAPRSDescription() const
return m_aprsDescription; return m_aprsDescription;
} }
bool CConf::getNetworkEnabled() const bool CConf::getYSFNetworkEnabled() const
{
return m_ysfNetworkEnabled;
}
unsigned int CConf::getYSFNetworkPort() const
{
return m_ysfNetworkPort;
}
std::string CConf::getYSFNetworkHosts() const
{
return m_ysfNetworkHosts;
}
unsigned int CConf::getYSFNetworkReloadTime() const
{ {
return m_networkEnabled; return m_ysfNetworkReloadTime;
} }
unsigned int CConf::getNetworkPort() const std::string CConf::getYSFNetworkParrotAddress() const
{ {
return m_networkPort; return m_ysfNetworkParrotAddress;
} }
std::string CConf::getNetworkHosts() const unsigned int CConf::getYSFNetworkParrotPort() const
{ {
return m_networkHosts; return m_ysfNetworkParrotPort;
} }
unsigned int CConf::getNetworkReloadTime() const std::string CConf::getYSFNetworkYSF2DMRAddress() const
{ {
return m_networkReloadTime; return m_ysfNetworkYSF2DMRAddress;
} }
std::string CConf::getNetworkParrotAddress() const unsigned int CConf::getYSFNetworkYSF2DMRPort() const
{ {
return m_networkParrotAddress; return m_ysfNetworkYSF2DMRPort;
} }
unsigned int CConf::getNetworkParrotPort() const std::string CConf::getYSFNetworkStartup() const
{ {
return m_networkParrotPort; return m_ysfNetworkStartup;
} }
std::string CConf::getNetworkYSF2DMRAddress() const unsigned int CConf::getYSFNetworkInactivityTimeout() const
{ {
return m_networkYSF2DMRAddress; return m_ysfNetworkInactivityTimeout;
} }
unsigned int CConf::getNetworkYSF2DMRPort() const bool CConf::getYSFNetworkRevert() const
{ {
return m_networkYSF2DMRPort; return m_ysfNetworkRevert;
} }
std::string CConf::getNetworkStartup() const bool CConf::getYSFNetworkDebug() const
{ {
return m_networkStartup; return m_ysfNetworkDebug;
} }
unsigned int CConf::getNetworkInactivityTimeout() const bool CConf::getFCSNetworkEnabled() const
{ {
return m_networkInactivityTimeout; return m_fcsNetworkEnabled;
} }
bool CConf::getNetworkRevert() const unsigned int CConf::getFCSNetworkPort() const
{ {
return m_networkRevert; return m_fcsNetworkPort;
} }
bool CConf::getNetworkDebug() const bool CConf::getFCSNetworkDebug() const
{ {
return m_networkDebug; return m_fcsNetworkDebug;
} }

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -62,19 +62,24 @@ public:
std::string getAPRSPassword() const; std::string getAPRSPassword() const;
std::string getAPRSDescription() const; std::string getAPRSDescription() const;
// The Network section // The YSF Network section
bool getNetworkEnabled() const; bool getYSFNetworkEnabled() const;
unsigned int getNetworkPort() const; unsigned int getYSFNetworkPort() const;
std::string getNetworkHosts() const; std::string getYSFNetworkHosts() const;
unsigned int getNetworkReloadTime() const; unsigned int getYSFNetworkReloadTime() const;
std::string getNetworkParrotAddress() const; std::string getYSFNetworkParrotAddress() const;
unsigned int getNetworkParrotPort() const; unsigned int getYSFNetworkParrotPort() const;
std::string getNetworkYSF2DMRAddress() const; std::string getYSFNetworkYSF2DMRAddress() const;
unsigned int getNetworkYSF2DMRPort() const; unsigned int getYSFNetworkYSF2DMRPort() const;
std::string getNetworkStartup() const; std::string getYSFNetworkStartup() const;
unsigned int getNetworkInactivityTimeout() const; unsigned int getYSFNetworkInactivityTimeout() const;
bool getNetworkRevert() const; bool getYSFNetworkRevert() const;
bool getNetworkDebug() const; bool getYSFNetworkDebug() const;
// The FCS Network section
bool getFCSNetworkEnabled() const;
unsigned int getFCSNetworkPort() const;
bool getFCSNetworkDebug() const;
private: private:
std::string m_file; std::string m_file;
@ -106,18 +111,22 @@ private:
std::string m_aprsPassword; std::string m_aprsPassword;
std::string m_aprsDescription; std::string m_aprsDescription;
bool m_networkEnabled; bool m_ysfNetworkEnabled;
unsigned int m_networkPort; unsigned int m_ysfNetworkPort;
std::string m_networkHosts; std::string m_ysfNetworkHosts;
unsigned int m_networkReloadTime; unsigned int m_ysfNetworkReloadTime;
std::string m_networkParrotAddress; std::string m_ysfNetworkParrotAddress;
unsigned int m_networkParrotPort; unsigned int m_ysfNetworkParrotPort;
std::string m_networkYSF2DMRAddress; std::string m_ysfNetworkYSF2DMRAddress;
unsigned int m_networkYSF2DMRPort; unsigned int m_ysfNetworkYSF2DMRPort;
std::string m_networkStartup; std::string m_ysfNetworkStartup;
unsigned int m_networkInactivityTimeout; unsigned int m_ysfNetworkInactivityTimeout;
bool m_networkRevert; bool m_ysfNetworkRevert;
bool m_networkDebug; bool m_ysfNetworkDebug;
bool m_fcsNetworkEnabled;
unsigned int m_fcsNetworkPort;
bool m_fcsNetworkDebug;
}; };
#endif #endif

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2012,2013,2015,2017 by Jonathan Naylor G4KLX * Copyright (C) 2012,2013,2015,2017,2018 by Jonathan Naylor G4KLX
* Copyright (C) 2011 by DV Developer Group. DJ0ABR * Copyright (C) 2011 by DV Developer Group. DJ0ABR
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -160,12 +160,20 @@ WX_STATUS CDTMF::decodeVDMode2Slice(const unsigned char* ambe, bool end)
WX_STATUS CDTMF::validate() const WX_STATUS CDTMF::validate() const
{ {
if (m_command.length() != 6U) size_t length = m_command.length();
if (length != 4U && length != 6U)
return WXS_NONE; return WXS_NONE;
if (m_command.at(0U) != '#') char first = m_command.at(0U);
if (first != '#' && first != 'A')
return WXS_NONE; return WXS_NONE;
if (length == 4U) {
for (unsigned int i = 1U; i <= 4U; i++) {
if (m_command.at(1U) < '0' || m_command.at(1U) > '9')
return WXS_NONE;
}
} else {
for (unsigned int i = 1U; i <= 6U; i++) { for (unsigned int i = 1U; i <= 6U; i++) {
if (m_command.at(1U) < '0' || m_command.at(1U) > '9') if (m_command.at(1U) < '0' || m_command.at(1U) > '9')
return WXS_NONE; return WXS_NONE;
@ -173,6 +181,7 @@ WX_STATUS CDTMF::validate() const
if (m_command == "#99999") if (m_command == "#99999")
return WXS_DISCONNECT; return WXS_DISCONNECT;
}
return WXS_CONNECT; return WXS_CONNECT;
} }

@ -0,0 +1,176 @@
/*
* Copyright (C) 2009-2014,2016,2017,2018 by Jonathan Naylor G4KLX
*
* 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 "YSFDefines.h"
#include "FCSNetwork.h"
#include "Utils.h"
#include "Log.h"
#include <cstdio>
#include <cassert>
#include <cstring>
const unsigned int BUFFER_LENGTH = 200U;
CFCSNetwork::CFCSNetwork(const std::string& address, unsigned int port, const std::string& callsign, bool debug) :
m_socket(address, port),
m_debug(debug),
m_address(),
m_port(0U),
m_poll(NULL),
m_unlink(NULL),
m_buffer(1000U, "FCS Network Buffer")
{
m_poll = new unsigned char[14U];
::memcpy(m_poll + 0U, "YSFP", 4U);
m_unlink = new unsigned char[14U];
::memcpy(m_unlink + 0U, "YSFU", 4U);
std::string node = callsign;
node.resize(YSF_CALLSIGN_LENGTH, ' ');
for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) {
m_poll[i + 4U] = node.at(i);
m_unlink[i + 4U] = node.at(i);
}
}
CFCSNetwork::CFCSNetwork(unsigned int port, const std::string& callsign, bool debug) :
m_socket(port),
m_debug(debug),
m_address(),
m_port(0U),
m_poll(NULL),
m_unlink(NULL),
m_buffer(1000U, "FCS Network Buffer")
{
m_poll = new unsigned char[14U];
::memcpy(m_poll + 0U, "YSFP", 4U);
m_unlink = new unsigned char[14U];
::memcpy(m_unlink + 0U, "YSFU", 4U);
std::string node = callsign;
node.resize(YSF_CALLSIGN_LENGTH, ' ');
for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) {
m_poll[i + 4U] = node.at(i);
m_unlink[i + 4U] = node.at(i);
}
}
CFCSNetwork::~CFCSNetwork()
{
delete[] m_poll;
}
bool CFCSNetwork::open()
{
LogMessage("Opening FCS network connection");
return m_socket.open();
}
void CFCSNetwork::setDestination(const in_addr& address, unsigned int port)
{
m_address = address;
m_port = port;
}
void CFCSNetwork::clearDestination()
{
m_address.s_addr = INADDR_NONE;
m_port = 0U;
}
bool CFCSNetwork::write(const unsigned char* data)
{
assert(data != NULL);
if (m_port == 0U)
return true;
if (m_debug)
CUtils::dump(1U, "FCS Network Data Sent", data, 155U);
return m_socket.write(data, 155U, m_address, m_port);
}
bool CFCSNetwork::writePoll()
{
if (m_port == 0U)
return true;
return m_socket.write(m_poll, 14U, m_address, m_port);
}
bool CFCSNetwork::writeUnlink()
{
if (m_port == 0U)
return true;
return m_socket.write(m_unlink, 14U, m_address, m_port);
}
void CFCSNetwork::clock(unsigned int ms)
{
if (m_port == 0U)
return;
unsigned char buffer[BUFFER_LENGTH];
in_addr address;
unsigned int port;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, port);
if (length <= 0)
return;
if (address.s_addr != m_address.s_addr || port != m_port)
return;
if (m_debug)
CUtils::dump(1U, "FCS Network Data Received", buffer, length);
unsigned char len = length;
m_buffer.addData(&len, 1U);
m_buffer.addData(buffer, length);
}
unsigned int CFCSNetwork::read(unsigned char* data)
{
assert(data != NULL);
if (m_buffer.isEmpty())
return 0U;
unsigned char len = 0U;
m_buffer.getData(&len, 1U);
m_buffer.getData(data, len);
return len;
}
void CFCSNetwork::close()
{
m_socket.close();
LogMessage("Closing FCS network connection");
}

@ -0,0 +1,61 @@
/*
* Copyright (C) 2009-2014,2016,2017,2018 by Jonathan Naylor G4KLX
*
* 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.
*/
#ifndef FCSNetwork_H
#define FCSNetwork_H
#include "YSFDefines.h"
#include "UDPSocket.h"
#include "RingBuffer.h"
#include <cstdint>
#include <string>
class CFCSNetwork {
public:
CFCSNetwork(const std::string& address, unsigned int port, const std::string& callsign, bool debug);
CFCSNetwork(unsigned int port, const std::string& callsign, bool debug);
~CFCSNetwork();
bool open();
void setDestination(const in_addr& address, unsigned int port);
void clearDestination();
bool write(const unsigned char* data);
bool writePoll();
bool writeUnlink();
unsigned int read(unsigned char* data);
void clock(unsigned int ms);
void close();
private:
CUDPSocket m_socket;
bool m_debug;
in_addr m_address;
unsigned int m_port;
unsigned char* m_poll;
unsigned char* m_unlink;
CRingBuffer<unsigned char> m_buffer;
};
#endif

@ -4,7 +4,7 @@ CFLAGS = -g -O3 -Wall -std=c++0x -pthread
LIBS = -lm -lpthread LIBS = -lm -lpthread
LDFLAGS = -g LDFLAGS = -g
OBJECTS = APRSWriterThread.o APRSWriter.o Conf.o CRC.o DTMF.o Golay24128.o GPS.o Log.o StopWatch.o Sync.o TCPSocket.o Thread.o Timer.o \ OBJECTS = APRSWriterThread.o APRSWriter.o Conf.o CRC.o DTMF.o FCSNetwork.o Golay24128.o GPS.o Log.o StopWatch.o Sync.o TCPSocket.o Thread.o Timer.o \
UDPSocket.o Utils.o WiresX.o YSFConvolution.o YSFFICH.o YSFGateway.o YSFNetwork.o YSFPayload.o YSFReflectors.o UDPSocket.o Utils.o WiresX.o YSFConvolution.o YSFFICH.o YSFGateway.o YSFNetwork.o YSFPayload.o YSFReflectors.o
all: YSFGateway all: YSFGateway

@ -4,7 +4,7 @@ CFLAGS = -g -O3 -Wall -std=c++0x -pthread
LIBS = -lm -lpthread -lsocket LIBS = -lm -lpthread -lsocket
LDFLAGS = -g LDFLAGS = -g
OBJECTS = APRSWriterThread.o APRSWriter.o Conf.o CRC.o DTMF.o Golay24128.o GPS.o Log.o StopWatch.o Sync.o TCPSocket.o Thread.o Timer.o \ OBJECTS = APRSWriterThread.o APRSWriter.o Conf.o CRC.o DTMF.o FCSNetwork.o Golay24128.o GPS.o Log.o StopWatch.o Sync.o TCPSocket.o Thread.o Timer.o \
UDPSocket.o Utils.o WiresX.o YSFConvolution.o YSFFICH.o YSFGateway.o YSFNetwork.o YSFPayload.o YSFReflectors.o UDPSocket.o Utils.o WiresX.o YSFConvolution.o YSFFICH.o YSFGateway.o YSFNetwork.o YSFPayload.o YSFReflectors.o
all: YSFGateway all: YSFGateway

@ -82,6 +82,7 @@ m_gps(NULL),
m_wiresX(NULL), m_wiresX(NULL),
m_dtmf(NULL), m_dtmf(NULL),
m_ysfNetwork(NULL), m_ysfNetwork(NULL),
m_fcsNetwork(NULL),
m_linked(false), m_linked(false),
m_exclude(false) m_exclude(false)
{ {
@ -168,7 +169,7 @@ int CYSFGateway::run()
m_callsign = m_conf.getCallsign(); m_callsign = m_conf.getCallsign();
m_suffix = m_conf.getSuffix(); m_suffix = m_conf.getSuffix();
bool debug = m_conf.getNetworkDebug(); bool debug = m_conf.getYSFNetworkDebug();
in_addr rptAddress = CUDPSocket::lookup(m_conf.getRptAddress()); in_addr rptAddress = CUDPSocket::lookup(m_conf.getRptAddress());
unsigned int rptPort = m_conf.getRptPort(); unsigned int rptPort = m_conf.getRptPort();
std::string myAddress = m_conf.getMyAddress(); std::string myAddress = m_conf.getMyAddress();
@ -184,9 +185,9 @@ int CYSFGateway::run()
return 1; return 1;
} }
unsigned int netPort = m_conf.getNetworkPort(); unsigned int ysfPort = m_conf.getYSFNetworkPort();
m_ysfNetwork = new CYSFNetwork(netPort, m_callsign, debug); m_ysfNetwork = new CYSFNetwork(ysfPort, m_callsign, debug);
ret = m_ysfNetwork->open(); ret = m_ysfNetwork->open();
if (!ret) { if (!ret) {
::LogError("Cannot open the YSF reflector network port"); ::LogError("Cannot open the YSF reflector network port");
@ -194,17 +195,27 @@ int CYSFGateway::run()
return 1; return 1;
} }
CTimer inactivityTimer(1000U, m_conf.getNetworkInactivityTimeout() * 60U); unsigned int fcsPort = m_conf.getFCSNetworkPort();
m_fcsNetwork = new CFCSNetwork(fcsPort, m_callsign, debug);
ret = m_fcsNetwork->open();
if (!ret) {
::LogError("Cannot open the FCS reflector network port");
::LogFinalise();
return 1;
}
CTimer inactivityTimer(1000U, m_conf.getYSFNetworkInactivityTimeout() * 60U);
CTimer lostTimer(1000U, 120U); CTimer lostTimer(1000U, 120U);
CTimer pollTimer(1000U, 5U); CTimer pollTimer(1000U, 5U);
bool revert = m_conf.getNetworkRevert(); bool revert = m_conf.getYSFNetworkRevert();
std::string startup = m_conf.getNetworkStartup(); std::string startup = m_conf.getYSFNetworkStartup();
bool networkEnabled = m_conf.getNetworkEnabled(); bool ysfNetworkEnabled = m_conf.getYSFNetworkEnabled();
if (networkEnabled) { if (ysfNetworkEnabled) {
std::string fileName = m_conf.getNetworkHosts(); std::string fileName = m_conf.getYSFNetworkHosts();
unsigned int reloadTime = m_conf.getNetworkReloadTime(); unsigned int reloadTime = m_conf.getYSFNetworkReloadTime();
m_wiresX = new CWiresX(m_callsign, m_suffix, &rptNetwork, fileName, reloadTime); m_wiresX = new CWiresX(m_callsign, m_suffix, &rptNetwork, fileName, reloadTime);
m_dtmf = new CDTMF; m_dtmf = new CDTMF;
@ -215,14 +226,14 @@ int CYSFGateway::run()
m_wiresX->setInfo(name, txFrequency, rxFrequency); m_wiresX->setInfo(name, txFrequency, rxFrequency);
std::string address = m_conf.getNetworkParrotAddress(); std::string address = m_conf.getYSFNetworkParrotAddress();
unsigned int port = m_conf.getNetworkParrotPort(); unsigned int port = m_conf.getYSFNetworkParrotPort();
if (port > 0U) if (port > 0U)
m_wiresX->setParrot(address, port); m_wiresX->setParrot(address, port);
address = m_conf.getNetworkYSF2DMRAddress(); address = m_conf.getYSFNetworkYSF2DMRAddress();
port = m_conf.getNetworkYSF2DMRPort(); port = m_conf.getYSFNetworkYSF2DMRPort();
if (port > 0U) if (port > 0U)
m_wiresX->setYSF2DMR(address, port); m_wiresX->setYSF2DMR(address, port);
@ -377,7 +388,7 @@ int CYSFGateway::run()
m_gps->data(buffer + 14U, buffer + 35U, fi, dt, fn, ft); m_gps->data(buffer + 14U, buffer + 35U, fi, dt, fn, ft);
} }
if (networkEnabled && m_linked && !m_exclude) { if (ysfNetworkEnabled && m_linked && !m_exclude) {
m_ysfNetwork->write(buffer); m_ysfNetwork->write(buffer);
if (::memcmp(buffer + 0U, "YSFD", 4U) == 0) if (::memcmp(buffer + 0U, "YSFD", 4U) == 0)
inactivityTimer.start(); inactivityTimer.start();
@ -393,7 +404,7 @@ int CYSFGateway::run()
} }
while (m_ysfNetwork->read(buffer) > 0U) { while (m_ysfNetwork->read(buffer) > 0U) {
if (networkEnabled && m_linked) { if (ysfNetworkEnabled && m_linked) {
// Only pass through YSF data packets // Only pass through YSF data packets
if (::memcmp(buffer + 0U, "YSFD", 4U) == 0) if (::memcmp(buffer + 0U, "YSFD", 4U) == 0)
rptNetwork.write(buffer); rptNetwork.write(buffer);
@ -407,6 +418,7 @@ int CYSFGateway::run()
rptNetwork.clock(ms); rptNetwork.clock(ms);
m_ysfNetwork->clock(ms); m_ysfNetwork->clock(ms);
m_fcsNetwork->clock(ms);
if (m_gps != NULL) if (m_gps != NULL)
m_gps->clock(ms); m_gps->clock(ms);
if (m_wiresX != NULL) if (m_wiresX != NULL)
@ -484,6 +496,7 @@ int CYSFGateway::run()
rptNetwork.close(); rptNetwork.close();
m_ysfNetwork->close(); m_ysfNetwork->close();
m_fcsNetwork->close();
if (m_gps != NULL) { if (m_gps != NULL) {
m_gps->close(); m_gps->close();
@ -491,6 +504,7 @@ int CYSFGateway::run()
} }
delete m_ysfNetwork; delete m_ysfNetwork;
delete m_fcsNetwork;
delete m_wiresX; delete m_wiresX;
delete m_dtmf; delete m_dtmf;

@ -20,6 +20,7 @@
#define YSFGateway_H #define YSFGateway_H
#include "YSFNetwork.h" #include "YSFNetwork.h"
#include "FCSNetwork.h"
#include "WiresX.h" #include "WiresX.h"
#include "Conf.h" #include "Conf.h"
#include "DTMF.h" #include "DTMF.h"
@ -43,6 +44,7 @@ private:
CWiresX* m_wiresX; CWiresX* m_wiresX;
CDTMF* m_dtmf; CDTMF* m_dtmf;
CYSFNetwork* m_ysfNetwork; CYSFNetwork* m_ysfNetwork;
CFCSNetwork* m_fcsNetwork;
bool m_linked; bool m_linked;
bool m_exclude; bool m_exclude;

@ -33,7 +33,7 @@ Port=14580
Password=9999 Password=9999
Description=APRS Description Description=APRS Description
[Network] [YSF Network]
Enable=1 Enable=1
Port=42000 Port=42000
Hosts=./YSFHosts.txt Hosts=./YSFHosts.txt
@ -46,3 +46,8 @@ YSF2DMRPort=42013
InactivityTimeout=10 InactivityTimeout=10
# Revert=0 # Revert=0
Debug=0 Debug=0
[FCS Network]
Enable=1
Port=42000
Debug=0

@ -151,6 +151,7 @@
<ClInclude Include="Conf.h" /> <ClInclude Include="Conf.h" />
<ClInclude Include="CRC.h" /> <ClInclude Include="CRC.h" />
<ClInclude Include="DTMF.h" /> <ClInclude Include="DTMF.h" />
<ClInclude Include="FCSNetwork.h" />
<ClInclude Include="Golay24128.h" /> <ClInclude Include="Golay24128.h" />
<ClInclude Include="GPS.h" /> <ClInclude Include="GPS.h" />
<ClInclude Include="Log.h" /> <ClInclude Include="Log.h" />
@ -178,6 +179,7 @@
<ClCompile Include="Conf.cpp" /> <ClCompile Include="Conf.cpp" />
<ClCompile Include="CRC.cpp" /> <ClCompile Include="CRC.cpp" />
<ClCompile Include="DTMF.cpp" /> <ClCompile Include="DTMF.cpp" />
<ClCompile Include="FCSNetwork.cpp" />
<ClCompile Include="Golay24128.cpp" /> <ClCompile Include="Golay24128.cpp" />
<ClCompile Include="GPS.cpp" /> <ClCompile Include="GPS.cpp" />
<ClCompile Include="Log.cpp" /> <ClCompile Include="Log.cpp" />

@ -86,6 +86,9 @@
<ClInclude Include="YSFReflectors.h"> <ClInclude Include="YSFReflectors.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="FCSNetwork.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="StopWatch.cpp"> <ClCompile Include="StopWatch.cpp">
@ -154,5 +157,8 @@
<ClCompile Include="YSFReflectors.cpp"> <ClCompile Include="YSFReflectors.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="FCSNetwork.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>
Loading…
Cancel
Save