Fix MD-390 GPS data block count.

This commit is contained in:
Jonathan Naylor 2016-11-21 17:32:01 +00:00
parent 96fd4697dd
commit 1b7fbf7197

View file

@ -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;
}