mirror of
https://github.com/g4klx/DMRGateway
synced 2025-12-23 06:45:39 +08:00
Implement remote command support.
- Defaut port is 7643 (totally arbitrary)
- Using RemoteCommandDMRG, each network can be enabled or disabled (net1 .. net5, xlx):
~ $ RemoteCommandDMRG 7643 disable net2
M: 2021-03-20 11:48:40.494 Command sent: "disable net2" to port: 7643
M: 2021-03-20 11:48:40.545 OK
- Using RemoteCommandDMRG, a connection status can be retrieved:
~ $ RemoteCommandDMRG 7643 status
M: 2021-03-20 11:49:13.513 Command sent: "status" to port: 7643
M: 2021-03-20 11:49:13.563 xlx:conn net1:conn net2:n/a net3:n/a net4:conn net5:n/a
A returned string is expected from the socket connection, this is why I did not reuse the MMDVMHost's RemoteCommand (unless MMDVMHost RemoteControl is modified as well).
The exit value can be used in scripting (also 1 if we didn't get any reply).
This commit is contained in:
260
DMRGateway.cpp
260
DMRGateway.cpp
@@ -27,7 +27,6 @@
|
||||
#include "PassAllPC.h"
|
||||
#include "PassAllTG.h"
|
||||
#include "DMRFullLC.h"
|
||||
#include "XLXVoice.h"
|
||||
#include "Version.h"
|
||||
#include "Thread.h"
|
||||
#include "DMRLC.h"
|
||||
@@ -159,6 +158,7 @@ m_xlxUserControl(true),
|
||||
m_xlxModule(),
|
||||
m_rptRewrite(NULL),
|
||||
m_xlxRewrite(NULL),
|
||||
m_xlxVoice(NULL),
|
||||
m_dmr1NetRewrites(),
|
||||
m_dmr1RFRewrites(),
|
||||
m_dmr1SrcRewrites(),
|
||||
@@ -185,10 +185,17 @@ m_socket(NULL),
|
||||
m_writer(NULL),
|
||||
m_callsign(),
|
||||
m_txFrequency(0U),
|
||||
m_rxFrequency(0U)
|
||||
m_rxFrequency(0U),
|
||||
#if defined(USE_GPSD)
|
||||
,m_gpsd(NULL)
|
||||
m_gpsd(NULL),
|
||||
#endif
|
||||
m_network1Enabled(false),
|
||||
m_network2Enabled(false),
|
||||
m_network3Enabled(false),
|
||||
m_network4Enabled(false),
|
||||
m_network5Enabled(false),
|
||||
m_networkXlxEnabled(false),
|
||||
m_remoteControl(NULL)
|
||||
{
|
||||
CUDPSocket::startup();
|
||||
|
||||
@@ -354,6 +361,13 @@ int CDMRGateway::run()
|
||||
}
|
||||
#endif
|
||||
|
||||
m_network1Enabled = m_conf.getDMRNetwork1Enabled();
|
||||
m_network2Enabled = m_conf.getDMRNetwork2Enabled();
|
||||
m_network3Enabled = m_conf.getDMRNetwork3Enabled();
|
||||
m_network4Enabled = m_conf.getDMRNetwork4Enabled();
|
||||
m_network5Enabled = m_conf.getDMRNetwork5Enabled();
|
||||
m_networkXlxEnabled = m_conf.getXLXNetworkEnabled();
|
||||
|
||||
LogInfo(HEADER1);
|
||||
LogInfo(HEADER2);
|
||||
LogInfo(HEADER3);
|
||||
@@ -409,13 +423,12 @@ int CDMRGateway::run()
|
||||
bool ruleTrace = m_conf.getRuleTrace();
|
||||
LogInfo("Rule trace: %s", ruleTrace ? "yes" : "no");
|
||||
|
||||
if (m_conf.getXLXNetworkEnabled()) {
|
||||
if (m_networkXlxEnabled && m_conf.getXLXNetworkEnabled()) {
|
||||
ret = createXLXNetwork();
|
||||
if (!ret)
|
||||
return 1;
|
||||
}
|
||||
|
||||
CXLXVoice* xlxVoice = NULL;
|
||||
if (m_conf.getVoiceEnabled()) {
|
||||
std::string language = m_conf.getVoiceLanguage();
|
||||
std::string directory = m_conf.getVoiceDirectory();
|
||||
@@ -426,40 +439,59 @@ int CDMRGateway::run()
|
||||
LogInfo(" Directory: %s", directory.c_str());
|
||||
|
||||
if (m_xlxNetwork != NULL) {
|
||||
xlxVoice = new CXLXVoice(directory, language, m_repeater->getId(), m_xlxSlot, m_xlxTG);
|
||||
bool ret = xlxVoice->open();
|
||||
m_xlxVoice = new CXLXVoice(directory, language, m_repeater->getId(), m_xlxSlot, m_xlxTG);
|
||||
bool ret = m_xlxVoice->open();
|
||||
if (!ret) {
|
||||
delete xlxVoice;
|
||||
xlxVoice = NULL;
|
||||
delete m_xlxVoice;
|
||||
m_xlxVoice = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (m_conf.getDMRNetwork1Enabled()) {
|
||||
bool remoteControlEnabled = m_conf.getRemoteControlEnabled();
|
||||
if (remoteControlEnabled) {
|
||||
std::string address = m_conf.getRemoteControlAddress();
|
||||
unsigned int port = m_conf.getRemoteControlPort();
|
||||
|
||||
LogInfo("Remote Control Parameters");
|
||||
LogInfo(" Address: %s", address.c_str());
|
||||
LogInfo(" Port: %u", port);
|
||||
|
||||
m_remoteControl = new CRemoteControl(this, address, port);
|
||||
|
||||
ret = m_remoteControl->open();
|
||||
if (!ret) {
|
||||
LogInfo("Failed to open Remove Control Socket");
|
||||
delete m_remoteControl;
|
||||
m_remoteControl = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_network1Enabled && m_conf.getDMRNetwork1Enabled()) {
|
||||
ret = createDMRNetwork1();
|
||||
if (!ret)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m_conf.getDMRNetwork2Enabled()) {
|
||||
if (m_network2Enabled && m_conf.getDMRNetwork2Enabled()) {
|
||||
ret = createDMRNetwork2();
|
||||
if (!ret)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m_conf.getDMRNetwork3Enabled()) {
|
||||
if (m_network3Enabled && m_conf.getDMRNetwork3Enabled()) {
|
||||
ret = createDMRNetwork3();
|
||||
if (!ret)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m_conf.getDMRNetwork4Enabled()) {
|
||||
if (m_network4Enabled && m_conf.getDMRNetwork4Enabled()) {
|
||||
ret = createDMRNetwork4();
|
||||
if (!ret)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m_conf.getDMRNetwork5Enabled()) {
|
||||
if (m_network5Enabled && m_conf.getDMRNetwork5Enabled()) {
|
||||
ret = createDMRNetwork5();
|
||||
if (!ret)
|
||||
return 1;
|
||||
@@ -510,25 +542,25 @@ int CDMRGateway::run()
|
||||
LogMessage("DMRGateway-%s is running", VERSION);
|
||||
|
||||
while (!m_killed) {
|
||||
if (m_xlxNetwork != NULL) {
|
||||
if (m_networkXlxEnabled && (m_xlxNetwork != NULL)) {
|
||||
bool connected = m_xlxNetwork->isConnected();
|
||||
if (connected && !m_xlxConnected) {
|
||||
if (m_xlxReflector >= 4001U && m_xlxReflector <= 4026U) {
|
||||
writeXLXLink(m_xlxId, m_xlxReflector, m_xlxNetwork);
|
||||
char c = ('A' + (m_xlxReflector % 100U)) - 1U;
|
||||
LogMessage("XLX, Linking to reflector XLX%03u %c", m_xlxNumber, c);
|
||||
if (xlxVoice != NULL)
|
||||
xlxVoice->linkedTo(m_xlxNumber, m_xlxReflector);
|
||||
if (m_xlxVoice != NULL)
|
||||
m_xlxVoice->linkedTo(m_xlxNumber, m_xlxReflector);
|
||||
} else if (m_xlxRoom >= 4001U && m_xlxRoom <= 4026U) {
|
||||
writeXLXLink(m_xlxId, m_xlxRoom, m_xlxNetwork);
|
||||
char c = ('A' + (m_xlxRoom % 100U)) - 1U;
|
||||
LogMessage("XLX, Linking to reflector XLX%03u %c", m_xlxNumber, c);
|
||||
if (xlxVoice != NULL)
|
||||
xlxVoice->linkedTo(m_xlxNumber, m_xlxRoom);
|
||||
if (m_xlxVoice != NULL)
|
||||
m_xlxVoice->linkedTo(m_xlxNumber, m_xlxRoom);
|
||||
m_xlxReflector = m_xlxRoom;
|
||||
} else {
|
||||
if (xlxVoice != NULL)
|
||||
xlxVoice->linkedTo(m_xlxNumber, 0U);
|
||||
if (m_xlxVoice != NULL)
|
||||
m_xlxVoice->linkedTo(m_xlxNumber, 0U);
|
||||
}
|
||||
|
||||
m_xlxConnected = true;
|
||||
@@ -540,8 +572,8 @@ int CDMRGateway::run()
|
||||
} else if (!connected && m_xlxConnected) {
|
||||
LogMessage("XLX, Unlinking from XLX%03u due to loss of connection", m_xlxNumber);
|
||||
|
||||
if (xlxVoice != NULL)
|
||||
xlxVoice->unlinked();
|
||||
if (m_xlxVoice != NULL)
|
||||
m_xlxVoice->unlinked();
|
||||
|
||||
m_xlxConnected = false;
|
||||
m_xlxRelink.stop();
|
||||
@@ -572,11 +604,11 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
m_xlxReflector = m_xlxRoom;
|
||||
if (xlxVoice != NULL) {
|
||||
if (m_xlxVoice != NULL) {
|
||||
if (m_xlxReflector < 4001U || m_xlxReflector > 4026U)
|
||||
xlxVoice->linkedTo(m_xlxNumber, 0U);
|
||||
m_xlxVoice->linkedTo(m_xlxNumber, 0U);
|
||||
else
|
||||
xlxVoice->linkedTo(m_xlxNumber, m_xlxReflector);
|
||||
m_xlxVoice->linkedTo(m_xlxNumber, m_xlxReflector);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -596,7 +628,9 @@ int CDMRGateway::run()
|
||||
m_xlxRelink.start();
|
||||
|
||||
m_xlxRewrite->process(data, false);
|
||||
m_xlxNetwork->write(data);
|
||||
if (m_networkXlxEnabled) {
|
||||
m_xlxNetwork->write(data);
|
||||
}
|
||||
m_status[slotNo] = DMRGWS_XLXREFLECTOR;
|
||||
timer[slotNo]->setTimeout(rfTimeout);
|
||||
timer[slotNo]->start();
|
||||
@@ -629,16 +663,16 @@ int CDMRGateway::run()
|
||||
timer[slotNo]->setTimeout(rfTimeout);
|
||||
timer[slotNo]->start();
|
||||
|
||||
if (xlxVoice != NULL) {
|
||||
if (m_xlxVoice != NULL) {
|
||||
unsigned char type = data.getDataType();
|
||||
if (type == DT_TERMINATOR_WITH_LC) {
|
||||
if (m_xlxConnected) {
|
||||
if (m_xlxReflector != 4000U)
|
||||
xlxVoice->linkedTo(m_xlxNumber, m_xlxReflector);
|
||||
m_xlxVoice->linkedTo(m_xlxNumber, m_xlxReflector);
|
||||
else
|
||||
xlxVoice->linkedTo(m_xlxNumber, 0U);
|
||||
m_xlxVoice->linkedTo(m_xlxNumber, 0U);
|
||||
} else {
|
||||
xlxVoice->unlinked();
|
||||
m_xlxVoice->unlinked();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -666,7 +700,7 @@ int CDMRGateway::run()
|
||||
|
||||
PROCESS_RESULT result = RESULT_UNMATCHED;
|
||||
|
||||
if (m_dmrNetwork1 != NULL) {
|
||||
if (m_network1Enabled && (m_dmrNetwork1 != NULL)) {
|
||||
// Rewrite the slot and/or TG or neither
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr1RFRewrites.begin(); it != m_dmr1RFRewrites.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
@@ -688,7 +722,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork2 != NULL) {
|
||||
if (m_network2Enabled && (m_dmrNetwork2 != NULL)) {
|
||||
// Rewrite the slot and/or TG or neither
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr2RFRewrites.begin(); it != m_dmr2RFRewrites.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
@@ -711,7 +745,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork3 != NULL) {
|
||||
if (m_network3Enabled && (m_dmrNetwork3 != NULL)) {
|
||||
// Rewrite the slot and/or TG or neither
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr3RFRewrites.begin(); it != m_dmr3RFRewrites.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
@@ -734,7 +768,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork4 != NULL) {
|
||||
if (m_network4Enabled && (m_dmrNetwork4 != NULL)) {
|
||||
// Rewrite the slot and/or TG or neither
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr4RFRewrites.begin(); it != m_dmr4RFRewrites.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
@@ -757,7 +791,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork5 != NULL) {
|
||||
if (m_network5Enabled && (m_dmrNetwork5 != NULL)) {
|
||||
// Rewrite the slot and/or TG or neither
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr5RFRewrites.begin(); it != m_dmr5RFRewrites.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
@@ -780,7 +814,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork1 != NULL) {
|
||||
if (m_network1Enabled && (m_dmrNetwork1 != NULL)) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr1Passalls.begin(); it != m_dmr1Passalls.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
if (res != RESULT_UNMATCHED) {
|
||||
@@ -802,7 +836,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork2 != NULL) {
|
||||
if (m_network2Enabled && (m_dmrNetwork2 != NULL)) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr2Passalls.begin(); it != m_dmr2Passalls.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
if (res != RESULT_UNMATCHED) {
|
||||
@@ -824,7 +858,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork3 != NULL) {
|
||||
if (m_network3Enabled && (m_dmrNetwork3 != NULL)) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr3Passalls.begin(); it != m_dmr3Passalls.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
if (res != RESULT_UNMATCHED) {
|
||||
@@ -846,7 +880,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork4 != NULL) {
|
||||
if (m_network4Enabled && (m_dmrNetwork4 != NULL)) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr4Passalls.begin(); it != m_dmr4Passalls.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
if (res != RESULT_UNMATCHED) {
|
||||
@@ -868,7 +902,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
|
||||
if (result == RESULT_UNMATCHED) {
|
||||
if (m_dmrNetwork5 != NULL) {
|
||||
if (m_network5Enabled && (m_dmrNetwork5 != NULL)) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr5Passalls.begin(); it != m_dmr5Passalls.end(); ++it) {
|
||||
PROCESS_RESULT res = (*it)->process(data, trace);
|
||||
if (res != RESULT_UNMATCHED) {
|
||||
@@ -894,7 +928,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
}
|
||||
|
||||
if (m_xlxNetwork != NULL) {
|
||||
if (m_networkXlxEnabled && (m_xlxNetwork != NULL)) {
|
||||
ret = m_xlxNetwork->read(data);
|
||||
if (ret) {
|
||||
if (m_status[m_xlxSlot] == DMRGWS_NONE || m_status[m_xlxSlot] == DMRGWS_XLXREFLECTOR) {
|
||||
@@ -914,7 +948,7 @@ int CDMRGateway::run()
|
||||
}
|
||||
}
|
||||
|
||||
if (m_dmrNetwork1 != NULL) {
|
||||
if (m_network1Enabled && (m_dmrNetwork1 != NULL)) {
|
||||
ret = m_dmrNetwork1->read(data);
|
||||
if (ret) {
|
||||
unsigned int slotNo = data.getSlotNo();
|
||||
@@ -964,7 +998,7 @@ int CDMRGateway::run()
|
||||
m_repeater->writeBeacon();
|
||||
}
|
||||
|
||||
if (m_dmrNetwork2 != NULL) {
|
||||
if (m_network2Enabled && (m_dmrNetwork2 != NULL)) {
|
||||
ret = m_dmrNetwork2->read(data);
|
||||
if (ret) {
|
||||
unsigned int slotNo = data.getSlotNo();
|
||||
@@ -1014,7 +1048,7 @@ int CDMRGateway::run()
|
||||
m_repeater->writeBeacon();
|
||||
}
|
||||
|
||||
if (m_dmrNetwork3 != NULL) {
|
||||
if (m_network3Enabled && (m_dmrNetwork3 != NULL)) {
|
||||
ret = m_dmrNetwork3->read(data);
|
||||
if (ret) {
|
||||
unsigned int slotNo = data.getSlotNo();
|
||||
@@ -1064,7 +1098,7 @@ int CDMRGateway::run()
|
||||
m_repeater->writeBeacon();
|
||||
}
|
||||
|
||||
if (m_dmrNetwork4 != NULL) {
|
||||
if (m_network4Enabled && (m_dmrNetwork4 != NULL)) {
|
||||
ret = m_dmrNetwork4->read(data);
|
||||
if (ret) {
|
||||
unsigned int slotNo = data.getSlotNo();
|
||||
@@ -1114,7 +1148,7 @@ int CDMRGateway::run()
|
||||
m_repeater->writeBeacon();
|
||||
}
|
||||
|
||||
if (m_dmrNetwork5 != NULL) {
|
||||
if (m_network5Enabled && (m_dmrNetwork5 != NULL)) {
|
||||
ret = m_dmrNetwork5->read(data);
|
||||
if (ret) {
|
||||
unsigned int slotNo = data.getSlotNo();
|
||||
@@ -1168,8 +1202,8 @@ int CDMRGateway::run()
|
||||
|
||||
processTalkerAlias();
|
||||
|
||||
if (xlxVoice != NULL) {
|
||||
ret = xlxVoice->read(data);
|
||||
if (m_networkXlxEnabled && (m_xlxVoice != NULL)) {
|
||||
ret = m_xlxVoice->read(data);
|
||||
if (ret) {
|
||||
m_repeater->write(data);
|
||||
m_status[m_xlxSlot] = DMRGWS_XLXREFLECTOR;
|
||||
@@ -1187,6 +1221,8 @@ int CDMRGateway::run()
|
||||
if (m_socket != NULL)
|
||||
processDynamicTGControl();
|
||||
|
||||
remoteControl();
|
||||
|
||||
unsigned int ms = stopWatch.elapsed();
|
||||
stopWatch.start();
|
||||
|
||||
@@ -1215,8 +1251,8 @@ int CDMRGateway::run()
|
||||
if (m_xlxReflectors != NULL)
|
||||
m_xlxReflectors->clock(ms);
|
||||
|
||||
if (xlxVoice != NULL)
|
||||
xlxVoice->clock(ms);
|
||||
if (m_xlxVoice != NULL)
|
||||
m_xlxVoice->clock(ms);
|
||||
|
||||
#if defined(USE_GPSD)
|
||||
if (m_gpsd != NULL)
|
||||
@@ -1241,11 +1277,16 @@ int CDMRGateway::run()
|
||||
CThread::sleep(10U);
|
||||
}
|
||||
|
||||
delete xlxVoice;
|
||||
delete m_xlxVoice;
|
||||
|
||||
m_repeater->close();
|
||||
delete m_repeater;
|
||||
|
||||
if (m_remoteControl != NULL) {
|
||||
m_remoteControl->close();
|
||||
delete m_remoteControl;
|
||||
}
|
||||
|
||||
#if defined(USE_GPSD)
|
||||
if (m_gpsd != NULL) {
|
||||
m_gpsd->close();
|
||||
@@ -1491,6 +1532,8 @@ bool CDMRGateway::createDMRNetwork1()
|
||||
m_dmr1NetRewrites.push_back(netPassAllPC);
|
||||
}
|
||||
|
||||
m_dmrNetwork1->enable(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1658,6 +1701,8 @@ bool CDMRGateway::createDMRNetwork2()
|
||||
m_dmr2NetRewrites.push_back(netPassAllPC);
|
||||
}
|
||||
|
||||
m_dmrNetwork2->enable(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1825,6 +1870,8 @@ bool CDMRGateway::createDMRNetwork3()
|
||||
m_dmr3NetRewrites.push_back(netPassAllPC);
|
||||
}
|
||||
|
||||
m_dmrNetwork3->enable(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1992,6 +2039,8 @@ bool CDMRGateway::createDMRNetwork4()
|
||||
m_dmr4NetRewrites.push_back(netPassAllPC);
|
||||
}
|
||||
|
||||
m_dmrNetwork4->enable(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2159,6 +2208,8 @@ bool CDMRGateway::createDMRNetwork5()
|
||||
m_dmr5NetRewrites.push_back(netPassAllPC);
|
||||
}
|
||||
|
||||
m_dmrNetwork5->enable(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2286,6 +2337,8 @@ bool CDMRGateway::linkXLX(unsigned int number)
|
||||
|
||||
LogMessage("XLX, Connecting to XLX%03u", m_xlxNumber);
|
||||
|
||||
m_xlxNetwork->enable(m_networkXlxEnabled);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2412,19 +2465,19 @@ void CDMRGateway::processRadioPosition()
|
||||
if (!ret)
|
||||
return;
|
||||
|
||||
if (m_dmrNetwork1 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK1 || m_status[2U] == DMRGWS_DMRNETWORK1))
|
||||
if (m_network1Enabled && (m_dmrNetwork1 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK1 || m_status[2U] == DMRGWS_DMRNETWORK1))
|
||||
m_dmrNetwork1->writeRadioPosition(buffer, length);
|
||||
|
||||
if (m_dmrNetwork2 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK2 || m_status[2U] == DMRGWS_DMRNETWORK2))
|
||||
if (m_network2Enabled && (m_dmrNetwork2 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK2 || m_status[2U] == DMRGWS_DMRNETWORK2))
|
||||
m_dmrNetwork2->writeRadioPosition(buffer, length);
|
||||
|
||||
if (m_dmrNetwork3 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK3 || m_status[2U] == DMRGWS_DMRNETWORK3))
|
||||
if (m_network3Enabled && (m_dmrNetwork3 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK3 || m_status[2U] == DMRGWS_DMRNETWORK3))
|
||||
m_dmrNetwork3->writeRadioPosition(buffer, length);
|
||||
|
||||
if (m_dmrNetwork4 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK4 || m_status[2U] == DMRGWS_DMRNETWORK4))
|
||||
if (m_network4Enabled && (m_dmrNetwork4 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK4 || m_status[2U] == DMRGWS_DMRNETWORK4))
|
||||
m_dmrNetwork4->writeRadioPosition(buffer, length);
|
||||
|
||||
if (m_dmrNetwork5 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK5 || m_status[2U] == DMRGWS_DMRNETWORK5))
|
||||
if (m_network5Enabled && (m_dmrNetwork5 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK5 || m_status[2U] == DMRGWS_DMRNETWORK5))
|
||||
m_dmrNetwork5->writeRadioPosition(buffer, length);
|
||||
}
|
||||
|
||||
@@ -2436,19 +2489,19 @@ void CDMRGateway::processTalkerAlias()
|
||||
if (!ret)
|
||||
return;
|
||||
|
||||
if (m_dmrNetwork1 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK1 || m_status[2U] == DMRGWS_DMRNETWORK1))
|
||||
if (m_network1Enabled && (m_dmrNetwork1 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK1 || m_status[2U] == DMRGWS_DMRNETWORK1))
|
||||
m_dmrNetwork1->writeTalkerAlias(buffer, length);
|
||||
|
||||
if (m_dmrNetwork2 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK2 || m_status[2U] == DMRGWS_DMRNETWORK2))
|
||||
if (m_network2Enabled && (m_dmrNetwork2 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK2 || m_status[2U] == DMRGWS_DMRNETWORK2))
|
||||
m_dmrNetwork2->writeTalkerAlias(buffer, length);
|
||||
|
||||
if (m_dmrNetwork3 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK3 || m_status[2U] == DMRGWS_DMRNETWORK3))
|
||||
if (m_network3Enabled && (m_dmrNetwork3 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK3 || m_status[2U] == DMRGWS_DMRNETWORK3))
|
||||
m_dmrNetwork3->writeTalkerAlias(buffer, length);
|
||||
|
||||
if (m_dmrNetwork4 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK4 || m_status[2U] == DMRGWS_DMRNETWORK4))
|
||||
if (m_network4Enabled && (m_dmrNetwork4 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK4 || m_status[2U] == DMRGWS_DMRNETWORK4))
|
||||
m_dmrNetwork4->writeTalkerAlias(buffer, length);
|
||||
|
||||
if (m_dmrNetwork5 != NULL && (m_status[1U] == DMRGWS_DMRNETWORK5 || m_status[2U] == DMRGWS_DMRNETWORK5))
|
||||
if (m_network5Enabled && (m_dmrNetwork5 != NULL) && (m_status[1U] == DMRGWS_DMRNETWORK5 || m_status[2U] == DMRGWS_DMRNETWORK5))
|
||||
m_dmrNetwork5->writeTalkerAlias(buffer, length);
|
||||
}
|
||||
|
||||
@@ -2516,3 +2569,86 @@ void CDMRGateway::processDynamicTGControl()
|
||||
LogWarning("Unknown dynamic TG control message: %s", buffer);
|
||||
}
|
||||
}
|
||||
|
||||
void CDMRGateway::remoteControl()
|
||||
{
|
||||
if (m_remoteControl == NULL)
|
||||
return;
|
||||
|
||||
REMOTE_COMMAND command = m_remoteControl->getCommand();
|
||||
switch (command) {
|
||||
case RCD_ENABLE_NETWORK1:
|
||||
processEnableCommand(m_dmrNetwork1, "DMR Network 1", m_network1Enabled, true);
|
||||
break;
|
||||
case RCD_ENABLE_NETWORK2:
|
||||
processEnableCommand(m_dmrNetwork2, "DMR Network 2", m_network2Enabled, true);
|
||||
break;
|
||||
case RCD_ENABLE_NETWORK3:
|
||||
processEnableCommand(m_dmrNetwork3, "DMR Network 3", m_network3Enabled, true);
|
||||
break;
|
||||
case RCD_ENABLE_NETWORK4:
|
||||
processEnableCommand(m_dmrNetwork4, "DMR Network 4", m_network4Enabled, true);
|
||||
break;
|
||||
case RCD_ENABLE_NETWORK5:
|
||||
processEnableCommand(m_dmrNetwork5, "DMR Network 5", m_network5Enabled, true);
|
||||
break;
|
||||
case RCD_ENABLE_XLX:
|
||||
if (m_xlxVoice != NULL) {
|
||||
m_xlxVoice->reset();
|
||||
}
|
||||
processEnableCommand(m_xlxNetwork, "XLX Network", m_networkXlxEnabled, true);
|
||||
break;
|
||||
case RCD_DISABLE_NETWORK1:
|
||||
processEnableCommand(m_dmrNetwork1, "DMR Network 1", m_network1Enabled, false);
|
||||
break;
|
||||
case RCD_DISABLE_NETWORK2:
|
||||
processEnableCommand(m_dmrNetwork2, "DMR Network 2", m_network2Enabled, false);
|
||||
break;
|
||||
case RCD_DISABLE_NETWORK3:
|
||||
processEnableCommand(m_dmrNetwork3, "DMR Network 3", m_network3Enabled, false);
|
||||
break;
|
||||
case RCD_DISABLE_NETWORK4:
|
||||
processEnableCommand(m_dmrNetwork4, "DMR Network 4", m_network4Enabled, false);
|
||||
break;
|
||||
case RCD_DISABLE_NETWORK5:
|
||||
processEnableCommand(m_dmrNetwork5, "DMR Network 5", m_network5Enabled, false);
|
||||
break;
|
||||
case RCD_DISABLE_XLX:
|
||||
processEnableCommand(m_xlxNetwork, "XLX Network", m_networkXlxEnabled, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CDMRGateway::processEnableCommand(CDMRNetwork* network, const std::string& name, bool& mode, bool enabled)
|
||||
{
|
||||
LogDebug("Setting '%s' mode current=%s new=%s", name.c_str(), mode ? "true" : "false", enabled ? "true" : "false");
|
||||
|
||||
if (network != NULL) {
|
||||
mode = enabled;
|
||||
network->enable(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
void CDMRGateway::buildNetworkStatusString(std::string &str)
|
||||
{
|
||||
str = "";
|
||||
buildNetworkStatusNetworkString(str, "xlx", m_xlxNetwork, m_networkXlxEnabled);
|
||||
str += " ";
|
||||
buildNetworkStatusNetworkString(str, "net1", m_dmrNetwork1, m_network1Enabled);
|
||||
str += " ";
|
||||
buildNetworkStatusNetworkString(str, "net2", m_dmrNetwork2, m_network2Enabled);
|
||||
str += " ";
|
||||
buildNetworkStatusNetworkString(str, "net3", m_dmrNetwork3, m_network3Enabled);
|
||||
str += " ";
|
||||
buildNetworkStatusNetworkString(str, "net4", m_dmrNetwork4, m_network4Enabled);
|
||||
str += " ";
|
||||
buildNetworkStatusNetworkString(str, "net5", m_dmrNetwork5, m_network5Enabled);
|
||||
}
|
||||
|
||||
void CDMRGateway::buildNetworkStatusNetworkString(std::string &str, const std::string& name, CDMRNetwork* network, bool enabled)
|
||||
{
|
||||
str += name + ":"+ (((network == NULL) || (enabled == false)) ? "n/a" : (network->isConnected() ? "conn" : "disc"));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user