Replace MobileGPS with GPSD.

This commit is contained in:
Jonathan Naylor 2020-06-03 13:47:34 +01:00
parent 05b6249f4f
commit d6f04c3bc2
14 changed files with 203 additions and 197 deletions

View file

@ -124,10 +124,13 @@ m_gateway(),
m_array(), m_array(),
m_aprsAddress(), m_aprsAddress(),
m_aprsPort(port), m_aprsPort(port),
m_aprsSocket(), m_aprsSocket()
m_mobileAddress(), #if !defined(_WIN32) && !defined(_WIN64)
m_mobilePort(0U), ,m_gpsdEnabled(false),
m_mobileSocket(NULL) m_gpsdAddress(),
m_gpsdPort(),
m_gpsdData()
#endif
{ {
wxASSERT(!address.IsEmpty()); wxASSERT(!address.IsEmpty());
wxASSERT(port > 0U); wxASSERT(port > 0U);
@ -157,38 +160,44 @@ void CAPRSWriter::setPortFixed(const wxString& callsign, const wxString& band, d
m_array[temp] = new CAPRSEntry(callsign, band, frequency, offset, range, latitude, longitude, agl); m_array[temp] = new CAPRSEntry(callsign, band, frequency, offset, range, latitude, longitude, agl);
} }
void CAPRSWriter::setPortMobile(const wxString& callsign, const wxString& band, double frequency, double offset, double range, const wxString& address, unsigned int port) void CAPRSWriter::setPortGPSD(const wxString& callsign, const wxString& band, double frequency, double offset, double range, const wxString& address, const wxString& port)
{ {
#if !defined(_WIN32) && !defined(_WIN64)
wxASSERT(!address.IsEmpty());
wxASSERT(!port.IsEmpty());
wxString temp = callsign; wxString temp = callsign;
temp.resize(LONG_CALLSIGN_LENGTH - 1U, wxT(' ')); temp.resize(LONG_CALLSIGN_LENGTH - 1U, wxT(' '));
temp.Append(band); temp.Append(band);
m_array[temp] = new CAPRSEntry(callsign, band, frequency, offset, range, 0.0, 0.0, 0.0); m_array[temp] = new CAPRSEntry(callsign, band, frequency, offset, range, 0.0, 0.0, 0.0);
if (m_mobileSocket == NULL) { m_gpsdEnabled = true;
m_mobileAddress = CUDPReaderWriter::lookup(address); m_gpsdAddress = address;
m_mobilePort = port; m_gpsdPort = port;
#endif
m_mobileSocket = new CUDPReaderWriter;
}
} }
bool CAPRSWriter::open() bool CAPRSWriter::open()
{ {
if (m_mobileSocket != NULL) { #if !defined(_WIN32) && !defined(_WIN64)
bool ret = m_mobileSocket->open(); if (m_gpsdEnabled) {
if (!ret) { int ret = ::gps_open(m_gpsdAddress.mb_str(), m_gpsdPort.mb_str(), &m_gpsdData);
delete m_mobileSocket; if (ret != 0) {
m_mobileSocket = NULL; wxLogError(wxT("Error when opening access to gpsd - %d - %s"), errno, ::gps_errstr(errno));
return false; return false;
} }
::gps_stream(&m_gpsdData, WATCH_ENABLE | WATCH_JSON, NULL);
// Poll the GPS every minute // Poll the GPS every minute
m_idTimer.setTimeout(60U); m_idTimer.setTimeout(60U);
} else { } else {
m_idTimer.setTimeout(20U * 60U); m_idTimer.setTimeout(20U * 60U);
} }
#else
m_idTimer.setTimeout(20U * 60U);
#endif
m_idTimer.start(); m_idTimer.start();
return m_aprsSocket.open(); return m_aprsSocket.open();
@ -280,20 +289,22 @@ void CAPRSWriter::clock(unsigned int ms)
{ {
m_idTimer.clock(ms); m_idTimer.clock(ms);
if (m_mobileSocket != NULL) { #if !defined(_WIN32) && !defined(_WIN64)
if (m_gpsdEnabled) {
if (m_idTimer.hasExpired()) { if (m_idTimer.hasExpired()) {
pollGPS(); sendIdFramesMobile();
m_idTimer.start(); m_idTimer.start();
} }
sendIdFramesMobile();
} else { } else {
#endif
if (m_idTimer.hasExpired()) { if (m_idTimer.hasExpired()) {
sendIdFramesFixed(); sendIdFramesFixed();
m_idTimer.start(); m_idTimer.start();
} }
#if !defined(_WIN32) && !defined(_WIN64)
} }
#endif
for (CEntry_t::iterator it = m_array.begin(); it != m_array.end(); ++it) for (CEntry_t::iterator it = m_array.begin(); it != m_array.end(); ++it)
it->second->clock(ms); it->second->clock(ms);
} }
@ -302,17 +313,12 @@ void CAPRSWriter::close()
{ {
m_aprsSocket.close(); m_aprsSocket.close();
if (m_mobileSocket != NULL) { #if !defined(_WIN32) && !defined(_WIN64)
m_mobileSocket->close(); if (m_gpsdEnabled) {
delete m_mobileSocket; ::gps_stream(&m_gpsdData, WATCH_DISABLE, NULL);
::gps_close(&m_gpsdData);
} }
} #endif
bool CAPRSWriter::pollGPS()
{
assert(m_mobileSocket != NULL);
return m_mobileSocket->write((unsigned char*)"ircDDBGateway", 13U, m_mobileAddress, m_mobilePort);
} }
void CAPRSWriter::sendIdFramesFixed() void CAPRSWriter::sendIdFramesFixed()
@ -426,29 +432,28 @@ void CAPRSWriter::sendIdFramesFixed()
void CAPRSWriter::sendIdFramesMobile() void CAPRSWriter::sendIdFramesMobile()
{ {
// Grab GPS data if it's available if (!m_gpsdEnabled)
unsigned char buffer[200U];
in_addr address;
unsigned int port;
int ret = m_mobileSocket->read(buffer, 200U, address, port);
if (ret <= 0)
return; return;
buffer[ret] = '\0'; if (!::gps_waiting(&m_gpsdData, 0))
// Parse the GPS data
char* pLatitude = ::strtok((char*)buffer, ",\n"); // Latitude
char* pLongitude = ::strtok(NULL, ",\n"); // Longitude
char* pAltitude = ::strtok(NULL, ",\n"); // Altitude (m)
char* pVelocity = ::strtok(NULL, ",\n"); // Velocity (kms/h)
char* pBearing = ::strtok(NULL, "\n"); // Bearing
if (pLatitude == NULL || pLongitude == NULL || pAltitude == NULL)
return; return;
double rawLatitude = ::atof(pLatitude); if (::gps_read(&m_gpsdData, NULL, 0) <= 0)
double rawLongitude = ::atof(pLongitude); return;
double rawAltitude = ::atof(pAltitude);
bool latlonSet = (m_gpsdData.set & LATLON_SET) == LATLON_SET;
bool altitudeSet = (m_gpsdData.set & ALTITUDE_SET) == ALTITUDE_SET;
bool velocitySet = (m_gpsdData.set & SPEED_SET) == SPEED_SET;
bool bearingSet = (m_gpsdData.set & TRACK_SET) == TRACK_SET;
if (!latlonSet)
return;
float rawLatitude = float(m_gpsdData.fix.latitude);
float rawLongitude = float(m_gpsdData.fix.longitude);
float rawAltitude = float(m_gpsdData.fix.altMSL);
float rawVelocity = float(m_gpsdData.fix.speed);
float rawBearing = float(m_gpsdData.fix.track);
time_t now; time_t now;
::time(&now); ::time(&now);
@ -531,12 +536,8 @@ void CAPRSWriter::sendIdFramesMobile()
rawAltitude * 3.28); rawAltitude * 3.28);
wxString output2; wxString output2;
if (pBearing != NULL && pVelocity != NULL) { if (bearingSet && velocitySet)
double rawBearing = ::atof(pBearing);
double rawVelocity = ::atof(pVelocity);
output2.Printf(wxT("%03.0lf/%03.0lf"), rawBearing, rawVelocity * 0.539957F); output2.Printf(wxT("%03.0lf/%03.0lf"), rawBearing, rawVelocity * 0.539957F);
}
wxString output3; wxString output3;
output3.Printf(wxT("RNG%04.0lf %s %s\r\n"), entry->getRange() * 0.6214, band.c_str(), desc.c_str()); output3.Printf(wxT("RNG%04.0lf %s %s\r\n"), entry->getRange() * 0.6214, band.c_str(), desc.c_str());
@ -554,11 +555,17 @@ void CAPRSWriter::sendIdFramesMobile()
m_aprsSocket.write((unsigned char*)ascii, (unsigned int)::strlen(ascii), m_aprsAddress, m_aprsPort); m_aprsSocket.write((unsigned char*)ascii, (unsigned int)::strlen(ascii), m_aprsAddress, m_aprsPort);
if (entry->getBand().Len() == 1U) { if (entry->getBand().Len() == 1U) {
if (altitudeSet)
output1.Printf(wxT("%s-%s>APDG02,TCPIP*,qAC,%s-%sS:!%s%cD%s%c&/A=%06.0lf"), output1.Printf(wxT("%s-%s>APDG02,TCPIP*,qAC,%s-%sS:!%s%cD%s%c&/A=%06.0lf"),
entry->getCallsign().c_str(), entry->getBand().c_str(), entry->getCallsign().c_str(), entry->getBand().c_str(), entry->getCallsign().c_str(), entry->getBand().c_str(), entry->getCallsign().c_str(), entry->getBand().c_str(),
lat.c_str(), (rawLatitude < 0.0) ? wxT('S') : wxT('N'), lat.c_str(), (rawLatitude < 0.0) ? wxT('S') : wxT('N'),
lon.c_str(), (rawLongitude < 0.0) ? wxT('W') : wxT('E'), lon.c_str(), (rawLongitude < 0.0) ? wxT('W') : wxT('E'),
rawAltitude * 3.28); rawAltitude * 3.28);
else
output1.Printf(wxT("%s-%s>APDG02,TCPIP*,qAC,%s-%sS:!%s%cD%s%c&"),
entry->getCallsign().c_str(), entry->getBand().c_str(), entry->getCallsign().c_str(), entry->getBand().c_str(),
lat.c_str(), (rawLatitude < 0.0) ? wxT('S') : wxT('N'),
lon.c_str(), (rawLongitude < 0.0) ? wxT('W') : wxT('E'));
::memset(ascii, 0x00, 300U); ::memset(ascii, 0x00, 300U);
unsigned int n = 0U; unsigned int n = 0U;

View file

@ -27,6 +27,10 @@
#include "Timer.h" #include "Timer.h"
#include "Defs.h" #include "Defs.h"
#if !defined(_WIN32) && !defined(_WIN64)
#include <gps.h>
#endif
#include <wx/wx.h> #include <wx/wx.h>
class CAPRSEntry { class CAPRSEntry {
@ -74,7 +78,7 @@ public:
void setPortFixed(const wxString& callsign, const wxString& band, double frequency, double offset, double range, double latitude, double longitude, double agl); void setPortFixed(const wxString& callsign, const wxString& band, double frequency, double offset, double range, double latitude, double longitude, double agl);
void setPortMobile(const wxString& callsign, const wxString& band, double frequency, double offset, double range, const wxString& address, unsigned int port); void setPortGPSD(const wxString& callsign, const wxString& band, double frequency, double offset, double range, const wxString& address, const wxString& port);
void writeHeader(const wxString& callsign, const CHeaderData& header); void writeHeader(const wxString& callsign, const CHeaderData& header);
@ -91,11 +95,13 @@ private:
in_addr m_aprsAddress; in_addr m_aprsAddress;
unsigned int m_aprsPort; unsigned int m_aprsPort;
CUDPReaderWriter m_aprsSocket; CUDPReaderWriter m_aprsSocket;
in_addr m_mobileAddress; #if !defined(_WIN32) && !defined(_WIN64)
unsigned int m_mobilePort; bool m_gpsdEnabled;
CUDPReaderWriter* m_mobileSocket; wxString m_gpsdAddress;
wxString m_gpsdPort;
struct gps_data_t m_gpsdData;
#endif
bool pollGPS();
void sendIdFramesFixed(); void sendIdFramesFixed();
void sendIdFramesMobile(); void sendIdFramesMobile();
}; };

View file

@ -200,9 +200,9 @@ const wxString KEY_ECHO_ENABLED = wxT("echoEnabled");
const wxString KEY_LOG_ENABLED = wxT("logEnabled"); const wxString KEY_LOG_ENABLED = wxT("logEnabled");
const wxString KEY_DRATS_ENABLED = wxT("dratsEnabled"); const wxString KEY_DRATS_ENABLED = wxT("dratsEnabled");
const wxString KEY_DTMF_ENABLED = wxT("dtmfEnabled"); const wxString KEY_DTMF_ENABLED = wxT("dtmfEnabled");
const wxString KEY_MOBILE_GPS_ENABLED = wxT("mobileGPSEnabled"); const wxString KEY_GPSD_ENABLED = wxT("gpsdEnabled");
const wxString KEY_MOBILE_GPS_ADDRESS = wxT("mobileGPSAddress"); const wxString KEY_GPSD_ADDRESS = wxT("gpsdAddress");
const wxString KEY_MOBILE_GPS_PORT = wxT("mobileGPSPort"); const wxString KEY_GPSD_PORT = wxT("gpsdPort");
const wxString KEY_WINDOW_X = wxT("windowX"); const wxString KEY_WINDOW_X = wxT("windowX");
const wxString KEY_WINDOW_Y = wxT("windowY"); const wxString KEY_WINDOW_Y = wxT("windowY");
@ -284,9 +284,9 @@ const bool DEFAULT_INFO_ENABLED = true;
const bool DEFAULT_ECHO_ENABLED = true; const bool DEFAULT_ECHO_ENABLED = true;
const bool DEFAULT_DRATS_ENABLED = false; const bool DEFAULT_DRATS_ENABLED = false;
const bool DEFAULT_DTMF_ENABLED = true; const bool DEFAULT_DTMF_ENABLED = true;
const bool DEFAULT_MOBILE_GPS_ENABLED = false; const bool DEFAULT_GPSD_ENABLED = false;
const wxString DEFAULT_MOBILE_GPS_ADDRESS = wxT("127.0.0.1"); const wxString DEFAULT_GPSD_ADDRESS = wxT("127.0.0.1");
const unsigned int DEFAULT_MOBILE_GPS_PORT = 7834U; const wxString DEFAULT_GPSD_PORT = wxT("2947");
const int DEFAULT_WINDOW_X = -1; const int DEFAULT_WINDOW_X = -1;
const int DEFAULT_WINDOW_Y = -1; const int DEFAULT_WINDOW_Y = -1;
@ -477,9 +477,9 @@ m_echoEnabled(DEFAULT_ECHO_ENABLED),
m_logEnabled(DEFAULT_LOG_ENABLED), m_logEnabled(DEFAULT_LOG_ENABLED),
m_dratsEnabled(DEFAULT_DRATS_ENABLED), m_dratsEnabled(DEFAULT_DRATS_ENABLED),
m_dtmfEnabled(DEFAULT_DTMF_ENABLED), m_dtmfEnabled(DEFAULT_DTMF_ENABLED),
m_mobileGPSEnabled(DEFAULT_MOBILE_GPS_ENABLED), m_gpsdEnabled(DEFAULT_GPSD_ENABLED),
m_mobileGPSAddress(DEFAULT_MOBILE_GPS_ADDRESS), m_gpsdAddress(DEFAULT_GPSD_ADDRESS),
m_mobileGPSPort(DEFAULT_MOBILE_GPS_PORT), m_gpsdPort(DEFAULT_GPSD_PORT),
m_x(DEFAULT_WINDOW_X), m_x(DEFAULT_WINDOW_X),
m_y(DEFAULT_WINDOW_Y) m_y(DEFAULT_WINDOW_Y)
{ {
@ -893,12 +893,12 @@ m_y(DEFAULT_WINDOW_Y)
m_config->Read(m_name + KEY_DTMF_ENABLED, &m_dtmfEnabled, DEFAULT_DTMF_ENABLED); m_config->Read(m_name + KEY_DTMF_ENABLED, &m_dtmfEnabled, DEFAULT_DTMF_ENABLED);
m_config->Read(m_name + KEY_MOBILE_GPS_ENABLED, &m_mobileGPSEnabled, DEFAULT_MOBILE_GPS_ENABLED); m_config->Read(m_name + KEY_GPSD_ENABLED, &m_gpsdEnabled, DEFAULT_GPSD_ENABLED);
m_config->Read(m_name + KEY_MOBILE_GPS_ADDRESS, &m_mobileGPSAddress, DEFAULT_MOBILE_GPS_ADDRESS); m_config->Read(m_name + KEY_GPSD_ADDRESS, &m_gpsdAddress, DEFAULT_GPSD_ADDRESS);
m_config->Read(m_name + KEY_MOBILE_GPS_PORT, &temp, long(DEFAULT_MOBILE_GPS_PORT)); m_config->Read(m_name + KEY_GPSD_PORT, &temp, long(DEFAULT_GPSD_PORT));
m_mobileGPSPort = (unsigned int)temp; m_gpsdPort = (unsigned int)temp;
m_config->Read(m_name + KEY_WINDOW_X, &temp, long(DEFAULT_WINDOW_X)); m_config->Read(m_name + KEY_WINDOW_X, &temp, long(DEFAULT_WINDOW_X));
m_x = int(temp); m_x = int(temp);
@ -1096,9 +1096,9 @@ m_echoEnabled(DEFAULT_ECHO_ENABLED),
m_logEnabled(DEFAULT_LOG_ENABLED), m_logEnabled(DEFAULT_LOG_ENABLED),
m_dratsEnabled(DEFAULT_DRATS_ENABLED), m_dratsEnabled(DEFAULT_DRATS_ENABLED),
m_dtmfEnabled(DEFAULT_DTMF_ENABLED), m_dtmfEnabled(DEFAULT_DTMF_ENABLED),
m_mobileGPSEnabled(DEFAULT_MOBILE_GPS_ENABLED), m_gpsdEnabled(DEFAULT_GPSD_ENABLED),
m_mobileGPSAddress(DEFAULT_MOBILE_GPS_ADDRESS), m_gpsdAddress(DEFAULT_GPSD_ADDRESS),
m_mobileGPSPort(DEFAULT_MOBILE_GPS_PORT), m_gpsdPort(DEFAULT_GPSD_PORT),
m_x(DEFAULT_WINDOW_X), m_x(DEFAULT_WINDOW_X),
m_y(DEFAULT_WINDOW_Y) m_y(DEFAULT_WINDOW_Y)
{ {
@ -1574,14 +1574,13 @@ m_y(DEFAULT_WINDOW_Y)
} else if (key.IsSameAs(KEY_DTMF_ENABLED)) { } else if (key.IsSameAs(KEY_DTMF_ENABLED)) {
val.ToLong(&temp1); val.ToLong(&temp1);
m_dtmfEnabled = temp1 == 1L; m_dtmfEnabled = temp1 == 1L;
} else if (key.IsSameAs(KEY_MOBILE_GPS_ENABLED)) { } else if (key.IsSameAs(KEY_GPSD_ENABLED)) {
val.ToLong(&temp1); val.ToLong(&temp1);
m_mobileGPSEnabled = temp1 == 1L; m_gpsdEnabled = temp1 == 1L;
} else if (key.IsSameAs(KEY_MOBILE_GPS_ADDRESS)) { } else if (key.IsSameAs(KEY_GPSD_ADDRESS)) {
m_mobileGPSAddress = val; m_gpsdAddress = val;
} else if (key.IsSameAs(KEY_MOBILE_GPS_PORT)) { } else if (key.IsSameAs(KEY_GPSD_PORT)) {
val.ToULong(&temp2); m_gpsdPort = val;
m_mobileGPSPort = (unsigned int)temp2;
} else if (key.IsSameAs(KEY_WINDOW_X)) { } else if (key.IsSameAs(KEY_WINDOW_X)) {
val.ToLong(&temp1); val.ToLong(&temp1);
m_x = int(temp1); m_x = int(temp1);
@ -2199,18 +2198,18 @@ void CIRCDDBGatewayConfig::setMiscellaneous(TEXT_LANG language, bool infoEnabled
m_dtmfEnabled = dtmfEnabled; m_dtmfEnabled = dtmfEnabled;
} }
void CIRCDDBGatewayConfig::getMobileGPS(bool& enabled, wxString& address, unsigned int& port) const void CIRCDDBGatewayConfig::getGPSD(bool& enabled, wxString& address, wxString& port) const
{ {
enabled = m_mobileGPSEnabled; enabled = m_gpsdEnabled;
address = m_mobileGPSAddress; address = m_gpsdAddress;
port = m_mobileGPSPort; port = m_gpsdPort;
} }
void CIRCDDBGatewayConfig::setMobileGPS(bool enabled, const wxString& address, unsigned int port) void CIRCDDBGatewayConfig::setGPSD(bool enabled, const wxString& address, const wxString& port)
{ {
m_mobileGPSEnabled = enabled; m_gpsdEnabled = enabled;
m_mobileGPSAddress = address; m_gpsdAddress = address;
m_mobileGPSPort = port; m_gpsdPort = port;
} }
void CIRCDDBGatewayConfig::getPosition(int& x, int& y) const void CIRCDDBGatewayConfig::getPosition(int& x, int& y) const
@ -2451,9 +2450,9 @@ bool CIRCDDBGatewayConfig::write()
m_config->Write(m_name + KEY_LOG_ENABLED, m_logEnabled); m_config->Write(m_name + KEY_LOG_ENABLED, m_logEnabled);
m_config->Write(m_name + KEY_DRATS_ENABLED, m_dratsEnabled); m_config->Write(m_name + KEY_DRATS_ENABLED, m_dratsEnabled);
m_config->Write(m_name + KEY_DTMF_ENABLED, m_dtmfEnabled); m_config->Write(m_name + KEY_DTMF_ENABLED, m_dtmfEnabled);
m_config->Write(m_name + KEY_MOBILE_GPS_ENABLED, m_mobileGPSEnabled); m_config->Write(m_name + KEY_GPSD_ENABLED, m_gpsdEnabled);
m_config->Write(m_name + KEY_MOBILE_GPS_ADDRESS, m_mobileGPSAddress); m_config->Write(m_name + KEY_GPSD_ADDRESS, m_gpsdAddress);
m_config->Write(m_name + KEY_MOBILE_GPS_PORT, long(m_mobileGPSPort)); m_config->Write(m_name + KEY_GPSD_PORT, m_gpsdPort);
m_config->Write(m_name + KEY_WINDOW_X, long(m_x)); m_config->Write(m_name + KEY_WINDOW_X, long(m_x));
m_config->Write(m_name + KEY_WINDOW_Y, long(m_y)); m_config->Write(m_name + KEY_WINDOW_Y, long(m_y));
m_config->Flush(); m_config->Flush();
@ -2660,9 +2659,9 @@ bool CIRCDDBGatewayConfig::write()
buffer.Printf(wxT("%s=%d"), KEY_LOG_ENABLED.c_str(), m_logEnabled ? 1 : 0); file.AddLine(buffer); buffer.Printf(wxT("%s=%d"), KEY_LOG_ENABLED.c_str(), m_logEnabled ? 1 : 0); file.AddLine(buffer);
buffer.Printf(wxT("%s=%d"), KEY_DRATS_ENABLED.c_str(), m_dratsEnabled ? 1 : 0); file.AddLine(buffer); buffer.Printf(wxT("%s=%d"), KEY_DRATS_ENABLED.c_str(), m_dratsEnabled ? 1 : 0); file.AddLine(buffer);
buffer.Printf(wxT("%s=%d"), KEY_DTMF_ENABLED.c_str(), m_dtmfEnabled ? 1 : 0); file.AddLine(buffer); buffer.Printf(wxT("%s=%d"), KEY_DTMF_ENABLED.c_str(), m_dtmfEnabled ? 1 : 0); file.AddLine(buffer);
buffer.Printf(wxT("%s=%d"), KEY_MOBILE_GPS_ENABLED.c_str(), m_mobileGPSEnabled ? 1 : 0); file.AddLine(buffer); buffer.Printf(wxT("%s=%d"), KEY_GPSD_ENABLED.c_str(), m_gpsdEnabled ? 1 : 0); file.AddLine(buffer);
buffer.Printf(wxT("%s=%s"), KEY_MOBILE_GPS_ADDRESS.c_str(), m_mobileGPSAddress.c_str()); file.AddLine(buffer); buffer.Printf(wxT("%s=%s"), KEY_GPSD_ADDRESS.c_str(), m_gpsdAddress.c_str()); file.AddLine(buffer);
buffer.Printf(wxT("%s=%u"), KEY_MOBILE_GPS_PORT.c_str(), m_mobileGPSPort); file.AddLine(buffer); buffer.Printf(wxT("%s=%s"), KEY_GPSD_PORT.c_str(), m_gpsdPort.c_str()); file.AddLine(buffer);
buffer.Printf(wxT("%s=%d"), KEY_WINDOW_X.c_str(), m_x); file.AddLine(buffer); buffer.Printf(wxT("%s=%d"), KEY_WINDOW_X.c_str(), m_x); file.AddLine(buffer);
buffer.Printf(wxT("%s=%d"), KEY_WINDOW_Y.c_str(), m_y); file.AddLine(buffer); buffer.Printf(wxT("%s=%d"), KEY_WINDOW_Y.c_str(), m_y); file.AddLine(buffer);
@ -2677,3 +2676,4 @@ bool CIRCDDBGatewayConfig::write()
return true; return true;
} }

View file

@ -112,8 +112,8 @@ public:
void getMiscellaneous(TEXT_LANG& language, bool& infoEnabled, bool& echoEnabled, bool& logEnabled, bool& dratsEnabled, bool& dtmfEnabled) const; void getMiscellaneous(TEXT_LANG& language, bool& infoEnabled, bool& echoEnabled, bool& logEnabled, bool& dratsEnabled, bool& dtmfEnabled) const;
void setMiscellaneous(TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled); void setMiscellaneous(TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled);
void getMobileGPS(bool& enabled, wxString& address, unsigned int& port) const; void getGPSD(bool& enabled, wxString& address, wxString& port) const;
void setMobileGPS(bool enabled, const wxString& address, unsigned int port); void setGPSD(bool enabled, const wxString& address, const wxString& port);
void getPosition(int& x, int& y) const; void getPosition(int& x, int& y) const;
void setPosition(int x, int y); void setPosition(int x, int y);
@ -307,9 +307,9 @@ private:
bool m_logEnabled; bool m_logEnabled;
bool m_dratsEnabled; bool m_dratsEnabled;
bool m_dtmfEnabled; bool m_dtmfEnabled;
bool m_mobileGPSEnabled; bool m_gpsdEnabled;
wxString m_mobileGPSAddress; wxString m_gpsdAddress;
unsigned int m_mobileGPSPort; wxString m_gpsdPort;
int m_x; int m_x;
int m_y; int m_y;
}; };

View file

@ -24,9 +24,9 @@
const wxString VENDOR_NAME = wxT("G4KLX"); const wxString VENDOR_NAME = wxT("G4KLX");
#if defined(__WXDEBUG__) #if defined(__WXDEBUG__)
const wxString VERSION = wxT("20200601 - DEBUG"); const wxString VERSION = wxT("20200603 - DEBUG");
#else #else
const wxString VERSION = wxT("20190601"); const wxString VERSION = wxT("20190603");
#endif #endif
#endif #endif

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018 by Jonathan Naylor G4KLX * Copyright (C) 2018,2020 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
@ -16,7 +16,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include "MobileGPSSet.h" #include "GPSDSet.h"
const unsigned int CONTROL_WIDTH1 = 130U; const unsigned int CONTROL_WIDTH1 = 130U;
const unsigned int CONTROL_WIDTH2 = 80U; const unsigned int CONTROL_WIDTH2 = 80U;
@ -26,7 +26,7 @@ const unsigned int PORT_LENGTH = 5U;
const unsigned int BORDER_SIZE = 5U; const unsigned int BORDER_SIZE = 5U;
CMobileGPSSet::CMobileGPSSet(wxWindow* parent, int id, const wxString& title, bool enabled, const wxString& address, unsigned int port) : CGPSDSet::CGPSDSet(wxWindow* parent, int id, const wxString& title, bool enabled, const wxString& address, const wxString& port) :
wxPanel(parent, id), wxPanel(parent, id),
m_title(title), m_title(title),
m_enabled(NULL), m_enabled(NULL),
@ -54,10 +54,7 @@ m_port(NULL)
wxStaticText* portLabel = new wxStaticText(this, -1, _("Port")); wxStaticText* portLabel = new wxStaticText(this, -1, _("Port"));
sizer->Add(portLabel, 0, wxALL | wxALIGN_RIGHT, BORDER_SIZE); sizer->Add(portLabel, 0, wxALL | wxALIGN_RIGHT, BORDER_SIZE);
wxString buffer; m_port = new CPortTextCtrl(this, -1, port, wxDefaultPosition, wxSize(CONTROL_WIDTH2, -1));
buffer.Printf(wxT("%u"), port);
m_port = new CPortTextCtrl(this, -1, buffer, wxDefaultPosition, wxSize(CONTROL_WIDTH2, -1));
m_port->SetMaxLength(PORT_LENGTH); m_port->SetMaxLength(PORT_LENGTH);
sizer->Add(m_port, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE); sizer->Add(m_port, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE);
@ -67,11 +64,11 @@ m_port(NULL)
} }
CMobileGPSSet::~CMobileGPSSet() CGPSDSet::~CGPSDSet()
{ {
} }
bool CMobileGPSSet::Validate() bool CGPSDSet::Validate()
{ {
if (m_enabled->GetCurrentSelection() == wxNOT_FOUND) if (m_enabled->GetCurrentSelection() == wxNOT_FOUND)
return false; return false;
@ -84,9 +81,10 @@ bool CMobileGPSSet::Validate()
return false; return false;
} }
unsigned int port = getPort(); unsigned long port;
getPort().ToULong(&port);
if (port == 0U || port > 65535U) { if (port == 0UL || port > 65535UL) {
wxMessageDialog dialog(this, _("The Mobile GPS Port is not valid"), m_title + _(" Error"), wxICON_ERROR); wxMessageDialog dialog(this, _("The Mobile GPS Port is not valid"), m_title + _(" Error"), wxICON_ERROR);
dialog.ShowModal(); dialog.ShowModal();
return false; return false;
@ -95,7 +93,7 @@ bool CMobileGPSSet::Validate()
return true; return true;
} }
bool CMobileGPSSet::getEnabled() const bool CGPSDSet::getEnabled() const
{ {
int c = m_enabled->GetCurrentSelection(); int c = m_enabled->GetCurrentSelection();
if (c == wxNOT_FOUND) if (c == wxNOT_FOUND)
@ -104,15 +102,13 @@ bool CMobileGPSSet::getEnabled() const
return c == 1; return c == 1;
} }
wxString CMobileGPSSet::getAddress() const wxString CGPSDSet::getAddress() const
{ {
return m_address->GetValue(); return m_address->GetValue();
} }
unsigned int CMobileGPSSet::getPort() const wxString CGPSDSet::getPort() const
{ {
unsigned long n; return m_port->GetValue();
m_port->GetValue().ToULong(&n);
return n;
} }

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018 by Jonathan Naylor G4KLX * Copyright (C) 2018,2020 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
@ -16,8 +16,8 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifndef MobileGPSSet_H #ifndef GPSDSet_H
#define MobileGPSSet_H #define GPSDSet_H
#include "AddressTextCtrl.h" #include "AddressTextCtrl.h"
#include "PortTextCtrl.h" #include "PortTextCtrl.h"
@ -25,16 +25,16 @@
#include <wx/wx.h> #include <wx/wx.h>
class CMobileGPSSet: public wxPanel { class CGPSDSet: public wxPanel {
public: public:
CMobileGPSSet(wxWindow* parent, int id, const wxString& title, bool enabled, const wxString& address, unsigned int port); CGPSDSet(wxWindow* parent, int id, const wxString& title, bool enabled, const wxString& address, const wxString& port);
virtual ~CMobileGPSSet(); virtual ~CGPSDSet();
virtual bool Validate(); virtual bool Validate();
virtual bool getEnabled() const; virtual bool getEnabled() const;
virtual wxString getAddress() const; virtual wxString getAddress() const;
virtual unsigned int getPort() const; virtual wxString getPort() const;
private: private:
wxString m_title; wxString m_title;

View file

@ -1,4 +1,4 @@
OBJECTS = AddressTextCtrl.o CallsignTextCtrl.o DCSSet.o DescriptionTextCtrl.o DExtraSet.o DPlusSet.o DPRSSet.o MobileGPSSet.o PortTextCtrl.o RemoteSet.o \ OBJECTS = AddressTextCtrl.o CallsignTextCtrl.o DCSSet.o DescriptionTextCtrl.o DExtraSet.o DPlusSet.o DPRSSet.o GPSDSet.o PortTextCtrl.o RemoteSet.o \
RepeaterDataSet.o RepeaterInfoSet.o RestrictedTextCtrl.o StarNetSet.o XLXSet.o RepeaterDataSet.o RepeaterInfoSet.o RestrictedTextCtrl.o StarNetSet.o XLXSet.o
.PHONY: all .PHONY: all

View file

@ -23,7 +23,7 @@ ifeq ($(BUILD), debug)
else ifeq ($(BUILD), release) else ifeq ($(BUILD), release)
export CFLAGS := $(CFLAGS) $(RELEASEFLAGS) export CFLAGS := $(CFLAGS) $(RELEASEFLAGS)
endif endif
export LIBS := $(shell wx-config --libs base,net) export LIBS := $(shell wx-config --libs base,net) -lgps
export LDFLAGS := export LDFLAGS :=
.PHONY: all .PHONY: all

View file

@ -15,8 +15,8 @@ endif
export CXX := $(shell wx-config --cxx) export CXX := $(shell wx-config --cxx)
export CFLAGS := -O2 -Wall $(shell wx-config --cxxflags) -DLOG_DIR='$(LOGDIR)' -DCONF_DIR='$(CONFDIR)' -DDATA_DIR='$(DATADIR)' export CFLAGS := -O2 -Wall $(shell wx-config --cxxflags) -DLOG_DIR='$(LOGDIR)' -DCONF_DIR='$(CONFDIR)' -DDATA_DIR='$(DATADIR)'
export GUILIBS := $(shell wx-config --libs adv,core,base) export GUILIBS := $(shell wx-config --libs adv,core,base) -lgps
export LIBS := $(shell wx-config --libs base,net) export LIBS := $(shell wx-config --libs base,net) -lgps
export LDFLAGS := export LDFLAGS :=
.PHONY: all .PHONY: all

View file

@ -290,11 +290,10 @@ void CIRCDDBGatewayApp::createThread()
m_config->getMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled); m_config->getMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled);
wxLogInfo(wxT("Language: %d, info enabled: %d, echo enabled: %d, log enabled : %d, D-RATS enabled: %d, DTMF control enabled: %d"), int(language), int(infoEnabled), int(echoEnabled), int(logEnabled), int(dratsEnabled), int(dtmfEnabled)); wxLogInfo(wxT("Language: %d, info enabled: %d, echo enabled: %d, log enabled : %d, D-RATS enabled: %d, DTMF control enabled: %d"), int(language), int(infoEnabled), int(echoEnabled), int(logEnabled), int(dratsEnabled), int(dtmfEnabled));
bool mobileGPSEnabled; bool gpsdEnabled;
wxString mobileGPSAddress; wxString gpsdAddress, gpsdPort;
unsigned int mobileGPSPort; m_config->getGPSD(gpsdEnabled, gpsdAddress, gpsdPort);
m_config->getMobileGPS(mobileGPSEnabled, mobileGPSAddress, mobileGPSPort); wxLogInfo(wxT("GPSD: %d, address: %s, port: %s"), int(gpsdEnabled), gpsdAddress.c_str(), gpsdPort.c_str());
wxLogInfo(wxT("Mobile GPS: %d, address: %s, port: %u"), int(mobileGPSEnabled), mobileGPSAddress.c_str(), mobileGPSPort);
CIcomRepeaterProtocolHandler* icomRepeaterHandler = NULL; CIcomRepeaterProtocolHandler* icomRepeaterHandler = NULL;
CHBRepeaterProtocolHandler* hbRepeaterHandler = NULL; CHBRepeaterProtocolHandler* hbRepeaterHandler = NULL;
@ -372,8 +371,8 @@ void CIRCDDBGatewayApp::createThread()
thread->addRepeater(callsign1, repeaterBand1, repeaterAddress1, repeaterPort1, repeaterType1, reflector1, atStartup1, reconnect1, dratsEnabled, frequency1, offset1, range1, latitude1, longitude1, agl1, description11, description12, url1, icomRepeaterHandler, band11, band12, band13); thread->addRepeater(callsign1, repeaterBand1, repeaterAddress1, repeaterPort1, repeaterType1, reflector1, atStartup1, reconnect1, dratsEnabled, frequency1, offset1, range1, latitude1, longitude1, agl1, description11, description12, url1, icomRepeaterHandler, band11, band12, band13);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign1, repeaterBand1, frequency1, offset1, range1, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign1, repeaterBand1, frequency1, offset1, range1, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign1, repeaterBand1, frequency1, offset1, range1, latitude1, longitude1, agl1); aprs->setPortFixed(callsign1, repeaterBand1, frequency1, offset1, range1, latitude1, longitude1, agl1);
} }
@ -383,8 +382,8 @@ void CIRCDDBGatewayApp::createThread()
thread->addRepeater(callsign1, repeaterBand1, repeaterAddress1, repeaterPort1, repeaterType1, reflector1, atStartup1, reconnect1, dratsEnabled, frequency1, offset1, range1, latitude1, longitude1, agl1, description11, description12, url1, hbRepeaterHandler); thread->addRepeater(callsign1, repeaterBand1, repeaterAddress1, repeaterPort1, repeaterType1, reflector1, atStartup1, reconnect1, dratsEnabled, frequency1, offset1, range1, latitude1, longitude1, agl1, description11, description12, url1, hbRepeaterHandler);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign1, repeaterBand1, frequency1, offset1, range1, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign1, repeaterBand1, frequency1, offset1, range1, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign1, repeaterBand1, frequency1, offset1, range1, latitude1, longitude1, agl1); aprs->setPortFixed(callsign1, repeaterBand1, frequency1, offset1, range1, latitude1, longitude1, agl1);
} }
@ -468,8 +467,8 @@ void CIRCDDBGatewayApp::createThread()
thread->addRepeater(callsign2, repeaterBand2, repeaterAddress2, repeaterPort2, repeaterType2, reflector2, atStartup2, reconnect2, dratsEnabled, frequency2, offset2, range2, latitude2, longitude2, agl2, description21, description22, url2, icomRepeaterHandler, band21, band22, band23); thread->addRepeater(callsign2, repeaterBand2, repeaterAddress2, repeaterPort2, repeaterType2, reflector2, atStartup2, reconnect2, dratsEnabled, frequency2, offset2, range2, latitude2, longitude2, agl2, description21, description22, url2, icomRepeaterHandler, band21, band22, band23);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign2, repeaterBand2, frequency2, offset2, range2, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign2, repeaterBand2, frequency2, offset2, range2, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign2, repeaterBand2, frequency2, offset2, range2, latitude2, longitude2, agl2); aprs->setPortFixed(callsign2, repeaterBand2, frequency2, offset2, range2, latitude2, longitude2, agl2);
} }
@ -479,8 +478,8 @@ void CIRCDDBGatewayApp::createThread()
thread->addRepeater(callsign2, repeaterBand2, repeaterAddress2, repeaterPort2, repeaterType2, reflector2, atStartup2, reconnect2, dratsEnabled, frequency2, offset2, range2, latitude2, longitude2, agl2, description21, description22, url2, hbRepeaterHandler); thread->addRepeater(callsign2, repeaterBand2, repeaterAddress2, repeaterPort2, repeaterType2, reflector2, atStartup2, reconnect2, dratsEnabled, frequency2, offset2, range2, latitude2, longitude2, agl2, description21, description22, url2, hbRepeaterHandler);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign2, repeaterBand2, frequency2, offset2, range2, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign2, repeaterBand2, frequency2, offset2, range2, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign2, repeaterBand2, frequency2, offset2, range2, latitude2, longitude2, agl2); aprs->setPortFixed(callsign2, repeaterBand2, frequency2, offset2, range2, latitude2, longitude2, agl2);
} }
@ -568,8 +567,8 @@ void CIRCDDBGatewayApp::createThread()
thread->addRepeater(callsign3, repeaterBand3, repeaterAddress3, repeaterPort3, repeaterType3, reflector3, atStartup3, reconnect3, dratsEnabled, frequency3, offset3, range3, latitude3, longitude3, agl3, description31, description32, url3, icomRepeaterHandler, band31, band32, band33); thread->addRepeater(callsign3, repeaterBand3, repeaterAddress3, repeaterPort3, repeaterType3, reflector3, atStartup3, reconnect3, dratsEnabled, frequency3, offset3, range3, latitude3, longitude3, agl3, description31, description32, url3, icomRepeaterHandler, band31, band32, band33);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign3, repeaterBand3, frequency3, offset3, range3, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign3, repeaterBand3, frequency3, offset3, range3, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign3, repeaterBand3, frequency3, offset3, range3, latitude3, longitude3, agl3); aprs->setPortFixed(callsign3, repeaterBand3, frequency3, offset3, range3, latitude3, longitude3, agl3);
} }
@ -579,8 +578,8 @@ void CIRCDDBGatewayApp::createThread()
thread->addRepeater(callsign3, repeaterBand3, repeaterAddress3, repeaterPort3, repeaterType3, reflector3, atStartup3, reconnect3, dratsEnabled, frequency3, offset3, range3, latitude3, longitude3, agl3, description31, description32, url3, hbRepeaterHandler); thread->addRepeater(callsign3, repeaterBand3, repeaterAddress3, repeaterPort3, repeaterType3, reflector3, atStartup3, reconnect3, dratsEnabled, frequency3, offset3, range3, latitude3, longitude3, agl3, description31, description32, url3, hbRepeaterHandler);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign3, repeaterBand3, frequency3, offset3, range3, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign3, repeaterBand3, frequency3, offset3, range3, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign3, repeaterBand3, frequency3, offset3, range3, latitude3, longitude3, agl3); aprs->setPortFixed(callsign3, repeaterBand3, frequency3, offset3, range3, latitude3, longitude3, agl3);
} }
@ -672,8 +671,8 @@ void CIRCDDBGatewayApp::createThread()
thread->addRepeater(callsign4, repeaterBand4, repeaterAddress4, repeaterPort4, repeaterType4, reflector4, atStartup4, reconnect4, dratsEnabled, frequency4, offset4, range4, latitude4, longitude4, agl4, description41, description42, url4, icomRepeaterHandler, band41, band42, band43); thread->addRepeater(callsign4, repeaterBand4, repeaterAddress4, repeaterPort4, repeaterType4, reflector4, atStartup4, reconnect4, dratsEnabled, frequency4, offset4, range4, latitude4, longitude4, agl4, description41, description42, url4, icomRepeaterHandler, band41, band42, band43);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign4, repeaterBand4, frequency4, offset4, range4, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign4, repeaterBand4, frequency4, offset4, range4, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign4, repeaterBand4, frequency4, offset4, range4, latitude4, longitude4, agl4); aprs->setPortFixed(callsign4, repeaterBand4, frequency4, offset4, range4, latitude4, longitude4, agl4);
} }
@ -683,8 +682,8 @@ void CIRCDDBGatewayApp::createThread()
thread->addRepeater(callsign4, repeaterBand4, repeaterAddress4, repeaterPort4, repeaterType4, reflector4, atStartup4, reconnect4, dratsEnabled, frequency4, offset4, range4, latitude4, longitude4, agl4, description41, description42, url4, hbRepeaterHandler); thread->addRepeater(callsign4, repeaterBand4, repeaterAddress4, repeaterPort4, repeaterType4, reflector4, atStartup4, reconnect4, dratsEnabled, frequency4, offset4, range4, latitude4, longitude4, agl4, description41, description42, url4, hbRepeaterHandler);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign4, repeaterBand4, frequency4, offset4, range4, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign4, repeaterBand4, frequency4, offset4, range4, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign4, repeaterBand4, frequency4, offset4, range4, latitude4, longitude4, agl4); aprs->setPortFixed(callsign4, repeaterBand4, frequency4, offset4, range4, latitude4, longitude4, agl4);
} }

View file

@ -297,11 +297,10 @@ bool CIRCDDBGatewayAppD::createThread()
config.getMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled); config.getMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled);
wxLogInfo(wxT("Language: %d, info enabled: %d, echo enabled: %d, log enabled : %d, D-RATS enabled: %d, DTMF control enabled: %d"), int(language), int(infoEnabled), int(echoEnabled), int(logEnabled), int(dratsEnabled), int(dtmfEnabled)); wxLogInfo(wxT("Language: %d, info enabled: %d, echo enabled: %d, log enabled : %d, D-RATS enabled: %d, DTMF control enabled: %d"), int(language), int(infoEnabled), int(echoEnabled), int(logEnabled), int(dratsEnabled), int(dtmfEnabled));
bool mobileGPSEnabled; bool gpsdEnabled;
wxString mobileGPSAddress; wxString gpsdAddress, gpsdPort;
unsigned int mobileGPSPort; config.getGPSD(gpsdEnabled, gpsdAddress, gpsdPort);
config.getMobileGPS(mobileGPSEnabled, mobileGPSAddress, mobileGPSPort); wxLogInfo(wxT("GPSD: %d, address: %s, port: %s"), int(gpsdEnabled), gpsdAddress.c_str(), gpsdPort.c_str());
wxLogInfo(wxT("Mobile GPS: %d, address: %s, port: %u"), int(mobileGPSEnabled), mobileGPSAddress.c_str(), mobileGPSPort);
CIcomRepeaterProtocolHandler* icomRepeaterHandler = NULL; CIcomRepeaterProtocolHandler* icomRepeaterHandler = NULL;
CHBRepeaterProtocolHandler* hbRepeaterHandler = NULL; CHBRepeaterProtocolHandler* hbRepeaterHandler = NULL;
@ -379,8 +378,8 @@ bool CIRCDDBGatewayAppD::createThread()
m_thread->addRepeater(callsign1, repeaterBand1, repeaterAddress1, repeaterPort1, repeaterType1, reflector1, atStartup1, reconnect1, dratsEnabled, frequency1, offset1, range1, latitude1, longitude1, agl1, description11, description12, url1, icomRepeaterHandler, band11, band12, band13); m_thread->addRepeater(callsign1, repeaterBand1, repeaterAddress1, repeaterPort1, repeaterType1, reflector1, atStartup1, reconnect1, dratsEnabled, frequency1, offset1, range1, latitude1, longitude1, agl1, description11, description12, url1, icomRepeaterHandler, band11, band12, band13);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign1, repeaterBand1, frequency1, offset1, range1, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign1, repeaterBand1, frequency1, offset1, range1, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign1, repeaterBand1, frequency1, offset1, range1, latitude1, longitude1, agl1); aprs->setPortFixed(callsign1, repeaterBand1, frequency1, offset1, range1, latitude1, longitude1, agl1);
} }
@ -390,8 +389,8 @@ bool CIRCDDBGatewayAppD::createThread()
m_thread->addRepeater(callsign1, repeaterBand1, repeaterAddress1, repeaterPort1, repeaterType1, reflector1, atStartup1, reconnect1, dratsEnabled, frequency1, offset1, range1, latitude1, longitude1, agl1, description11, description12, url1, hbRepeaterHandler); m_thread->addRepeater(callsign1, repeaterBand1, repeaterAddress1, repeaterPort1, repeaterType1, reflector1, atStartup1, reconnect1, dratsEnabled, frequency1, offset1, range1, latitude1, longitude1, agl1, description11, description12, url1, hbRepeaterHandler);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign1, repeaterBand1, frequency1, offset1, range1, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign1, repeaterBand1, frequency1, offset1, range1, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign1, repeaterBand1, frequency1, offset1, range1, latitude1, longitude1, agl1); aprs->setPortFixed(callsign1, repeaterBand1, frequency1, offset1, range1, latitude1, longitude1, agl1);
} }
@ -475,8 +474,8 @@ bool CIRCDDBGatewayAppD::createThread()
m_thread->addRepeater(callsign2, repeaterBand2, repeaterAddress2, repeaterPort2, repeaterType2, reflector2, atStartup2, reconnect2, dratsEnabled, frequency2, offset2, range2, latitude2, longitude2, agl2, description21, description22, url2, icomRepeaterHandler, band21, band22, band23); m_thread->addRepeater(callsign2, repeaterBand2, repeaterAddress2, repeaterPort2, repeaterType2, reflector2, atStartup2, reconnect2, dratsEnabled, frequency2, offset2, range2, latitude2, longitude2, agl2, description21, description22, url2, icomRepeaterHandler, band21, band22, band23);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign2, repeaterBand2, frequency2, offset2, range2, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign2, repeaterBand2, frequency2, offset2, range2, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign2, repeaterBand2, frequency2, offset2, range2, latitude2, longitude2, agl2); aprs->setPortFixed(callsign2, repeaterBand2, frequency2, offset2, range2, latitude2, longitude2, agl2);
} }
@ -486,8 +485,8 @@ bool CIRCDDBGatewayAppD::createThread()
m_thread->addRepeater(callsign2, repeaterBand2, repeaterAddress2, repeaterPort2, repeaterType2, reflector2, atStartup2, reconnect2, dratsEnabled, frequency2, offset2, range2, latitude2, longitude2, agl2, description21, description22, url2, hbRepeaterHandler); m_thread->addRepeater(callsign2, repeaterBand2, repeaterAddress2, repeaterPort2, repeaterType2, reflector2, atStartup2, reconnect2, dratsEnabled, frequency2, offset2, range2, latitude2, longitude2, agl2, description21, description22, url2, hbRepeaterHandler);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign2, repeaterBand2, frequency2, offset2, range2, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign2, repeaterBand2, frequency2, offset2, range2, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign2, repeaterBand2, frequency2, offset2, range2, latitude2, longitude2, agl1); aprs->setPortFixed(callsign2, repeaterBand2, frequency2, offset2, range2, latitude2, longitude2, agl1);
} }
@ -575,8 +574,8 @@ bool CIRCDDBGatewayAppD::createThread()
m_thread->addRepeater(callsign3, repeaterBand3, repeaterAddress3, repeaterPort3, repeaterType3, reflector3, atStartup3, reconnect3, dratsEnabled, frequency3, offset3, range3, latitude3, longitude3, agl3, description31, description32, url3, icomRepeaterHandler, band31, band32, band33); m_thread->addRepeater(callsign3, repeaterBand3, repeaterAddress3, repeaterPort3, repeaterType3, reflector3, atStartup3, reconnect3, dratsEnabled, frequency3, offset3, range3, latitude3, longitude3, agl3, description31, description32, url3, icomRepeaterHandler, band31, band32, band33);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign3, repeaterBand3, frequency3, offset3, range3, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign3, repeaterBand3, frequency3, offset3, range3, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign3, repeaterBand3, frequency3, offset3, range3, latitude3, longitude3, agl3); aprs->setPortFixed(callsign3, repeaterBand3, frequency3, offset3, range3, latitude3, longitude3, agl3);
} }
@ -586,8 +585,8 @@ bool CIRCDDBGatewayAppD::createThread()
m_thread->addRepeater(callsign3, repeaterBand3, repeaterAddress3, repeaterPort3, repeaterType3, reflector3, atStartup3, reconnect3, dratsEnabled, frequency3, offset3, range3, latitude3, longitude3, agl3, description31, description32, url3, hbRepeaterHandler); m_thread->addRepeater(callsign3, repeaterBand3, repeaterAddress3, repeaterPort3, repeaterType3, reflector3, atStartup3, reconnect3, dratsEnabled, frequency3, offset3, range3, latitude3, longitude3, agl3, description31, description32, url3, hbRepeaterHandler);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign3, repeaterBand3, frequency3, offset3, range3, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign3, repeaterBand3, frequency3, offset3, range3, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign3, repeaterBand3, frequency3, offset3, range3, latitude3, longitude3, agl3); aprs->setPortFixed(callsign3, repeaterBand3, frequency3, offset3, range3, latitude3, longitude3, agl3);
} }
@ -679,8 +678,8 @@ bool CIRCDDBGatewayAppD::createThread()
m_thread->addRepeater(callsign4, repeaterBand4, repeaterAddress4, repeaterPort4, repeaterType4, reflector4, atStartup4, reconnect4, dratsEnabled, frequency4, offset4, range4, latitude4, longitude4, agl4, description41, description42, url4, icomRepeaterHandler, band41, band42, band43); m_thread->addRepeater(callsign4, repeaterBand4, repeaterAddress4, repeaterPort4, repeaterType4, reflector4, atStartup4, reconnect4, dratsEnabled, frequency4, offset4, range4, latitude4, longitude4, agl4, description41, description42, url4, icomRepeaterHandler, band41, band42, band43);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign4, repeaterBand4, frequency4, offset4, range4, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign4, repeaterBand4, frequency4, offset4, range4, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign4, repeaterBand4, frequency4, offset4, range4, latitude4, longitude4, agl4); aprs->setPortFixed(callsign4, repeaterBand4, frequency4, offset4, range4, latitude4, longitude4, agl4);
} }
@ -690,8 +689,8 @@ bool CIRCDDBGatewayAppD::createThread()
m_thread->addRepeater(callsign4, repeaterBand4, repeaterAddress4, repeaterPort4, repeaterType4, reflector4, atStartup4, reconnect4, dratsEnabled, frequency4, offset4, range4, latitude4, longitude4, agl4, description41, description42, url4, hbRepeaterHandler); m_thread->addRepeater(callsign4, repeaterBand4, repeaterAddress4, repeaterPort4, repeaterType4, reflector4, atStartup4, reconnect4, dratsEnabled, frequency4, offset4, range4, latitude4, longitude4, agl4, description41, description42, url4, hbRepeaterHandler);
if (aprs != NULL) { if (aprs != NULL) {
if (mobileGPSEnabled) if (gpsdEnabled)
aprs->setPortMobile(callsign4, repeaterBand4, frequency4, offset4, range4, mobileGPSAddress, mobileGPSPort); aprs->setPortGPSD(callsign4, repeaterBand4, frequency4, offset4, range4, gpsdAddress, gpsdPort);
else else
aprs->setPortFixed(callsign4, repeaterBand4, frequency4, offset4, range4, latitude4, longitude4, agl4); aprs->setPortFixed(callsign4, repeaterBand4, frequency4, offset4, range4, latitude4, longitude4, agl4);
} }

