Fix MD-390 GPS data block count.
This commit is contained in:
parent
96fd4697dd
commit
1b7fbf7197
|
@ -29,6 +29,8 @@
|
|||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
||||
const unsigned char UDTF_NMEA = 0x05U;
|
||||
|
||||
CDMRDataHeader::CDMRDataHeader() :
|
||||
m_data(NULL),
|
||||
m_GI(false),
|
||||
|
@ -78,13 +80,13 @@ bool CDMRDataHeader::put(const unsigned char* bytes)
|
|||
|
||||
switch (dpf) {
|
||||
case DPF_UNCONFIRMED_DATA:
|
||||
CUtils::dump(1U, "Unconfirmed Data Header", m_data, 12U);
|
||||
CUtils::dump(1U, "DMR, Unconfirmed Data Header", m_data, 12U);
|
||||
m_F = (m_data[8U] & 0x80U) == 0x80U;
|
||||
m_blocks = m_data[8U] & 0x7FU;
|
||||
break;
|
||||
|
||||
case DPF_CONFIRMED_DATA:
|
||||
CUtils::dump(1U, "Confirmed Data Header", m_data, 12U);
|
||||
CUtils::dump(1U, "DMR, Confirmed Data Header", m_data, 12U);
|
||||
m_F = (m_data[8U] & 0x80U) == 0x80U;
|
||||
m_blocks = m_data[8U] & 0x7FU;
|
||||
m_S = (m_data[9U] & 0x80U) == 0x80U;
|
||||
|
@ -92,38 +94,46 @@ bool CDMRDataHeader::put(const unsigned char* bytes)
|
|||
break;
|
||||
|
||||
case DPF_RESPONSE:
|
||||
CUtils::dump(1U, "Response Data Header", m_data, 12U);
|
||||
CUtils::dump(1U, "DMR, Response Data Header", m_data, 12U);
|
||||
m_blocks = m_data[8U] & 0x7FU;
|
||||
break;
|
||||
|
||||
case DPF_PROPRIETARY:
|
||||
CUtils::dump(1U, "Proprietary Data Header", m_data, 12U);
|
||||
CUtils::dump(1U, "DMR, Proprietary Data Header", m_data, 12U);
|
||||
break;
|
||||
|
||||
case DPF_DEFINED_RAW:
|
||||
CUtils::dump(1U, "Raw or Status/Precoded Short Data Header", m_data, 12U);
|
||||
CUtils::dump(1U, "DMR, Raw or Status/Precoded Short Data Header", m_data, 12U);
|
||||
m_blocks = (m_data[0U] & 0x30U) + (m_data[1U] & 0x0FU);
|
||||
m_F = (m_data[8U] & 0x01U) == 0x01U;
|
||||
m_S = (m_data[8U] & 0x02U) == 0x02U;
|
||||
break;
|
||||
|
||||
case DPF_DEFINED_SHORT:
|
||||
CUtils::dump(1U, "Defined Short Data Header", m_data, 12U);
|
||||
CUtils::dump(1U, "DMR, Defined Short Data Header", m_data, 12U);
|
||||
m_blocks = (m_data[0U] & 0x30U) + (m_data[1U] & 0x0FU);
|
||||
m_F = (m_data[8U] & 0x01U) == 0x01U;
|
||||
m_S = (m_data[8U] & 0x02U) == 0x02U;
|
||||
break;
|
||||
|
||||
case DPF_UDT:
|
||||
CUtils::dump(1U, "Unified Data Transport Header", m_data, 12U);
|
||||
CUtils::dump(1U, "DMR, Unified Data Transport Header", m_data, 12U);
|
||||
m_blocks = m_data[8U] & 0x03U;
|
||||
break;
|
||||
|
||||
default:
|
||||
CUtils::dump("Unknown Data Header", m_data, 12U);
|
||||
CUtils::dump("DMR, Unknown Data Header", m_data, 12U);
|
||||
break;
|
||||
}
|
||||
|
||||
if (dpf == DPF_UDT && m_blocks == 0U) {
|
||||
unsigned char format = m_data[1U] & 0x0FU;
|
||||
if (format == UDTF_NMEA) {
|
||||
LogDebug("DMR, fixing broken Tytera MD-390 GPS data block count");
|
||||
m_blocks = 2U;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue