Allow for excluded TGs.

This commit is contained in:
Jonathan Naylor
2020-04-07 23:03:27 +01:00
parent efed75f160
commit 6b470c92a7
10 changed files with 178 additions and 66 deletions

View File

@@ -180,7 +180,8 @@ m_dmr1Passalls(),
m_dmr2Passalls(),
m_dmr3Passalls(),
m_dmr4Passalls(),
m_dmr5Passalls()
m_dmr5Passalls(),
m_dynVoices()
{
m_status = new DMRGW_STATUS[3U];
m_status[1U] = DMRGWS_NONE;
@@ -201,10 +202,10 @@ CDMRGateway::~CDMRGateway()
delete *it;
for (std::vector<CRewrite*>::iterator it = m_dmr2NetRewrites.begin(); it != m_dmr2NetRewrites.end(); ++it)
delete *it;
delete *it;
for (std::vector<CRewrite*>::iterator it = m_dmr2RFRewrites.begin(); it != m_dmr2RFRewrites.end(); ++it)
delete *it;
delete *it;
for (std::vector<CRewrite*>::iterator it = m_dmr2SrcRewrites.begin(); it != m_dmr2SrcRewrites.end(); ++it)
delete *it;
@@ -251,6 +252,9 @@ CDMRGateway::~CDMRGateway()
for (std::vector<CRewrite*>::iterator it = m_dmr5Passalls.begin(); it != m_dmr5Passalls.end(); ++it)
delete *it;
for (std::vector<CDynVoice*>::iterator it = m_dynVoices.begin(); it != m_dynVoices.end(); ++it)
delete* it;
delete m_rptRewrite;
delete m_xlxRewrite;
@@ -377,8 +381,6 @@ int CDMRGateway::run()
}
CXLXVoice* xlxVoice = NULL;
CDynVoice* dynVoice = NULL;
if (m_conf.getVoiceEnabled()) {
std::string language = m_conf.getVoiceLanguage();
std::string directory = m_conf.getVoiceDirectory();
@@ -396,41 +398,34 @@ int CDMRGateway::run()
xlxVoice = NULL;
}
}
dynVoice = new CDynVoice(directory, language, m_repeater->getId());
bool ret = dynVoice->open();
if (!ret) {
delete dynVoice;
dynVoice = NULL;
}
}
if (m_conf.getDMRNetwork1Enabled()) {
ret = createDMRNetwork1(dynVoice);
ret = createDMRNetwork1();
if (!ret)
return 1;
}
if (m_conf.getDMRNetwork2Enabled()) {
ret = createDMRNetwork2(dynVoice);
ret = createDMRNetwork2();
if (!ret)
return 1;
}
if (m_conf.getDMRNetwork3Enabled()) {
ret = createDMRNetwork3(dynVoice);
ret = createDMRNetwork3();
if (!ret)
return 1;
}
if (m_conf.getDMRNetwork4Enabled()) {
ret = createDMRNetwork4(dynVoice);
ret = createDMRNetwork4();
if (!ret)
return 1;
}
if (m_conf.getDMRNetwork5Enabled()) {
ret = createDMRNetwork5(dynVoice);
ret = createDMRNetwork5();
if (!ret)
return 1;
}
@@ -1132,8 +1127,8 @@ int CDMRGateway::run()
}
}
if (dynVoice != NULL) {
ret = dynVoice->read(data);
for (std::vector<CDynVoice*>::iterator it = m_dynVoices.begin(); it != m_dynVoices.end(); ++it) {
ret = (*it)->read(data);
if (ret)
m_repeater->write(data);
}
@@ -1169,8 +1164,8 @@ int CDMRGateway::run()
if (xlxVoice != NULL)
xlxVoice->clock(ms);
if (dynVoice != NULL)
dynVoice->clock(ms);
for (std::vector<CDynVoice*>::iterator it = m_dynVoices.begin(); it != m_dynVoices.end(); ++it)
(*it)->clock(ms);
for (unsigned int i = 1U; i < 3U; i++) {
timer[i]->clock(ms);
@@ -1185,7 +1180,6 @@ int CDMRGateway::run()
}
delete xlxVoice;
delete dynVoice;
m_repeater->close();
delete m_repeater;
@@ -1254,7 +1248,7 @@ bool CDMRGateway::createMMDVM()
return true;
}
bool CDMRGateway::createDMRNetwork1(CDynVoice* voice)
bool CDMRGateway::createDMRNetwork1()
{
std::string address = m_conf.getDMRNetwork1Address();
unsigned int port = m_conf.getDMRNetwork1Port();
@@ -1360,8 +1354,23 @@ bool CDMRGateway::createDMRNetwork1(CDynVoice* voice)
for (std::vector<CTGDynRewriteStruct>::const_iterator it = dynRewrites.begin(); it != dynRewrites.end(); ++it) {
LogInfo(" Dyn Rewrite: %u:TG%u-%u:TG%u <-> %u:TG%u (disc %u:%u) (status %u:%u)", (*it).m_slot, (*it).m_fromTG, (*it).m_slot, (*it).m_fromTG + (*it).m_range - 1U, (*it).m_slot, (*it).m_toTG, (*it).m_slot, (*it).m_discPC, (*it).m_slot, (*it).m_statusPC);
CDynVoice* voice = NULL;
if (m_conf.getVoiceEnabled()) {
std::string language = m_conf.getVoiceLanguage();
std::string directory = m_conf.getVoiceDirectory();
voice = new CDynVoice(directory, language, m_repeater->getId(), (*it).m_slot, (*it).m_toTG);
bool ret = voice->open();
if (!ret) {
delete voice;
voice = NULL;
} else {
m_dynVoices.push_back(voice);
}
}
CRewriteDynTGNet* netRewriteDynTG = new CRewriteDynTGNet(m_dmr1Name, (*it).m_slot, (*it).m_toTG);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr1Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, netRewriteDynTG, voice);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr1Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, (*it).m_exclTGs, netRewriteDynTG, voice);
m_dmr1RFRewrites.push_back(rfRewriteDynTG);
m_dmr1NetRewrites.push_back(netRewriteDynTG);
@@ -1403,7 +1412,7 @@ bool CDMRGateway::createDMRNetwork1(CDynVoice* voice)
return true;
}
bool CDMRGateway::createDMRNetwork2(CDynVoice* voice)
bool CDMRGateway::createDMRNetwork2()
{
std::string address = m_conf.getDMRNetwork2Address();
unsigned int port = m_conf.getDMRNetwork2Port();
@@ -1509,8 +1518,23 @@ bool CDMRGateway::createDMRNetwork2(CDynVoice* voice)
for (std::vector<CTGDynRewriteStruct>::const_iterator it = dynRewrites.begin(); it != dynRewrites.end(); ++it) {
LogInfo(" Dyn Rewrite: %u:TG%u-%u:TG%u <-> %u:TG%u (disc %u:%u) (status %u:%u)", (*it).m_slot, (*it).m_fromTG, (*it).m_slot, (*it).m_fromTG + (*it).m_range - 1U, (*it).m_slot, (*it).m_toTG, (*it).m_slot, (*it).m_discPC, (*it).m_slot, (*it).m_statusPC);
CDynVoice* voice = NULL;
if (m_conf.getVoiceEnabled()) {
std::string language = m_conf.getVoiceLanguage();
std::string directory = m_conf.getVoiceDirectory();
voice = new CDynVoice(directory, language, m_repeater->getId(), (*it).m_slot, (*it).m_toTG);
bool ret = voice->open();
if (!ret) {
delete voice;
voice = NULL;
} else {
m_dynVoices.push_back(voice);
}
}
CRewriteDynTGNet* netRewriteDynTG = new CRewriteDynTGNet(m_dmr2Name, (*it).m_slot, (*it).m_toTG);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr2Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, netRewriteDynTG, voice);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr2Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, (*it).m_exclTGs, netRewriteDynTG, voice);
m_dmr2RFRewrites.push_back(rfRewriteDynTG);
m_dmr2NetRewrites.push_back(netRewriteDynTG);
@@ -1552,7 +1576,7 @@ bool CDMRGateway::createDMRNetwork2(CDynVoice* voice)
return true;
}
bool CDMRGateway::createDMRNetwork3(CDynVoice* voice)
bool CDMRGateway::createDMRNetwork3()
{
std::string address = m_conf.getDMRNetwork3Address();
unsigned int port = m_conf.getDMRNetwork3Port();
@@ -1658,8 +1682,23 @@ bool CDMRGateway::createDMRNetwork3(CDynVoice* voice)
for (std::vector<CTGDynRewriteStruct>::const_iterator it = dynRewrites.begin(); it != dynRewrites.end(); ++it) {
LogInfo(" Dyn Rewrite: %u:TG%u-%u:TG%u <-> %u:TG%u (disc %u:%u) (status %u:%u)", (*it).m_slot, (*it).m_fromTG, (*it).m_slot, (*it).m_fromTG + (*it).m_range - 1U, (*it).m_slot, (*it).m_toTG, (*it).m_slot, (*it).m_discPC, (*it).m_slot, (*it).m_statusPC);
CDynVoice* voice = NULL;
if (m_conf.getVoiceEnabled()) {
std::string language = m_conf.getVoiceLanguage();
std::string directory = m_conf.getVoiceDirectory();
voice = new CDynVoice(directory, language, m_repeater->getId(), (*it).m_slot, (*it).m_toTG);
bool ret = voice->open();
if (!ret) {
delete voice;
voice = NULL;
} else {
m_dynVoices.push_back(voice);
}
}
CRewriteDynTGNet* netRewriteDynTG = new CRewriteDynTGNet(m_dmr3Name, (*it).m_slot, (*it).m_toTG);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr3Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, netRewriteDynTG, voice);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr3Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, (*it).m_exclTGs, netRewriteDynTG, voice);
m_dmr3RFRewrites.push_back(rfRewriteDynTG);
m_dmr3NetRewrites.push_back(netRewriteDynTG);
@@ -1701,7 +1740,7 @@ bool CDMRGateway::createDMRNetwork3(CDynVoice* voice)
return true;
}
bool CDMRGateway::createDMRNetwork4(CDynVoice* voice)
bool CDMRGateway::createDMRNetwork4()
{
std::string address = m_conf.getDMRNetwork4Address();
unsigned int port = m_conf.getDMRNetwork4Port();
@@ -1807,8 +1846,23 @@ bool CDMRGateway::createDMRNetwork4(CDynVoice* voice)
for (std::vector<CTGDynRewriteStruct>::const_iterator it = dynRewrites.begin(); it != dynRewrites.end(); ++it) {
LogInfo(" Dyn Rewrite: %u:TG%u-%u:TG%u <-> %u:TG%u (disc %u:%u) (status %u:%u)", (*it).m_slot, (*it).m_fromTG, (*it).m_slot, (*it).m_fromTG + (*it).m_range - 1U, (*it).m_slot, (*it).m_toTG, (*it).m_slot, (*it).m_discPC, (*it).m_slot, (*it).m_statusPC);
CDynVoice* voice = NULL;
if (m_conf.getVoiceEnabled()) {
std::string language = m_conf.getVoiceLanguage();
std::string directory = m_conf.getVoiceDirectory();
voice = new CDynVoice(directory, language, m_repeater->getId(), (*it).m_slot, (*it).m_toTG);
bool ret = voice->open();
if (!ret) {
delete voice;
voice = NULL;
} else {
m_dynVoices.push_back(voice);
}
}
CRewriteDynTGNet* netRewriteDynTG = new CRewriteDynTGNet(m_dmr4Name, (*it).m_slot, (*it).m_toTG);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr4Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, netRewriteDynTG, voice);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr4Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, (*it).m_exclTGs, netRewriteDynTG, voice);
m_dmr4RFRewrites.push_back(rfRewriteDynTG);
m_dmr4NetRewrites.push_back(netRewriteDynTG);
@@ -1850,7 +1904,7 @@ bool CDMRGateway::createDMRNetwork4(CDynVoice* voice)
return true;
}
bool CDMRGateway::createDMRNetwork5(CDynVoice* voice)
bool CDMRGateway::createDMRNetwork5()
{
std::string address = m_conf.getDMRNetwork5Address();
unsigned int port = m_conf.getDMRNetwork5Port();
@@ -1956,8 +2010,23 @@ bool CDMRGateway::createDMRNetwork5(CDynVoice* voice)
for (std::vector<CTGDynRewriteStruct>::const_iterator it = dynRewrites.begin(); it != dynRewrites.end(); ++it) {
LogInfo(" Dyn Rewrite: %u:TG%u-%u:TG%u <-> %u:TG%u (disc %u:%u) (status %u:%u)", (*it).m_slot, (*it).m_fromTG, (*it).m_slot, (*it).m_fromTG + (*it).m_range - 1U, (*it).m_slot, (*it).m_toTG, (*it).m_slot, (*it).m_discPC, (*it).m_slot, (*it).m_statusPC);
CDynVoice* voice = NULL;
if (m_conf.getVoiceEnabled()) {
std::string language = m_conf.getVoiceLanguage();
std::string directory = m_conf.getVoiceDirectory();
voice = new CDynVoice(directory, language, m_repeater->getId(), (*it).m_slot, (*it).m_toTG);
bool ret = voice->open();
if (!ret) {
delete voice;
voice = NULL;
} else {
m_dynVoices.push_back(voice);
}
}
CRewriteDynTGNet* netRewriteDynTG = new CRewriteDynTGNet(m_dmr5Name, (*it).m_slot, (*it).m_toTG);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr5Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, netRewriteDynTG, voice);
CRewriteDynTGRF* rfRewriteDynTG = new CRewriteDynTGRF(m_dmr5Name, (*it).m_slot, (*it).m_fromTG, (*it).m_toTG, (*it).m_discPC, (*it).m_statusPC, (*it).m_range, (*it).m_exclTGs, netRewriteDynTG, voice);
m_dmr5RFRewrites.push_back(rfRewriteDynTG);
m_dmr5NetRewrites.push_back(netRewriteDynTG);