mirror of
https://github.com/g4klx/MMDVMHost.git
synced 2025-12-06 05:32:00 +01:00
More work on DMR Data Header block counts.
This commit is contained in:
parent
e1b1d13e74
commit
4760f7aa64
|
|
@ -116,6 +116,7 @@ bool CDMRDataHeader::put(const unsigned char* bytes)
|
||||||
|
|
||||||
case DPF_UDT:
|
case DPF_UDT:
|
||||||
CUtils::dump(1U, "Unified Data Transport Header", m_data, 12U);
|
CUtils::dump(1U, "Unified Data Transport Header", m_data, 12U);
|
||||||
|
m_blocks = m_data[8U] & 0x03U;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
65
DMRSlot.cpp
65
DMRSlot.cpp
|
|
@ -226,13 +226,18 @@ void CDMRSlot::writeModem(unsigned char *data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_rfFrames = dataHeader.getBlocks();
|
||||||
|
if (m_rfFrames == 0U) {
|
||||||
|
LogMessage("DMR Slot %u, unknown RF data header type, no block count information found", m_slotNo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_rfDataHeader = dataHeader;
|
m_rfDataHeader = dataHeader;
|
||||||
|
|
||||||
bool gi = dataHeader.getGI();
|
bool gi = dataHeader.getGI();
|
||||||
unsigned int srcId = dataHeader.getSrcId();
|
unsigned int srcId = dataHeader.getSrcId();
|
||||||
unsigned int dstId = dataHeader.getDstId();
|
unsigned int dstId = dataHeader.getDstId();
|
||||||
|
|
||||||
m_rfFrames = dataHeader.getBlocks();
|
|
||||||
m_rfSeqNo = 0U;
|
m_rfSeqNo = 0U;
|
||||||
|
|
||||||
m_rfLC = new CDMRLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
m_rfLC = new CDMRLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
||||||
|
|
@ -262,31 +267,6 @@ void CDMRSlot::writeModem(unsigned char *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
LogMessage("DMR Slot %u, received RF data header from %u to %s%u, %u blocks", m_slotNo, srcId, gi ? "TG ": "", dstId, m_rfFrames);
|
LogMessage("DMR Slot %u, received RF data header from %u to %s%u, %u blocks", m_slotNo, srcId, gi ? "TG ": "", dstId, m_rfFrames);
|
||||||
|
|
||||||
if (m_rfFrames == 0U) {
|
|
||||||
LogMessage("DMR Slot %u, ended RF data transmission", m_slotNo);
|
|
||||||
|
|
||||||
if (m_duplex) {
|
|
||||||
unsigned char bytes[DMR_FRAME_LENGTH_BYTES + 2U];
|
|
||||||
|
|
||||||
CSync::addDMRDataSync(bytes + 2U);
|
|
||||||
|
|
||||||
CDMRSlotType slotType;
|
|
||||||
slotType.setDataType(DT_TERMINATOR_WITH_LC);
|
|
||||||
slotType.setColorCode(m_colorCode);
|
|
||||||
slotType.getData(bytes + 2U);
|
|
||||||
|
|
||||||
m_rfDataHeader.getTerminator(bytes + 2U);
|
|
||||||
|
|
||||||
bytes[0U] = TAG_DATA;
|
|
||||||
bytes[1U] = 0x00U;
|
|
||||||
|
|
||||||
for (unsigned int i = 0U; i < 5U; i++)
|
|
||||||
writeQueueRF(bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
writeEndRF();
|
|
||||||
}
|
|
||||||
} else if (dataType == DT_CSBK) {
|
} else if (dataType == DT_CSBK) {
|
||||||
CDMRCSBK csbk;
|
CDMRCSBK csbk;
|
||||||
bool valid = csbk.put(data + 2U);
|
bool valid = csbk.put(data + 2U);
|
||||||
|
|
@ -790,14 +770,18 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_netFrames = dataHeader.getBlocks();
|
||||||
|
if (m_netFrames == 0U) {
|
||||||
|
LogMessage("DMR Slot %u, unknown network data header type, no block count information found", m_slotNo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_netDataHeader = dataHeader;
|
m_netDataHeader = dataHeader;
|
||||||
|
|
||||||
bool gi = dataHeader.getGI();
|
bool gi = dataHeader.getGI();
|
||||||
unsigned int srcId = dataHeader.getSrcId();
|
unsigned int srcId = dataHeader.getSrcId();
|
||||||
unsigned int dstId = dataHeader.getDstId();
|
unsigned int dstId = dataHeader.getDstId();
|
||||||
|
|
||||||
m_netFrames = dataHeader.getBlocks();
|
|
||||||
|
|
||||||
m_netLC = new CDMRLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
m_netLC = new CDMRLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
||||||
|
|
||||||
// Regenerate the data header
|
// Regenerate the data header
|
||||||
|
|
@ -828,31 +812,6 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
m_display->writeDMR(m_slotNo, dmrData.getSrcId(), gi, dmrData.getDstId(), "N");
|
m_display->writeDMR(m_slotNo, dmrData.getSrcId(), gi, dmrData.getDstId(), "N");
|
||||||
|
|
||||||
LogMessage("DMR Slot %u, received network data header from %u to %s%u, %u blocks", m_slotNo, dmrData.getSrcId(), gi ? "TG ": "", dmrData.getDstId(), m_netFrames);
|
LogMessage("DMR Slot %u, received network data header from %u to %s%u, %u blocks", m_slotNo, dmrData.getSrcId(), gi ? "TG ": "", dmrData.getDstId(), m_netFrames);
|
||||||
|
|
||||||
if (m_netFrames == 0U) {
|
|
||||||
LogMessage("DMR Slot %u, ended network data transmission", m_slotNo);
|
|
||||||
|
|
||||||
if (m_duplex) {
|
|
||||||
unsigned char bytes[DMR_FRAME_LENGTH_BYTES + 2U];
|
|
||||||
|
|
||||||
CSync::addDMRDataSync(bytes + 2U);
|
|
||||||
|
|
||||||
CDMRSlotType slotType;
|
|
||||||
slotType.setDataType(DT_TERMINATOR_WITH_LC);
|
|
||||||
slotType.setColorCode(m_colorCode);
|
|
||||||
slotType.getData(bytes + 2U);
|
|
||||||
|
|
||||||
m_netDataHeader.getTerminator(bytes + 2U);
|
|
||||||
|
|
||||||
bytes[0U] = TAG_DATA;
|
|
||||||
bytes[1U] = 0x00U;
|
|
||||||
|
|
||||||
for (unsigned int i = 0U; i < 5U; i++)
|
|
||||||
writeQueueNet(bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
writeEndNet();
|
|
||||||
}
|
|
||||||
} else if (dataType == DT_VOICE_SYNC) {
|
} else if (dataType == DT_VOICE_SYNC) {
|
||||||
if (m_netState == RS_NET_IDLE) {
|
if (m_netState == RS_NET_IDLE) {
|
||||||
m_netLC = new CDMRLC(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId());
|
m_netLC = new CDMRLC(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId());
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue