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_voiceDirectory(),
m_dmrNetwork1Enabled(false),
m_dmrNetwork1Id(0U),
m_dmrNetwork1Address(),
m_dmrNetwork1Port(0U),
m_dmrNetwork1Local(0U),
@@ -62,6 +63,7 @@ m_dmrNetwork1Rewrites(),
m_dmrNetwork1PrivateSlot1(false),
m_dmrNetwork1PrivateSlot2(false),
m_dmrNetwork2Enabled(false),
m_dmrNetwork2Id(0U),
m_dmrNetwork2Address(),
m_dmrNetwork2Port(0U),
m_dmrNetwork2Local(0U),
@@ -71,6 +73,7 @@ m_dmrNetwork2Rewrites(),
m_dmrNetwork2PrivateSlot1(false),
m_dmrNetwork2PrivateSlot2(false),
m_xlxNetworkEnabled(false),
m_xlxNetworkId(0U),
m_xlxNetworkAddress(),
m_xlxNetworkPort(0U),
m_xlxNetworkLocal(0U),
@@ -162,6 +165,8 @@ bool CConf::read()
} else if (section == SECTION_XLX_NETWORK) {
if (::strcmp(key, "Enabled") == 0)
m_xlxNetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Id") == 0)
m_xlxNetworkId = (unsigned int)::atoi(value);
else if (::strcmp(key, "Address") == 0)
m_xlxNetworkAddress = value;
else if (::strcmp(key, "Port") == 0)
@@ -181,6 +186,8 @@ bool CConf::read()
} else if (section == SECTION_DMR_NETWORK_1) {
if (::strcmp(key, "Enabled") == 0)
m_dmrNetwork1Enabled = ::atoi(value) == 1;
else if (::strcmp(key, "Id") == 0)
m_dmrNetwork1Id = (unsigned int)::atoi(value);
else if (::strcmp(key, "Address") == 0)
m_dmrNetwork1Address = value;
else if (::strcmp(key, "Port") == 0)
@@ -191,7 +198,7 @@ bool CConf::read()
m_dmrNetwork1Password = value;
else if (::strcmp(key, "Debug") == 0)
m_dmrNetwork1Debug = ::atoi(value) == 1;
else if (::strcmp(key, "Rewrites") == 0) {
else if (::strcmp(key, "Rewrite") == 0) {
char* p1 = ::strtok(value, ", ");
char* p2 = ::strtok(NULL, ", ");
char* p3 = ::strtok(NULL, ", ");
@@ -211,6 +218,8 @@ bool CConf::read()
} else if (section == SECTION_DMR_NETWORK_2) {
if (::strcmp(key, "Enabled") == 0)
m_dmrNetwork2Enabled = ::atoi(value) == 1;
else if (::strcmp(key, "Id") == 0)
m_dmrNetwork2Id = (unsigned int)::atoi(value);
else if (::strcmp(key, "Address") == 0)
m_dmrNetwork2Address = value;
else if (::strcmp(key, "Port") == 0)
@@ -221,7 +230,7 @@ bool CConf::read()
m_dmrNetwork2Password = value;
else if (::strcmp(key, "Debug") == 0)
m_dmrNetwork2Debug = ::atoi(value) == 1;
else if (::strcmp(key, "Rewrites") == 0) {
else if (::strcmp(key, "Rewrite") == 0) {
char* p1 = ::strtok(value, ", ");
char* p2 = ::strtok(NULL, ", ");
char* p3 = ::strtok(NULL, ", ");
@@ -321,6 +330,11 @@ bool CConf::getXLXNetworkEnabled() const
return m_xlxNetworkEnabled;
}
unsigned int CConf::getXLXNetworkId() const
{
return m_xlxNetworkId;
}
std::string CConf::getXLXNetworkAddress() const
{
return m_xlxNetworkAddress;
@@ -366,6 +380,11 @@ bool CConf::getDMRNetwork1Enabled() const
return m_dmrNetwork1Enabled;
}
unsigned int CConf::getDMRNetwork1Id() const
{
return m_dmrNetwork1Id;
}
std::string CConf::getDMRNetwork1Address() const
{
return m_dmrNetwork1Address;
@@ -411,6 +430,11 @@ bool CConf::getDMRNetwork2Enabled() const
return m_dmrNetwork2Enabled;
}
unsigned int CConf::getDMRNetwork2Id() const
{
return m_dmrNetwork2Id;
}
std::string CConf::getDMRNetwork2Address() const
{
return m_dmrNetwork2Address;

6
Conf.h
View File

@@ -59,6 +59,7 @@ public:
// The DMR Network 1 section
bool getDMRNetwork1Enabled() const;
unsigned int getDMRNetwork1Id() const;
std::string getDMRNetwork1Address() const;
unsigned int getDMRNetwork1Port() const;
unsigned int getDMRNetwork1Local() const;
@@ -70,6 +71,7 @@ public:
// The DMR Network 2 section
bool getDMRNetwork2Enabled() const;
unsigned int getDMRNetwork2Id() const;
std::string getDMRNetwork2Address() const;
unsigned int getDMRNetwork2Port() const;
unsigned int getDMRNetwork2Local() const;
@@ -81,6 +83,7 @@ public:
// The XLX Network section
bool getXLXNetworkEnabled() const;
unsigned int getXLXNetworkId() const;
std::string getXLXNetworkAddress() const;
unsigned int getXLXNetworkPort() const;
unsigned int getXLXNetworkLocal() const;
@@ -110,6 +113,7 @@ private:
std::string m_logFileRoot;
bool m_dmrNetwork1Enabled;
unsigned int m_dmrNetwork1Id;
std::string m_dmrNetwork1Address;
unsigned int m_dmrNetwork1Port;
unsigned int m_dmrNetwork1Local;
@@ -117,6 +121,7 @@ private:
bool m_dmrNetwork1Debug;
bool m_dmrNetwork2Enabled;
unsigned int m_dmrNetwork2Id;
std::string m_dmrNetwork2Address;
unsigned int m_dmrNetwork2Port;
unsigned int m_dmrNetwork2Local;
@@ -127,6 +132,7 @@ private:
bool m_dmrNetwork1PrivateSlot2;
bool m_xlxNetworkEnabled;
unsigned int m_xlxNetworkId;
std::string m_xlxNetworkAddress;
unsigned int m_xlxNetworkPort;
unsigned int m_xlxNetworkLocal;

View File

@@ -248,13 +248,6 @@ int CDMRGateway::run()
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()) {
ret = createDMRNetwork1();
if (!ret)
@@ -273,6 +266,11 @@ int CDMRGateway::run()
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;
if (m_conf.getVoiceEnabled() && m_xlxNetwork != NULL) {
std::string language = m_conf.getVoiceLanguage();
@@ -368,9 +366,10 @@ int CDMRGateway::run()
timer[slotNo]->start();
}
} else {
bool rewritten = false;
if (m_dmrNetwork1 != NULL) {
// 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) {
bool ret = (*it)->process(data);
if (ret) {
@@ -389,23 +388,24 @@ int CDMRGateway::run()
}
}
if (m_dmrNetwork2 != NULL) {
// 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) {
bool ret = (*it)->process(data);
if (ret) {
rewritten = true;
break;
if (!rewritten) {
if (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) {
bool ret = (*it)->process(data);
if (ret) {
rewritten = true;
break;
}
}
}
if (rewritten) {
unsigned int slotNo = data.getSlotNo();
if (status[slotNo] == DMRGWS_NONE || status[slotNo] == DMRGWS_NETWORK2) {
m_dmrNetwork2->write(data);
status[slotNo] = DMRGWS_NETWORK2;
timer[slotNo]->start();
if (rewritten) {
unsigned int slotNo = data.getSlotNo();
if (status[slotNo] == DMRGWS_NONE || status[slotNo] == DMRGWS_NETWORK2) {
m_dmrNetwork2->write(data);
status[slotNo] = DMRGWS_NETWORK2;
timer[slotNo]->start();
}
}
}
}
@@ -575,6 +575,9 @@ int CDMRGateway::run()
delete m_xlxNetwork;
}
delete timer[1U];
delete timer[2U];
return 0;
}
@@ -609,11 +612,15 @@ bool CDMRGateway::createDMRNetwork1()
std::string address = m_conf.getDMRNetwork1Address();
unsigned int port = m_conf.getDMRNetwork1Port();
unsigned int local = m_conf.getDMRNetwork1Local();
unsigned int id = m_repeater->getId();
unsigned int id = m_conf.getDMRNetwork1Id();
std::string password = m_conf.getDMRNetwork1Password();
bool debug = m_conf.getDMRNetwork1Debug();
if (id == 0U)
id = m_repeater->getId();
LogInfo("DMR Network 1 Parameters");
LogInfo(" Id: %u", id);
LogInfo(" Address: %s", address.c_str());
LogInfo(" Port: %u", port);
if (local > 0U)
@@ -666,11 +673,15 @@ bool CDMRGateway::createDMRNetwork2()
std::string address = m_conf.getDMRNetwork2Address();
unsigned int port = m_conf.getDMRNetwork2Port();
unsigned int local = m_conf.getDMRNetwork2Local();
unsigned int id = m_repeater->getId();
unsigned int id = m_conf.getDMRNetwork2Id();
std::string password = m_conf.getDMRNetwork2Password();
bool debug = m_conf.getDMRNetwork2Debug();
if (id == 0U)
id = m_repeater->getId();
LogInfo("DMR Network 2 Parameters");
LogInfo(" Id: %u", id);
LogInfo(" Address: %s", address.c_str());
LogInfo(" Port: %u", port);
if (local > 0U)
@@ -723,12 +734,16 @@ bool CDMRGateway::createXLXNetwork()
std::string address = m_conf.getXLXNetworkAddress();
unsigned int port = m_conf.getXLXNetworkPort();
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 options = m_conf.getXLXNetworkOptions();
bool debug = m_conf.getXLXNetworkDebug();
if (id == 0U)
id = m_repeater->getId();
LogInfo("XLX Network Parameters");
LogInfo(" Id: %u", id);
LogInfo(" Address: %s", address.c_str());
LogInfo(" Port: %u", port);
if (local > 0U)

View File

@@ -85,12 +85,13 @@ void CRewrite::processHeader(CDMRData& data, unsigned char dataType)
data.getData(buffer);
delete m_lc;
m_lc = NULL;
CDMRFullLC fullLC;
m_lc = fullLC.decode(buffer, dataType);
if (m_lc == NULL)
return;
if (m_lc == NULL) {
m_lc = new CDMRLC(FLCO_GROUP, data.getSrcId(), m_toTG);
m_embeddedLC.setLC(*m_lc);
}
m_lc->setDstId(m_toTG);

View File

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