From 3a473472de118bb2d02a11b3fbab5b063dd5f972 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 17 Sep 2016 10:00:45 +0100 Subject: [PATCH 01/16] Add TG ReWrite options to sample MMDVM.ini --- MMDVM.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MMDVM.ini b/MMDVM.ini index addf531..e33eb58 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -63,6 +63,8 @@ SelfOnly=0 LookupFile=DMRIds.dat CallHang=3 TXHang=4 +#TGRewriteSlot1=0 +#TGReWriteSlot2=0 #Blacklist= #DstIdBlackListSlot1RF= #DstIdBlackListSlot2RF= From aa3e592ebb4bd155a0a90f1e987fad760dc86836 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 17 Sep 2016 11:07:23 +0100 Subject: [PATCH 02/16] Added check to exclude private calls from TG rewrite. (FLCO_GROUP) --- DMRAccessControl.cpp | 6 +++++- DMRAccessControl.h | 3 ++- DMRSlot.cpp | 9 ++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index e2a9808..0b3c7a5 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -20,6 +20,7 @@ #include #include + std::vector DMRAccessControl::m_dstBlackListSlot1RF; std::vector DMRAccessControl::m_dstBlackListSlot2RF; std::vector DMRAccessControl::m_dstWhiteListSlot1RF; @@ -196,7 +197,7 @@ bool DMRAccessControl::validateAccess (unsigned int src_id, unsigned int dst_id, } } -unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, unsigned int slot, bool network) +unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, unsigned int slot, bool network, CDMRLC* dmrLC) { if (slot == 1 && m_TGRewriteSlot1 == false) @@ -204,6 +205,9 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (slot == 2 && m_TGRewriteSlot2 == false) return 0; + + if (dmrLC->getFLCO() != FLCO_GROUP) + return 0; std::time_t currenttime = std::time(nullptr); diff --git a/DMRAccessControl.h b/DMRAccessControl.h index ec36497..1b520cd 100644 --- a/DMRAccessControl.h +++ b/DMRAccessControl.h @@ -17,6 +17,7 @@ #include #include +#include "DMRLC.h" class DMRAccessControl { public: @@ -24,7 +25,7 @@ public: static void init(const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, const std::vector& SrcIdBlacklist, bool selfOnly, const std::vector& prefixes,unsigned int id,unsigned int callHang, bool TGRewrteSlot1, bool TGRewrteSlot2); - static unsigned int DstIdRewrite(unsigned int id, unsigned int sid,unsigned int slot, bool network); + static unsigned int DstIdRewrite(unsigned int id, unsigned int sid,unsigned int slot, bool network, CDMRLC* dmrLC); static void setOverEndTime(); private: diff --git a/DMRSlot.cpp b/DMRSlot.cpp index 3cdde6d..30850b8 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -159,7 +159,7 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) return; } - unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false); + unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false,lc); if (rw_id) { lc->setDstId(rw_id); @@ -492,8 +492,7 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) delete lc; return; } - // Test dst rewrite - unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false); + unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false,lc); if (rw_id) { lc->setDstId(rw_id); @@ -778,7 +777,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) return; // Test dst rewrite - unsigned int rw_id = DMRAccessControl::DstIdRewrite(did, sid,m_slotNo, true); + unsigned int rw_id = DMRAccessControl::DstIdRewrite(did, sid,m_slotNo, true,m_netLC); if (rw_id) { m_netLC->setDstId(rw_id); @@ -848,7 +847,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) return; // Test dst rewrite - unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,true); + unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,true, m_netLC); if (rw_id) { m_netLC->setDstId(rw_id); From a5f86c15bb3e6687c6ce2340fa627375e93bdd7b Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 17 Sep 2016 11:19:17 +0100 Subject: [PATCH 03/16] Allow TG IDs > 5000 in TG Rewrite --- DMRAccessControl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 0b3c7a5..8bd0cc8 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -214,7 +214,7 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (network) { m_dstRewriteID = did; m_SrcID = sid; - if (did < 4000 && did > 0 && did != 9) { + if ( (did < 4000 || did > 5000) && did > 0 && did != 9) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; } else { @@ -223,7 +223,7 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); - } else if (did < 4000 && did > 0 && did !=9) { + } else if ((did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; } return 0; From fbcc72420d9ba6daff7b984835bb5e9bca5bab79 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 17 Sep 2016 13:35:35 +0100 Subject: [PATCH 04/16] TGRewrite: add rewrite of inbound reflector voice prompts to TG9 --- DMRAccessControl.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 8bd0cc8..ff6dd7c 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -205,18 +205,20 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (slot == 2 && m_TGRewriteSlot2 == false) return 0; - - if (dmrLC->getFLCO() != FLCO_GROUP) - return 0; std::time_t currenttime = std::time(nullptr); if (network) { m_dstRewriteID = did; m_SrcID = sid; - if ( (did < 4000 || did > 5000) && did > 0 && did != 9) { + if ( (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; + // rewrite incoming BM voice prompts to TG 9 + } else if ((sid >= 4000 && sid <= 5000) && dmrLC->getFLCO() == FLCO_USER_USER) { + dmrLC->setFLCO(FLCO_GROUP); + LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG9",slot,did); + return 9; } else { return 0; } From 40a9a2c562aa1cf031a1583091649f006d6a789c Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 18 Sep 2016 21:47:03 +0100 Subject: [PATCH 05/16] Direct dial, logic changes --- DMRAccessControl.cpp | 18 +++++++++++++++--- DMRAccessControl.h | 2 ++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index ff6dd7c..26baf3d 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -19,6 +19,7 @@ #include #include #include +#include std::vector DMRAccessControl::m_dstBlackListSlot1RF; @@ -42,6 +43,8 @@ unsigned int DMRAccessControl::m_id = 0U; unsigned int DMRAccessControl::m_dstRewriteID = 0U; unsigned int DMRAccessControl::m_SrcID = 0U; +CDMRLC* DMRAccessControl::m_lastdmrLC; + std::time_t DMRAccessControl::m_time; unsigned int DMRAccessControl::m_callHang; @@ -211,23 +214,32 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (network) { m_dstRewriteID = did; m_SrcID = sid; + memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); if ( (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; // rewrite incoming BM voice prompts to TG 9 } else if ((sid >= 4000 && sid <= 5000) && dmrLC->getFLCO() == FLCO_USER_USER) { dmrLC->setFLCO(FLCO_GROUP); - LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG9",slot,did); + LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); return 9; + // rewrite direct dial inbound + } else if (did == 235135 && dmrLC->getFLCO() == FLCO_USER_USER) { + dmrLC->setFLCO(FLCO_GROUP); + LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); + return(9); } else { return 0; } - } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime) { + } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); } else if ((did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; - } + } else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { + LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); + return(m_SrcID); + } return 0; } diff --git a/DMRAccessControl.h b/DMRAccessControl.h index 1b520cd..95b2df9 100644 --- a/DMRAccessControl.h +++ b/DMRAccessControl.h @@ -61,6 +61,8 @@ private: static bool m_TGRewriteSlot1; static bool m_TGRewriteSlot2; + static CDMRLC* m_lastdmrLC; + }; From 0fa117969efbb7040f6b41a473c56f4211296629 Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 18 Sep 2016 21:59:05 +0100 Subject: [PATCH 06/16] Added separate config section for DMR TG Rewrite --- Conf.cpp | 11 +++++++---- MMDVM.ini | 10 ++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index b87724e..4511dc0 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -203,6 +203,8 @@ bool CConf::read() section = SECTION_NEXTION; else if (::strncmp(buffer, "[OLED]", 6U) == 0) section = SECTION_OLED; + else if (::strncmp(buffer, "[DMR TG Rewirte]", 16U) == 0) + section = SECTION_TGREWRITE else section = SECTION_NONE; @@ -332,10 +334,6 @@ bool CConf::read() m_dmrColorCode = (unsigned int)::atoi(value); else if (::strcmp(key, "SelfOnly") == 0) m_dmrSelfOnly = ::atoi(value) == 1; - else if (::strcmp(key, "TGRewriteSlot1") == 0) - m_TGRewriteSlot1 = ::atoi(value) == 1; - else if (::strcmp(key, "TGRewriteSlot2") == 0) - m_TGRewriteSlot2 = ::atoi(value) == 1; else if (::strcmp(key, "Prefixes") == 0) { char* p = ::strtok(value, ",\r\n"); while (p != NULL) { @@ -520,6 +518,11 @@ bool CConf::read() m_oledBrightness = (unsigned char)::atoi(value); else if (::strcmp(key, "Brightness") == 0) m_oledInvert = (unsigned char)::atoi(value); + } else if (section == SECTION_TGREWRITE) { + if (::strcmp(key, "TGRewriteSlot1") == 0) + m_TGRewriteSlot1 = ::atoi(value) == 1; + else if (::strcmp(key, "TGRewriteSlot2") == 0) + m_TGRewriteSlot2 = ::atoi(value) == 1; } } diff --git a/MMDVM.ini b/MMDVM.ini index e33eb58..65959b0 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -63,8 +63,6 @@ SelfOnly=0 LookupFile=DMRIds.dat CallHang=3 TXHang=4 -#TGRewriteSlot1=0 -#TGReWriteSlot2=0 #Blacklist= #DstIdBlackListSlot1RF= #DstIdBlackListSlot2RF= @@ -75,6 +73,14 @@ TXHang=4 #DstIdWhiteListSlot1NET= #DstIdWhiteListSlot2NET= +[DMR TG Rewrite] +TGRewriteSlot1=0 +TGReWriteSlot2=0 +BMAutoRewrite=0 +RewriteReflectorVoicePrompts=0 +DirectDial=0 +TargetTG=9 + [System Fusion] Enable=1 From ec1692608d710695764fde41db46e2c3a5f4ab6b Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 19 Sep 2016 12:54:41 +0100 Subject: [PATCH 07/16] Conf options --- Conf.cpp | 5 +++++ MMDVM.ini | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Conf.cpp b/Conf.cpp index 4511dc0..7bc1421 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -523,6 +523,11 @@ bool CConf::read() m_TGRewriteSlot1 = ::atoi(value) == 1; else if (::strcmp(key, "TGRewriteSlot2") == 0) m_TGRewriteSlot2 = ::atoi(value) == 1; + else if (::strcmp(key, "BMAutoRewrite") == 0) + m_BMAutoRewrite = ::atoi(value) == 1; + else if (::strcmp(key, "DirectDial") == 0) + m_BMAutoRewrite = ::atoi(value) == 1; + } } diff --git a/MMDVM.ini b/MMDVM.ini index 65959b0..2940f54 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -77,9 +77,11 @@ TXHang=4 TGRewriteSlot1=0 TGReWriteSlot2=0 BMAutoRewrite=0 -RewriteReflectorVoicePrompts=0 +BMRewriteReflectorVoicePrompts=0 DirectDial=0 TargetTG=9 +#RewriteMapSlot1= +#RewritemapSlot2= [System Fusion] Enable=1 From 90bad8d9c8190a798c0691aa638e46970555a474 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 19 Sep 2016 13:39:51 +0100 Subject: [PATCH 08/16] wip --- Conf.cpp | 17 +++++++++++++++-- Conf.h | 5 +++++ DMRAccessControl.cpp | 22 +++++++++++----------- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index 7bc1421..7aa385e 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -43,7 +43,8 @@ enum SECTION { SECTION_TFTSERIAL, SECTION_HD44780, SECTION_NEXTION, - SECTION_OLED + SECTION_OLED, + SECTION_TGREWRITE }; CConf::CConf(const std::string& file) : @@ -95,6 +96,8 @@ m_dmrColorCode(2U), m_dmrSelfOnly(false), m_TGRewriteSlot1(false), m_TGRewriteSlot2(false), +m_BMAutoRewrite(false), +m_DirectDial(false), m_dmrPrefixes(), m_dmrBlackList(), m_dmrDstIdBlacklistSlot1RF(), @@ -204,7 +207,7 @@ bool CConf::read() else if (::strncmp(buffer, "[OLED]", 6U) == 0) section = SECTION_OLED; else if (::strncmp(buffer, "[DMR TG Rewirte]", 16U) == 0) - section = SECTION_TGREWRITE + section = SECTION_TGREWRITE; else section = SECTION_NONE; @@ -772,6 +775,16 @@ bool CConf::getDMRTGRewriteSlot2() const return m_TGRewriteSlot2; } +bool CConf::getDMRBMAutoRewrite() const +{ + return m_BMAutoRewrite; +} + +bool CConf::getDMRDirectDial() const +{ + return m_DirectDial; +} + std::vector CConf::getDMRPrefixes() const { return m_dmrPrefixes; diff --git a/Conf.h b/Conf.h index 39f9b48..1683a01 100644 --- a/Conf.h +++ b/Conf.h @@ -90,6 +90,8 @@ public: bool getDMRSelfOnly() const; bool getDMRTGRewriteSlot1() const; bool getDMRTGRewriteSlot2() const; + bool getDMRBMAutoRewrite() const; + bool getDMRDirectDial() const; std::vector getDMRPrefixes() const; std::vector getDMRBlackList() const; std::vector getDMRDstIdBlacklistSlot1RF() const; @@ -217,6 +219,9 @@ private: bool m_dmrSelfOnly; bool m_TGRewriteSlot1; bool m_TGRewriteSlot2; + bool m_BMAutoRewrite; + bool m_DirectDial; + std::vector m_dmrPrefixes; std::vector m_dmrBlackList; std::vector m_dmrDstIdBlacklistSlot1RF; diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 26baf3d..fa5ac97 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -224,22 +224,22 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); return 9; // rewrite direct dial inbound - } else if (did == 235135 && dmrLC->getFLCO() == FLCO_USER_USER) { - dmrLC->setFLCO(FLCO_GROUP); - LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); - return(9); - } else { - return 0; - } +// } else if (did == 235135 && dmrLC->getFLCO() == FLCO_USER_USER) { +// dmrLC->setFLCO(FLCO_GROUP); +// LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); +// return(9); +// } else { +// return 0; +// } } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); } else if ((did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; - } else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { - LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); - return(m_SrcID); - } + } //else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { +// LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); +// return(m_SrcID); + } return 0; } From 2f0baeed3a60eceeb5eda568501981fa3c0fe035 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 19 Sep 2016 15:33:47 +0100 Subject: [PATCH 09/16] Fixed bad bracketry in DMRAccessControl::DstIdRewrite --- DMRAccessControl.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index fa5ac97..513c6f0 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -228,18 +228,18 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, // dmrLC->setFLCO(FLCO_GROUP); // LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); // return(9); -// } else { -// return 0; -// } + } else { + return 0; + } } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); } else if ((did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; - } //else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { -// LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); -// return(m_SrcID); - } + } //else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { + //LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); + //return(m_SrcID); +//} return 0; } From 75f4632fd1a20796335ea05666f1582a7d39f14b Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 19 Sep 2016 15:58:31 +0100 Subject: [PATCH 10/16] Fix random stopworking --- DMRAccessControl.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 513c6f0..413e972 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -214,7 +214,7 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (network) { m_dstRewriteID = did; m_SrcID = sid; - memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); + //memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); if ( (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; @@ -223,23 +223,15 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, dmrLC->setFLCO(FLCO_GROUP); LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); return 9; - // rewrite direct dial inbound -// } else if (did == 235135 && dmrLC->getFLCO() == FLCO_USER_USER) { -// dmrLC->setFLCO(FLCO_GROUP); -// LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); -// return(9); } else { return 0; } - } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { + } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); } else if ((did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; - } //else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { - //LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); - //return(m_SrcID); -//} + } return 0; } From 46194fff159ae0a1666bbae70e15240202ec86a5 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 19 Sep 2016 16:16:50 +0100 Subject: [PATCH 11/16] still trying --- DMRAccessControl.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 413e972..ff6dd7c 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -19,7 +19,6 @@ #include #include #include -#include std::vector DMRAccessControl::m_dstBlackListSlot1RF; @@ -43,8 +42,6 @@ unsigned int DMRAccessControl::m_id = 0U; unsigned int DMRAccessControl::m_dstRewriteID = 0U; unsigned int DMRAccessControl::m_SrcID = 0U; -CDMRLC* DMRAccessControl::m_lastdmrLC; - std::time_t DMRAccessControl::m_time; unsigned int DMRAccessControl::m_callHang; @@ -214,14 +211,13 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (network) { m_dstRewriteID = did; m_SrcID = sid; - //memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); if ( (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; // rewrite incoming BM voice prompts to TG 9 } else if ((sid >= 4000 && sid <= 5000) && dmrLC->getFLCO() == FLCO_USER_USER) { dmrLC->setFLCO(FLCO_GROUP); - LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); + LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG9",slot,did); return 9; } else { return 0; From fa010caab88f8eede4dffdae9d9788173d9bc16e Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 19 Sep 2016 16:35:01 +0100 Subject: [PATCH 12/16] found it --- DMRAccessControl.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index ff6dd7c..513c6f0 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -19,6 +19,7 @@ #include #include #include +#include std::vector DMRAccessControl::m_dstBlackListSlot1RF; @@ -42,6 +43,8 @@ unsigned int DMRAccessControl::m_id = 0U; unsigned int DMRAccessControl::m_dstRewriteID = 0U; unsigned int DMRAccessControl::m_SrcID = 0U; +CDMRLC* DMRAccessControl::m_lastdmrLC; + std::time_t DMRAccessControl::m_time; unsigned int DMRAccessControl::m_callHang; @@ -211,23 +214,32 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (network) { m_dstRewriteID = did; m_SrcID = sid; + memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); if ( (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; // rewrite incoming BM voice prompts to TG 9 } else if ((sid >= 4000 && sid <= 5000) && dmrLC->getFLCO() == FLCO_USER_USER) { dmrLC->setFLCO(FLCO_GROUP); - LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG9",slot,did); + LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); return 9; + // rewrite direct dial inbound +// } else if (did == 235135 && dmrLC->getFLCO() == FLCO_USER_USER) { +// dmrLC->setFLCO(FLCO_GROUP); +// LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); +// return(9); } else { return 0; } - } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime) { + } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); } else if ((did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; - } + } //else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { + //LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); + //return(m_SrcID); +//} return 0; } From aa69f1a660117cb85602c8cd1a23259fa5a495f3 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 19 Sep 2016 18:07:14 +0100 Subject: [PATCH 13/16] Disabled broken memcpy() causing segfault --- DMRAccessControl.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 513c6f0..8efb4cd 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -203,18 +203,18 @@ bool DMRAccessControl::validateAccess (unsigned int src_id, unsigned int dst_id, unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, unsigned int slot, bool network, CDMRLC* dmrLC) { - if (slot == 1 && m_TGRewriteSlot1 == false) - return 0; + // if (slot == 1 && m_TGRewriteSlot1 == false) + // return 0; - if (slot == 2 && m_TGRewriteSlot2 == false) - return 0; + // if (slot == 2 && m_TGRewriteSlot2 == false) + // return 0; std::time_t currenttime = std::time(nullptr); if (network) { m_dstRewriteID = did; m_SrcID = sid; - memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); + //memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); if ( (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; From 65bdc54997ce0a04c15d24adcd0ef831ae94b328 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 21 Sep 2016 16:33:35 +0100 Subject: [PATCH 14/16] Adding ini options for TGRewrite code --- Conf.cpp | 10 +++++----- Conf.h | 4 ++-- DMRAccessControl.cpp | 43 ++++++++++++++++++++++++------------------- DMRAccessControl.h | 4 +++- DMRControl.cpp | 4 ++-- DMRControl.h | 2 +- DMRSlot.cpp | 4 ++-- DMRSlot.h | 2 +- MMDVMHost.cpp | 4 +++- 9 files changed, 43 insertions(+), 34 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index 7aa385e..e5f6ab6 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -97,7 +97,7 @@ m_dmrSelfOnly(false), m_TGRewriteSlot1(false), m_TGRewriteSlot2(false), m_BMAutoRewrite(false), -m_DirectDial(false), +m_BMRewriteReflectorVoicePrompts(false), m_dmrPrefixes(), m_dmrBlackList(), m_dmrDstIdBlacklistSlot1RF(), @@ -206,7 +206,7 @@ bool CConf::read() section = SECTION_NEXTION; else if (::strncmp(buffer, "[OLED]", 6U) == 0) section = SECTION_OLED; - else if (::strncmp(buffer, "[DMR TG Rewirte]", 16U) == 0) + else if (::strncmp(buffer, "[DMR TG Rewrite]", 16U) == 0) section = SECTION_TGREWRITE; else section = SECTION_NONE; @@ -528,7 +528,7 @@ bool CConf::read() m_TGRewriteSlot2 = ::atoi(value) == 1; else if (::strcmp(key, "BMAutoRewrite") == 0) m_BMAutoRewrite = ::atoi(value) == 1; - else if (::strcmp(key, "DirectDial") == 0) + else if (::strcmp(key, "BMRewriteReflectorVoicePrompts") == 0) m_BMAutoRewrite = ::atoi(value) == 1; } @@ -780,9 +780,9 @@ bool CConf::getDMRBMAutoRewrite() const return m_BMAutoRewrite; } -bool CConf::getDMRDirectDial() const +bool CConf::getDMRBMRewriteReflectorVoicePrompts() const { - return m_DirectDial; + return m_BMRewriteReflectorVoicePrompts; } std::vector CConf::getDMRPrefixes() const diff --git a/Conf.h b/Conf.h index 1683a01..3df8474 100644 --- a/Conf.h +++ b/Conf.h @@ -91,7 +91,7 @@ public: bool getDMRTGRewriteSlot1() const; bool getDMRTGRewriteSlot2() const; bool getDMRBMAutoRewrite() const; - bool getDMRDirectDial() const; + bool getDMRBMRewriteReflectorVoicePrompts() const; std::vector getDMRPrefixes() const; std::vector getDMRBlackList() const; std::vector getDMRDstIdBlacklistSlot1RF() const; @@ -220,7 +220,7 @@ private: bool m_TGRewriteSlot1; bool m_TGRewriteSlot2; bool m_BMAutoRewrite; - bool m_DirectDial; + bool m_BMRewriteReflectorVoicePrompts; std::vector m_dmrPrefixes; std::vector m_dmrBlackList; diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 8efb4cd..3208c74 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -51,9 +51,10 @@ unsigned int DMRAccessControl::m_callHang; bool DMRAccessControl::m_TGRewriteSlot1; bool DMRAccessControl::m_TGRewriteSlot2; +bool DMRAccessControl::m_BMAutoRewrite; +bool DMRAccessControl::m_BMRewriteReflectorVoicePrompts; - -void DMRAccessControl::init(const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, const std::vector& SrcIdBlacklist, bool selfOnly, const std::vector& prefixes,unsigned int id,unsigned int callHang,bool TGRewriteSlot1, bool TGRewriteSlot2) +void DMRAccessControl::init(const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, const std::vector& SrcIdBlacklist, bool selfOnly, const std::vector& prefixes,unsigned int id,unsigned int callHang,bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts) { m_dstBlackListSlot1RF = DstIdBlacklistSlot1RF; m_dstWhiteListSlot1RF = DstIdWhitelistSlot1RF; @@ -66,6 +67,8 @@ void DMRAccessControl::init(const std::vector& DstIdBlacklistSlot1 m_callHang = callHang; m_TGRewriteSlot1 = TGRewriteSlot1; m_TGRewriteSlot2 = TGRewriteSlot2; + m_BMAutoRewrite = BMAutoRewrite; + m_BMRewriteReflectorVoicePrompts = BMRewriteReflectorVoicePrompts; } bool DMRAccessControl::DstIdBlacklist(unsigned int did, unsigned int slot, bool network) @@ -203,43 +206,45 @@ bool DMRAccessControl::validateAccess (unsigned int src_id, unsigned int dst_id, unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, unsigned int slot, bool network, CDMRLC* dmrLC) { - // if (slot == 1 && m_TGRewriteSlot1 == false) - // return 0; + if (slot == 1 && m_TGRewriteSlot1 == false) + return 0; - // if (slot == 2 && m_TGRewriteSlot2 == false) - // return 0; + if (slot == 2 && m_TGRewriteSlot2 == false) + return 0; std::time_t currenttime = std::time(nullptr); if (network) { m_dstRewriteID = did; m_SrcID = sid; - //memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); - if ( (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { + memcpy(&m_lastdmrLC, &dmrLC, sizeof(dmrLC)); + if (m_BMAutoRewrite && (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; // rewrite incoming BM voice prompts to TG 9 - } else if ((sid >= 4000 && sid <= 5000) && dmrLC->getFLCO() == FLCO_USER_USER) { + } else if (m_BMRewriteReflectorVoicePrompts && (sid >= 4000 && sid <= 5000) && dmrLC->getFLCO() == FLCO_USER_USER) { dmrLC->setFLCO(FLCO_GROUP); LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); - return 9; + return 9; +// commented because BM does not seem to pass Private Call to repeater ID. Will need to ask master devs. // rewrite direct dial inbound // } else if (did == 235135 && dmrLC->getFLCO() == FLCO_USER_USER) { -// dmrLC->setFLCO(FLCO_GROUP); -// LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); -// return(9); +// dmrLC->setFLCO(FLCO_GROUP); +// LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); +// return(9); } else { return 0; } - } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { + } else if (m_BMAutoRewrite && did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); - } else if ((did < 4000 || did > 5000) && did > 0 && did !=9) { + } else if (m_BMAutoRewrite && (did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; - } //else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { - //LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); - //return(m_SrcID); -//} + // commented because BM does not seem to pass Private Call to repeater ID. Will need to ask master devs. + /*} else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { + LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); + return(m_SrcID);*/ + } return 0; } diff --git a/DMRAccessControl.h b/DMRAccessControl.h index 95b2df9..f081c24 100644 --- a/DMRAccessControl.h +++ b/DMRAccessControl.h @@ -23,7 +23,7 @@ class DMRAccessControl { public: static bool validateAccess (unsigned int src_id, unsigned int dst_id, unsigned int slot, bool network); - static void init(const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, const std::vector& SrcIdBlacklist, bool selfOnly, const std::vector& prefixes,unsigned int id,unsigned int callHang, bool TGRewrteSlot1, bool TGRewrteSlot2); + static void init(const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, const std::vector& SrcIdBlacklist, bool selfOnly, const std::vector& prefixes,unsigned int id,unsigned int callHang, bool TGRewrteSlot1, bool TGRewrteSlot2, bool m_BMAutoRewrite, bool m_BMRewriteReflectorVoicePrompts); static unsigned int DstIdRewrite(unsigned int id, unsigned int sid,unsigned int slot, bool network, CDMRLC* dmrLC); static void setOverEndTime(); @@ -60,6 +60,8 @@ private: static bool m_TGRewriteSlot1; static bool m_TGRewriteSlot2; + static bool m_BMAutoRewrite; + static bool m_BMRewriteReflectorVoicePrompts; static CDMRLC* m_lastdmrLC; diff --git a/DMRControl.cpp b/DMRControl.cpp index df42a15..07ae705 100644 --- a/DMRControl.cpp +++ b/DMRControl.cpp @@ -20,7 +20,7 @@ #include #include -CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blackList, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, unsigned int timeout, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, const std::string& lookupFile, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2) : +CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blackList, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, unsigned int timeout, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, const std::string& lookupFile, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts) : m_id(id), m_colorCode(colorCode), m_selfOnly(selfOnly), @@ -38,7 +38,7 @@ m_lookup(NULL) m_lookup = new CDMRLookup(lookupFile); m_lookup->read(); - CDMRSlot::init(id, colorCode, callHang, selfOnly, prefixes, blackList, DstIdBlacklistSlot1RF, DstIdWhitelistSlot1RF, DstIdBlacklistSlot2RF, DstIdWhitelistSlot2RF, DstIdBlacklistSlot1NET, DstIdWhitelistSlot1NET, DstIdBlacklistSlot2NET, DstIdWhitelistSlot2NET, modem, network, display, duplex, m_lookup, rssiMultiplier, rssiOffset, jitter, TGRewriteSlot1, TGRewriteSlot2); + CDMRSlot::init(id, colorCode, callHang, selfOnly, prefixes, blackList, DstIdBlacklistSlot1RF, DstIdWhitelistSlot1RF, DstIdBlacklistSlot2RF, DstIdWhitelistSlot2RF, DstIdBlacklistSlot1NET, DstIdWhitelistSlot1NET, DstIdBlacklistSlot2NET, DstIdWhitelistSlot2NET, modem, network, display, duplex, m_lookup, rssiMultiplier, rssiOffset, jitter, TGRewriteSlot1, TGRewriteSlot2, BMAutoRewrite, BMRewriteReflectorVoicePrompts); } CDMRControl::~CDMRControl() diff --git a/DMRControl.h b/DMRControl.h index 81649d1..2a6fe83 100644 --- a/DMRControl.h +++ b/DMRControl.h @@ -30,7 +30,7 @@ class CDMRControl { public: - CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blackList, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF,const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, unsigned int timeout, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, const std::string& lookupFile, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2); + CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blackList, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF,const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, unsigned int timeout, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, const std::string& lookupFile, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts); ~CDMRControl(); bool processWakeup(const unsigned char* data); diff --git a/DMRSlot.cpp b/DMRSlot.cpp index 30850b8..922af11 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -1361,7 +1361,7 @@ void CDMRSlot::writeQueueNet(const unsigned char *data) m_queue.addData(data, len); } -void CDMRSlot::init(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& SrcIdBlacklist, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2) +void CDMRSlot::init(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& SrcIdBlacklist, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts) { assert(id != 0U); assert(modem != NULL); @@ -1396,7 +1396,7 @@ void CDMRSlot::init(unsigned int id, unsigned int colorCode, unsigned int callHa slotType.getData(m_idle + 2U); //Load black and white lists to DMRAccessControl - DMRAccessControl::init(DstIdBlacklistSlot1RF, DstIdWhitelistSlot1RF, DstIdBlacklistSlot2RF, DstIdWhitelistSlot2RF, DstIdBlacklistSlot1NET, DstIdWhitelistSlot1NET, DstIdBlacklistSlot2NET, DstIdWhitelistSlot2NET, SrcIdBlacklist, m_selfOnly, m_prefixes, m_id,callHang, TGRewriteSlot1, TGRewriteSlot2); + DMRAccessControl::init(DstIdBlacklistSlot1RF, DstIdWhitelistSlot1RF, DstIdBlacklistSlot2RF, DstIdWhitelistSlot2RF, DstIdBlacklistSlot1NET, DstIdWhitelistSlot1NET, DstIdBlacklistSlot2NET, DstIdWhitelistSlot2NET, SrcIdBlacklist, m_selfOnly, m_prefixes, m_id,callHang, TGRewriteSlot1, TGRewriteSlot2, BMAutoRewrite, BMRewriteReflectorVoicePrompts); } diff --git a/DMRSlot.h b/DMRSlot.h index d9a758a..1704ebe 100644 --- a/DMRSlot.h +++ b/DMRSlot.h @@ -50,7 +50,7 @@ public: void clock(); - static void init(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& SrcIdBlackList, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2); + static void init(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& SrcIdBlackList, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts); private: unsigned int m_slotNo; diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 89aeb55..1153b36 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -298,6 +298,8 @@ int CMMDVMHost::run() bool selfOnly = m_conf.getDMRSelfOnly(); bool TGRewriteSlot1 = m_conf.getDMRTGRewriteSlot1(); bool TGRewriteSlot2 = m_conf.getDMRTGRewriteSlot2(); + bool BMAutoRewrite = m_conf.getDMRBMAutoRewrite(); + bool BMRewriteReflectorVoicePrompts = m_conf.getDMRBMRewriteReflectorVoicePrompts(); std::vector prefixes = m_conf.getDMRPrefixes(); std::vector blackList = m_conf.getDMRBlackList(); std::vector dstIDBlackListSlot1RF = m_conf.getDMRDstIdBlacklistSlot1RF(); @@ -364,7 +366,7 @@ int CMMDVMHost::run() LogInfo(" TG Rewrite Slot 2 enabled"); - dmr = new CDMRControl(id, colorCode, callHang, selfOnly, prefixes, blackList,dstIDBlackListSlot1RF,dstIDWhiteListSlot1RF, dstIDBlackListSlot2RF, dstIDWhiteListSlot2RF, dstIDBlackListSlot1NET,dstIDWhiteListSlot1NET, dstIDBlackListSlot2NET, dstIDWhiteListSlot2NET, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, lookupFile, rssiMultiplier, rssiOffset, jitter, TGRewriteSlot1, TGRewriteSlot2); + dmr = new CDMRControl(id, colorCode, callHang, selfOnly, prefixes, blackList,dstIDBlackListSlot1RF,dstIDWhiteListSlot1RF, dstIDBlackListSlot2RF, dstIDWhiteListSlot2RF, dstIDBlackListSlot1NET,dstIDWhiteListSlot1NET, dstIDBlackListSlot2NET, dstIDWhiteListSlot2NET, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, lookupFile, rssiMultiplier, rssiOffset, jitter, TGRewriteSlot1, TGRewriteSlot2, BMAutoRewrite, BMRewriteReflectorVoicePrompts); m_dmrTXTimer.setTimeout(txHang); } From e87eae94a16087b5e23d7984e4e8397b5c39aa82 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 21 Sep 2016 19:35:13 +0100 Subject: [PATCH 15/16] Next release of TG Rewrite --- Conf.cpp | 20 +++++++++----------- DMRAccessControl.cpp | 13 ++----------- DMRAccessControl.h | 1 + DMRSlot.cpp | 10 +++++++++- MMDVM.ini | 6 +++--- MMDVMHost.cpp | 4 ++++ README.TGRewrite | 10 +++++++++- 7 files changed, 37 insertions(+), 27 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index e5f6ab6..425d898 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -206,8 +206,7 @@ bool CConf::read() section = SECTION_NEXTION; else if (::strncmp(buffer, "[OLED]", 6U) == 0) section = SECTION_OLED; - else if (::strncmp(buffer, "[DMR TG Rewrite]", 16U) == 0) - section = SECTION_TGREWRITE; + else section = SECTION_NONE; @@ -423,6 +422,14 @@ bool CConf::read() m_dmrTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "CallHang") == 0) m_dmrCallHang = (unsigned int)::atoi(value); + if (::strcmp(key, "TGRewriteSlot1") == 0) + m_TGRewriteSlot1 = ::atoi(value) == 1; + else if (::strcmp(key, "TGRewriteSlot2") == 0) + m_TGRewriteSlot2 = ::atoi(value) == 1; + else if (::strcmp(key, "BMAutoRewrite") == 0) + m_BMAutoRewrite = ::atoi(value) == 1; + else if (::strcmp(key, "BMRewriteReflectorVoicePrompts") == 0) + m_BMRewriteReflectorVoicePrompts = ::atoi(value) == 1; } else if (section == SECTION_FUSION) { if (::strcmp(key, "Enable") == 0) m_fusionEnabled = ::atoi(value) == 1; @@ -521,15 +528,6 @@ bool CConf::read() m_oledBrightness = (unsigned char)::atoi(value); else if (::strcmp(key, "Brightness") == 0) m_oledInvert = (unsigned char)::atoi(value); - } else if (section == SECTION_TGREWRITE) { - if (::strcmp(key, "TGRewriteSlot1") == 0) - m_TGRewriteSlot1 = ::atoi(value) == 1; - else if (::strcmp(key, "TGRewriteSlot2") == 0) - m_TGRewriteSlot2 = ::atoi(value) == 1; - else if (::strcmp(key, "BMAutoRewrite") == 0) - m_BMAutoRewrite = ::atoi(value) == 1; - else if (::strcmp(key, "BMRewriteReflectorVoicePrompts") == 0) - m_BMAutoRewrite = ::atoi(value) == 1; } diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 3208c74..cf12ffd 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -67,7 +67,7 @@ void DMRAccessControl::init(const std::vector& DstIdBlacklistSlot1 m_callHang = callHang; m_TGRewriteSlot1 = TGRewriteSlot1; m_TGRewriteSlot2 = TGRewriteSlot2; - m_BMAutoRewrite = BMAutoRewrite; + m_BMAutoRewrite = BMAutoRewrite; m_BMRewriteReflectorVoicePrompts = BMRewriteReflectorVoicePrompts; } @@ -211,6 +211,7 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (slot == 2 && m_TGRewriteSlot2 == false) return 0; + std::time_t currenttime = std::time(nullptr); @@ -226,12 +227,6 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, dmrLC->setFLCO(FLCO_GROUP); LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); return 9; -// commented because BM does not seem to pass Private Call to repeater ID. Will need to ask master devs. - // rewrite direct dial inbound -// } else if (did == 235135 && dmrLC->getFLCO() == FLCO_USER_USER) { -// dmrLC->setFLCO(FLCO_GROUP); -// LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); -// return(9); } else { return 0; } @@ -240,10 +235,6 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, return(m_dstRewriteID); } else if (m_BMAutoRewrite && (did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; - // commented because BM does not seem to pass Private Call to repeater ID. Will need to ask master devs. - /*} else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { - LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); - return(m_SrcID);*/ } return 0; } diff --git a/DMRAccessControl.h b/DMRAccessControl.h index f081c24..4e21fe5 100644 --- a/DMRAccessControl.h +++ b/DMRAccessControl.h @@ -64,6 +64,7 @@ private: static bool m_BMRewriteReflectorVoicePrompts; static CDMRLC* m_lastdmrLC; + diff --git a/DMRSlot.cpp b/DMRSlot.cpp index 922af11..c9600f8 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -255,8 +255,10 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) writeNetworkRF(data, DT_TERMINATOR_WITH_LC); if (m_duplex) { + for (unsigned int i = 0U; i < m_hangCount; i++) writeQueueRF(data); + } LogMessage("DMR Slot %u, received RF end of voice transmission, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); @@ -657,9 +659,11 @@ void CDMRSlot::writeEndRF(bool writeEnd) data[0U] = TAG_EOT; data[1U] = 0x00U; - + + for (unsigned int i = 0U; i < m_hangCount; i++) writeQueueRF(data); + } } @@ -732,8 +736,10 @@ void CDMRSlot::writeEndNet(bool writeEnd) data[1U] = 0x00U; if (m_duplex) { + for (unsigned int i = 0U; i < m_hangCount; i++) writeQueueNet(data); + } else { for (unsigned int i = 0U; i < 3U; i++) writeQueueNet(data); @@ -902,8 +908,10 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) data[1U] = 0x00U; if (m_duplex) { + for (unsigned int i = 0U; i < m_hangCount; i++) writeQueueNet(data); + } else { for (unsigned int i = 0U; i < 3U; i++) writeQueueNet(data); diff --git a/MMDVM.ini b/MMDVM.ini index 2940f54..f2aa910 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -72,12 +72,12 @@ TXHang=4 #DstIdBlackListSlot2NET= #DstIdWhiteListSlot1NET= #DstIdWhiteListSlot2NET= - -[DMR TG Rewrite] TGRewriteSlot1=0 -TGReWriteSlot2=0 +TGRewriteSlot2=0 BMAutoRewrite=0 BMRewriteReflectorVoicePrompts=0 + + DirectDial=0 TargetTG=9 #RewriteMapSlot1= diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 1153b36..05475eb 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -364,6 +364,10 @@ int CMMDVMHost::run() if (TGRewriteSlot2) LogInfo(" TG Rewrite Slot 2 enabled"); + if (BMAutoRewrite) + LogInfo(" BrandMeister Auto Rewrite enabled"); + if(BMRewriteReflectorVoicePrompts) + LogInfo(" BrandMeister Rewrite Reflector Voice Prompts enabled"); dmr = new CDMRControl(id, colorCode, callHang, selfOnly, prefixes, blackList,dstIDBlackListSlot1RF,dstIDWhiteListSlot1RF, dstIDBlackListSlot2RF, dstIDWhiteListSlot2RF, dstIDBlackListSlot1NET,dstIDWhiteListSlot1NET, dstIDBlackListSlot2NET, dstIDWhiteListSlot2NET, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, lookupFile, rssiMultiplier, rssiOffset, jitter, TGRewriteSlot1, TGRewriteSlot2, BMAutoRewrite, BMRewriteReflectorVoicePrompts); diff --git a/README.TGRewrite b/README.TGRewrite index 8b6480c..43395b9 100644 --- a/README.TGRewrite +++ b/README.TGRewrite @@ -30,11 +30,19 @@ groups, although it will function with permanent talk-groups too. It is useful to set the CallHang parameter to a generous amount. I am currently using seven seconds. +In addition to the above, there is also the capability ro rewrite voice prompts +on link/unlink so all users can hear them on TG9. -Two boolean configuration options control the TG Rewrite feature: +Configuration options are as follows: TGRewriteSlot1=[0|1] TGRewriteSlot2=[0|1] +BMAutoRewrite=[0|1] +BMRewriteReflectorVoicePrompts=[0|1] + +Note at present, Auto rewrite is the only type of rewrite that is implemented so +to do something useful, this option must be set. + ACL's are applied before the rewrite, so still apply to rewritten traffic on original (non-rewritten) talk-group. From dfb36303152b34c77077b9a55b190e4c085a3dd9 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 22 Sep 2016 16:47:04 +0100 Subject: [PATCH 16/16] Tidy up as per Jonathan's comments --- Conf.cpp | 26 +++++++++++++------------- Conf.h | 8 ++++---- DMRAccessControl.cpp | 27 ++++++++++++++------------- DMRControl.cpp | 3 ++- DMRSlot.cpp | 3 +-- 5 files changed, 34 insertions(+), 33 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index 425d898..3956e60 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -94,10 +94,10 @@ m_dmrBeacons(false), m_dmrId(0U), m_dmrColorCode(2U), m_dmrSelfOnly(false), -m_TGRewriteSlot1(false), -m_TGRewriteSlot2(false), -m_BMAutoRewrite(false), -m_BMRewriteReflectorVoicePrompts(false), +m_dmrTGRewriteSlot1(false), +m_dmrTGRewriteSlot2(false), +m_dmrBMAutoRewrite(false), +m_dmrBMRewriteReflectorVoicePrompts(false), m_dmrPrefixes(), m_dmrBlackList(), m_dmrDstIdBlacklistSlot1RF(), @@ -422,14 +422,14 @@ bool CConf::read() m_dmrTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "CallHang") == 0) m_dmrCallHang = (unsigned int)::atoi(value); - if (::strcmp(key, "TGRewriteSlot1") == 0) - m_TGRewriteSlot1 = ::atoi(value) == 1; + else if (::strcmp(key, "TGRewriteSlot1") == 0) + m_dmrTGRewriteSlot1 = ::atoi(value) == 1; else if (::strcmp(key, "TGRewriteSlot2") == 0) - m_TGRewriteSlot2 = ::atoi(value) == 1; + m_dmrTGRewriteSlot2 = ::atoi(value) == 1; else if (::strcmp(key, "BMAutoRewrite") == 0) - m_BMAutoRewrite = ::atoi(value) == 1; + m_dmrBMAutoRewrite = ::atoi(value) == 1; else if (::strcmp(key, "BMRewriteReflectorVoicePrompts") == 0) - m_BMRewriteReflectorVoicePrompts = ::atoi(value) == 1; + m_dmrBMRewriteReflectorVoicePrompts = ::atoi(value) == 1; } else if (section == SECTION_FUSION) { if (::strcmp(key, "Enable") == 0) m_fusionEnabled = ::atoi(value) == 1; @@ -765,22 +765,22 @@ bool CConf::getDMRSelfOnly() const bool CConf::getDMRTGRewriteSlot1() const { - return m_TGRewriteSlot1; + return m_dmrTGRewriteSlot1; } bool CConf::getDMRTGRewriteSlot2() const { - return m_TGRewriteSlot2; + return m_dmrTGRewriteSlot2; } bool CConf::getDMRBMAutoRewrite() const { - return m_BMAutoRewrite; + return m_dmrBMAutoRewrite; } bool CConf::getDMRBMRewriteReflectorVoicePrompts() const { - return m_BMRewriteReflectorVoicePrompts; + return m_dmrBMRewriteReflectorVoicePrompts; } std::vector CConf::getDMRPrefixes() const diff --git a/Conf.h b/Conf.h index 3df8474..5537f30 100644 --- a/Conf.h +++ b/Conf.h @@ -217,10 +217,10 @@ private: unsigned int m_dmrId; unsigned int m_dmrColorCode; bool m_dmrSelfOnly; - bool m_TGRewriteSlot1; - bool m_TGRewriteSlot2; - bool m_BMAutoRewrite; - bool m_BMRewriteReflectorVoicePrompts; + bool m_dmrTGRewriteSlot1; + bool m_dmrTGRewriteSlot2; + bool m_dmrBMAutoRewrite; + bool m_dmrBMRewriteReflectorVoicePrompts; std::vector m_dmrPrefixes; std::vector m_dmrBlackList; diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index cf12ffd..52b48f3 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -206,11 +206,11 @@ bool DMRAccessControl::validateAccess (unsigned int src_id, unsigned int dst_id, unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, unsigned int slot, bool network, CDMRLC* dmrLC) { - if (slot == 1 && m_TGRewriteSlot1 == false) - return 0; + if (slot == 1U && m_TGRewriteSlot1 == false) + return 0U; - if (slot == 2 && m_TGRewriteSlot2 == false) - return 0; + if (slot == 2U && m_TGRewriteSlot2 == false) + return 0U; std::time_t currenttime = std::time(nullptr); @@ -218,25 +218,26 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (network) { m_dstRewriteID = did; m_SrcID = sid; - memcpy(&m_lastdmrLC, &dmrLC, sizeof(dmrLC)); - if (m_BMAutoRewrite && (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { + //not needed at present - for direct dial, which requires change at master end. + //memcpy(&m_lastdmrLC, &dmrLC, sizeof(dmrLC)); + if (m_BMAutoRewrite && (did < 4000U || did > 5000U) && did > 0U && did != 9U && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); - return 9; + return 9U; // rewrite incoming BM voice prompts to TG 9 - } else if (m_BMRewriteReflectorVoicePrompts && (sid >= 4000 && sid <= 5000) && dmrLC->getFLCO() == FLCO_USER_USER) { + } else if (m_BMRewriteReflectorVoicePrompts && (sid >= 4000U && sid <= 5000U) && dmrLC->getFLCO() == FLCO_USER_USER) { dmrLC->setFLCO(FLCO_GROUP); LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); - return 9; + return 9U; } else { - return 0; + return 0U; } - } else if (m_BMAutoRewrite && did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { + } else if (m_BMAutoRewrite && did == 9U && m_dstRewriteID != 9U && m_dstRewriteID != 0U && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); - } else if (m_BMAutoRewrite && (did < 4000 || did > 5000) && did > 0 && did !=9) { + } else if (m_BMAutoRewrite && (did < 4000U || did > 5000U) && did > 0U && did !=9U) { m_dstRewriteID = did; } - return 0; + return 0U; } diff --git a/DMRControl.cpp b/DMRControl.cpp index 07ae705..57ead2f 100644 --- a/DMRControl.cpp +++ b/DMRControl.cpp @@ -20,6 +20,7 @@ #include #include + CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blackList, const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, unsigned int timeout, CModem* modem, CDMRIPSC* network, CDisplay* display, bool duplex, const std::string& lookupFile, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts) : m_id(id), m_colorCode(colorCode), @@ -36,7 +37,7 @@ m_lookup(NULL) assert(display != NULL); m_lookup = new CDMRLookup(lookupFile); - m_lookup->read(); + //m_lookup->read(); CDMRSlot::init(id, colorCode, callHang, selfOnly, prefixes, blackList, DstIdBlacklistSlot1RF, DstIdWhitelistSlot1RF, DstIdBlacklistSlot2RF, DstIdWhitelistSlot2RF, DstIdBlacklistSlot1NET, DstIdWhitelistSlot1NET, DstIdBlacklistSlot2NET, DstIdWhitelistSlot2NET, modem, network, display, duplex, m_lookup, rssiMultiplier, rssiOffset, jitter, TGRewriteSlot1, TGRewriteSlot2, BMAutoRewrite, BMRewriteReflectorVoicePrompts); } diff --git a/DMRSlot.cpp b/DMRSlot.cpp index c9600f8..a7ee7f2 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -496,8 +496,7 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) } unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false,lc); if (rw_id) { - - lc->setDstId(rw_id); + lc->setDstId(rw_id); } m_rfLC = lc;