mirror of
https://github.com/g4klx/DMRGateway
synced 2025-12-23 06:45:39 +08:00
Allow seperate Ids and bug fixing.
This commit is contained in:
28
Conf.cpp
28
Conf.cpp
@@ -53,6 +53,7 @@ m_voiceEnabled(true),
|
|||||||
m_voiceLanguage("en_GB"),
|
m_voiceLanguage("en_GB"),
|
||||||
m_voiceDirectory(),
|
m_voiceDirectory(),
|
||||||
m_dmrNetwork1Enabled(false),
|
m_dmrNetwork1Enabled(false),
|
||||||
|
m_dmrNetwork1Id(0U),
|
||||||
m_dmrNetwork1Address(),
|
m_dmrNetwork1Address(),
|
||||||
m_dmrNetwork1Port(0U),
|
m_dmrNetwork1Port(0U),
|
||||||
m_dmrNetwork1Local(0U),
|
m_dmrNetwork1Local(0U),
|
||||||
@@ -62,6 +63,7 @@ m_dmrNetwork1Rewrites(),
|
|||||||
m_dmrNetwork1PrivateSlot1(false),
|
m_dmrNetwork1PrivateSlot1(false),
|
||||||
m_dmrNetwork1PrivateSlot2(false),
|
m_dmrNetwork1PrivateSlot2(false),
|
||||||
m_dmrNetwork2Enabled(false),
|
m_dmrNetwork2Enabled(false),
|
||||||
|
m_dmrNetwork2Id(0U),
|
||||||
m_dmrNetwork2Address(),
|
m_dmrNetwork2Address(),
|
||||||
m_dmrNetwork2Port(0U),
|
m_dmrNetwork2Port(0U),
|
||||||
m_dmrNetwork2Local(0U),
|
m_dmrNetwork2Local(0U),
|
||||||
@@ -71,6 +73,7 @@ m_dmrNetwork2Rewrites(),
|
|||||||
m_dmrNetwork2PrivateSlot1(false),
|
m_dmrNetwork2PrivateSlot1(false),
|
||||||
m_dmrNetwork2PrivateSlot2(false),
|
m_dmrNetwork2PrivateSlot2(false),
|
||||||
m_xlxNetworkEnabled(false),
|
m_xlxNetworkEnabled(false),
|
||||||
|
m_xlxNetworkId(0U),
|
||||||
m_xlxNetworkAddress(),
|
m_xlxNetworkAddress(),
|
||||||
m_xlxNetworkPort(0U),
|
m_xlxNetworkPort(0U),
|
||||||
m_xlxNetworkLocal(0U),
|
m_xlxNetworkLocal(0U),
|
||||||
@@ -162,6 +165,8 @@ bool CConf::read()
|
|||||||
} else if (section == SECTION_XLX_NETWORK) {
|
} else if (section == SECTION_XLX_NETWORK) {
|
||||||
if (::strcmp(key, "Enabled") == 0)
|
if (::strcmp(key, "Enabled") == 0)
|
||||||
m_xlxNetworkEnabled = ::atoi(value) == 1;
|
m_xlxNetworkEnabled = ::atoi(value) == 1;
|
||||||
|
else if (::strcmp(key, "Id") == 0)
|
||||||
|
m_xlxNetworkId = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "Address") == 0)
|
else if (::strcmp(key, "Address") == 0)
|
||||||
m_xlxNetworkAddress = value;
|
m_xlxNetworkAddress = value;
|
||||||
else if (::strcmp(key, "Port") == 0)
|
else if (::strcmp(key, "Port") == 0)
|
||||||
@@ -181,6 +186,8 @@ bool CConf::read()
|
|||||||
} else if (section == SECTION_DMR_NETWORK_1) {
|
} else if (section == SECTION_DMR_NETWORK_1) {
|
||||||
if (::strcmp(key, "Enabled") == 0)
|
if (::strcmp(key, "Enabled") == 0)
|
||||||
m_dmrNetwork1Enabled = ::atoi(value) == 1;
|
m_dmrNetwork1Enabled = ::atoi(value) == 1;
|
||||||
|
else if (::strcmp(key, "Id") == 0)
|
||||||
|
m_dmrNetwork1Id = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "Address") == 0)
|
else if (::strcmp(key, "Address") == 0)
|
||||||
m_dmrNetwork1Address = value;
|
m_dmrNetwork1Address = value;
|
||||||
else if (::strcmp(key, "Port") == 0)
|
else if (::strcmp(key, "Port") == 0)
|
||||||
@@ -191,7 +198,7 @@ bool CConf::read()
|
|||||||
m_dmrNetwork1Password = value;
|
m_dmrNetwork1Password = value;
|
||||||
else if (::strcmp(key, "Debug") == 0)
|
else if (::strcmp(key, "Debug") == 0)
|
||||||
m_dmrNetwork1Debug = ::atoi(value) == 1;
|
m_dmrNetwork1Debug = ::atoi(value) == 1;
|
||||||
else if (::strcmp(key, "Rewrites") == 0) {
|
else if (::strcmp(key, "Rewrite") == 0) {
|
||||||
char* p1 = ::strtok(value, ", ");
|
char* p1 = ::strtok(value, ", ");
|
||||||
char* p2 = ::strtok(NULL, ", ");
|
char* p2 = ::strtok(NULL, ", ");
|
||||||
char* p3 = ::strtok(NULL, ", ");
|
char* p3 = ::strtok(NULL, ", ");
|
||||||
@@ -211,6 +218,8 @@ bool CConf::read()
|
|||||||
} else if (section == SECTION_DMR_NETWORK_2) {
|
} else if (section == SECTION_DMR_NETWORK_2) {
|
||||||
if (::strcmp(key, "Enabled") == 0)
|
if (::strcmp(key, "Enabled") == 0)
|
||||||
m_dmrNetwork2Enabled = ::atoi(value) == 1;
|
m_dmrNetwork2Enabled = ::atoi(value) == 1;
|
||||||
|
else if (::strcmp(key, "Id") == 0)
|
||||||
|
m_dmrNetwork2Id = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "Address") == 0)
|
else if (::strcmp(key, "Address") == 0)
|
||||||
m_dmrNetwork2Address = value;
|
m_dmrNetwork2Address = value;
|
||||||
else if (::strcmp(key, "Port") == 0)
|
else if (::strcmp(key, "Port") == 0)
|
||||||
@@ -221,7 +230,7 @@ bool CConf::read()
|
|||||||
m_dmrNetwork2Password = value;
|
m_dmrNetwork2Password = value;
|
||||||
else if (::strcmp(key, "Debug") == 0)
|
else if (::strcmp(key, "Debug") == 0)
|
||||||
m_dmrNetwork2Debug = ::atoi(value) == 1;
|
m_dmrNetwork2Debug = ::atoi(value) == 1;
|
||||||
else if (::strcmp(key, "Rewrites") == 0) {
|
else if (::strcmp(key, "Rewrite") == 0) {
|
||||||
char* p1 = ::strtok(value, ", ");
|
char* p1 = ::strtok(value, ", ");
|
||||||
char* p2 = ::strtok(NULL, ", ");
|
char* p2 = ::strtok(NULL, ", ");
|
||||||
char* p3 = ::strtok(NULL, ", ");
|
char* p3 = ::strtok(NULL, ", ");
|
||||||
@@ -321,6 +330,11 @@ bool CConf::getXLXNetworkEnabled() const
|
|||||||
return m_xlxNetworkEnabled;
|
return m_xlxNetworkEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int CConf::getXLXNetworkId() const
|
||||||
|
{
|
||||||
|
return m_xlxNetworkId;
|
||||||
|
}
|
||||||
|
|
||||||
std::string CConf::getXLXNetworkAddress() const
|
std::string CConf::getXLXNetworkAddress() const
|
||||||
{
|
{
|
||||||
return m_xlxNetworkAddress;
|
return m_xlxNetworkAddress;
|
||||||
@@ -366,6 +380,11 @@ bool CConf::getDMRNetwork1Enabled() const
|
|||||||
return m_dmrNetwork1Enabled;
|
return m_dmrNetwork1Enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int CConf::getDMRNetwork1Id() const
|
||||||
|
{
|
||||||
|
return m_dmrNetwork1Id;
|
||||||
|
}
|
||||||
|
|
||||||
std::string CConf::getDMRNetwork1Address() const
|
std::string CConf::getDMRNetwork1Address() const
|
||||||
{
|
{
|
||||||
return m_dmrNetwork1Address;
|
return m_dmrNetwork1Address;
|
||||||
@@ -411,6 +430,11 @@ bool CConf::getDMRNetwork2Enabled() const
|
|||||||
return m_dmrNetwork2Enabled;
|
return m_dmrNetwork2Enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int CConf::getDMRNetwork2Id() const
|
||||||
|
{
|
||||||
|
return m_dmrNetwork2Id;
|
||||||
|
}
|
||||||
|
|
||||||
std::string CConf::getDMRNetwork2Address() const
|
std::string CConf::getDMRNetwork2Address() const
|
||||||
{
|
{
|
||||||
return m_dmrNetwork2Address;
|
return m_dmrNetwork2Address;
|
||||||
|
|||||||
6
Conf.h
6
Conf.h
@@ -59,6 +59,7 @@ public:
|
|||||||
|
|
||||||
// The DMR Network 1 section
|
// The DMR Network 1 section
|
||||||
bool getDMRNetwork1Enabled() const;
|
bool getDMRNetwork1Enabled() const;
|
||||||
|
unsigned int getDMRNetwork1Id() const;
|
||||||
std::string getDMRNetwork1Address() const;
|
std::string getDMRNetwork1Address() const;
|
||||||
unsigned int getDMRNetwork1Port() const;
|
unsigned int getDMRNetwork1Port() const;
|
||||||
unsigned int getDMRNetwork1Local() const;
|
unsigned int getDMRNetwork1Local() const;
|
||||||
@@ -70,6 +71,7 @@ public:
|
|||||||
|
|
||||||
// The DMR Network 2 section
|
// The DMR Network 2 section
|
||||||
bool getDMRNetwork2Enabled() const;
|
bool getDMRNetwork2Enabled() const;
|
||||||
|
unsigned int getDMRNetwork2Id() const;
|
||||||
std::string getDMRNetwork2Address() const;
|
std::string getDMRNetwork2Address() const;
|
||||||
unsigned int getDMRNetwork2Port() const;
|
unsigned int getDMRNetwork2Port() const;
|
||||||
unsigned int getDMRNetwork2Local() const;
|
unsigned int getDMRNetwork2Local() const;
|
||||||
@@ -81,6 +83,7 @@ public:
|
|||||||
|
|
||||||
// The XLX Network section
|
// The XLX Network section
|
||||||
bool getXLXNetworkEnabled() const;
|
bool getXLXNetworkEnabled() const;
|
||||||
|
unsigned int getXLXNetworkId() const;
|
||||||
std::string getXLXNetworkAddress() const;
|
std::string getXLXNetworkAddress() const;
|
||||||
unsigned int getXLXNetworkPort() const;
|
unsigned int getXLXNetworkPort() const;
|
||||||
unsigned int getXLXNetworkLocal() const;
|
unsigned int getXLXNetworkLocal() const;
|
||||||
@@ -110,6 +113,7 @@ private:
|
|||||||
std::string m_logFileRoot;
|
std::string m_logFileRoot;
|
||||||
|
|
||||||
bool m_dmrNetwork1Enabled;
|
bool m_dmrNetwork1Enabled;
|
||||||
|
unsigned int m_dmrNetwork1Id;
|
||||||
std::string m_dmrNetwork1Address;
|
std::string m_dmrNetwork1Address;
|
||||||
unsigned int m_dmrNetwork1Port;
|
unsigned int m_dmrNetwork1Port;
|
||||||
unsigned int m_dmrNetwork1Local;
|
unsigned int m_dmrNetwork1Local;
|
||||||
@@ -117,6 +121,7 @@ private:
|
|||||||
bool m_dmrNetwork1Debug;
|
bool m_dmrNetwork1Debug;
|
||||||
|
|
||||||
bool m_dmrNetwork2Enabled;
|
bool m_dmrNetwork2Enabled;
|
||||||
|
unsigned int m_dmrNetwork2Id;
|
||||||
std::string m_dmrNetwork2Address;
|
std::string m_dmrNetwork2Address;
|
||||||
unsigned int m_dmrNetwork2Port;
|
unsigned int m_dmrNetwork2Port;
|
||||||
unsigned int m_dmrNetwork2Local;
|
unsigned int m_dmrNetwork2Local;
|
||||||
@@ -127,6 +132,7 @@ private:
|
|||||||
bool m_dmrNetwork1PrivateSlot2;
|
bool m_dmrNetwork1PrivateSlot2;
|
||||||
|
|
||||||
bool m_xlxNetworkEnabled;
|
bool m_xlxNetworkEnabled;
|
||||||
|
unsigned int m_xlxNetworkId;
|
||||||
std::string m_xlxNetworkAddress;
|
std::string m_xlxNetworkAddress;
|
||||||
unsigned int m_xlxNetworkPort;
|
unsigned int m_xlxNetworkPort;
|
||||||
unsigned int m_xlxNetworkLocal;
|
unsigned int m_xlxNetworkLocal;
|
||||||
|
|||||||
@@ -248,13 +248,6 @@ int CDMRGateway::run()
|
|||||||
|
|
||||||
LogMessage("MMDVM has connected");
|
LogMessage("MMDVM has connected");
|
||||||
|
|
||||||
unsigned int timeout = m_conf.getTimeout();
|
|
||||||
|
|
||||||
LogInfo("Id: %u", m_repeater->getId());
|
|
||||||
|
|
||||||
CRewrite rptRewrite(XLX_SLOT, XLX_TG, m_xlxSlot, m_xlxTG);
|
|
||||||
CRewrite xlxRewrite(m_xlxSlot, m_xlxTG, XLX_SLOT, XLX_TG);
|
|
||||||
|
|
||||||
if (m_conf.getDMRNetwork1Enabled()) {
|
if (m_conf.getDMRNetwork1Enabled()) {
|
||||||
ret = createDMRNetwork1();
|
ret = createDMRNetwork1();
|
||||||
if (!ret)
|
if (!ret)
|
||||||
@@ -273,6 +266,11 @@ int CDMRGateway::run()
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int timeout = m_conf.getTimeout();
|
||||||
|
|
||||||
|
CRewrite rptRewrite(XLX_SLOT, XLX_TG, m_xlxSlot, m_xlxTG);
|
||||||
|
CRewrite xlxRewrite(m_xlxSlot, m_xlxTG, XLX_SLOT, XLX_TG);
|
||||||
|
|
||||||
CVoice* voice = NULL;
|
CVoice* voice = NULL;
|
||||||
if (m_conf.getVoiceEnabled() && m_xlxNetwork != NULL) {
|
if (m_conf.getVoiceEnabled() && m_xlxNetwork != NULL) {
|
||||||
std::string language = m_conf.getVoiceLanguage();
|
std::string language = m_conf.getVoiceLanguage();
|
||||||
@@ -368,9 +366,10 @@ int CDMRGateway::run()
|
|||||||
timer[slotNo]->start();
|
timer[slotNo]->start();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
bool rewritten = false;
|
||||||
|
|
||||||
if (m_dmrNetwork1 != NULL) {
|
if (m_dmrNetwork1 != NULL) {
|
||||||
// Rewrite the slot and/or TG or neither
|
// Rewrite the slot and/or TG or neither
|
||||||
bool rewritten = false;
|
|
||||||
for (std::vector<CRewrite*>::iterator it = m_dmr1RFRewrites.begin(); it != m_dmr1RFRewrites.end(); ++it) {
|
for (std::vector<CRewrite*>::iterator it = m_dmr1RFRewrites.begin(); it != m_dmr1RFRewrites.end(); ++it) {
|
||||||
bool ret = (*it)->process(data);
|
bool ret = (*it)->process(data);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@@ -389,23 +388,24 @@ int CDMRGateway::run()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_dmrNetwork2 != NULL) {
|
if (!rewritten) {
|
||||||
// Rewrite the slot and/or TG or neither
|
if (m_dmrNetwork2 != NULL) {
|
||||||
bool rewritten = false;
|
// Rewrite the slot and/or TG or neither
|
||||||
for (std::vector<CRewrite*>::iterator it = m_dmr2RFRewrites.begin(); it != m_dmr2RFRewrites.end(); ++it) {
|
for (std::vector<CRewrite*>::iterator it = m_dmr2RFRewrites.begin(); it != m_dmr2RFRewrites.end(); ++it) {
|
||||||
bool ret = (*it)->process(data);
|
bool ret = (*it)->process(data);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
rewritten = true;
|
rewritten = true;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (rewritten) {
|
if (rewritten) {
|
||||||
unsigned int slotNo = data.getSlotNo();
|
unsigned int slotNo = data.getSlotNo();
|
||||||
if (status[slotNo] == DMRGWS_NONE || status[slotNo] == DMRGWS_NETWORK2) {
|
if (status[slotNo] == DMRGWS_NONE || status[slotNo] == DMRGWS_NETWORK2) {
|
||||||
m_dmrNetwork2->write(data);
|
m_dmrNetwork2->write(data);
|
||||||
status[slotNo] = DMRGWS_NETWORK2;
|
status[slotNo] = DMRGWS_NETWORK2;
|
||||||
timer[slotNo]->start();
|
timer[slotNo]->start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -575,6 +575,9 @@ int CDMRGateway::run()
|
|||||||
delete m_xlxNetwork;
|
delete m_xlxNetwork;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete timer[1U];
|
||||||
|
delete timer[2U];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -609,11 +612,15 @@ bool CDMRGateway::createDMRNetwork1()
|
|||||||
std::string address = m_conf.getDMRNetwork1Address();
|
std::string address = m_conf.getDMRNetwork1Address();
|
||||||
unsigned int port = m_conf.getDMRNetwork1Port();
|
unsigned int port = m_conf.getDMRNetwork1Port();
|
||||||
unsigned int local = m_conf.getDMRNetwork1Local();
|
unsigned int local = m_conf.getDMRNetwork1Local();
|
||||||
unsigned int id = m_repeater->getId();
|
unsigned int id = m_conf.getDMRNetwork1Id();
|
||||||
std::string password = m_conf.getDMRNetwork1Password();
|
std::string password = m_conf.getDMRNetwork1Password();
|
||||||
bool debug = m_conf.getDMRNetwork1Debug();
|
bool debug = m_conf.getDMRNetwork1Debug();
|
||||||
|
|
||||||
|
if (id == 0U)
|
||||||
|
id = m_repeater->getId();
|
||||||
|
|
||||||
LogInfo("DMR Network 1 Parameters");
|
LogInfo("DMR Network 1 Parameters");
|
||||||
|
LogInfo(" Id: %u", id);
|
||||||
LogInfo(" Address: %s", address.c_str());
|
LogInfo(" Address: %s", address.c_str());
|
||||||
LogInfo(" Port: %u", port);
|
LogInfo(" Port: %u", port);
|
||||||
if (local > 0U)
|
if (local > 0U)
|
||||||
@@ -666,11 +673,15 @@ bool CDMRGateway::createDMRNetwork2()
|
|||||||
std::string address = m_conf.getDMRNetwork2Address();
|
std::string address = m_conf.getDMRNetwork2Address();
|
||||||
unsigned int port = m_conf.getDMRNetwork2Port();
|
unsigned int port = m_conf.getDMRNetwork2Port();
|
||||||
unsigned int local = m_conf.getDMRNetwork2Local();
|
unsigned int local = m_conf.getDMRNetwork2Local();
|
||||||
unsigned int id = m_repeater->getId();
|
unsigned int id = m_conf.getDMRNetwork2Id();
|
||||||
std::string password = m_conf.getDMRNetwork2Password();
|
std::string password = m_conf.getDMRNetwork2Password();
|
||||||
bool debug = m_conf.getDMRNetwork2Debug();
|
bool debug = m_conf.getDMRNetwork2Debug();
|
||||||
|
|
||||||
|
if (id == 0U)
|
||||||
|
id = m_repeater->getId();
|
||||||
|
|
||||||
LogInfo("DMR Network 2 Parameters");
|
LogInfo("DMR Network 2 Parameters");
|
||||||
|
LogInfo(" Id: %u", id);
|
||||||
LogInfo(" Address: %s", address.c_str());
|
LogInfo(" Address: %s", address.c_str());
|
||||||
LogInfo(" Port: %u", port);
|
LogInfo(" Port: %u", port);
|
||||||
if (local > 0U)
|
if (local > 0U)
|
||||||
@@ -723,12 +734,16 @@ bool CDMRGateway::createXLXNetwork()
|
|||||||
std::string address = m_conf.getXLXNetworkAddress();
|
std::string address = m_conf.getXLXNetworkAddress();
|
||||||
unsigned int port = m_conf.getXLXNetworkPort();
|
unsigned int port = m_conf.getXLXNetworkPort();
|
||||||
unsigned int local = m_conf.getXLXNetworkLocal();
|
unsigned int local = m_conf.getXLXNetworkLocal();
|
||||||
unsigned int id = m_repeater->getId();
|
unsigned int id = m_conf.getXLXNetworkId();
|
||||||
std::string password = m_conf.getXLXNetworkPassword();
|
std::string password = m_conf.getXLXNetworkPassword();
|
||||||
std::string options = m_conf.getXLXNetworkOptions();
|
std::string options = m_conf.getXLXNetworkOptions();
|
||||||
bool debug = m_conf.getXLXNetworkDebug();
|
bool debug = m_conf.getXLXNetworkDebug();
|
||||||
|
|
||||||
|
if (id == 0U)
|
||||||
|
id = m_repeater->getId();
|
||||||
|
|
||||||
LogInfo("XLX Network Parameters");
|
LogInfo("XLX Network Parameters");
|
||||||
|
LogInfo(" Id: %u", id);
|
||||||
LogInfo(" Address: %s", address.c_str());
|
LogInfo(" Address: %s", address.c_str());
|
||||||
LogInfo(" Port: %u", port);
|
LogInfo(" Port: %u", port);
|
||||||
if (local > 0U)
|
if (local > 0U)
|
||||||
|
|||||||
@@ -85,12 +85,13 @@ void CRewrite::processHeader(CDMRData& data, unsigned char dataType)
|
|||||||
data.getData(buffer);
|
data.getData(buffer);
|
||||||
|
|
||||||
delete m_lc;
|
delete m_lc;
|
||||||
m_lc = NULL;
|
|
||||||
|
|
||||||
CDMRFullLC fullLC;
|
CDMRFullLC fullLC;
|
||||||
m_lc = fullLC.decode(buffer, dataType);
|
m_lc = fullLC.decode(buffer, dataType);
|
||||||
if (m_lc == NULL)
|
if (m_lc == NULL) {
|
||||||
return;
|
m_lc = new CDMRLC(FLCO_GROUP, data.getSrcId(), m_toTG);
|
||||||
|
m_embeddedLC.setLC(*m_lc);
|
||||||
|
}
|
||||||
|
|
||||||
m_lc->setDstId(m_toTG);
|
m_lc->setDstId(m_toTG);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user