mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 15:09:23 +08:00
Fix MD-390 GPS data block count.
This commit is contained in:
@@ -29,6 +29,8 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
const unsigned char UDTF_NMEA = 0x05U;
|
||||||
|
|
||||||
CDMRDataHeader::CDMRDataHeader() :
|
CDMRDataHeader::CDMRDataHeader() :
|
||||||
m_data(NULL),
|
m_data(NULL),
|
||||||
m_GI(false),
|
m_GI(false),
|
||||||
@@ -78,13 +80,13 @@ bool CDMRDataHeader::put(const unsigned char* bytes)
|
|||||||
|
|
||||||
switch (dpf) {
|
switch (dpf) {
|
||||||
case DPF_UNCONFIRMED_DATA:
|
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_F = (m_data[8U] & 0x80U) == 0x80U;
|
||||||
m_blocks = m_data[8U] & 0x7FU;
|
m_blocks = m_data[8U] & 0x7FU;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DPF_CONFIRMED_DATA:
|
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_F = (m_data[8U] & 0x80U) == 0x80U;
|
||||||
m_blocks = m_data[8U] & 0x7FU;
|
m_blocks = m_data[8U] & 0x7FU;
|
||||||
m_S = (m_data[9U] & 0x80U) == 0x80U;
|
m_S = (m_data[9U] & 0x80U) == 0x80U;
|
||||||
@@ -92,38 +94,46 @@ bool CDMRDataHeader::put(const unsigned char* bytes)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DPF_RESPONSE:
|
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;
|
m_blocks = m_data[8U] & 0x7FU;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DPF_PROPRIETARY:
|
case DPF_PROPRIETARY:
|
||||||
CUtils::dump(1U, "Proprietary Data Header", m_data, 12U);
|
CUtils::dump(1U, "DMR, Proprietary Data Header", m_data, 12U);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DPF_DEFINED_RAW:
|
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_blocks = (m_data[0U] & 0x30U) + (m_data[1U] & 0x0FU);
|
||||||
m_F = (m_data[8U] & 0x01U) == 0x01U;
|
m_F = (m_data[8U] & 0x01U) == 0x01U;
|
||||||
m_S = (m_data[8U] & 0x02U) == 0x02U;
|
m_S = (m_data[8U] & 0x02U) == 0x02U;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DPF_DEFINED_SHORT:
|
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_blocks = (m_data[0U] & 0x30U) + (m_data[1U] & 0x0FU);
|
||||||
m_F = (m_data[8U] & 0x01U) == 0x01U;
|
m_F = (m_data[8U] & 0x01U) == 0x01U;
|
||||||
m_S = (m_data[8U] & 0x02U) == 0x02U;
|
m_S = (m_data[8U] & 0x02U) == 0x02U;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DPF_UDT:
|
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;
|
m_blocks = m_data[8U] & 0x03U;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
CUtils::dump("Unknown Data Header", m_data, 12U);
|
CUtils::dump("DMR, Unknown Data Header", m_data, 12U);
|
||||||
break;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user