View file

@ -65,7 +65,7 @@ m_starNet3(NULL),
m_starNet4(NULL), m_starNet4(NULL),
m_starNet5(NULL), m_starNet5(NULL),
m_remote(NULL), m_remote(NULL),
m_mobileGPS(NULL), m_gpsd(NULL),
m_miscellaneous(NULL) m_miscellaneous(NULL)
{ {
SetMenuBar(createMenuBar()); SetMenuBar(createMenuBar());
@ -314,13 +314,12 @@ m_miscellaneous(NULL)
m_remote = new CRemoteSet(noteBook, -1, APPLICATION_NAME, remoteEnabled, remotePassword, remotePort); m_remote = new CRemoteSet(noteBook, -1, APPLICATION_NAME, remoteEnabled, remotePassword, remotePort);
noteBook->AddPage(m_remote, wxT("Remote"), false); noteBook->AddPage(m_remote, wxT("Remote"), false);
bool mobileGPSEnabled; bool gpsdEnabled;
wxString mobileGPSAddress; wxString gpsdAddress, gpsdPort;
unsigned int mobileGPSPort; m_config->getGPSD(gpsdEnabled, gpsdAddress, gpsdPort);
m_config->getMobileGPS(mobileGPSEnabled, mobileGPSAddress, mobileGPSPort);
m_mobileGPS = new CMobileGPSSet(noteBook, -1, APPLICATION_NAME, mobileGPSEnabled, mobileGPSAddress, mobileGPSPort); m_gpsd = new CGPSDSet(noteBook, -1, APPLICATION_NAME, gpsdEnabled, gpsdAddress, gpsdPort);
noteBook->AddPage(m_mobileGPS, wxT("Mobile GPS"), false); noteBook->AddPage(m_gpsd, wxT("GPSD"), false);
TEXT_LANG language; TEXT_LANG language;
bool infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled; bool infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled;
@ -379,7 +378,7 @@ void CIRCDDBGatewayConfigFrame::onSave(wxCommandEvent&)
!m_repeaterInfo4->Validate() || !m_repeaterInfo4->Validate() ||
!m_ircDDB->Validate() || !m_ircDDB2->Validate() || !m_ircDDB3->Validate() || !m_ircDDB4->Validate() || !m_dprs->Validate() || !m_dplus->Validate() || !m_dcs->Validate() || !m_xlx->Validate() || !m_ircDDB->Validate() || !m_ircDDB2->Validate() || !m_ircDDB3->Validate() || !m_ircDDB4->Validate() || !m_dprs->Validate() || !m_dplus->Validate() || !m_dcs->Validate() || !m_xlx->Validate() ||
!m_starNet1->Validate() || !m_starNet2->Validate() || !m_starNet3->Validate() || !m_starNet4->Validate() || !m_starNet1->Validate() || !m_starNet2->Validate() || !m_starNet3->Validate() || !m_starNet4->Validate() ||
!m_starNet5->Validate() || !m_remote->Validate() || !m_mobileGPS->Validate() || !m_miscellaneous->Validate()) !m_starNet5->Validate() || !m_remote->Validate() || !m_gpsd->Validate() || !m_miscellaneous->Validate())
return; return;
GATEWAY_TYPE gatewayType = m_gateway->getType(); GATEWAY_TYPE gatewayType = m_gateway->getType();
@ -612,10 +611,10 @@ void CIRCDDBGatewayConfigFrame::onSave(wxCommandEvent&)
unsigned int remotePort = m_remote->getPort(); unsigned int remotePort = m_remote->getPort();
m_config->setRemote(remoteEnabled, remotePassword, remotePort); m_config->setRemote(remoteEnabled, remotePassword, remotePort);
bool mobileGPSEnabled = m_mobileGPS->getEnabled(); bool gpsdEnabled = m_gpsd->getEnabled();
wxString mobileGPSAddress = m_mobileGPS->getAddress(); wxString gpsdAddress = m_gpsd->getAddress();
unsigned int mobileGPSPort = m_mobileGPS->getPort(); wxString gpsdPort = m_gpsd->getPort();
m_config->setMobileGPS(mobileGPSEnabled, mobileGPSAddress, mobileGPSPort); m_config->setGPSD(gpsdEnabled, gpsdAddress, gpsdPort);
TEXT_LANG language = m_miscellaneous->getLanguage(); TEXT_LANG language = m_miscellaneous->getLanguage();
bool infoEnabled = m_miscellaneous->getInfoEnabled(); bool infoEnabled = m_miscellaneous->getInfoEnabled();

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2010-2014,2018 by Jonathan Naylor G4KLX * Copyright (C) 2010-2014,2018,2020 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
@ -25,12 +25,12 @@
#include "IRCDDBGatewayConfig.h" #include "IRCDDBGatewayConfig.h"
#include "RepeaterInfoSet.h" #include "RepeaterInfoSet.h"
#include "RepeaterDataSet.h" #include "RepeaterDataSet.h"
#include "MobileGPSSet.h"
#include "StarNetSet.h" #include "StarNetSet.h"
#include "RemoteSet.h" #include "RemoteSet.h"
#include "DExtraSet.h" #include "DExtraSet.h"
#include "DPlusSet.h" #include "DPlusSet.h"
#include "DPRSSet.h" #include "DPRSSet.h"
#include "GPSDSet.h"
#include "DCSSet.h" #include "DCSSet.h"
#include "XLXSet.h" #include "XLXSet.h"
#include "Defs.h" #include "Defs.h"
@ -73,7 +73,7 @@ private:
CStarNetSet* m_starNet4; CStarNetSet* m_starNet4;
CStarNetSet* m_starNet5; CStarNetSet* m_starNet5;
CRemoteSet* m_remote; CRemoteSet* m_remote;
CMobileGPSSet* m_mobileGPS; CGPSDSet* m_gpsd;
CIRCDDBGatewayConfigMiscellaneousSet* m_miscellaneous; CIRCDDBGatewayConfigMiscellaneousSet* m_miscellaneous;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()