Add support for Icom Gateway CQ linking

This commit is contained in:
Dan 2021-02-05 22:28:39 -05:00
parent bbc233fcc4
commit 1d6fbc4c0b
10 changed files with 94 additions and 19 deletions

View file

@ -200,6 +200,7 @@ const wxString KEY_ECHO_ENABLED = wxT("echoEnabled");
const wxString KEY_LOG_ENABLED = wxT("logEnabled");
const wxString KEY_DRATS_ENABLED = wxT("dratsEnabled");
const wxString KEY_DTMF_ENABLED = wxT("dtmfEnabled");
const wxString KEY_GW_CQ_LINK_ENABLED = wxT("gatewayCQLinkEnabled");
const wxString KEY_GPSD_ENABLED = wxT("gpsdEnabled");
const wxString KEY_GPSD_ADDRESS = wxT("gpsdAddress");
const wxString KEY_GPSD_PORT = wxT("gpsdPort");
@ -284,6 +285,7 @@ const bool DEFAULT_INFO_ENABLED = true;
const bool DEFAULT_ECHO_ENABLED = true;
const bool DEFAULT_DRATS_ENABLED = false;
const bool DEFAULT_DTMF_ENABLED = true;
const bool DEFAULT_GW_CQ_LINK_ENABLED = false;
const bool DEFAULT_GPSD_ENABLED = false;
const wxString DEFAULT_GPSD_ADDRESS = wxT("127.0.0.1");
const wxString DEFAULT_GPSD_PORT = wxT("2947");
@ -477,6 +479,7 @@ m_echoEnabled(DEFAULT_ECHO_ENABLED),
m_logEnabled(DEFAULT_LOG_ENABLED),
m_dratsEnabled(DEFAULT_DRATS_ENABLED),
m_dtmfEnabled(DEFAULT_DTMF_ENABLED),
m_gatewayCQLinkEnabled(DEFAULT_GW_CQ_LINK_ENABLED),
m_gpsdEnabled(DEFAULT_GPSD_ENABLED),
m_gpsdAddress(DEFAULT_GPSD_ADDRESS),
m_gpsdPort(DEFAULT_GPSD_PORT),
@ -893,6 +896,8 @@ m_y(DEFAULT_WINDOW_Y)
m_config->Read(m_name + KEY_DTMF_ENABLED, &m_dtmfEnabled, DEFAULT_DTMF_ENABLED);
m_config->Read(m_name + KEY_GW_CQ_LINK_ENABLED, &m_gatewayCQLinkEnabled, DEFAULT_GW_CQ_LINK_ENABLED);
m_config->Read(m_name + KEY_GPSD_ENABLED, &m_gpsdEnabled, DEFAULT_GPSD_ENABLED);
m_config->Read(m_name + KEY_GPSD_ADDRESS, &m_gpsdAddress, DEFAULT_GPSD_ADDRESS);
@ -1096,6 +1101,7 @@ m_echoEnabled(DEFAULT_ECHO_ENABLED),
m_logEnabled(DEFAULT_LOG_ENABLED),
m_dratsEnabled(DEFAULT_DRATS_ENABLED),
m_dtmfEnabled(DEFAULT_DTMF_ENABLED),
m_gatewayCQLinkEnabled(DEFAULT_GW_CQ_LINK_ENABLED),
m_gpsdEnabled(DEFAULT_GPSD_ENABLED),
m_gpsdAddress(DEFAULT_GPSD_ADDRESS),
m_gpsdPort(DEFAULT_GPSD_PORT),
@ -1574,6 +1580,9 @@ m_y(DEFAULT_WINDOW_Y)
} else if (key.IsSameAs(KEY_DTMF_ENABLED)) {
val.ToLong(&temp1);
m_dtmfEnabled = temp1 == 1L;
} else if (key.IsSameAs(KEY_GW_CQ_LINK_ENABLED)) {
val.ToLong(&temp1);
m_gatewayCQLinkEnabled = temp1 == 1L;
} else if (key.IsSameAs(KEY_GPSD_ENABLED)) {
val.ToLong(&temp1);
m_gpsdEnabled = temp1 == 1L;
@ -2178,7 +2187,7 @@ void CIRCDDBGatewayConfig::setRemote(bool enabled, const wxString& password, uns
m_remotePort = port;
}
void CIRCDDBGatewayConfig::getMiscellaneous(TEXT_LANG& language, bool& infoEnabled, bool& echoEnabled, bool& logEnabled, bool& dratsEnabled, bool& dtmfEnabled) const
void CIRCDDBGatewayConfig::getMiscellaneous(TEXT_LANG& language, bool& infoEnabled, bool& echoEnabled, bool& logEnabled, bool& dratsEnabled, bool& dtmfEnabled, bool& gatewayCQLinkEnabled) const
{
language = m_language;
infoEnabled = m_infoEnabled;
@ -2186,9 +2195,10 @@ void CIRCDDBGatewayConfig::getMiscellaneous(TEXT_LANG& language, bool& infoEnabl
logEnabled = m_logEnabled;
dratsEnabled = m_dratsEnabled;
dtmfEnabled = m_dtmfEnabled;
gatewayCQLinkEnabled = m_gatewayCQLinkEnabled;
}
void CIRCDDBGatewayConfig::setMiscellaneous(TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled)
void CIRCDDBGatewayConfig::setMiscellaneous(TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled, bool gatewayCQLinkEnabled)
{
m_language = language;
m_infoEnabled = infoEnabled;
@ -2196,6 +2206,7 @@ void CIRCDDBGatewayConfig::setMiscellaneous(TEXT_LANG language, bool infoEnabled
m_logEnabled = logEnabled;
m_dratsEnabled = dratsEnabled;
m_dtmfEnabled = dtmfEnabled;
m_gatewayCQLinkEnabled = gatewayCQLinkEnabled;
}
void CIRCDDBGatewayConfig::getGPSD(bool& enabled, wxString& address, wxString& port) const
@ -2450,6 +2461,7 @@ bool CIRCDDBGatewayConfig::write()
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_DTMF_ENABLED, m_dtmfEnabled);
m_config->Write(m_name + KEY_GW_CQ_LINK_ENABLED, m_gatewayCQLinkEnabled);
m_config->Write(m_name + KEY_GPSD_ENABLED, m_gpsdEnabled);
m_config->Write(m_name + KEY_GPSD_ADDRESS, m_gpsdAddress);
m_config->Write(m_name + KEY_GPSD_PORT, m_gpsdPort);
@ -2659,6 +2671,7 @@ 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_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_GW_CQ_LINK_ENABLED.c_str(), m_gatewayCQLinkEnabled ? 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_GPSD_ADDRESS.c_str(), m_gpsdAddress.c_str()); file.AddLine(buffer);
buffer.Printf(wxT("%s=%s"), KEY_GPSD_PORT.c_str(), m_gpsdPort.c_str()); file.AddLine(buffer);

View file

@ -109,8 +109,8 @@ public:
void getRemote(bool& enabled, wxString& password, unsigned int& port) const;
void setRemote(bool enabled, const wxString& password, unsigned int port);
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 getMiscellaneous(TEXT_LANG& language, bool& infoEnabled, bool& echoEnabled, bool& logEnabled, bool& dratsEnabled, bool& dtmfEnabled, bool& gatewayCQLinkEnabled) const;
void setMiscellaneous(TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled, bool gatewayCQLinkEnabled);
void getGPSD(bool& enabled, wxString& address, wxString& port) const;
void setGPSD(bool enabled, const wxString& address, const wxString& port);
@ -307,6 +307,7 @@ private:
bool m_logEnabled;
bool m_dratsEnabled;
bool m_dtmfEnabled;
bool m_gatewayCQLinkEnabled;
bool m_gpsdEnabled;
wxString m_gpsdAddress;
wxString m_gpsdPort;

View file

@ -52,6 +52,7 @@ bool CRepeaterHandler::m_dcsEnabled = true;
bool CRepeaterHandler::m_infoEnabled = true;
bool CRepeaterHandler::m_echoEnabled = true;
bool CRepeaterHandler::m_dtmfEnabled = true;
bool CRepeaterHandler::m_gatewayCQLinkEnabled = false;
CHeaderLogger* CRepeaterHandler::m_headerLogger = NULL;
@ -328,6 +329,11 @@ void CRepeaterHandler::setDTMFEnabled(bool enabled)
m_dtmfEnabled = enabled;
}
void CRepeaterHandler::setGatewayCQLinkEnabled(bool enabled)
{
m_gatewayCQLinkEnabled = enabled;
}
void CRepeaterHandler::setHeaderLogger(CHeaderLogger* logger)
{
m_headerLogger = logger;
@ -1946,6 +1952,12 @@ void CRepeaterHandler::g2CommandHandler(const wxString& callsign, const wxString
return;
}
if (m_gatewayCQLinkEnabled) {
wxLogMessage(wxT("%s is trying to G2 route, but GatewayCQ linking is enabled."), user.c_str());
m_g2Status = G2_NONE;
return;
}
// This a repeater route
// Convert "/1234567" to "123456 7"
wxString repeater = callsign.Mid(1, LONG_CALLSIGN_LENGTH - 2U);
@ -2057,6 +2069,12 @@ void CRepeaterHandler::reflectorCommandHandler(const wxString& callsign, const w
m_queryTimer.stop();
bool linkRepeater = false;
if (callsign.Left(1).IsSameAs(wxT("/")) && m_gatewayCQLinkEnabled) {
linkRepeater = true;
}
wxString letter = callsign.Right(1);
if (letter.IsSameAs(wxT("U"))) {
@ -2075,7 +2093,7 @@ void CRepeaterHandler::reflectorCommandHandler(const wxString& callsign, const w
writeNotLinked();
triggerInfo();
} else if (letter.IsSameAs(wxT("L"))) {
} else if (letter.IsSameAs(wxT("L")) || linkRepeater) {
wxString reflector;
// Handle the special case of " L"
@ -2085,10 +2103,22 @@ void CRepeaterHandler::reflectorCommandHandler(const wxString& callsign, const w
reflector = m_linkStartup;
} else {
// Extract the callsign "1234567L" -> "123456 7"
reflector = callsign.Left(LONG_CALLSIGN_LENGTH - 2U);
reflector.Append(wxT(" "));
reflector.Append(callsign.Mid(LONG_CALLSIGN_LENGTH - 2U, 1));
if (linkRepeater) {
// This a repeater route
// Convert "/1234567" to "123456 7"
reflector = callsign.Mid(1, LONG_CALLSIGN_LENGTH - 2U);
reflector.Append(wxT(" "));
reflector.Append(callsign.Mid(LONG_CALLSIGN_LENGTH - 1U, 1));
wxLogMessage(wxT("%s is trying to GatewayCQ link to %s"), user.c_str(), callsign.c_str());
}
else {
// Extract the callsign "1234567L" -> "123456 7"
reflector = callsign.Left(LONG_CALLSIGN_LENGTH - 2U);
reflector.Append(wxT(" "));
reflector.Append(callsign.Mid(LONG_CALLSIGN_LENGTH - 2U, 1));
}
}
// Ensure duplicate link requests aren't acted on

View file

@ -76,6 +76,7 @@ public:
static void setInfoEnabled(bool enabled);
static void setEchoEnabled(bool enabled);
static void setDTMFEnabled(bool enabled);
static void setGatewayCQLinkEnabled(bool enabled);
static void setWhiteList(CCallsignList* list);
static void setBlackList(CCallsignList* list);
static void setRestrictList(CCallsignList* list);
@ -161,6 +162,7 @@ private:
static bool m_infoEnabled;
static bool m_echoEnabled;
static bool m_dtmfEnabled;
static bool m_gatewayCQLinkEnabled;
static CHeaderLogger* m_headerLogger;

View file

@ -286,9 +286,9 @@ void CIRCDDBGatewayApp::createThread()
}
TEXT_LANG language;
bool 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));
bool infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled, gatewayCQLinkEnabled;
m_config->getMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled, gatewayCQLinkEnabled);
wxLogInfo(wxT("Language: %d, info enabled: %d, echo enabled: %d, log enabled : %d, D-RATS enabled: %d, DTMF control enabled: %d, Gateway CQ Link enabled: %d"), int(language), int(infoEnabled), int(echoEnabled), int(logEnabled), int(dratsEnabled), int(dtmfEnabled), int(gatewayCQLinkEnabled));
bool gpsdEnabled;
wxString gpsdAddress, gpsdPort;
@ -964,7 +964,7 @@ void CIRCDDBGatewayApp::createThread()
thread->setInfoEnabled(infoEnabled);
thread->setEchoEnabled(echoEnabled);
thread->setDTMFEnabled(dtmfEnabled);
thread->setLog(logEnabled);
thread->setGatewayCQLinkEnabled(gatewayCQLinkEnabled);
thread->setLocation(latitude, longitude);
// Convert the worker class into a thread

