diff --git a/Conf.cpp b/Conf.cpp index 3544670..f28d47d 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -45,13 +45,13 @@ m_localAddress("127.0.0.1"), m_localPort(62031U), m_timeout(10U), m_debug(false), +m_voiceEnabled(true), +m_voiceLanguage("en_GB"), +m_voiceDirectory(), m_logDisplayLevel(0U), m_logFileLevel(0U), m_logFilePath(), m_logFileRoot(), -m_voiceEnabled(true), -m_voiceLanguage("en_GB"), -m_voiceDirectory(), m_dmrNetwork1Enabled(false), m_dmrNetwork1Id(0U), m_dmrNetwork1Address(), diff --git a/Conf.h b/Conf.h index a4f26ca..9fc6e64 100644 --- a/Conf.h +++ b/Conf.h @@ -119,6 +119,9 @@ private: unsigned int m_dmrNetwork1Local; std::string m_dmrNetwork1Password; bool m_dmrNetwork1Debug; + std::vector m_dmrNetwork1Rewrites; + bool m_dmrNetwork1PrivateSlot1; + bool m_dmrNetwork1PrivateSlot2; bool m_dmrNetwork2Enabled; unsigned int m_dmrNetwork2Id; @@ -127,9 +130,9 @@ private: unsigned int m_dmrNetwork2Local; std::string m_dmrNetwork2Password; bool m_dmrNetwork2Debug; - std::vector m_dmrNetwork1Rewrites; - bool m_dmrNetwork1PrivateSlot1; - bool m_dmrNetwork1PrivateSlot2; + std::vector m_dmrNetwork2Rewrites; + bool m_dmrNetwork2PrivateSlot1; + bool m_dmrNetwork2PrivateSlot2; bool m_xlxNetworkEnabled; unsigned int m_xlxNetworkId; @@ -141,9 +144,6 @@ private: unsigned int m_xlxNetworkTG; std::string m_xlxNetworkOptions; bool m_xlxNetworkDebug; - std::vector m_dmrNetwork2Rewrites; - bool m_dmrNetwork2PrivateSlot1; - bool m_dmrNetwork2PrivateSlot2; }; #endif diff --git a/DMRGateway.cpp b/DMRGateway.cpp index 252fcd4..5cdc36f 100644 --- a/DMRGateway.cpp +++ b/DMRGateway.cpp @@ -19,7 +19,6 @@ #include "DMRGateway.h" #include "Version.h" #include "StopWatch.h" -#include "Rewrite.h" #include "Thread.h" #include "Voice.h" #include "Log.h" @@ -122,6 +121,8 @@ m_xlxNetwork(NULL), m_reflector(4000U), m_xlxSlot(0U), m_xlxTG(0U), +m_rptRewrite(NULL), +m_xlxRewrite(NULL), m_dmr1NetRewrites(), m_dmr1RFRewrites(), m_dmr2NetRewrites(), @@ -260,6 +261,7 @@ int CDMRGateway::run() return 1; } + if (m_conf.getXLXNetworkEnabled()) { ret = createXLXNetwork(); if (!ret) @@ -268,9 +270,6 @@ int CDMRGateway::run() 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(); @@ -315,7 +314,7 @@ int CDMRGateway::run() FLCO flco = data.getFLCO(); if (flco == FLCO_GROUP && slotNo == m_xlxSlot && dstId == m_xlxTG) { - xlxRewrite.process(data); + m_xlxRewrite->process(data); m_xlxNetwork->write(data); status[slotNo] = DMRGWS_REFLECTOR; timer[slotNo]->start(); @@ -347,7 +346,7 @@ int CDMRGateway::run() } } } - } else if (flco = FLCO_USER_USER) { + } else if (flco == FLCO_USER_USER) { if (m_dmrNetwork1 != NULL && slotNo == 1U && m_dmr1PrivateSlot1) { m_dmrNetwork1->write(data); status[slotNo] = DMRGWS_NETWORK1; @@ -418,7 +417,7 @@ int CDMRGateway::run() if (status[m_xlxSlot] == DMRGWS_NONE || status[m_xlxSlot] == DMRGWS_REFLECTOR) { unsigned int slotNo = data.getSlotNo(); if (slotNo == XLX_SLOT) { - rptRewrite.process(data); + m_rptRewrite->process(data); m_repeater->write(data); status[m_xlxSlot] = DMRGWS_REFLECTOR; timer[m_xlxSlot]->start(); @@ -575,6 +574,9 @@ int CDMRGateway::run() delete m_xlxNetwork; } + delete m_rptRewrite; + delete m_xlxRewrite; + delete timer[1U]; delete timer[2U]; @@ -628,7 +630,7 @@ bool CDMRGateway::createDMRNetwork1() else LogInfo(" Local: random"); - m_dmrNetwork1 = new CDMRNetwork(address, port, local, id, password, "DMR", debug); + m_dmrNetwork1 = new CDMRNetwork(address, port, local, id, password, "DMR1", debug); std::string options = m_repeater->getOptions(); if (!options.empty()) { @@ -689,7 +691,7 @@ bool CDMRGateway::createDMRNetwork2() else LogInfo(" Local: random"); - m_dmrNetwork2 = new CDMRNetwork(address, port, local, id, password, "DMR", debug); + m_dmrNetwork2 = new CDMRNetwork(address, port, local, id, password, "DMR2", debug); std::string options = m_repeater->getOptions(); if (!options.empty()) { @@ -776,5 +778,8 @@ bool CDMRGateway::createXLXNetwork() LogInfo(" Slot: %u", m_xlxSlot); LogInfo(" TG: %u", m_xlxTG); + m_rptRewrite = new CRewrite(XLX_SLOT, XLX_TG, m_xlxSlot, m_xlxTG); + m_xlxRewrite = new CRewrite(m_xlxSlot, m_xlxTG, XLX_SLOT, XLX_TG); + return true; } diff --git a/DMRGateway.h b/DMRGateway.h index 07d94c7..02a03a8 100644 --- a/DMRGateway.h +++ b/DMRGateway.h @@ -44,6 +44,8 @@ private: unsigned int m_reflector; unsigned int m_xlxSlot; unsigned int m_xlxTG; + CRewrite* m_rptRewrite; + CRewrite* m_xlxRewrite; std::vector m_dmr1NetRewrites; std::vector m_dmr1RFRewrites; std::vector m_dmr2NetRewrites; diff --git a/Version.h b/Version.h index e5b708e..509a59d 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20170506"; +const char* VERSION = "20170506a"; #endif diff --git a/Voice.cpp b/Voice.cpp index 1b6829c..440e72c 100644 --- a/Voice.cpp +++ b/Voice.cpp @@ -56,8 +56,8 @@ m_stopWatch(), m_seqNo(0U), m_streamId(0U), m_sent(0U), -m_positions(NULL), m_ambe(NULL), +m_positions(NULL), m_data(), m_it() { @@ -111,54 +111,55 @@ bool CVoice::open() m_ambe = new unsigned char[statStruct.st_size]; - ::fread(m_ambe, 1U, statStruct.st_size, fpambe); + size_t sizeRead = ::fread(m_ambe, 1U, statStruct.st_size, fpambe); + if (sizeRead != 0U) { + char buffer[80U]; + while (::fgets(buffer, 80, fpindx) != NULL) { + char* p1 = ::strtok(buffer, "\t\r\n"); + char* p2 = ::strtok(NULL, "\t\r\n"); + char* p3 = ::strtok(NULL, "\t\r\n"); - char buffer[80U]; - while (::fgets(buffer, 80, fpindx) != NULL) { - char* p1 = ::strtok(buffer, "\t\r\n"); - char* p2 = ::strtok(NULL, "\t\r\n"); - char* p3 = ::strtok(NULL, "\t\r\n"); + if (p1 != NULL && p2 != NULL && p3 != NULL) { + unsigned int start = ::atoi(p2) * 9U; + unsigned int length = ::atoi(p3) * 9U; - if (p1 != NULL && p2 != NULL && p3 != NULL) { - unsigned int start = ::atoi(p2) * 9U; - unsigned int length = ::atoi(p3) * 9U; - - if (::strcmp(p1, "0") == 0) { - m_positions[POSITION_0].m_start = start; - m_positions[POSITION_0].m_length = length; - } else if (::strcmp(p1, "1") == 0) { - m_positions[POSITION_1].m_start = start; - m_positions[POSITION_1].m_length = length; - } else if (::strcmp(p1, "2") == 0) { - m_positions[POSITION_2].m_start = start; - m_positions[POSITION_2].m_length = length; - } else if (::strcmp(p1, "3") == 0) { - m_positions[POSITION_3].m_start = start; - m_positions[POSITION_3].m_length = length; - } else if (::strcmp(p1, "4") == 0) { - m_positions[POSITION_4].m_start = start; - m_positions[POSITION_4].m_length = length; - } else if (::strcmp(p1, "5") == 0) { - m_positions[POSITION_5].m_start = start; - m_positions[POSITION_5].m_length = length; - } else if (::strcmp(p1, "6") == 0) { - m_positions[POSITION_6].m_start = start; - m_positions[POSITION_6].m_length = length; - } else if (::strcmp(p1, "7") == 0) { - m_positions[POSITION_7].m_start = start; - m_positions[POSITION_7].m_length = length; - } else if (::strcmp(p1, "8") == 0) { - m_positions[POSITION_8].m_start = start; - m_positions[POSITION_8].m_length = length; - } else if (::strcmp(p1, "9") == 0) { - m_positions[POSITION_9].m_start = start; - m_positions[POSITION_9].m_length = length; - } else if (::strcmp(p1, "connected") == 0) { - m_positions[POSITION_CONNECTED].m_start = start; - m_positions[POSITION_CONNECTED].m_length = length; - } else if (::strcmp(p1, "disconnected") == 0) { - m_positions[POSITION_DISCONNECTED].m_start = start; - m_positions[POSITION_DISCONNECTED].m_length = length; + if (::strcmp(p1, "0") == 0) { + m_positions[POSITION_0].m_start = start; + m_positions[POSITION_0].m_length = length; + } else if (::strcmp(p1, "1") == 0) { + m_positions[POSITION_1].m_start = start; + m_positions[POSITION_1].m_length = length; + } else if (::strcmp(p1, "2") == 0) { + m_positions[POSITION_2].m_start = start; + m_positions[POSITION_2].m_length = length; + } else if (::strcmp(p1, "3") == 0) { + m_positions[POSITION_3].m_start = start; + m_positions[POSITION_3].m_length = length; + } else if (::strcmp(p1, "4") == 0) { + m_positions[POSITION_4].m_start = start; + m_positions[POSITION_4].m_length = length; + } else if (::strcmp(p1, "5") == 0) { + m_positions[POSITION_5].m_start = start; + m_positions[POSITION_5].m_length = length; + } else if (::strcmp(p1, "6") == 0) { + m_positions[POSITION_6].m_start = start; + m_positions[POSITION_6].m_length = length; + } else if (::strcmp(p1, "7") == 0) { + m_positions[POSITION_7].m_start = start; + m_positions[POSITION_7].m_length = length; + } else if (::strcmp(p1, "8") == 0) { + m_positions[POSITION_8].m_start = start; + m_positions[POSITION_8].m_length = length; + } else if (::strcmp(p1, "9") == 0) { + m_positions[POSITION_9].m_start = start; + m_positions[POSITION_9].m_length = length; + } else if (::strcmp(p1, "connected") == 0) { + m_positions[POSITION_CONNECTED].m_start = start; + m_positions[POSITION_CONNECTED].m_length = length; + } else if (::strcmp(p1, "disconnected") == 0) { + m_positions[POSITION_DISCONNECTED].m_start = start; + m_positions[POSITION_DISCONNECTED].m_length = length; + } } } }