mirror of
https://github.com/g4klx/MMDVMHost.git
synced 2026-01-19 06:50:21 +01:00
Merge pull request #473 from gatekeep/P25Changes
Experimental P25 changes for LDU LC drop
This commit is contained in:
commit
8b933aec8c
|
|
@ -57,6 +57,7 @@ m_networkWatchdog(1000U, 0U, 1500U),
|
|||
m_rfFrames(0U),
|
||||
m_rfBits(0U),
|
||||
m_rfErrs(0U),
|
||||
m_rfUndecodableLC(0U),
|
||||
m_netFrames(0U),
|
||||
m_netLost(0U),
|
||||
m_rfDataFrames(0U),
|
||||
|
|
@ -64,6 +65,8 @@ m_nid(nac),
|
|||
m_lastDUID(P25_DUID_TERM),
|
||||
m_audio(),
|
||||
m_rfData(),
|
||||
m_rfLastLDU1(),
|
||||
m_rfLastLDU2(),
|
||||
m_netData(),
|
||||
m_rfLSD(),
|
||||
m_netLSD(),
|
||||
|
|
@ -123,6 +126,8 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
|
|||
else
|
||||
LogMessage("P25, transmission lost, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits));
|
||||
|
||||
LogMessage("P25, total frames: %d, bits: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_rfFrames, m_rfBits, m_rfUndecodableLC, m_rfErrs, float(m_rfErrs * 100U) / float(m_rfBits));
|
||||
|
||||
if (m_netState == RS_NET_IDLE)
|
||||
m_display->clearP25();
|
||||
|
||||
|
|
@ -225,7 +230,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
|
|||
}
|
||||
else if (duid == P25_DUID_LDU1) {
|
||||
if (m_rfState == RS_RF_LISTENING) {
|
||||
//m_rfData.reset();
|
||||
m_rfData.reset();
|
||||
bool ret = m_rfData.decodeLDU1(data + 2U);
|
||||
if (!ret) {
|
||||
m_lastDUID = duid;
|
||||
|
|
@ -279,7 +284,12 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
|
|||
if (m_rfState == RS_RF_AUDIO) {
|
||||
bool ret = m_rfData.decodeLDU1(data + 2U);
|
||||
if (!ret) {
|
||||
return false;
|
||||
LogWarning("P25, LDU1 undecodable LC, using last LDU1 LC");
|
||||
m_rfData = m_rfLastLDU1;
|
||||
m_rfUndecodableLC++;
|
||||
}
|
||||
else {
|
||||
m_rfLastLDU1 = m_rfData;
|
||||
}
|
||||
|
||||
// Regenerate Sync
|
||||
|
|
@ -328,7 +338,12 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
|
|||
if (m_rfState == RS_RF_AUDIO) {
|
||||
bool ret = m_rfData.decodeLDU2(data + 2U);
|
||||
if (!ret) {
|
||||
return false;
|
||||
LogWarning("P25, LDU2 undecodable LC, using last LDU2 LC");
|
||||
m_rfData = m_rfLastLDU2;
|
||||
m_rfUndecodableLC++;
|
||||
}
|
||||
else {
|
||||
m_rfLastLDU2 = m_rfData;
|
||||
}
|
||||
|
||||
writeNetwork(m_rfLDU, m_lastDUID, false);
|
||||
|
|
@ -479,6 +494,8 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
|
|||
else
|
||||
LogMessage("P25, received RF end of voice transmission, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits));
|
||||
|
||||
LogMessage("P25, total frames: %d, bits: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_rfFrames, m_rfBits, m_rfUndecodableLC, m_rfErrs, float(m_rfErrs * 100U) / float(m_rfBits));
|
||||
|
||||
m_display->clearP25();
|
||||
|
||||
#if defined(DUMP_P25)
|
||||
|
|
@ -936,6 +953,9 @@ void CP25Control::createRFHeader()
|
|||
|
||||
m_rfFrames = 0U;
|
||||
m_rfErrs = 0U;
|
||||
m_rfUndecodableLC = 0U;
|
||||
m_rfLastLDU1.reset();
|
||||
m_rfLastLDU2.reset();
|
||||
m_rfBits = 1U;
|
||||
m_rfTimeout.start();
|
||||
m_lastDUID = P25_DUID_HEADER;
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ private:
|
|||
unsigned int m_rfFrames;
|
||||
unsigned int m_rfBits;
|
||||
unsigned int m_rfErrs;
|
||||
unsigned int m_rfUndecodableLC;
|
||||
unsigned int m_netFrames;
|
||||
unsigned int m_netLost;
|
||||
unsigned int m_rfDataFrames;
|
||||
|
|
@ -72,6 +73,8 @@ private:
|
|||
unsigned char m_lastDUID;
|
||||
CP25Audio m_audio;
|
||||
CP25Data m_rfData;
|
||||
CP25Data m_rfLastLDU1;
|
||||
CP25Data m_rfLastLDU2;
|
||||
CP25Data m_netData;
|
||||
CP25LowSpeedData m_rfLSD;
|
||||
CP25LowSpeedData m_netLSD;
|
||||
|
|
|
|||
19
P25Data.cpp
19
P25Data.cpp
|
|
@ -55,6 +55,25 @@ CP25Data::~CP25Data()
|
|||
delete[] m_mi;
|
||||
}
|
||||
|
||||
CP25Data& CP25Data::operator=(const CP25Data& data)
|
||||
{
|
||||
if (this != &data) {
|
||||
m_mfId = data.m_mfId;
|
||||
|
||||
m_srcId = data.m_srcId;
|
||||
m_dstId = data.m_dstId;
|
||||
|
||||
m_emergency = data.m_emergency;
|
||||
|
||||
m_algId = data.m_algId;
|
||||
m_kId = data.m_kId;
|
||||
|
||||
::memcpy(m_mi, data.m_mi, P25_MI_LENGTH_BYTES);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool CP25Data::decodeHeader(const unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
|
|
|||
Loading…
Reference in a new issue