mirror of
https://github.com/g4klx/DMRGateway.git
synced 2025-12-06 05:32:01 +01:00
Added 4. DMR Network
This commit is contained in:
parent
87c19d849f
commit
be4ef3c5e5
188
Conf.cpp
188
Conf.cpp
|
|
@ -35,6 +35,7 @@ enum SECTION {
|
|||
SECTION_DMR_NETWORK_1,
|
||||
SECTION_DMR_NETWORK_2,
|
||||
SECTION_DMR_NETWORK_3,
|
||||
SECTION_DMR_NETWORK_4,
|
||||
SECTION_XLX_NETWORK
|
||||
};
|
||||
|
||||
|
|
@ -114,6 +115,22 @@ m_dmrNetwork3TypeRewrites(),
|
|||
m_dmrNetwork3SrcRewrites(),
|
||||
m_dmrNetwork3PassAllPC(),
|
||||
m_dmrNetwork3PassAllTG(),
|
||||
m_dmrNetwork4Enabled(false),
|
||||
m_dmrNetwork4Name(),
|
||||
m_dmrNetwork4Id(0U),
|
||||
m_dmrNetwork4Address(),
|
||||
m_dmrNetwork4Port(0U),
|
||||
m_dmrNetwork4Local(0U),
|
||||
m_dmrNetwork4Password(),
|
||||
m_dmrNetwork4Options(),
|
||||
m_dmrNetwork4Location(true),
|
||||
m_dmrNetwork4Debug(false),
|
||||
m_dmrNetwork4TGRewrites(),
|
||||
m_dmrNetwork4PCRewrites(),
|
||||
m_dmrNetwork4TypeRewrites(),
|
||||
m_dmrNetwork4SrcRewrites(),
|
||||
m_dmrNetwork4PassAllPC(),
|
||||
m_dmrNetwork4PassAllTG(),
|
||||
m_xlxNetworkEnabled(false),
|
||||
m_xlxNetworkId(0U),
|
||||
m_xlxNetworkFile(),
|
||||
|
|
@ -168,6 +185,8 @@ bool CConf::read()
|
|||
section = SECTION_DMR_NETWORK_2;
|
||||
else if (::strncmp(buffer, "[DMR Network 3]", 15U) == 0)
|
||||
section = SECTION_DMR_NETWORK_3;
|
||||
else if (::strncmp(buffer, "[DMR Network 4]", 15U) == 0)
|
||||
section = SECTION_DMR_NETWORK_4;
|
||||
else
|
||||
section = SECTION_NONE;
|
||||
|
||||
|
|
@ -536,6 +555,92 @@ bool CConf::read()
|
|||
unsigned int slotNo = (unsigned int)::atoi(value);
|
||||
m_dmrNetwork3PassAllTG.push_back(slotNo);
|
||||
}
|
||||
} else if (section == SECTION_DMR_NETWORK_4) {
|
||||
if (::strcmp(key, "Enabled") == 0)
|
||||
m_dmrNetwork4Enabled = ::atoi(value) == 1;
|
||||
else if (::strcmp(key, "Name") == 0)
|
||||
m_dmrNetwork4Name = value;
|
||||
else if (::strcmp(key, "Id") == 0)
|
||||
m_dmrNetwork4Id = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "Address") == 0)
|
||||
m_dmrNetwork4Address = value;
|
||||
else if (::strcmp(key, "Port") == 0)
|
||||
m_dmrNetwork4Port = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "Local") == 0)
|
||||
m_dmrNetwork4Local = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "Password") == 0)
|
||||
m_dmrNetwork4Password = value;
|
||||
else if (::strcmp(key, "Options") == 0)
|
||||
m_dmrNetwork4Options = value;
|
||||
else if (::strcmp(key, "Location") == 0)
|
||||
m_dmrNetwork4Location = ::atoi(value) == 1;
|
||||
else if (::strcmp(key, "Debug") == 0)
|
||||
m_dmrNetwork4Debug = ::atoi(value) == 1;
|
||||
else if (::strncmp(key, "TGRewrite", 9U) == 0) {
|
||||
char* p1 = ::strtok(value, ", ");
|
||||
char* p2 = ::strtok(NULL, ", ");
|
||||
char* p3 = ::strtok(NULL, ", ");
|
||||
char* p4 = ::strtok(NULL, ", ");
|
||||
char* p5 = ::strtok(NULL, " \r\n");
|
||||
if (p1 != NULL && p2 != NULL && p3 != NULL && p4 != NULL && p5 != NULL) {
|
||||
CTGRewriteStruct rewrite;
|
||||
rewrite.m_fromSlot = ::atoi(p1);
|
||||
rewrite.m_fromTG = ::atoi(p2);
|
||||
rewrite.m_toSlot = ::atoi(p3);
|
||||
rewrite.m_toTG = ::atoi(p4);
|
||||
rewrite.m_range = ::atoi(p5);
|
||||
m_dmrNetwork4TGRewrites.push_back(rewrite);
|
||||
}
|
||||
} else if (::strncmp(key, "PCRewrite", 9U) == 0) {
|
||||
char* p1 = ::strtok(value, ", ");
|
||||
char* p2 = ::strtok(NULL, ", ");
|
||||
char* p3 = ::strtok(NULL, ", ");
|
||||
char* p4 = ::strtok(NULL, ", ");
|
||||
char* p5 = ::strtok(NULL, " \r\n");
|
||||
if (p1 != NULL && p2 != NULL && p3 != NULL && p4 != NULL && p5 != NULL) {
|
||||
CPCRewriteStruct rewrite;
|
||||
rewrite.m_fromSlot = ::atoi(p1);
|
||||
rewrite.m_fromId = ::atoi(p2);
|
||||
rewrite.m_toSlot = ::atoi(p3);
|
||||
rewrite.m_toId = ::atoi(p4);
|
||||
rewrite.m_range = ::atoi(p5);
|
||||
m_dmrNetwork4PCRewrites.push_back(rewrite);
|
||||
}
|
||||
} else if (::strncmp(key, "TypeRewrite", 11U) == 0) {
|
||||
char* p1 = ::strtok(value, ", ");
|
||||
char* p2 = ::strtok(NULL, ", ");
|
||||
char* p3 = ::strtok(NULL, ", ");
|
||||
char* p4 = ::strtok(NULL, " \r\n");
|
||||
if (p1 != NULL && p2 != NULL && p3 != NULL && p4 != NULL) {
|
||||
CTypeRewriteStruct rewrite;
|
||||
rewrite.m_fromSlot = ::atoi(p1);
|
||||
rewrite.m_fromTG = ::atoi(p2);
|
||||
rewrite.m_toSlot = ::atoi(p3);
|
||||
rewrite.m_toId = ::atoi(p4);
|
||||
m_dmrNetwork4TypeRewrites.push_back(rewrite);
|
||||
}
|
||||
} else if (::strncmp(key, "SrcRewrite", 10U) == 0) {
|
||||
char* p1 = ::strtok(value, ", ");
|
||||
char* p2 = ::strtok(NULL, ", ");
|
||||
char* p3 = ::strtok(NULL, ", ");
|
||||
char* p4 = ::strtok(NULL, ", ");
|
||||
char* p5 = ::strtok(NULL, " \r\n");
|
||||
if (p1 != NULL && p2 != NULL && p3 != NULL && p4 != NULL && p5 != NULL) {
|
||||
CSrcRewriteStruct rewrite;
|
||||
rewrite.m_fromSlot = ::atoi(p1);
|
||||
rewrite.m_fromId = ::atoi(p2);
|
||||
rewrite.m_toSlot = ::atoi(p3);
|
||||
rewrite.m_toTG = ::atoi(p4);
|
||||
rewrite.m_range = ::atoi(p5);
|
||||
m_dmrNetwork4SrcRewrites.push_back(rewrite);
|
||||
}
|
||||
} else if (::strncmp(key, "PassAllPC", 9U) == 0) {
|
||||
unsigned int slotNo = (unsigned int)::atoi(value);
|
||||
m_dmrNetwork4PassAllPC.push_back(slotNo);
|
||||
} else if (::strncmp(key, "PassAllTG", 9U) == 0) {
|
||||
unsigned int slotNo = (unsigned int)::atoi(value);
|
||||
m_dmrNetwork4PassAllTG.push_back(slotNo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -995,3 +1100,86 @@ std::vector<unsigned int> CConf::getDMRNetwork3PassAllTG() const
|
|||
{
|
||||
return m_dmrNetwork3PassAllTG;
|
||||
}
|
||||
|
||||
bool CConf::getDMRNetwork4Enabled() const
|
||||
{
|
||||
return m_dmrNetwork4Enabled;
|
||||
}
|
||||
|
||||
std::string CConf::getDMRNetwork4Name() const
|
||||
{
|
||||
if (m_dmrNetwork4Name.empty())
|
||||
return "DMR-4";
|
||||
else
|
||||
return m_dmrNetwork4Name;
|
||||
}
|
||||
|
||||
unsigned int CConf::getDMRNetwork4Id() const
|
||||
{
|
||||
return m_dmrNetwork4Id;
|
||||
}
|
||||
|
||||
std::string CConf::getDMRNetwork4Address() const
|
||||
{
|
||||
return m_dmrNetwork4Address;
|
||||
}
|
||||
|
||||
unsigned int CConf::getDMRNetwork4Port() const
|
||||
{
|
||||
return m_dmrNetwork4Port;
|
||||
}
|
||||
|
||||
unsigned int CConf::getDMRNetwork4Local() const
|
||||
{
|
||||
return m_dmrNetwork4Local;
|
||||
}
|
||||
|
||||
std::string CConf::getDMRNetwork4Password() const
|
||||
{
|
||||
return m_dmrNetwork4Password;
|
||||
}
|
||||
|
||||
std::string CConf::getDMRNetwork4Options() const
|
||||
{
|
||||
return m_dmrNetwork4Options;
|
||||
}
|
||||
|
||||
bool CConf::getDMRNetwork4Location() const
|
||||
{
|
||||
return m_dmrNetwork4Location;
|
||||
}
|
||||
|
||||
bool CConf::getDMRNetwork4Debug() const
|
||||
{
|
||||
return m_dmrNetwork4Debug;
|
||||
}
|
||||
|
||||
std::vector<CTGRewriteStruct> CConf::getDMRNetwork4TGRewrites() const
|
||||
{
|
||||
return m_dmrNetwork4TGRewrites;
|
||||
}
|
||||
|
||||
std::vector<CPCRewriteStruct> CConf::getDMRNetwork4PCRewrites() const
|
||||
{
|
||||
return m_dmrNetwork4PCRewrites;
|
||||
}
|
||||
|
||||
std::vector<CTypeRewriteStruct> CConf::getDMRNetwork4TypeRewrites() const
|
||||
{
|
||||
return m_dmrNetwork4TypeRewrites;
|
||||
}
|
||||
|
||||
std::vector<CSrcRewriteStruct> CConf::getDMRNetwork4SrcRewrites() const
|
||||
{
|
||||
return m_dmrNetwork4SrcRewrites;
|
||||
}
|
||||
|
||||
std::vector<unsigned int> CConf::getDMRNetwork4PassAllPC() const
|
||||
{
|
||||
return m_dmrNetwork4PassAllPC;
|
||||
}
|
||||
|
||||
std::vector<unsigned int> CConf::getDMRNetwork4PassAllTG() const
|
||||
{
|
||||
return m_dmrNetwork4PassAllTG;
|
||||
}
|
||||
|
|
|
|||
35
Conf.h
35
Conf.h
|
|
@ -149,6 +149,24 @@ public:
|
|||
std::vector<unsigned int> getDMRNetwork3PassAllPC() const;
|
||||
std::vector<unsigned int> getDMRNetwork3PassAllTG() const;
|
||||
|
||||
// The DMR Network 4 section
|
||||
bool getDMRNetwork4Enabled() const;
|
||||
std::string getDMRNetwork4Name() const;
|
||||
unsigned int getDMRNetwork4Id() const;
|
||||
std::string getDMRNetwork4Address() const;
|
||||
unsigned int getDMRNetwork4Port() const;
|
||||
unsigned int getDMRNetwork4Local() const;
|
||||
std::string getDMRNetwork4Password() const;
|
||||
std::string getDMRNetwork4Options() const;
|
||||
bool getDMRNetwork4Location() const;
|
||||
bool getDMRNetwork4Debug() const;
|
||||
std::vector<CTGRewriteStruct> getDMRNetwork4TGRewrites() const;
|
||||
std::vector<CPCRewriteStruct> getDMRNetwork4PCRewrites() const;
|
||||
std::vector<CTypeRewriteStruct> getDMRNetwork4TypeRewrites() const;
|
||||
std::vector<CSrcRewriteStruct> getDMRNetwork4SrcRewrites() const;
|
||||
std::vector<unsigned int> getDMRNetwork4PassAllPC() const;
|
||||
std::vector<unsigned int> getDMRNetwork4PassAllTG() const;
|
||||
|
||||
// The XLX Network section
|
||||
bool getXLXNetworkEnabled() const;
|
||||
unsigned int getXLXNetworkId() const;
|
||||
|
|
@ -249,6 +267,23 @@ private:
|
|||
std::vector<unsigned int> m_dmrNetwork3PassAllPC;
|
||||
std::vector<unsigned int> m_dmrNetwork3PassAllTG;
|
||||
|
||||
bool m_dmrNetwork4Enabled;
|
||||
std::string m_dmrNetwork4Name;
|
||||
unsigned int m_dmrNetwork4Id;
|
||||
std::string m_dmrNetwork4Address;
|
||||
unsigned int m_dmrNetwork4Port;
|
||||
unsigned int m_dmrNetwork4Local;
|
||||
std::string m_dmrNetwork4Password;
|
||||
std::string m_dmrNetwork4Options;
|
||||
bool m_dmrNetwork4Location;
|
||||
bool m_dmrNetwork4Debug;
|
||||
std::vector<CTGRewriteStruct> m_dmrNetwork4TGRewrites;
|
||||
std::vector<CPCRewriteStruct> m_dmrNetwork4PCRewrites;
|
||||
std::vector<CTypeRewriteStruct> m_dmrNetwork4TypeRewrites;
|
||||
std::vector<CSrcRewriteStruct> m_dmrNetwork4SrcRewrites;
|
||||
std::vector<unsigned int> m_dmrNetwork4PassAllPC;
|
||||
std::vector<unsigned int> m_dmrNetwork4PassAllTG;
|
||||
|
||||
bool m_xlxNetworkEnabled;
|
||||
unsigned int m_xlxNetworkId;
|
||||
std::string m_xlxNetworkFile;
|
||||
|
|
|
|||
245
DMRGateway.cpp
245
DMRGateway.cpp
|
|
@ -71,6 +71,7 @@ enum DMRGW_STATUS {
|
|||
DMRGWS_DMRNETWORK1,
|
||||
DMRGWS_DMRNETWORK2,
|
||||
DMRGWS_DMRNETWORK3,
|
||||
DMRGWS_DMRNETWORK4,
|
||||
DMRGWS_XLXREFLECTOR
|
||||
};
|
||||
|
||||
|
|
@ -140,6 +141,8 @@ m_dmrNetwork2(NULL),
|
|||
m_dmr2Name(),
|
||||
m_dmrNetwork3(NULL),
|
||||
m_dmr3Name(),
|
||||
m_dmrNetwork4(NULL),
|
||||
m_dmr4Name(),
|
||||
m_xlxReflectors(NULL),
|
||||
m_xlxNetwork(NULL),
|
||||
m_xlxId(0U),
|
||||
|
|
@ -338,6 +341,12 @@ int CDMRGateway::run()
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (m_conf.getDMRNetwork4Enabled()) {
|
||||
ret = createDMRNetwork4();
|
||||
if (!ret)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m_conf.getXLXNetworkEnabled()) {
|
||||
ret = createXLXNetwork();
|
||||
if (!ret)
|
||||
|
|
@ -389,6 +398,10 @@ int CDMRGateway::run()
|
|||
unsigned int dmr3DstId[3U];
|
||||
dmr3SrcId[1U] = dmr3SrcId[2U] = dmr3DstId[1U] = dmr3DstId[2U] = 0U;
|
||||
|
||||
unsigned int dmr4SrcId[3U];
|
||||
unsigned int dmr4DstId[3U];
|
||||
dmr4SrcId[1U] = dmr4SrcId[2U] = dmr4DstId[1U] = dmr4DstId[2U] = 0U;
|
||||
|
||||
CStopWatch stopWatch;
|
||||
stopWatch.start();
|
||||
|
||||
|
|
@ -612,6 +625,28 @@ int CDMRGateway::run()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!rewritten) {
|
||||
if (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) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (rewritten) {
|
||||
if (status[slotNo] == DMRGWS_NONE || status[slotNo] == DMRGWS_DMRNETWORK4) {
|
||||
m_dmrNetwork4->write(data);
|
||||
status[slotNo] = DMRGWS_DMRNETWORK4;
|
||||
timer[slotNo]->setTimeout(rfTimeout);
|
||||
timer[slotNo]->start();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -678,6 +713,27 @@ int CDMRGateway::run()
|
|||
}
|
||||
}
|
||||
|
||||
if (!rewritten) {
|
||||
if (m_dmrNetwork4 != NULL) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr4Passalls.begin(); it != m_dmr4Passalls.end(); ++it) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (rewritten) {
|
||||
if (status[slotNo] == DMRGWS_NONE || status[slotNo] == DMRGWS_DMRNETWORK4) {
|
||||
m_dmrNetwork4->write(data);
|
||||
status[slotNo] = DMRGWS_DMRNETWORK4;
|
||||
timer[slotNo]->setTimeout(rfTimeout);
|
||||
timer[slotNo]->start();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!rewritten && trace)
|
||||
LogDebug("Rule Trace,\tnot matched so rejected");
|
||||
}
|
||||
|
|
@ -847,6 +903,54 @@ int CDMRGateway::run()
|
|||
m_repeater->writeBeacon();
|
||||
}
|
||||
|
||||
if (m_dmrNetwork4 != NULL) {
|
||||
ret = m_dmrNetwork4->read(data);
|
||||
if (ret) {
|
||||
unsigned int slotNo = data.getSlotNo();
|
||||
unsigned int srcId = data.getSrcId();
|
||||
unsigned int dstId = data.getDstId();
|
||||
FLCO flco = data.getFLCO();
|
||||
|
||||
bool trace = false;
|
||||
if (ruleTrace && (srcId != dmr4SrcId[slotNo] || dstId != dmr4DstId[slotNo])) {
|
||||
dmr4SrcId[slotNo] = srcId;
|
||||
dmr4DstId[slotNo] = dstId;
|
||||
trace = true;
|
||||
}
|
||||
|
||||
if (trace)
|
||||
LogDebug("Rule Trace, network 4 transmission: Slot=%u Src=%u Dst=%s%u", slotNo, srcId, flco == FLCO_GROUP ? "TG" : "", dstId);
|
||||
|
||||
// Rewrite the slot and/or TG or neither
|
||||
bool rewritten = false;
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr4NetRewrites.begin(); it != m_dmr4NetRewrites.end(); ++it) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (rewritten) {
|
||||
// Check that the rewritten slot is free to use.
|
||||
slotNo = data.getSlotNo();
|
||||
if (status[slotNo] == DMRGWS_NONE || status[slotNo] == DMRGWS_DMRNETWORK4) {
|
||||
m_repeater->write(data);
|
||||
status[slotNo] = DMRGWS_DMRNETWORK4;
|
||||
timer[slotNo]->setTimeout(netTimeout);
|
||||
timer[slotNo]->start();
|
||||
}
|
||||
}
|
||||
|
||||
if (!rewritten && trace)
|
||||
LogDebug("Rule Trace,\tnot matched so rejected");
|
||||
}
|
||||
|
||||
ret = m_dmrNetwork4->wantsBeacon();
|
||||
if (ret)
|
||||
m_repeater->writeBeacon();
|
||||
}
|
||||
|
||||
unsigned char buffer[50U];
|
||||
unsigned int length;
|
||||
ret = m_repeater->readRadioPosition(buffer, length);
|
||||
|
|
@ -859,6 +963,8 @@ int CDMRGateway::run()
|
|||
m_dmrNetwork2->writeRadioPosition(buffer, length);
|
||||
if (m_dmrNetwork3 != NULL)
|
||||
m_dmrNetwork3->writeRadioPosition(buffer, length);
|
||||
if (m_dmrNetwork4 != NULL)
|
||||
m_dmrNetwork4->writeRadioPosition(buffer, length);
|
||||
}
|
||||
ret = m_repeater->readTalkerAlias(buffer, length);
|
||||
if (ret) {
|
||||
|
|
@ -870,6 +976,8 @@ int CDMRGateway::run()
|
|||
m_dmrNetwork2->writeTalkerAlias(buffer, length);
|
||||
if (m_dmrNetwork3 != NULL)
|
||||
m_dmrNetwork3->writeTalkerAlias(buffer, length);
|
||||
if (m_dmrNetwork4 != NULL)
|
||||
m_dmrNetwork4->writeTalkerAlias(buffer, length);
|
||||
}
|
||||
ret = m_repeater->readHomePosition(buffer, length);
|
||||
if (ret) {
|
||||
|
|
@ -881,6 +989,8 @@ int CDMRGateway::run()
|
|||
m_dmrNetwork2->writeHomePosition(buffer, length);
|
||||
if (m_dmrNetwork3 != NULL)
|
||||
m_dmrNetwork3->writeHomePosition(buffer, length);
|
||||
if (m_dmrNetwork4 != NULL)
|
||||
m_dmrNetwork4->writeHomePosition(buffer, length);
|
||||
}
|
||||
|
||||
if (voice != NULL) {
|
||||
|
|
@ -909,6 +1019,9 @@ int CDMRGateway::run()
|
|||
if (m_dmrNetwork3 != NULL)
|
||||
m_dmrNetwork3->clock(ms);
|
||||
|
||||
if (m_dmrNetwork4 != NULL)
|
||||
m_dmrNetwork4->clock(ms);
|
||||
|
||||
if (m_xlxNetwork != NULL)
|
||||
m_xlxNetwork->clock(ms);
|
||||
|
||||
|
|
@ -950,6 +1063,11 @@ int CDMRGateway::run()
|
|||
delete m_dmrNetwork3;
|
||||
}
|
||||
|
||||
if (m_dmrNetwork4 != NULL) {
|
||||
m_dmrNetwork4->close();
|
||||
delete m_dmrNetwork4;
|
||||
}
|
||||
|
||||
if (m_xlxNetwork != NULL) {
|
||||
m_xlxNetwork->close();
|
||||
delete m_xlxNetwork;
|
||||
|
|
@ -1370,6 +1488,133 @@ bool CDMRGateway::createDMRNetwork3()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CDMRGateway::createDMRNetwork4()
|
||||
{
|
||||
std::string address = m_conf.getDMRNetwork4Address();
|
||||
unsigned int port = m_conf.getDMRNetwork4Port();
|
||||
unsigned int local = m_conf.getDMRNetwork4Local();
|
||||
unsigned int id = m_conf.getDMRNetwork4Id();
|
||||
std::string password = m_conf.getDMRNetwork4Password();
|
||||
bool location = m_conf.getDMRNetwork4Location();
|
||||
bool debug = m_conf.getDMRNetwork4Debug();
|
||||
m_dmr4Name = m_conf.getDMRNetwork4Name();
|
||||
|
||||
if (id == 0U)
|
||||
id = m_repeater->getId();
|
||||
|
||||
LogInfo("DMR Network 4 Parameters");
|
||||
LogInfo(" Name: %s", m_dmr4Name.c_str());
|
||||
LogInfo(" Id: %u", id);
|
||||
LogInfo(" Address: %s", address.c_str());
|
||||
LogInfo(" Port: %u", port);
|
||||
if (local > 0U)
|
||||
LogInfo(" Local: %u", local);
|
||||
else
|
||||
LogInfo(" Local: random");
|
||||
LogInfo(" Location Data: %s", location ? "yes" : "no");
|
||||
|
||||
m_dmrNetwork4 = new CDMRNetwork(address, port, local, id, password, m_dmr3Name, VERSION, debug);
|
||||
|
||||
std::string options = m_conf.getDMRNetwork4Options();
|
||||
if (options.empty())
|
||||
options = m_repeater->getOptions();
|
||||
|
||||
if (!options.empty()) {
|
||||
LogInfo(" Options: %s", options.c_str());
|
||||
m_dmrNetwork4->setOptions(options);
|
||||
}
|
||||
|
||||
unsigned char config[400U];
|
||||
unsigned int len = getConfig(m_dmr4Name, config);
|
||||
|
||||
if (!location)
|
||||
::memcpy(config + 30U, "0.00000000.000000", 17U);
|
||||
|
||||
m_dmrNetwork4->setConfig(config, len);
|
||||
|
||||
bool ret = m_dmrNetwork4->open();
|
||||
if (!ret) {
|
||||
delete m_dmrNetwork4;
|
||||
m_dmrNetwork4 = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<CTGRewriteStruct> tgRewrites = m_conf.getDMRNetwork4TGRewrites();
|
||||
for (std::vector<CTGRewriteStruct>::const_iterator it = tgRewrites.begin(); it != tgRewrites.end(); ++it) {
|
||||
if ((*it).m_range == 1)
|
||||
LogInfo(" Rewrite RF: %u:TG%u -> %u:TG%u", (*it).m_fromSlot, (*it).m_fromTG, (*it).m_toSlot, (*it).m_toTG);
|
||||
else
|
||||
LogInfo(" Rewrite RF: %u:TG%u-TG%u -> %u:TG%u-TG%u", (*it).m_fromSlot, (*it).m_fromTG, (*it).m_fromTG + (*it).m_range - 1U, (*it).m_toSlot, (*it).m_toTG, (*it).m_toTG + (*it).m_range - 1U);
|
||||
if ((*it).m_range == 1)
|
||||
LogInfo(" Rewrite Net: %u:TG%u -> %u:TG%u", (*it).m_toSlot, (*it).m_toTG, (*it).m_fromSlot, (*it).m_fromTG);
|
||||
else
|
||||
LogInfo(" Rewrite Net: %u:TG%u-TG%u -> %u:TG%u-TG%u", (*it).m_toSlot, (*it).m_toTG, (*it).m_toTG + (*it).m_range - 1U, (*it).m_fromSlot, (*it).m_fromTG, (*it).m_fromTG + (*it).m_range - 1U);
|
||||
|
||||
CRewriteTG* rfRewrite = new CRewriteTG(m_dmr3Name, (*it).m_fromSlot, (*it).m_fromTG, (*it).m_toSlot, (*it).m_toTG, (*it).m_range);
|
||||
CRewriteTG* netRewrite = new CRewriteTG(m_dmr3Name, (*it).m_toSlot, (*it).m_toTG, (*it).m_fromSlot, (*it).m_fromTG, (*it).m_range);
|
||||
|
||||
m_dmr4RFRewrites.push_back(rfRewrite);
|
||||
m_dmr4NetRewrites.push_back(netRewrite);
|
||||
}
|
||||
|
||||
std::vector<CPCRewriteStruct> pcRewrites = m_conf.getDMRNetwork4PCRewrites();
|
||||
for (std::vector<CPCRewriteStruct>::const_iterator it = pcRewrites.begin(); it != pcRewrites.end(); ++it) {
|
||||
if ((*it).m_range == 1)
|
||||
LogInfo(" Rewrite RF: %u:%u -> %u:%u", (*it).m_fromSlot, (*it).m_fromId, (*it).m_toSlot, (*it).m_toId);
|
||||
else
|
||||
LogInfo(" Rewrite RF: %u:%u-%u -> %u:%u-%u", (*it).m_fromSlot, (*it).m_fromId, (*it).m_fromId + (*it).m_range - 1U, (*it).m_toSlot, (*it).m_toId, (*it).m_toId + (*it).m_range - 1U);
|
||||
|
||||
CRewritePC* rewrite = new CRewritePC(m_dmr3Name, (*it).m_fromSlot, (*it).m_fromId, (*it).m_toSlot, (*it).m_toId, (*it).m_range);
|
||||
|
||||
m_dmr4RFRewrites.push_back(rewrite);
|
||||
}
|
||||
|
||||
std::vector<CTypeRewriteStruct> typeRewrites = m_conf.getDMRNetwork4TypeRewrites();
|
||||
for (std::vector<CTypeRewriteStruct>::const_iterator it = typeRewrites.begin(); it != typeRewrites.end(); ++it) {
|
||||
LogInfo(" Rewrite RF: %u:TG%u -> %u:%u", (*it).m_fromSlot, (*it).m_fromTG, (*it).m_toSlot, (*it).m_toId);
|
||||
|
||||
CRewriteType* rewrite = new CRewriteType(m_dmr4Name, (*it).m_fromSlot, (*it).m_fromTG, (*it).m_toSlot, (*it).m_toId);
|
||||
|
||||
m_dmr4RFRewrites.push_back(rewrite);
|
||||
}
|
||||
|
||||
std::vector<CSrcRewriteStruct> srcRewrites = m_conf.getDMRNetwork4SrcRewrites();
|
||||
for (std::vector<CSrcRewriteStruct>::const_iterator it = srcRewrites.begin(); it != srcRewrites.end(); ++it) {
|
||||
if ((*it).m_range == 1)
|
||||
LogInfo(" Rewrite Net: %u:%u -> %u:TG%u", (*it).m_fromSlot, (*it).m_fromId, (*it).m_toSlot, (*it).m_toTG);
|
||||
else
|
||||
LogInfo(" Rewrite Net: %u:%u-%u -> %u:TG%u", (*it).m_fromSlot, (*it).m_fromId, (*it).m_fromId + (*it).m_range - 1U, (*it).m_toSlot, (*it).m_toTG);
|
||||
|
||||
CRewriteSrc* rewrite = new CRewriteSrc(m_dmr4Name, (*it).m_fromSlot, (*it).m_fromId, (*it).m_toSlot, (*it).m_toTG, (*it).m_range);
|
||||
|
||||
m_dmr4NetRewrites.push_back(rewrite);
|
||||
}
|
||||
|
||||
std::vector<unsigned int> tgPassAll = m_conf.getDMRNetwork4PassAllTG();
|
||||
for (std::vector<unsigned int>::const_iterator it = tgPassAll.begin(); it != tgPassAll.end(); ++it) {
|
||||
LogInfo(" Pass All TG: %u", *it);
|
||||
|
||||
CPassAllTG* rfPassAllTG = new CPassAllTG(m_dmr3Name, *it);
|
||||
CPassAllTG* netPassAllTG = new CPassAllTG(m_dmr3Name, *it);
|
||||
|
||||
m_dmr4Passalls.push_back(rfPassAllTG);
|
||||
m_dmr4NetRewrites.push_back(netPassAllTG);
|
||||
}
|
||||
|
||||
std::vector<unsigned int> pcPassAll = m_conf.getDMRNetwork4PassAllPC();
|
||||
for (std::vector<unsigned int>::const_iterator it = pcPassAll.begin(); it != pcPassAll.end(); ++it) {
|
||||
LogInfo(" Pass All PC: %u", *it);
|
||||
|
||||
CPassAllPC* rfPassAllPC = new CPassAllPC(m_dmr4Name, *it);
|
||||
CPassAllPC* netPassAllPC = new CPassAllPC(m_dmr4Name, *it);
|
||||
|
||||
m_dmr4Passalls.push_back(rfPassAllPC);
|
||||
m_dmr4NetRewrites.push_back(netPassAllPC);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDMRGateway::createXLXNetwork()
|
||||
{
|
||||
std::string fileName = m_conf.getXLXNetworkFile();
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ private:
|
|||
std::string m_dmr2Name;
|
||||
CDMRNetwork* m_dmrNetwork3;
|
||||
std::string m_dmr3Name;
|
||||
CDMRNetwork* m_dmrNetwork4;
|
||||
std::string m_dmr4Name;
|
||||
CReflectors* m_xlxReflectors;
|
||||
CDMRNetwork* m_xlxNetwork;
|
||||
unsigned int m_xlxId;
|
||||
|
|
@ -75,14 +77,18 @@ private:
|
|||
std::vector<CRewrite*> m_dmr2RFRewrites;
|
||||
std::vector<CRewrite*> m_dmr3NetRewrites;
|
||||
std::vector<CRewrite*> m_dmr3RFRewrites;
|
||||
std::vector<CRewrite*> m_dmr4NetRewrites;
|
||||
std::vector<CRewrite*> m_dmr4RFRewrites;
|
||||
std::vector<CRewrite*> m_dmr1Passalls;
|
||||
std::vector<CRewrite*> m_dmr2Passalls;
|
||||
std::vector<CRewrite*> m_dmr3Passalls;
|
||||
std::vector<CRewrite*> m_dmr4Passalls;
|
||||
|
||||
bool createMMDVM();
|
||||
bool createDMRNetwork1();
|
||||
bool createDMRNetwork2();
|
||||
bool createDMRNetwork3();
|
||||
bool createDMRNetwork4();
|
||||
bool createXLXNetwork();
|
||||
|
||||
bool linkXLX(unsigned int number);
|
||||
|
|
|
|||
Loading…
Reference in a new issue