Allow seperate Ids and bug fixing.

This commit is contained in:
Jonathan Naylor
2017-05-06 09:57:17 +01:00
parent 5b014604a1
commit 9a1334e36d
5 changed files with 78 additions and 32 deletions

View File

@@ -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
View File

@@ -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;

View File

@@ -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,9 +388,9 @@ int CDMRGateway::run()
} }
} }
if (!rewritten) {
if (m_dmrNetwork2 != NULL) { if (m_dmrNetwork2 != 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_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) {
@@ -411,6 +410,7 @@ int CDMRGateway::run()
} }
} }
} }
}
if (m_xlxNetwork != NULL) { if (m_xlxNetwork != NULL) {
ret = m_xlxNetwork->read(data); ret = m_xlxNetwork->read(data);
@@ -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)

View File

@@ -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);

View File

@@ -19,6 +19,6 @@
#if !defined(VERSION_H) #if !defined(VERSION_H)
#define VERSION_H #define VERSION_H
const char* VERSION = "20170503"; const char* VERSION = "20170506";
#endif #endif