View file

@ -92,6 +92,7 @@ m_ccsHost(),
m_infoEnabled(true),
m_echoEnabled(true),
m_dtmfEnabled(true),
m_gatewayCQLinkEnabled(false),
m_logEnabled(false),
m_ddModeEnabled(false),
m_lastStatus(IS_DISABLED),
@ -287,6 +288,7 @@ void CIRCDDBGatewayThread::run()
CRepeaterHandler::setInfoEnabled(m_infoEnabled);
CRepeaterHandler::setEchoEnabled(m_echoEnabled);
CRepeaterHandler::setDTMFEnabled(m_dtmfEnabled);
CRepeaterHandler::setGatewayCQLinkEnabled(m_gatewayCQLinkEnabled);
if (m_whiteList != NULL) {
CDExtraHandler::setWhiteList(m_whiteList);
CDPlusHandler::setWhiteList(m_whiteList);
@ -639,6 +641,11 @@ void CIRCDDBGatewayThread::setDTMFEnabled(bool enabled)
m_dtmfEnabled = enabled;
}
void CIRCDDBGatewayThread::setGatewayCQLinkEnabled(bool enabled)
{
m_gatewayCQLinkEnabled = enabled;
}
void CIRCDDBGatewayThread::setDDModeEnabled(bool enabled)
{
m_ddModeEnabled = enabled;

View file

@ -68,6 +68,7 @@ public:
virtual void setInfoEnabled(bool enabled);
virtual void setEchoEnabled(bool enabled);
virtual void setDTMFEnabled(bool enabled);
virtual void setGatewayCQLinkEnabled(bool enabled);
virtual void setDDModeEnabled(bool enabled);
virtual void setRemote(bool enabled, const wxString& password, unsigned int port);
virtual void setLocation(double latitude, double longitude);
@ -115,6 +116,7 @@ private:
bool m_infoEnabled;
bool m_echoEnabled;
bool m_dtmfEnabled;
bool m_gatewayCQLinkEnabled;
bool m_logEnabled;
bool m_ddModeEnabled;
IRCDDB_STATUS m_lastStatus;

View file

@ -322,10 +322,10 @@ m_miscellaneous(NULL)
noteBook->AddPage(m_gpsd, wxT("GPSD"), false);
TEXT_LANG language;
bool infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled;
m_config->getMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled);
bool infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled, gatewayCQLinkEnabled;
m_config->getMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled, gatewayCQLinkEnabled);
m_miscellaneous = new CIRCDDBGatewayConfigMiscellaneousSet(noteBook, -1, APPLICATION_NAME, language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled);
m_miscellaneous = new CIRCDDBGatewayConfigMiscellaneousSet(noteBook, -1, APPLICATION_NAME, language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled, gatewayCQLinkEnabled);
noteBook->AddPage(m_miscellaneous, wxT("Misc"), false);
sizer->Add(noteBook, 0, wxEXPAND | wxALL, BORDER_SIZE);
@ -622,7 +622,8 @@ void CIRCDDBGatewayConfigFrame::onSave(wxCommandEvent&)
bool logEnabled = m_miscellaneous->getLogEnabled();
bool dratsEnabled = m_miscellaneous->getDRATSEnabled();
bool dtmfEnabled = m_miscellaneous->getDTMFEnabled();
m_config->setMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled);
bool gatewayCQLinkEnabled = m_miscellaneous->getGatewayCQLinkEnabled();
m_config->setMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled, gatewayCQLinkEnabled);
bool ret = m_config->write();
if (!ret) {

View file

@ -23,7 +23,7 @@ const unsigned int CONTROL_WIDTH = 130U;
const unsigned int BORDER_SIZE = 5U;
CIRCDDBGatewayConfigMiscellaneousSet::CIRCDDBGatewayConfigMiscellaneousSet(wxWindow* parent, int id, const wxString& title, TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled) :
CIRCDDBGatewayConfigMiscellaneousSet::CIRCDDBGatewayConfigMiscellaneousSet(wxWindow* parent, int id, const wxString& title, TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled, bool gatewayCQLinkEnabled) :
wxPanel(parent, id),
m_title(title),
m_language(NULL),
@ -31,6 +31,7 @@ m_infoEnabled(NULL),
m_echoEnabled(NULL),
m_logEnabled(NULL),
m_dratsEnabled(NULL),
m_gatewayCQLinkEnabled(NULL),
m_dtmfEnabled(NULL)
{
wxFlexGridSizer* sizer = new wxFlexGridSizer(2);
@ -100,6 +101,12 @@ m_dtmfEnabled(NULL)
sizer->Add(m_dtmfEnabled, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE);
m_dtmfEnabled->SetSelection(dtmfEnabled ? 1 : 0);
m_gatewayCQLinkEnabled = new wxChoice(this, -1, wxDefaultPosition, wxSize(CONTROL_WIDTH, -1));
m_gatewayCQLinkEnabled->Append(_("Disabled"));
m_gatewayCQLinkEnabled->Append(_("Enabled"));
sizer->Add(m_gatewayCQLinkEnabled, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE);
m_gatewayCQLinkEnabled->SetSelection(gatewayCQLinkEnabled ? 1 : 0);
SetAutoLayout(true);
SetSizer(sizer);
@ -183,3 +190,12 @@ bool CIRCDDBGatewayConfigMiscellaneousSet::getDTMFEnabled() const
return c == 1;
}
bool CIRCDDBGatewayConfigMiscellaneousSet::getGatewayCQLinkEnabled() const
{
int c = m_gatewayCQLinkEnabled->GetCurrentSelection();
if (c == wxNOT_FOUND)
return false;
return c == 1;
}

View file

@ -25,7 +25,7 @@
class CIRCDDBGatewayConfigMiscellaneousSet : public wxPanel {
public:
CIRCDDBGatewayConfigMiscellaneousSet(wxWindow* parent, int id, const wxString& title, TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled);
CIRCDDBGatewayConfigMiscellaneousSet(wxWindow* parent, int id, const wxString& title, TEXT_LANG language, bool infoEnabled, bool echoEnabled, bool logEnabled, bool dratsEnabled, bool dtmfEnabled, bool gatewayCQLinkEnabled);
virtual ~CIRCDDBGatewayConfigMiscellaneousSet();
virtual bool Validate();
@ -42,6 +42,8 @@ public:
virtual bool getDTMFEnabled() const;
virtual bool getGatewayCQLinkEnabled() const;
private:
wxString m_title;
wxChoice* m_language;
@ -50,6 +52,7 @@ private:
wxChoice* m_logEnabled;
wxChoice* m_dratsEnabled;
wxChoice* m_dtmfEnabled;
wxChoice* m_gatewayCQLinkEnabled;
};
#endif