mirror of
https://github.com/g4klx/DMRGateway
synced 2025-12-20 21:25:37 +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_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
6
Conf.h
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user