diff --git a/DMRGateway.cpp b/DMRGateway.cpp index 46af095..281b338 100644 --- a/DMRGateway.cpp +++ b/DMRGateway.cpp @@ -415,9 +415,8 @@ int CDMRGateway::run() ret = m_xlxNetwork->read(data); if (ret) { if (status[m_xlxSlot] == DMRGWS_NONE || status[m_xlxSlot] == DMRGWS_REFLECTOR) { - unsigned int slotNo = data.getSlotNo(); - if (slotNo == XLX_SLOT) { - m_rptRewrite->process(data); + bool ret = m_rptRewrite->process(data); + if (ret) { m_repeater->write(data); status[m_xlxSlot] = DMRGWS_REFLECTOR; timer[m_xlxSlot]->start(); diff --git a/Rewrite.cpp b/Rewrite.cpp index 6124f11..7408f2a 100644 --- a/Rewrite.cpp +++ b/Rewrite.cpp @@ -29,7 +29,7 @@ m_fromSlot(fromSlot), m_fromTG(fromTG), m_toSlot(toSlot), m_toTG(toTG), -m_lc(NULL), +m_lc(FLCO_GROUP, 0U, toTG), m_embeddedLC() { assert(fromSlot == 1U || fromSlot == 2U); @@ -79,32 +79,27 @@ bool CRewrite::process(CDMRData& data) 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]; data.getData(buffer); - delete m_lc; - CDMRFullLC fullLC; - m_lc = fullLC.decode(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); + fullLC.encode(m_lc, buffer, dataType); data.setData(buffer); } void CRewrite::processVoice(CDMRData& data) { - if (m_lc == NULL) { - m_lc = new CDMRLC(FLCO_GROUP, data.getSrcId(), m_toTG); - m_embeddedLC.setLC(*m_lc); + 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]; diff --git a/Rewrite.h b/Rewrite.h index a51d928..486338f 100644 --- a/Rewrite.h +++ b/Rewrite.h @@ -35,7 +35,7 @@ private: unsigned int m_fromTG; unsigned int m_toSlot; unsigned int m_toTG; - CDMRLC* m_lc; + CDMRLC m_lc; CDMREmbeddedData m_embeddedLC; void processHeader(CDMRData& data, unsigned char dataType); diff --git a/Version.h b/Version.h index d1087c7..b3d2a5a 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20170507"; +const char* VERSION = "20170508"; #endif