mirror of
https://github.com/g4klx/DMRGateway
synced 2025-12-21 21:45:39 +08:00
Fix bug in the rewrite code.
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
29
Rewrite.cpp
29
Rewrite.cpp
@@ -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];
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user