add some extra verbose logging to TSBK; fix fixed string handling;

pull/12/head
Bryan Biedenkapp 4 years ago
parent afff645320
commit 4267cf31f5

@ -1527,11 +1527,11 @@ void HostCal::processP25BER(const uint8_t* buffer)
bool ret = lc.decodeHDU(buffer + 1U);
if (!ret) {
LogWarning(LOG_CAL, "P25_DUID_HDU (Header), undecodable LC");
LogWarning(LOG_CAL, P25_HDU_STR ", undecodable LC");
m_berUndecodableLC++;
}
else {
LogMessage(LOG_CAL, "P25_DUID_HDU (Header), dstId = %u, algo = %X, kid = %X", lc.getDstId(), lc.getAlgId(), lc.getKId());
LogMessage(LOG_CAL, P25_HDU_STR ", dstId = %u, algo = %X, kid = %X", lc.getDstId(), lc.getAlgId(), lc.getKId());
}
m_berBits = 0U;
@ -1542,7 +1542,7 @@ void HostCal::processP25BER(const uint8_t* buffer)
}
else if (duid == P25_DUID_TDU) {
if (m_berFrames != 0U) {
LogMessage(LOG_CAL, "P25_DUID_TDU (Terminator Data Unit), total frames: %d, bits: %d, uncorrectable frames: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_berFrames, m_berBits, m_berUncorrectable, m_berUndecodableLC, m_berErrs, float(m_berErrs * 100U) / float(m_berBits));
LogMessage(LOG_CAL, P25_TDU_STR ", total frames: %d, bits: %d, uncorrectable frames: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_berFrames, m_berBits, m_berUncorrectable, m_berUndecodableLC, m_berErrs, float(m_berErrs * 100U) / float(m_berBits));
}
timerStop();
@ -1559,11 +1559,11 @@ void HostCal::processP25BER(const uint8_t* buffer)
bool ret = lc.decodeLDU1(buffer + 1U);
if (!ret) {
LogWarning(LOG_CAL, "P25_DUID_LDU1 (Logical Data Unit 1), undecodable LC");
LogWarning(LOG_CAL, P25_LDU1_STR ", undecodable LC");
m_berUndecodableLC++;
}
else {
LogMessage(LOG_CAL, "P25_DUID_LDU1 (Logical Data Unit 1) LC, mfId = $%02X, lco = $%02X, emerg = %u, encrypt = %u, prio = %u, group = %u, srcId = %u, dstId = %u",
LogMessage(LOG_CAL, P25_LDU1_STR " LC, mfId = $%02X, lco = $%02X, emerg = %u, encrypt = %u, prio = %u, group = %u, srcId = %u, dstId = %u",
lc.getMFId(), lc.getLCO(), lc.getEmergency(), lc.getEncrypted(), lc.getPriority(), lc.getGroup(), lc.getSrcId(), lc.getDstId());
}
@ -1596,9 +1596,9 @@ void HostCal::processP25BER(const uint8_t* buffer)
float ber = float(errs) / 12.33F;
if (ber < 10.0F)
LogMessage(LOG_CAL, "P25_DUID_LDU1 (Logical Data Unit 1), audio FEC BER (errs): %.3f%% (%u/1233)", ber, errs);
LogMessage(LOG_CAL, P25_LDU1_STR ", audio FEC BER (errs): %.3f%% (%u/1233)", ber, errs);
else {
LogWarning(LOG_CAL, "P25_DUID_LDU1 (Logical Data Unit 1), uncorrectable audio");
LogWarning(LOG_CAL, P25_LDU1_STR ", uncorrectable audio");
m_berUncorrectable++;
}
@ -1611,11 +1611,11 @@ void HostCal::processP25BER(const uint8_t* buffer)
bool ret = lc.decodeLDU2(buffer + 1U);
if (!ret) {
LogWarning(LOG_CAL, "P25_DUID_LDU2 (Logical Data Unit 2), undecodable LC");
LogWarning(LOG_CAL, P25_LDU2_STR ", undecodable LC");
m_berUndecodableLC++;
}
else {
LogMessage(LOG_CAL, "P25_DUID_LDU2 (Logical Data Unit 2) LC, mfId = $%02X, algo = %X, kid = %X",
LogMessage(LOG_CAL, P25_LDU2_STR " LC, mfId = $%02X, algo = %X, kid = %X",
lc.getMFId(), lc.getAlgId(), lc.getKId());
}
@ -1648,9 +1648,9 @@ void HostCal::processP25BER(const uint8_t* buffer)
float ber = float(errs) / 12.33F;
if (ber < 10.0F)
LogMessage(LOG_CAL, "P25_DUID_LDU2 (Logical Data Unit 2), audio FEC BER (errs): %.3f%% (%u/1233)", ber, errs);
LogMessage(LOG_CAL, P25_LDU2_STR ", audio FEC BER (errs): %.3f%% (%u/1233)", ber, errs);
else {
LogWarning(LOG_CAL, "P25_DUID_LDU2 (Logical Data Unit 2), uncorrectable audio");
LogWarning(LOG_CAL, P25_LDU2_STR ", uncorrectable audio");
m_berUncorrectable++;
}
@ -1676,11 +1676,11 @@ void HostCal::processP25BER(const uint8_t* buffer)
bool ret = dataHeader.decode(rfPDU + P25_SYNC_LENGTH_BYTES + P25_NID_LENGTH_BYTES);
if (!ret) {
LogWarning(LOG_RF, "P25_DUID_PDU (Packet Data Unit), unfixable RF 1/2 rate header data");
LogWarning(LOG_RF, P25_PDU_STR ", unfixable RF 1/2 rate header data");
Utils::dump(1U, "Unfixable PDU Data", rfPDU + P25_SYNC_LENGTH_BYTES + P25_NID_LENGTH_BYTES, P25_PDU_HEADER_LENGTH_BYTES);
}
else {
LogMessage(LOG_CAL, "P25_DUID_PDU (Packet Data Unit), fmt = $%02X, sap = $%02X, fullMessage = %u, blocksToFollow = %u, padCount = %u, n = %u, seqNo = %u",
LogMessage(LOG_CAL, P25_PDU_STR ", fmt = $%02X, sap = $%02X, fullMessage = %u, blocksToFollow = %u, padCount = %u, n = %u, seqNo = %u",
dataHeader.getFormat(), dataHeader.getSAP(), dataHeader.getFullMessage(), dataHeader.getBlocksToFollow(), dataHeader.getPadCount(),
dataHeader.getN(), dataHeader.getSeqNo());
}
@ -1691,13 +1691,17 @@ void HostCal::processP25BER(const uint8_t* buffer)
timerStop();
lc::TSBK tsbk = lc::TSBK(SiteData(), lookups::IdenTable());
tsbk.setVerbose(true); // always verbose in CAL
Utils::dump(1U, "Raw TSBK Dump", buffer + 1U, P25_TSDU_FRAME_LENGTH_BYTES);
bool ret = tsbk.decode(buffer + 1U);
if (!ret) {
LogWarning(LOG_CAL, "P25_DUID_TSDU (Trunking System Data Unit), undecodable LC");
LogWarning(LOG_CAL, P25_TSDU_STR ", undecodable LC");
m_berUndecodableLC++;
}
else {
LogMessage(LOG_CAL, "P25_DUID_TSDU (Trunking System Data Unit), mfId = $%02X, lco = $%02X, srcId = %u, dstId = %u, service = %u, status = %u, message = %u, extFunc = %u, netId = %u, sysId = %u",
LogMessage(LOG_CAL, P25_TSDU_STR ", mfId = $%02X, lco = $%02X, srcId = %u, dstId = %u, service = %u, status = %u, message = %u, extFunc = %u, netId = %u, sysId = %u",
tsbk.getMFId(), tsbk.getLCO(), tsbk.getSrcId(), tsbk.getDstId(), tsbk.getService(), tsbk.getStatus(), tsbk.getMessage(), tsbk.getExtendedFunction(),
tsbk.getNetId(), tsbk.getSysId());
}
@ -1724,11 +1728,11 @@ void HostCal::processP251KBER(const uint8_t* buffer)
bool ret = lc.decodeHDU(buffer + 1U);
if (!ret) {
LogWarning(LOG_CAL, "P25_DUID_HDU (Header), undecodable LC");
LogWarning(LOG_CAL, P25_HDU_STR ", undecodable LC");
m_berUndecodableLC++;
}
else {
LogMessage(LOG_RF, "P25_DUID_HDU (Header), dstId = %u, algo = %X, kid = %X", lc.getDstId(), lc.getAlgId(), lc.getKId());
LogMessage(LOG_RF, P25_HDU_STR ", dstId = %u, algo = %X, kid = %X", lc.getDstId(), lc.getAlgId(), lc.getKId());
}
m_berBits = 0U;
@ -1739,7 +1743,7 @@ void HostCal::processP251KBER(const uint8_t* buffer)
}
else if (duid == P25_DUID_TDU) {
if (m_berFrames != 0U) {
LogMessage(LOG_CAL, "P25_DUID_TDU (Terminator Data Unit), total frames: %d, bits: %d, uncorrectable frames: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_berFrames, m_berBits, m_berUncorrectable, m_berUndecodableLC, m_berErrs, float(m_berErrs * 100U) / float(m_berBits));
LogMessage(LOG_CAL, P25_TDU_STR ", total frames: %d, bits: %d, uncorrectable frames: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_berFrames, m_berBits, m_berUncorrectable, m_berUndecodableLC, m_berErrs, float(m_berErrs * 100U) / float(m_berBits));
}
timerStop();
@ -1756,11 +1760,11 @@ void HostCal::processP251KBER(const uint8_t* buffer)
bool ret = lc.decodeLDU1(buffer + 1U);
if (!ret) {
LogWarning(LOG_CAL, "P25_DUID_LDU1 (Logical Data Unit 1), undecodable LC");
LogWarning(LOG_CAL, P25_LDU1_STR ", undecodable LC");
m_berUndecodableLC++;
}
else {
LogMessage(LOG_CAL, "P25_DUID_LDU1 (Logical Data Unit 1) LC, mfId = $%02X, lco = $%02X, emerg = %u, encrypt = %u, prio = %u, group = %u, srcId = %u, dstId = %u",
LogMessage(LOG_CAL, P25_LDU1_STR " LC, mfId = $%02X, lco = $%02X, emerg = %u, encrypt = %u, prio = %u, group = %u, srcId = %u, dstId = %u",
lc.getMFId(), lc.getLCO(), lc.getEmergency(), lc.getEncrypted(), lc.getPriority(), lc.getGroup(), lc.getSrcId(), lc.getDstId());
}
@ -1769,9 +1773,9 @@ void HostCal::processP251KBER(const uint8_t* buffer)
float ber = float(errs) / 12.33F;
if (ber < 10.0F)
LogMessage(LOG_CAL, "P25_DUID_LDU1 (Logical Data Unit 1), 1011 Test Pattern BER (errs): %.3f%% (%u/1233)", ber, errs);
LogMessage(LOG_CAL, P25_LDU1_STR ", 1011 Test Pattern BER (errs): %.3f%% (%u/1233)", ber, errs);
else {
LogWarning(LOG_CAL, "P25_DUID_LDU1 (Logical Data Unit 1), uncorrectable audio");
LogWarning(LOG_CAL, P25_LDU1_STR ", uncorrectable audio");
m_berUncorrectable++;
}
@ -1784,11 +1788,11 @@ void HostCal::processP251KBER(const uint8_t* buffer)
bool ret = lc.decodeLDU2(buffer + 1U);
if (!ret) {
LogWarning(LOG_CAL, "P25_DUID_LDU2 (Logical Data Unit 2), undecodable LC");
LogWarning(LOG_CAL, P25_LDU2_STR ", undecodable LC");
m_berUndecodableLC++;
}
else {
LogMessage(LOG_CAL, "P25_DUID_LDU2 (Logical Data Unit 2) LC, mfId = $%02X, algo = %X, kid = %X",
LogMessage(LOG_CAL, P25_LDU2_STR " LC, mfId = $%02X, algo = %X, kid = %X",
lc.getMFId(), lc.getAlgId(), lc.getKId());
}
@ -1797,9 +1801,9 @@ void HostCal::processP251KBER(const uint8_t* buffer)
float ber = float(errs) / 12.33F;
if (ber < 10.0F)
LogMessage(LOG_CAL, "P25_DUID_LDU2 (Logical Data Unit 2), 1011 Test Pattern BER (errs): %.3f%% (%u/1233)", ber, errs);
LogMessage(LOG_CAL, P25_LDU2_STR ", 1011 Test Pattern BER (errs): %.3f%% (%u/1233)", ber, errs);
else {
LogWarning(LOG_CAL, "P25_DUID_LDU2 (Logical Data Unit 2), uncorrectable audio");
LogWarning(LOG_CAL, P25_LDU2_STR ", uncorrectable audio");
m_berUncorrectable++;
}

@ -185,8 +185,16 @@ bool TSBK::decode(const uint8_t* data)
// decode 1/2 rate Trellis & check CRC-CCITT 16
try {
bool ret = m_trellis.decode12(raw, tsbk);
if (ret)
if (m_verbose && !ret) {
LogDebug(LOG_P25, "TSBK::decode(): failed to decode Trellis 1/2 rate");
}
if (ret) {
ret = edac::CRC::checkCCITT162(tsbk, P25_TSBK_LENGTH_BYTES);
if (m_verbose && !ret) {
LogDebug(LOG_P25, "TSBK::decode(): CRC CCITT-162 failed to match");
}
}
if (!ret)
return false;
}

Loading…
Cancel
Save

Powered by TurnKey Linux.