mirror of
https://github.com/g4klx/MMDVMHost.git
synced 2026-04-04 14:07:36 +00:00
Regenerate the header structures and fix the data header.
This commit is contained in:
parent
ac82c4f6bc
commit
0881df603d
7 changed files with 182 additions and 118 deletions
50
DMRSlot.cpp
50
DMRSlot.cpp
|
|
@ -114,6 +114,9 @@ void CDMRSlot::writeModem(unsigned char *data)
|
|||
return;
|
||||
}
|
||||
|
||||
// Regenerate the LC data
|
||||
fullLC.encode(*m_lc, data + 2U, DT_VOICE_LC_HEADER);
|
||||
|
||||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
|
|
@ -170,6 +173,10 @@ void CDMRSlot::writeModem(unsigned char *data)
|
|||
if (m_state != RS_RELAYING_RF_AUDIO)
|
||||
return;
|
||||
|
||||
// Regenerate the LC data
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(*m_lc, data + 2U, DT_TERMINATOR_WITH_LC);
|
||||
|
||||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
|
|
@ -196,8 +203,9 @@ void CDMRSlot::writeModem(unsigned char *data)
|
|||
if (m_state == RS_RELAYING_RF_DATA)
|
||||
return;
|
||||
|
||||
CDMRDataHeader dataHeader(data + 2U);
|
||||
if (!dataHeader.isValid()) {
|
||||
CDMRDataHeader dataHeader;
|
||||
bool valid = dataHeader.put(data + 2U);
|
||||
if (!valid) {
|
||||
LogMessage("DMR Slot %u: unable to decode the RF data header", m_slotNo);
|
||||
return;
|
||||
}
|
||||
|
|
@ -210,6 +218,9 @@ void CDMRSlot::writeModem(unsigned char *data)
|
|||
|
||||
m_lc = new CDMRLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
||||
|
||||
// Regenerate the data header
|
||||
dataHeader.get(data + 2U);
|
||||
|
||||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
|
|
@ -240,8 +251,9 @@ 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_frames);
|
||||
} else if (dataType == DT_CSBK) {
|
||||
CDMRCSBK csbk(data + 2U);
|
||||
if (!csbk.isValid()) {
|
||||
CDMRCSBK csbk;
|
||||
bool valid = csbk.put(data + 2U);
|
||||
if (!valid) {
|
||||
LogMessage("DMR Slot %u: unable to decode the RF CSBK", m_slotNo);
|
||||
return;
|
||||
}
|
||||
|
|
@ -255,6 +267,9 @@ void CDMRSlot::writeModem(unsigned char *data)
|
|||
case CSBKO_UUANSRSP:
|
||||
case CSBKO_NACKRSP:
|
||||
case CSBKO_PRECCSBK: {
|
||||
// Regenerate the CSBK data
|
||||
csbk.get(data + 2U);
|
||||
|
||||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
|
|
@ -524,6 +539,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
return;
|
||||
}
|
||||
|
||||
// Regenerate the LC data
|
||||
fullLC.encode(*m_lc, data + 2U, DT_VOICE_LC_HEADER);
|
||||
|
||||
// Regenerate the Slot Type
|
||||
CDMRSlotType slotType;
|
||||
slotType.setColorCode(m_colorCode);
|
||||
|
|
@ -586,6 +604,10 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
if (m_state != RS_RELAYING_NETWORK_AUDIO)
|
||||
return;
|
||||
|
||||
// Regenerate the LC data
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(*m_lc, data + 2U, DT_TERMINATOR_WITH_LC);
|
||||
|
||||
// Regenerate the Slot Type
|
||||
CDMRSlotType slotType;
|
||||
slotType.setColorCode(m_colorCode);
|
||||
|
|
@ -616,8 +638,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
if (m_state == RS_RELAYING_NETWORK_DATA)
|
||||
return;
|
||||
|
||||
CDMRDataHeader dataHeader(data + 2U);
|
||||
if (!dataHeader.isValid()) {
|
||||
CDMRDataHeader dataHeader;
|
||||
bool valid = dataHeader.put(data + 2U);
|
||||
if (!valid) {
|
||||
LogMessage("DMR Slot %u: unable to decode the network data header", m_slotNo);
|
||||
return;
|
||||
}
|
||||
|
|
@ -630,6 +653,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
|
||||
m_lc = new CDMRLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
||||
|
||||
// Regenerate the data header
|
||||
dataHeader.get(data + 2U);
|
||||
|
||||
// Regenerate the Slot Type
|
||||
CDMRSlotType slotType;
|
||||
slotType.setColorCode(m_colorCode);
|
||||
|
|
@ -760,8 +786,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
writeFile(data);
|
||||
#endif
|
||||
} else if (dataType == DT_CSBK) {
|
||||
CDMRCSBK csbk(data + 2U);
|
||||
if (!csbk.isValid()) {
|
||||
CDMRCSBK csbk;
|
||||
bool valid = csbk.put(data + 2U);
|
||||
if (!valid) {
|
||||
LogMessage("DMR Slot %u: unable to decode the network CSBK", m_slotNo);
|
||||
return;
|
||||
}
|
||||
|
|
@ -775,6 +802,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
case CSBKO_UUANSRSP:
|
||||
case CSBKO_NACKRSP:
|
||||
case CSBKO_PRECCSBK: {
|
||||
// Regenerate the CSBK data
|
||||
csbk.get(data + 2U);
|
||||
|
||||
// Regenerate the Slot Type
|
||||
CDMRSlotType slotType;
|
||||
slotType.putData(data + 2U);
|
||||
|
|
@ -1023,14 +1053,14 @@ void CDMRSlot::setShortLC(unsigned int slotNo, unsigned int id, FLCO flco, bool
|
|||
|
||||
lc[4U] = CCRC::crc8(lc, 4U);
|
||||
|
||||
CUtils::dump("Short LC", lc, 5U);
|
||||
CUtils::dump(1U, "Short LC", lc, 5U);
|
||||
|
||||
unsigned char sLC[9U];
|
||||
|
||||
CDMRShortLC shortLC;
|
||||
shortLC.encode(lc, sLC);
|
||||
|
||||
CUtils::dump("Short LC with FEC", sLC, 9U);
|
||||
CUtils::dump(1U, "Short LC with FEC", sLC, 9U);
|
||||
|
||||
m_modem->writeDMRShortLC(sLC);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue