mirror of
https://github.com/g4klx/DMRGateway
synced 2025-12-20 21:25:37 +08:00
Handle TA and Embedded GPS data correctly.
This commit is contained in:
@@ -171,22 +171,22 @@ m_dmr2Passalls()
|
||||
|
||||
CDMRGateway::~CDMRGateway()
|
||||
{
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr1NetRewrites.begin(); it != m_dmr1NetRewrites.end(); ++it)
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr1NetRewrites.begin(); it != m_dmr1NetRewrites.end(); ++it)
|
||||
delete *it;
|
||||
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr1RFRewrites.begin(); it != m_dmr1RFRewrites.end(); ++it)
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr1RFRewrites.begin(); it != m_dmr1RFRewrites.end(); ++it)
|
||||
delete *it;
|
||||
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr2NetRewrites.begin(); it != m_dmr2NetRewrites.end(); ++it)
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr2NetRewrites.begin(); it != m_dmr2NetRewrites.end(); ++it)
|
||||
delete *it;
|
||||
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr2RFRewrites.begin(); it != m_dmr2RFRewrites.end(); ++it)
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr2RFRewrites.begin(); it != m_dmr2RFRewrites.end(); ++it)
|
||||
delete *it;
|
||||
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr1Passalls.begin(); it != m_dmr1Passalls.end(); ++it)
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr1Passalls.begin(); it != m_dmr1Passalls.end(); ++it)
|
||||
delete *it;
|
||||
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr2Passalls.begin(); it != m_dmr2Passalls.end(); ++it)
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr2Passalls.begin(); it != m_dmr2Passalls.end(); ++it)
|
||||
delete *it;
|
||||
|
||||
delete m_rpt1Rewrite;
|
||||
@@ -610,7 +610,7 @@ int CDMRGateway::run()
|
||||
|
||||
if (m_dmrNetwork1 != NULL) {
|
||||
// Rewrite the slot and/or TG or neither
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr1RFRewrites.begin(); it != m_dmr1RFRewrites.end(); ++it) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr1RFRewrites.begin(); it != m_dmr1RFRewrites.end(); ++it) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
@@ -630,7 +630,7 @@ int CDMRGateway::run()
|
||||
if (!rewritten) {
|
||||
if (m_dmrNetwork2 != NULL) {
|
||||
// Rewrite the slot and/or TG or neither
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr2RFRewrites.begin(); it != m_dmr2RFRewrites.end(); ++it) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr2RFRewrites.begin(); it != m_dmr2RFRewrites.end(); ++it) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
@@ -650,7 +650,7 @@ int CDMRGateway::run()
|
||||
|
||||
if (!rewritten) {
|
||||
if (m_dmrNetwork1 != NULL) {
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr1Passalls.begin(); it != m_dmr1Passalls.end(); ++it) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr1Passalls.begin(); it != m_dmr1Passalls.end(); ++it) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
@@ -670,7 +670,7 @@ int CDMRGateway::run()
|
||||
|
||||
if (!rewritten) {
|
||||
if (m_dmrNetwork2 != NULL) {
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr2Passalls.begin(); it != m_dmr2Passalls.end(); ++it) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr2Passalls.begin(); it != m_dmr2Passalls.end(); ++it) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
@@ -752,7 +752,7 @@ int CDMRGateway::run()
|
||||
|
||||
// Rewrite the slot and/or TG or neither
|
||||
bool rewritten = false;
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr1NetRewrites.begin(); it != m_dmr1NetRewrites.end(); ++it) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr1NetRewrites.begin(); it != m_dmr1NetRewrites.end(); ++it) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
@@ -797,7 +797,7 @@ int CDMRGateway::run()
|
||||
|
||||
// Rewrite the slot and/or TG or neither
|
||||
bool rewritten = false;
|
||||
for (std::vector<IRewrite*>::iterator it = m_dmr2NetRewrites.begin(); it != m_dmr2NetRewrites.end(); ++it) {
|
||||
for (std::vector<CRewrite*>::iterator it = m_dmr2NetRewrites.begin(); it != m_dmr2NetRewrites.end(); ++it) {
|
||||
bool ret = (*it)->process(data, trace);
|
||||
if (ret) {
|
||||
rewritten = true;
|
||||
|
||||
12
DMRGateway.h
12
DMRGateway.h
@@ -68,12 +68,12 @@ private:
|
||||
bool m_xlx2Connected;
|
||||
CRewriteTG* m_rpt2Rewrite;
|
||||
CRewriteTG* m_xlx2Rewrite;
|
||||
std::vector<IRewrite*> m_dmr1NetRewrites;
|
||||
std::vector<IRewrite*> m_dmr1RFRewrites;
|
||||
std::vector<IRewrite*> m_dmr2NetRewrites;
|
||||
std::vector<IRewrite*> m_dmr2RFRewrites;
|
||||
std::vector<IRewrite*> m_dmr1Passalls;
|
||||
std::vector<IRewrite*> m_dmr2Passalls;
|
||||
std::vector<CRewrite*> m_dmr1NetRewrites;
|
||||
std::vector<CRewrite*> m_dmr1RFRewrites;
|
||||
std::vector<CRewrite*> m_dmr2NetRewrites;
|
||||
std::vector<CRewrite*> m_dmr2RFRewrites;
|
||||
std::vector<CRewrite*> m_dmr1Passalls;
|
||||
std::vector<CRewrite*> m_dmr2Passalls;
|
||||
|
||||
bool createMMDVM();
|
||||
bool createDMRNetwork1();
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <cassert>
|
||||
|
||||
CPassAllPC::CPassAllPC(const std::string& name, unsigned int slot) :
|
||||
CRewrite(),
|
||||
m_name(name),
|
||||
m_slot(slot)
|
||||
{
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
class CPassAllPC : public IRewrite {
|
||||
class CPassAllPC : public CRewrite {
|
||||
public:
|
||||
CPassAllPC(const std::string& name, unsigned int slot);
|
||||
virtual ~CPassAllPC();
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <cassert>
|
||||
|
||||
CPassAllTG::CPassAllTG(const std::string& name, unsigned int slot) :
|
||||
CRewrite(),
|
||||
m_name(name),
|
||||
m_slot(slot)
|
||||
{
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
class CPassAllTG : public IRewrite {
|
||||
class CPassAllTG : public CRewrite {
|
||||
public:
|
||||
CPassAllTG(const std::string& name, unsigned int slot);
|
||||
virtual ~CPassAllTG();
|
||||
|
||||
191
Rewrite.cpp
191
Rewrite.cpp
@@ -16,8 +16,197 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "DMRDataHeader.h"
|
||||
#include "DMRFullLC.h"
|
||||
#include "DMRCSBK.h"
|
||||
#include "Rewrite.h"
|
||||
|
||||
IRewrite::~IRewrite()
|
||||
#include <cstdio>
|
||||
|
||||
CRewrite::CRewrite() :
|
||||
m_lc(),
|
||||
m_embeddedLC(),
|
||||
m_data(NULL),
|
||||
m_writeNum(0U),
|
||||
m_readNum(0U)
|
||||
{
|
||||
m_data = new CDMREmbeddedData[2U];
|
||||
}
|
||||
|
||||
CRewrite::~CRewrite()
|
||||
{
|
||||
delete[] m_data;
|
||||
}
|
||||
|
||||
void CRewrite::processMessage(CDMRData& data)
|
||||
{
|
||||
unsigned char dataType = data.getDataType();
|
||||
|
||||
switch (dataType) {
|
||||
case DT_VOICE_LC_HEADER:
|
||||
case DT_TERMINATOR_WITH_LC:
|
||||
processHeader(data, dataType);
|
||||
break;
|
||||
|
||||
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:
|
||||
// Nothing to do
|
||||
break;
|
||||
|
||||
case DT_VOICE_SYNC:
|
||||
swap();
|
||||
break;
|
||||
|
||||
default:
|
||||
// Not sure what to do
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CRewrite::setLC(FLCO flco, unsigned int srcId, unsigned int dstId)
|
||||
{
|
||||
if (flco == m_lc.getFLCO() && srcId == m_lc.getSrcId() && dstId == m_lc.getDstId())
|
||||
return;
|
||||
|
||||
m_lc.setFLCO(flco);
|
||||
m_lc.setSrcId(srcId);
|
||||
m_lc.setDstId(dstId);
|
||||
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
|
||||
m_readNum = 0U;
|
||||
m_writeNum = 0U;
|
||||
}
|
||||
|
||||
unsigned char CRewrite::processEmbeddedData(unsigned char* data, unsigned char n)
|
||||
{
|
||||
unsigned char lcss = 0U;
|
||||
|
||||
switch (n) {
|
||||
case 1U:
|
||||
lcss = 1U;
|
||||
break;
|
||||
case 4U:
|
||||
lcss = 2U;
|
||||
break;
|
||||
case 2U:
|
||||
case 3U:
|
||||
lcss = 3U;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
m_data[m_writeNum].addData(data, lcss);
|
||||
|
||||
if (m_readNum == 0U && m_writeNum == 0U)
|
||||
return m_embeddedLC.getData(data, n);
|
||||
|
||||
CDMRLC* lc = m_data[m_readNum].getLC();
|
||||
if (lc == NULL)
|
||||
return m_embeddedLC.getData(data, n);
|
||||
|
||||
FLCO flco = lc->getFLCO();
|
||||
|
||||
delete lc;
|
||||
|
||||
// Replace any identity embedded data with the new one
|
||||
if (flco == FLCO_GROUP || flco == FLCO_USER_USER)
|
||||
return m_embeddedLC.getData(data, n);
|
||||
else
|
||||
return m_data[m_readNum].getData(data, n);
|
||||
}
|
||||
|
||||
void CRewrite::swap()
|
||||
{
|
||||
if (m_readNum == 0U && m_writeNum == 0U) {
|
||||
m_writeNum = 1U;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_readNum == 0U)
|
||||
m_readNum = 1U;
|
||||
else
|
||||
m_readNum = 0U;
|
||||
|
||||
if (m_writeNum == 0U)
|
||||
m_writeNum = 1U;
|
||||
else
|
||||
m_writeNum = 0U;
|
||||
}
|
||||
|
||||
void CRewrite::processHeader(CDMRData& data, unsigned char dataType)
|
||||
{
|
||||
setLC(data.getFLCO(), data.getSrcId(), data.getDstId());
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(m_lc, buffer, dataType);
|
||||
|
||||
data.setData(buffer);
|
||||
}
|
||||
|
||||
void CRewrite::processVoice(CDMRData& data)
|
||||
{
|
||||
setLC(data.getFLCO(), data.getSrcId(), data.getDstId());
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
processEmbeddedData(buffer, data.getN());
|
||||
|
||||
data.setData(buffer);
|
||||
}
|
||||
|
||||
void CRewrite::processDataHeader(CDMRData& data)
|
||||
{
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
CDMRDataHeader dataHeader;
|
||||
bool ret = dataHeader.put(buffer);
|
||||
if (!ret)
|
||||
return;
|
||||
|
||||
dataHeader.setGI(data.getFLCO() == FLCO_GROUP);
|
||||
dataHeader.setSrcId(data.getSrcId());
|
||||
dataHeader.setDstId(data.getDstId());
|
||||
|
||||
dataHeader.get(buffer);
|
||||
|
||||
data.setData(buffer);
|
||||
}
|
||||
|
||||
void CRewrite::processCSBK(CDMRData& data)
|
||||
{
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
CDMRCSBK csbk;
|
||||
bool ret = csbk.put(buffer);
|
||||
if (!ret)
|
||||
return;
|
||||
|
||||
csbk.setGI(data.getFLCO() == FLCO_GROUP);
|
||||
csbk.setSrcId(data.getSrcId());
|
||||
csbk.setDstId(data.getDstId());
|
||||
|
||||
csbk.get(buffer);
|
||||
|
||||
data.setData(buffer);
|
||||
}
|
||||
|
||||
26
Rewrite.h
26
Rewrite.h
@@ -19,16 +19,36 @@
|
||||
#if !defined(REWRITE_H)
|
||||
#define REWRITE_H
|
||||
|
||||
#include "DMREmbeddedData.h"
|
||||
#include "DMRData.h"
|
||||
#include "DMRLC.h"
|
||||
|
||||
class IRewrite {
|
||||
class CRewrite {
|
||||
public:
|
||||
virtual ~IRewrite() = 0;
|
||||
CRewrite();
|
||||
virtual ~CRewrite();
|
||||
|
||||
virtual bool process(CDMRData& data, bool trace) = 0;
|
||||
|
||||
protected:
|
||||
void processMessage(CDMRData& data);
|
||||
|
||||
private:
|
||||
CDMRLC m_lc;
|
||||
CDMREmbeddedData m_embeddedLC;
|
||||
CDMREmbeddedData* m_data;
|
||||
unsigned int m_writeNum;
|
||||
unsigned int m_readNum;
|
||||
|
||||
void processHeader(CDMRData& data, unsigned char dataType);
|
||||
void processVoice(CDMRData& data);
|
||||
void processDataHeader(CDMRData& data);
|
||||
void processCSBK(CDMRData& data);
|
||||
void swap();
|
||||
|
||||
void setLC(FLCO flco, unsigned int srcId, unsigned int dstId);
|
||||
|
||||
unsigned char processEmbeddedData(unsigned char* data, unsigned char n);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
105
RewritePC.cpp
105
RewritePC.cpp
@@ -19,24 +19,20 @@
|
||||
#include "RewritePC.h"
|
||||
|
||||
#include "DMRDefines.h"
|
||||
#include "DMRFullLC.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
|
||||
CRewritePC::CRewritePC(const std::string& name, unsigned int fromSlot, unsigned int fromId, unsigned int toSlot, unsigned int toId, unsigned int range) :
|
||||
CRewrite(),
|
||||
m_name(name),
|
||||
m_fromSlot(fromSlot),
|
||||
m_fromIdStart(fromId),
|
||||
m_fromIdEnd(fromId + range - 1U),
|
||||
m_toSlot(toSlot),
|
||||
m_toIdStart(toId),
|
||||
m_toIdEnd(toId + range - 1U),
|
||||
m_lc(FLCO_USER_USER, 0U, 0U),
|
||||
m_embeddedLC(),
|
||||
m_dataHeader(),
|
||||
m_csbk()
|
||||
m_toIdEnd(toId + range - 1U)
|
||||
{
|
||||
assert(fromSlot == 1U || fromSlot == 2U);
|
||||
assert(toSlot == 1U || toSlot == 2U);
|
||||
@@ -55,6 +51,7 @@ bool CRewritePC::process(CDMRData& data, bool trace)
|
||||
if (flco != FLCO_USER_USER || slotNo != m_fromSlot || dstId < m_fromIdStart || dstId > m_fromIdEnd) {
|
||||
if (trace)
|
||||
LogDebug("Rule Trace,\tRewritePC from %s Slot=%u Dst=%u-%u: not matched", m_name.c_str(), m_fromSlot, m_fromIdStart, m_fromIdEnd);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -63,35 +60,9 @@ bool CRewritePC::process(CDMRData& data, bool trace)
|
||||
|
||||
if (m_fromIdStart != m_toIdStart) {
|
||||
unsigned int newDstId = dstId + m_toIdStart - m_fromIdStart;
|
||||
|
||||
data.setDstId(newDstId);
|
||||
|
||||
unsigned char dataType = data.getDataType();
|
||||
|
||||
switch (dataType) {
|
||||
case DT_VOICE_LC_HEADER:
|
||||
case DT_TERMINATOR_WITH_LC:
|
||||
processHeader(data, newDstId, dataType);
|
||||
break;
|
||||
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;
|
||||
default:
|
||||
// Not sure what to do
|
||||
break;
|
||||
}
|
||||
processMessage(data);
|
||||
}
|
||||
|
||||
if (trace) {
|
||||
@@ -101,71 +72,3 @@ bool CRewritePC::process(CDMRData& data, bool trace)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CRewritePC::processHeader(CDMRData& data, unsigned int dstId, unsigned char dataType)
|
||||
{
|
||||
unsigned int srcId = data.getSrcId();
|
||||
if (srcId != m_lc.getSrcId() || dstId != m_lc.getDstId()) {
|
||||
m_lc.setSrcId(srcId);
|
||||
m_lc.setDstId(dstId);
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(m_lc, buffer, dataType);
|
||||
|
||||
data.setData(buffer);
|
||||
}
|
||||
|
||||
void CRewritePC::processVoice(CDMRData& data, unsigned int dstId)
|
||||
{
|
||||
unsigned int srcId = data.getSrcId();
|
||||
if (srcId != m_lc.getSrcId() || dstId != m_lc.getDstId()) {
|
||||
m_lc.setSrcId(srcId);
|
||||
m_lc.setDstId(dstId);
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
unsigned char n = data.getN();
|
||||
m_embeddedLC.getData(buffer, n);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
29
RewritePC.h
29
RewritePC.h
@@ -19,16 +19,12 @@
|
||||
#if !defined(REWRITEPC_H)
|
||||
#define REWRITEPC_H
|
||||
|
||||
#include "DMREmbeddedData.h"
|
||||
#include "DMRDataHeader.h"
|
||||
#include "DMRCSBK.h"
|
||||
#include "Rewrite.h"
|
||||
#include "DMRData.h"
|
||||
#include "DMRLC.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
class CRewritePC : public IRewrite {
|
||||
class CRewritePC : public CRewrite {
|
||||
public:
|
||||
CRewritePC(const std::string& name, unsigned int fromSlot, unsigned int fromId, unsigned int toSlot, unsigned int toId, unsigned int range);
|
||||
virtual ~CRewritePC();
|
||||
@@ -36,22 +32,13 @@ public:
|
||||
virtual bool process(CDMRData& data, bool trace);
|
||||
|
||||
private:
|
||||
std::string m_name;
|
||||
unsigned int m_fromSlot;
|
||||
unsigned int m_fromIdStart;
|
||||
unsigned int m_fromIdEnd;
|
||||
unsigned int m_toSlot;
|
||||
unsigned int m_toIdStart;
|
||||
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);
|
||||
std::string m_name;
|
||||
unsigned int m_fromSlot;
|
||||
unsigned int m_fromIdStart;
|
||||
unsigned int m_fromIdEnd;
|
||||
unsigned int m_toSlot;
|
||||
unsigned int m_toIdStart;
|
||||
unsigned int m_toIdEnd;
|
||||
};
|
||||
|
||||
|
||||
|
||||
106
RewriteSrc.cpp
106
RewriteSrc.cpp
@@ -19,28 +19,22 @@
|
||||
#include "RewriteSrc.h"
|
||||
|
||||
#include "DMRDefines.h"
|
||||
#include "DMRFullLC.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
|
||||
CRewriteSrc::CRewriteSrc(const std::string& name, unsigned int fromSlot, unsigned int fromId, unsigned int toSlot, unsigned int toTG, unsigned int range) :
|
||||
CRewrite(),
|
||||
m_name(name),
|
||||
m_fromSlot(fromSlot),
|
||||
m_fromIdStart(fromId),
|
||||
m_fromIdEnd(fromId + range - 1U),
|
||||
m_toSlot(toSlot),
|
||||
m_toTG(toTG),
|
||||
m_lc(FLCO_GROUP, 0U, toTG),
|
||||
m_embeddedLC(),
|
||||
m_dataHeader(),
|
||||
m_csbk()
|
||||
m_toTG(toTG)
|
||||
{
|
||||
assert(fromSlot == 1U || fromSlot == 2U);
|
||||
assert(toSlot == 1U || toSlot == 2U);
|
||||
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
CRewriteSrc::~CRewriteSrc()
|
||||
@@ -56,6 +50,7 @@ bool CRewriteSrc::process(CDMRData& data, bool trace)
|
||||
if (flco != FLCO_USER_USER || slotNo != m_fromSlot || srcId < m_fromIdStart || srcId > m_fromIdEnd) {
|
||||
if (trace)
|
||||
LogDebug("Rule Trace,\tRewriteSrc from %s Slot=%u Src=%u-%u: not matched", m_name.c_str(), m_fromSlot, m_fromIdStart, m_fromIdEnd);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -65,32 +60,7 @@ bool CRewriteSrc::process(CDMRData& data, bool trace)
|
||||
data.setDstId(m_toTG);
|
||||
data.setFLCO(FLCO_GROUP);
|
||||
|
||||
unsigned char dataType = data.getDataType();
|
||||
|
||||
switch (dataType) {
|
||||
case DT_VOICE_LC_HEADER:
|
||||
case DT_TERMINATOR_WITH_LC:
|
||||
processHeader(data, dataType);
|
||||
break;
|
||||
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;
|
||||
default:
|
||||
// Not sure what to do
|
||||
break;
|
||||
}
|
||||
processMessage(data);
|
||||
|
||||
if (trace) {
|
||||
LogDebug("Rule Trace,\tRewriteSrc from %s Slot=%u Src=%u-%u: matched", m_name.c_str(), m_fromSlot, m_fromIdStart, m_fromIdEnd);
|
||||
@@ -99,71 +69,3 @@ bool CRewriteSrc::process(CDMRData& data, bool trace)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CRewriteSrc::processHeader(CDMRData& data, unsigned char dataType)
|
||||
{
|
||||
unsigned int srcId = data.getSrcId();
|
||||
if (srcId != m_lc.getSrcId()) {
|
||||
m_lc.setSrcId(srcId);
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(m_lc, buffer, dataType);
|
||||
|
||||
data.setData(buffer);
|
||||
}
|
||||
|
||||
void CRewriteSrc::processVoice(CDMRData& data)
|
||||
{
|
||||
unsigned int srcId = data.getSrcId();
|
||||
if (srcId != m_lc.getSrcId()) {
|
||||
m_lc.setSrcId(srcId);
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
unsigned char n = data.getN();
|
||||
m_embeddedLC.getData(buffer, n);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
27
RewriteSrc.h
27
RewriteSrc.h
@@ -19,16 +19,12 @@
|
||||
#if !defined(REWRITESRC_H)
|
||||
#define REWRITESRC_H
|
||||
|
||||
#include "DMREmbeddedData.h"
|
||||
#include "DMRDataHeader.h"
|
||||
#include "DMRCSBK.h"
|
||||
#include "Rewrite.h"
|
||||
#include "DMRData.h"
|
||||
#include "DMRLC.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
class CRewriteSrc : public IRewrite {
|
||||
class CRewriteSrc : public CRewrite {
|
||||
public:
|
||||
CRewriteSrc(const std::string& name, unsigned int fromSlot, unsigned int fromId, unsigned int toSlot, unsigned int toTG, unsigned int range);
|
||||
virtual ~CRewriteSrc();
|
||||
@@ -36,21 +32,12 @@ public:
|
||||
virtual bool process(CDMRData& data, bool trace);
|
||||
|
||||
private:
|
||||
std::string m_name;
|
||||
unsigned int m_fromSlot;
|
||||
unsigned int m_fromIdStart;
|
||||
unsigned int m_fromIdEnd;
|
||||
unsigned int m_toSlot;
|
||||
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);
|
||||
std::string m_name;
|
||||
unsigned int m_fromSlot;
|
||||
unsigned int m_fromIdStart;
|
||||
unsigned int m_fromIdEnd;
|
||||
unsigned int m_toSlot;
|
||||
unsigned int m_toTG;
|
||||
};
|
||||
|
||||
|
||||
|
||||
106
RewriteTG.cpp
106
RewriteTG.cpp
@@ -19,24 +19,20 @@
|
||||
#include "RewriteTG.h"
|
||||
|
||||
#include "DMRDefines.h"
|
||||
#include "DMRFullLC.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
|
||||
CRewriteTG::CRewriteTG(const std::string& name, unsigned int fromSlot, unsigned int fromTG, unsigned int toSlot, unsigned int toTG, unsigned int range) :
|
||||
CRewrite(),
|
||||
m_name(name),
|
||||
m_fromSlot(fromSlot),
|
||||
m_fromTGStart(fromTG),
|
||||
m_fromTGEnd(fromTG + range - 1U),
|
||||
m_toSlot(toSlot),
|
||||
m_toTGStart(toTG),
|
||||
m_toTGEnd(toTG + range - 1U),
|
||||
m_lc(FLCO_GROUP, 0U, toTG),
|
||||
m_embeddedLC(),
|
||||
m_dataHeader(),
|
||||
m_csbk()
|
||||
m_toTGEnd(toTG + range - 1U)
|
||||
{
|
||||
assert(fromSlot == 1U || fromSlot == 2U);
|
||||
assert(toSlot == 1U || toSlot == 2U);
|
||||
@@ -59,6 +55,7 @@ bool CRewriteTG::process(CDMRData& data, bool trace)
|
||||
else
|
||||
LogDebug("Rule Trace,\tRewriteTG from %s Slot=%u Dst=TG%u-TG%u: not matched", m_name.c_str(), m_fromSlot, m_fromTGStart, m_fromTGEnd);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -67,35 +64,9 @@ bool CRewriteTG::process(CDMRData& data, bool trace)
|
||||
|
||||
if (m_fromTGStart != m_toTGStart) {
|
||||
unsigned int newTG = dstId + m_toTGStart - m_fromTGStart;
|
||||
|
||||
data.setDstId(newTG);
|
||||
|
||||
unsigned char dataType = data.getDataType();
|
||||
|
||||
switch (dataType) {
|
||||
case DT_VOICE_LC_HEADER:
|
||||
case DT_TERMINATOR_WITH_LC:
|
||||
processHeader(data, newTG, dataType);
|
||||
break;
|
||||
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;
|
||||
default:
|
||||
// Not sure what to do
|
||||
break;
|
||||
}
|
||||
processMessage(data);
|
||||
}
|
||||
|
||||
if (trace) {
|
||||
@@ -103,6 +74,7 @@ bool CRewriteTG::process(CDMRData& data, bool trace)
|
||||
LogDebug("Rule Trace,\tRewriteTG from %s Slot=%u Dst=TG%u: matched", m_name.c_str(), m_fromSlot, m_fromTGStart);
|
||||
else
|
||||
LogDebug("Rule Trace,\tRewriteTG from %s Slot=%u Dst=TG%u-TG%u: matched", m_name.c_str(), m_fromSlot, m_fromTGStart, m_fromTGEnd);
|
||||
|
||||
if (m_toTGStart == m_toTGEnd)
|
||||
LogDebug("Rule Trace,\tRewriteTG to %s Slot=%u Dst=TG%u", m_name.c_str(), m_toSlot, m_toTGStart);
|
||||
else
|
||||
@@ -111,71 +83,3 @@ bool CRewriteTG::process(CDMRData& data, bool trace)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CRewriteTG::processHeader(CDMRData& data, unsigned int tg, unsigned char dataType)
|
||||
{
|
||||
unsigned int srcId = data.getSrcId();
|
||||
if (srcId != m_lc.getSrcId() || tg != m_lc.getDstId()) {
|
||||
m_lc.setSrcId(srcId);
|
||||
m_lc.setDstId(tg);
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(m_lc, buffer, dataType);
|
||||
|
||||
data.setData(buffer);
|
||||
}
|
||||
|
||||
void CRewriteTG::processVoice(CDMRData& data, unsigned int tg)
|
||||
{
|
||||
unsigned int srcId = data.getSrcId();
|
||||
if (srcId != m_lc.getSrcId() || tg != m_lc.getDstId()) {
|
||||
m_lc.setSrcId(srcId);
|
||||
m_lc.setDstId(tg);
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
unsigned char n = data.getN();
|
||||
m_embeddedLC.getData(buffer, n);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
29
RewriteTG.h
29
RewriteTG.h
@@ -19,16 +19,12 @@
|
||||
#if !defined(REWRITETG_H)
|
||||
#define REWRITETG_H
|
||||
|
||||
#include "DMREmbeddedData.h"
|
||||
#include "DMRDataHeader.h"
|
||||
#include "DMRCSBK.h"
|
||||
#include "Rewrite.h"
|
||||
#include "DMRData.h"
|
||||
#include "DMRLC.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
class CRewriteTG : public IRewrite {
|
||||
class CRewriteTG : public CRewrite {
|
||||
public:
|
||||
CRewriteTG(const std::string& name, unsigned int fromSlot, unsigned int fromTG, unsigned int toSlot, unsigned int toTG, unsigned int range);
|
||||
virtual ~CRewriteTG();
|
||||
@@ -36,22 +32,13 @@ public:
|
||||
virtual bool process(CDMRData& data, bool trace);
|
||||
|
||||
private:
|
||||
std::string m_name;
|
||||
unsigned int m_fromSlot;
|
||||
unsigned int m_fromTGStart;
|
||||
unsigned int m_fromTGEnd;
|
||||
unsigned int m_toSlot;
|
||||
unsigned int m_toTGStart;
|
||||
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);
|
||||
std::string m_name;
|
||||
unsigned int m_fromSlot;
|
||||
unsigned int m_fromTGStart;
|
||||
unsigned int m_fromTGEnd;
|
||||
unsigned int m_toSlot;
|
||||
unsigned int m_toTGStart;
|
||||
unsigned int m_toTGEnd;
|
||||
};
|
||||
|
||||
|
||||
|
||||
104
RewriteType.cpp
104
RewriteType.cpp
@@ -19,22 +19,18 @@
|
||||
#include "RewriteType.h"
|
||||
|
||||
#include "DMRDefines.h"
|
||||
#include "DMRFullLC.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
|
||||
CRewriteType::CRewriteType(const std::string& name, unsigned int fromSlot, unsigned int fromTG, unsigned int toSlot, unsigned int toId) :
|
||||
CRewrite(),
|
||||
m_name(name),
|
||||
m_fromSlot(fromSlot),
|
||||
m_fromTG(fromTG),
|
||||
m_toSlot(toSlot),
|
||||
m_toId(toId),
|
||||
m_lc(FLCO_USER_USER, 0U, toId),
|
||||
m_embeddedLC(),
|
||||
m_dataHeader(),
|
||||
m_csbk()
|
||||
m_toId(toId)
|
||||
{
|
||||
assert(fromSlot == 1U || fromSlot == 2U);
|
||||
assert(toSlot == 1U || toSlot == 2U);
|
||||
@@ -53,6 +49,7 @@ bool CRewriteType::process(CDMRData& data, bool trace)
|
||||
if (flco != FLCO_GROUP || slotNo != m_fromSlot || dstId != m_fromTG) {
|
||||
if (trace)
|
||||
LogDebug("Rule Trace,\tRewriteType %s Slot=%u Dst=TG%u: not matched", m_name.c_str(), m_fromSlot, m_fromTG);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -62,103 +59,10 @@ bool CRewriteType::process(CDMRData& data, bool trace)
|
||||
data.setDstId(m_toId);
|
||||
data.setFLCO(FLCO_USER_USER);
|
||||
|
||||
unsigned char dataType = data.getDataType();
|
||||
|
||||
switch (dataType) {
|
||||
case DT_VOICE_LC_HEADER:
|
||||
case DT_TERMINATOR_WITH_LC:
|
||||
processHeader(data, dataType);
|
||||
break;
|
||||
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;
|
||||
default:
|
||||
// Not sure what to do
|
||||
break;
|
||||
}
|
||||
processMessage(data);
|
||||
|
||||
if (trace)
|
||||
LogDebug("Rule Trace,\tRewriteType %s Slot=%u Dst=TG%u: matched", m_name.c_str(), m_fromSlot, m_fromTG);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CRewriteType::processHeader(CDMRData& data, unsigned char dataType)
|
||||
{
|
||||
unsigned int srcId = data.getSrcId();
|
||||
if (srcId != m_lc.getSrcId()) {
|
||||
m_lc.setSrcId(srcId);
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(m_lc, buffer, dataType);
|
||||
|
||||
data.setData(buffer);
|
||||
}
|
||||
|
||||
void CRewriteType::processVoice(CDMRData& data)
|
||||
{
|
||||
unsigned int srcId = data.getSrcId();
|
||||
if (srcId != m_lc.getSrcId()) {
|
||||
m_lc.setSrcId(srcId);
|
||||
m_embeddedLC.setLC(m_lc);
|
||||
}
|
||||
|
||||
unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
|
||||
data.getData(buffer);
|
||||
|
||||
unsigned char n = data.getN();
|
||||
m_embeddedLC.getData(buffer, n);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -19,16 +19,12 @@
|
||||
#if !defined(REWRITETYPE_H)
|
||||
#define REWRITETYPE_H
|
||||
|
||||
#include "DMREmbeddedData.h"
|
||||
#include "DMRDataHeader.h"
|
||||
#include "DMRCSBK.h"
|
||||
#include "Rewrite.h"
|
||||
#include "DMRData.h"
|
||||
#include "DMRLC.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
class CRewriteType : public IRewrite {
|
||||
class CRewriteType : public CRewrite {
|
||||
public:
|
||||
CRewriteType(const std::string& name, unsigned int fromSlot, unsigned int fromTG, unsigned int toSlot, unsigned int toId);
|
||||
virtual ~CRewriteType();
|
||||
@@ -36,20 +32,11 @@ public:
|
||||
virtual bool process(CDMRData& data, bool trace);
|
||||
|
||||
private:
|
||||
std::string m_name;
|
||||
unsigned int m_fromSlot;
|
||||
unsigned int m_fromTG;
|
||||
unsigned int m_toSlot;
|
||||
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);
|
||||
std::string m_name;
|
||||
unsigned int m_fromSlot;
|
||||
unsigned int m_fromTG;
|
||||
unsigned int m_toSlot;
|
||||
unsigned int m_toId;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user