From b949533318c3eac664ba1a7773faa14afa431914 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 1 Aug 2017 21:59:19 +0100 Subject: [PATCH] Use the new CSBK and Data Header rewrite blocks. --- RewritePC.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++++- RewritePC.h | 6 ++++++ RewriteSrc.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++- RewriteSrc.h | 6 ++++++ RewriteTG.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++++- RewriteTG.h | 6 ++++++ RewriteType.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++- RewriteType.h | 6 ++++++ 8 files changed, 204 insertions(+), 4 deletions(-) diff --git a/RewritePC.cpp b/RewritePC.cpp index 9a87037..778cb7e 100644 --- a/RewritePC.cpp +++ b/RewritePC.cpp @@ -34,7 +34,9 @@ m_toSlot(toSlot), m_toIdStart(toId), m_toIdEnd(toId + range - 1U), m_lc(FLCO_USER_USER, 0U, 0U), -m_embeddedLC() +m_embeddedLC(), +m_dataHeader(), +m_csbk() { assert(fromSlot == 1U || fromSlot == 2U); assert(toSlot == 1U || toSlot == 2U); @@ -74,6 +76,15 @@ bool CRewritePC::process(CDMRData& data, bool trace) case DT_VOICE: processVoice(data, newDstId); break; + case DT_CSBK: + processCSBK(data, newDstId); + break; + case DT_DATA_HEADER: + processDataHeader(data, newDstId); + break; + case DT_RATE_12_DATA: + case DT_RATE_34_DATA: + case DT_RATE_1_DATA: case DT_VOICE_SYNC: // Nothing to do break; @@ -126,3 +137,35 @@ void CRewritePC::processVoice(CDMRData& data, unsigned int dstId) data.setData(buffer); } + +void CRewritePC::processDataHeader(CDMRData& data, unsigned int dstId) +{ + unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; + data.getData(buffer); + + bool ret = m_dataHeader.put(buffer); + if (!ret) + return; + + m_dataHeader.setDstId(dstId); + + m_dataHeader.get(buffer); + + data.setData(buffer); +} + +void CRewritePC::processCSBK(CDMRData& data, unsigned int dstId) +{ + unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; + data.getData(buffer); + + bool ret = m_csbk.put(buffer); + if (!ret) + return; + + m_csbk.setDstId(dstId); + + m_csbk.get(buffer); + + data.setData(buffer); +} diff --git a/RewritePC.h b/RewritePC.h index ff3a60c..d8dd833 100644 --- a/RewritePC.h +++ b/RewritePC.h @@ -20,6 +20,8 @@ #define REWRITEPC_H #include "DMREmbeddedData.h" +#include "DMRDataHeader.h" +#include "DMRCSBK.h" #include "Rewrite.h" #include "DMRData.h" #include "DMRLC.h" @@ -43,9 +45,13 @@ private: unsigned int m_toIdEnd; CDMRLC m_lc; CDMREmbeddedData m_embeddedLC; + CDMRDataHeader m_dataHeader; + CDMRCSBK m_csbk; void processHeader(CDMRData& data, unsigned int dstId, unsigned char dataType); void processVoice(CDMRData& data, unsigned int dstId); + void processDataHeader(CDMRData& data, unsigned int dstId); + void processCSBK(CDMRData& data, unsigned int dstId); }; diff --git a/RewriteSrc.cpp b/RewriteSrc.cpp index 7ba69ee..7635e48 100644 --- a/RewriteSrc.cpp +++ b/RewriteSrc.cpp @@ -33,7 +33,9 @@ m_fromIdEnd(fromId + range - 1U), m_toSlot(toSlot), m_toTG(toTG), m_lc(FLCO_GROUP, 0U, toTG), -m_embeddedLC() +m_embeddedLC(), +m_dataHeader(), +m_csbk() { assert(fromSlot == 1U || fromSlot == 2U); assert(toSlot == 1U || toSlot == 2U); @@ -73,6 +75,15 @@ bool CRewriteSrc::process(CDMRData& data, bool trace) case DT_VOICE: processVoice(data); break; + case DT_CSBK: + processCSBK(data); + break; + case DT_DATA_HEADER: + processDataHeader(data); + break; + case DT_RATE_12_DATA: + case DT_RATE_34_DATA: + case DT_RATE_1_DATA: case DT_VOICE_SYNC: // Nothing to do break; @@ -122,3 +133,37 @@ void CRewriteSrc::processVoice(CDMRData& data) data.setData(buffer); } + +void CRewriteSrc::processDataHeader(CDMRData& data) +{ + unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; + data.getData(buffer); + + bool ret = m_dataHeader.put(buffer); + if (!ret) + return; + + m_dataHeader.setGI(true); + m_dataHeader.setDstId(m_toTG); + + m_dataHeader.get(buffer); + + data.setData(buffer); +} + +void CRewriteSrc::processCSBK(CDMRData& data) +{ + unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; + data.getData(buffer); + + bool ret = m_csbk.put(buffer); + if (!ret) + return; + + m_csbk.setGI(true); + m_csbk.setDstId(m_toTG); + + m_csbk.get(buffer); + + data.setData(buffer); +} diff --git a/RewriteSrc.h b/RewriteSrc.h index b214f25..85bd47e 100644 --- a/RewriteSrc.h +++ b/RewriteSrc.h @@ -20,6 +20,8 @@ #define REWRITESRC_H #include "DMREmbeddedData.h" +#include "DMRDataHeader.h" +#include "DMRCSBK.h" #include "Rewrite.h" #include "DMRData.h" #include "DMRLC.h" @@ -42,9 +44,13 @@ private: unsigned int m_toTG; CDMRLC m_lc; CDMREmbeddedData m_embeddedLC; + CDMRDataHeader m_dataHeader; + CDMRCSBK m_csbk; void processHeader(CDMRData& data, unsigned char dataType); void processVoice(CDMRData& data); + void processDataHeader(CDMRData& data); + void processCSBK(CDMRData& data); }; diff --git a/RewriteTG.cpp b/RewriteTG.cpp index fb9643c..fcb7a91 100644 --- a/RewriteTG.cpp +++ b/RewriteTG.cpp @@ -34,7 +34,9 @@ m_toSlot(toSlot), m_toTGStart(toTG), m_toTGEnd(toTG + range - 1U), m_lc(FLCO_GROUP, 0U, toTG), -m_embeddedLC() +m_embeddedLC(), +m_dataHeader(), +m_csbk() { assert(fromSlot == 1U || fromSlot == 2U); assert(toSlot == 1U || toSlot == 2U); @@ -78,6 +80,15 @@ bool CRewriteTG::process(CDMRData& data, bool trace) case DT_VOICE: processVoice(data, newTG); break; + case DT_CSBK: + processCSBK(data, newTG); + break; + case DT_DATA_HEADER: + processDataHeader(data, newTG); + break; + case DT_RATE_12_DATA: + case DT_RATE_34_DATA: + case DT_RATE_1_DATA: case DT_VOICE_SYNC: // Nothing to do break; @@ -136,3 +147,35 @@ void CRewriteTG::processVoice(CDMRData& data, unsigned int tg) data.setData(buffer); } + +void CRewriteTG::processDataHeader(CDMRData& data, unsigned int tg) +{ + unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; + data.getData(buffer); + + bool ret = m_dataHeader.put(buffer); + if (!ret) + return; + + m_dataHeader.setDstId(tg); + + m_dataHeader.get(buffer); + + data.setData(buffer); +} + +void CRewriteTG::processCSBK(CDMRData& data, unsigned int tg) +{ + unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; + data.getData(buffer); + + bool ret = m_csbk.put(buffer); + if (!ret) + return; + + m_csbk.setDstId(tg); + + m_csbk.get(buffer); + + data.setData(buffer); +} diff --git a/RewriteTG.h b/RewriteTG.h index a88de14..a59394d 100644 --- a/RewriteTG.h +++ b/RewriteTG.h @@ -20,6 +20,8 @@ #define REWRITETG_H #include "DMREmbeddedData.h" +#include "DMRDataHeader.h" +#include "DMRCSBK.h" #include "Rewrite.h" #include "DMRData.h" #include "DMRLC.h" @@ -43,9 +45,13 @@ private: unsigned int m_toTGEnd; CDMRLC m_lc; CDMREmbeddedData m_embeddedLC; + CDMRDataHeader m_dataHeader; + CDMRCSBK m_csbk; void processHeader(CDMRData& data, unsigned int tg, unsigned char dataType); void processVoice(CDMRData& data, unsigned int tg); + void processDataHeader(CDMRData& data, unsigned int tg); + void processCSBK(CDMRData& data, unsigned int tg); }; diff --git a/RewriteType.cpp b/RewriteType.cpp index 26deaa5..45e803b 100644 --- a/RewriteType.cpp +++ b/RewriteType.cpp @@ -32,7 +32,9 @@ m_fromTG(fromTG), m_toSlot(toSlot), m_toId(toId), m_lc(FLCO_USER_USER, 0U, toId), -m_embeddedLC() +m_embeddedLC(), +m_dataHeader(), +m_csbk() { assert(fromSlot == 1U || fromSlot == 2U); assert(toSlot == 1U || toSlot == 2U); @@ -70,6 +72,15 @@ bool CRewriteType::process(CDMRData& data, bool trace) case DT_VOICE: processVoice(data); break; + case DT_CSBK: + processCSBK(data); + break; + case DT_DATA_HEADER: + processDataHeader(data); + break; + case DT_RATE_12_DATA: + case DT_RATE_34_DATA: + case DT_RATE_1_DATA: case DT_VOICE_SYNC: // Nothing to do break; @@ -117,3 +128,37 @@ void CRewriteType::processVoice(CDMRData& data) data.setData(buffer); } + +void CRewriteType::processDataHeader(CDMRData& data) +{ + unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; + data.getData(buffer); + + bool ret = m_dataHeader.put(buffer); + if (!ret) + return; + + m_dataHeader.setGI(false); + m_dataHeader.setDstId(m_toId); + + m_dataHeader.get(buffer); + + data.setData(buffer); +} + +void CRewriteType::processCSBK(CDMRData& data) +{ + unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; + data.getData(buffer); + + bool ret = m_csbk.put(buffer); + if (!ret) + return; + + m_csbk.setGI(false); + m_csbk.setDstId(m_toId); + + m_csbk.get(buffer); + + data.setData(buffer); +} diff --git a/RewriteType.h b/RewriteType.h index fb141e9..86fa47c 100644 --- a/RewriteType.h +++ b/RewriteType.h @@ -20,6 +20,8 @@ #define REWRITETYPE_H #include "DMREmbeddedData.h" +#include "DMRDataHeader.h" +#include "DMRCSBK.h" #include "Rewrite.h" #include "DMRData.h" #include "DMRLC.h" @@ -41,9 +43,13 @@ private: unsigned int m_toId; CDMRLC m_lc; CDMREmbeddedData m_embeddedLC; + CDMRDataHeader m_dataHeader; + CDMRCSBK m_csbk; void processHeader(CDMRData& data, unsigned char dataType); void processVoice(CDMRData& data); + void processDataHeader(CDMRData& data); + void processCSBK(CDMRData& data); };