Fix bug in the rewrite code.

This commit is contained in:
Jonathan Naylor
2017-05-08 18:34:41 +01:00
parent 16c943b551
commit ce69be754a
4 changed files with 16 additions and 22 deletions

View File

@@ -415,9 +415,8 @@ int CDMRGateway::run()
ret = m_xlxNetwork->read(data); ret = m_xlxNetwork->read(data);
if (ret) { if (ret) {
if (status[m_xlxSlot] == DMRGWS_NONE || status[m_xlxSlot] == DMRGWS_REFLECTOR) { if (status[m_xlxSlot] == DMRGWS_NONE || status[m_xlxSlot] == DMRGWS_REFLECTOR) {
unsigned int slotNo = data.getSlotNo(); bool ret = m_rptRewrite->process(data);
if (slotNo == XLX_SLOT) { if (ret) {
m_rptRewrite->process(data);
m_repeater->write(data); m_repeater->write(data);
status[m_xlxSlot] = DMRGWS_REFLECTOR; status[m_xlxSlot] = DMRGWS_REFLECTOR;
timer[m_xlxSlot]->start(); timer[m_xlxSlot]->start();

View File

@@ -29,7 +29,7 @@ m_fromSlot(fromSlot),
m_fromTG(fromTG), m_fromTG(fromTG),
m_toSlot(toSlot), m_toSlot(toSlot),
m_toTG(toTG), m_toTG(toTG),
m_lc(NULL), m_lc(FLCO_GROUP, 0U, toTG),
m_embeddedLC() m_embeddedLC()
{ {
assert(fromSlot == 1U || fromSlot == 2U); assert(fromSlot == 1U || fromSlot == 2U);
@@ -79,32 +79,27 @@ bool CRewrite::process(CDMRData& data)
void CRewrite::processHeader(CDMRData& data, unsigned char dataType) void CRewrite::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]; unsigned char buffer[DMR_FRAME_LENGTH_BYTES];
data.getData(buffer); data.getData(buffer);
delete m_lc;
CDMRFullLC fullLC; CDMRFullLC fullLC;
m_lc = fullLC.decode(buffer, dataType); fullLC.encode(m_lc, buffer, dataType);
if (m_lc == NULL) {
m_lc = new CDMRLC(FLCO_GROUP, data.getSrcId(), m_toTG);
m_embeddedLC.setLC(*m_lc);
}
m_lc->setDstId(m_toTG);
m_embeddedLC.setLC(*m_lc);
fullLC.encode(*m_lc, buffer, dataType);
data.setData(buffer); data.setData(buffer);
} }
void CRewrite::processVoice(CDMRData& data) void CRewrite::processVoice(CDMRData& data)
{ {
if (m_lc == NULL) { unsigned int srcId = data.getSrcId();
m_lc = new CDMRLC(FLCO_GROUP, data.getSrcId(), m_toTG); if (srcId != m_lc.getSrcId()) {
m_embeddedLC.setLC(*m_lc); m_lc.setSrcId(srcId);
m_embeddedLC.setLC(m_lc);
} }
unsigned char buffer[DMR_FRAME_LENGTH_BYTES]; unsigned char buffer[DMR_FRAME_LENGTH_BYTES];

View File

@@ -35,7 +35,7 @@ private:
unsigned int m_fromTG; unsigned int m_fromTG;
unsigned int m_toSlot; unsigned int m_toSlot;
unsigned int m_toTG; unsigned int m_toTG;
CDMRLC* m_lc; CDMRLC m_lc;
CDMREmbeddedData m_embeddedLC; CDMREmbeddedData m_embeddedLC;
void processHeader(CDMRData& data, unsigned char dataType); void processHeader(CDMRData& data, unsigned char dataType);

View File

@@ -19,6 +19,6 @@
#if !defined(VERSION_H) #if !defined(VERSION_H)
#define VERSION_H #define VERSION_H
const char* VERSION = "20170507"; const char* VERSION = "20170508";
#endif #endif