From 10ec9bd5442556cd16887820101f35fd563c9ba9 Mon Sep 17 00:00:00 2001 From: Alex Ernst Date: Sun, 17 Sep 2023 22:16:41 +0200 Subject: [PATCH 1/4] Fix trellis enocder/decoder bit order: invert bit order --- DMRTrellis.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/DMRTrellis.cpp b/DMRTrellis.cpp index f0a73cb..cdf30ed 100644 --- a/DMRTrellis.cpp +++ b/DMRTrellis.cpp @@ -280,12 +280,12 @@ void CDMRTrellis::pointsToDibits(const unsigned char* points, signed char* dibit void CDMRTrellis::bitsToTribits(const unsigned char* payload, unsigned char* tribits) const { for (unsigned int i = 0U; i < 48U; i++) { - unsigned int n = 143U - i * 3U; + unsigned int n = i * 3U; bool b1 = READ_BIT(payload, n) != 0x00U; - n--; + n++; bool b2 = READ_BIT(payload, n) != 0x00U; - n--; + n++; bool b3 = READ_BIT(payload, n) != 0x00U; unsigned char tribit = 0U; @@ -308,12 +308,12 @@ void CDMRTrellis::tribitsToBits(const unsigned char* tribits, unsigned char* pay bool b2 = (tribit & 0x02U) == 0x02U; bool b3 = (tribit & 0x01U) == 0x01U; - unsigned int n = 143U - i * 3U; + unsigned int n = i * 3U; WRITE_BIT(payload, n, b1); - n--; + n++; WRITE_BIT(payload, n, b2); - n--; + n++; WRITE_BIT(payload, n, b3); } } From 3a670f84c9e82de825987fcadbbeaeb9e73e15f8 Mon Sep 17 00:00:00 2001 From: Alex Ernst Date: Sun, 17 Sep 2023 22:36:43 +0200 Subject: [PATCH 2/4] Add debugging messages for DMR data packets --- DMRSlot.cpp | 89 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 55 insertions(+), 34 deletions(-) diff --git a/DMRSlot.cpp b/DMRSlot.cpp index f341e1e..bfd40b4 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -531,23 +531,33 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (m_rfState != RS_RF_DATA || m_rfFrames == 0U) return false; - // Regenerate the rate 1/2 payload - if (dataType == DT_RATE_12_DATA) { - CBPTC19696 bptc; - unsigned char payload[12U]; - bptc.decode(data + 2U, payload); - bptc.encode(payload, data + 2U); - } else if (dataType == DT_RATE_34_DATA) { - CDMRTrellis trellis; - unsigned char payload[18U]; - bool ret = trellis.decode(data + 2U, payload); - if (ret) { - trellis.encode(payload, data + 2U); - } else { - LogMessage("DMR Slot %u, unfixable RF rate 3/4 data", m_slotNo); - CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); - } - } + char title[80U]; + // Regenerate the rate 1/2 payload + if (dataType == DT_RATE_12_DATA) { + CBPTC19696 bptc; + unsigned char payload[12U]; + bptc.decode(data + 2U, payload); + ::sprintf(title, "DMR Slot %u, Data 1/2", m_slotNo); + CUtils::dump(1U, title, payload, 12U); + bptc.encode(payload, data + 2U); + } else if (dataType == DT_RATE_34_DATA) { + CDMRTrellis trellis; + unsigned char payload[18U]; + bool ret = trellis.decode(data + 2U, payload); + if (ret) { + ::sprintf(title, "DMR Slot %u, Data 3/4", m_slotNo); + CUtils::dump(1U, title, payload, 18U); + trellis.encode(payload, data + 2U); + } else { + LogMessage("DMR Slot %u, unfixable RF rate 3/4 data", m_slotNo); + CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); + } + } + else + { + ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); + CUtils::dump(1U, title, data + 2U, 24U); + } // Regenerate the Slot Type slotType.getData(data + 2U); @@ -1716,23 +1726,34 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) return; } - // Regenerate the rate 1/2 payload - if (dataType == DT_RATE_12_DATA) { - CBPTC19696 bptc; - unsigned char payload[12U]; - bptc.decode(data + 2U, payload); - bptc.encode(payload, data + 2U); - } else if (dataType == DT_RATE_34_DATA) { - CDMRTrellis trellis; - unsigned char payload[18U]; - bool ret = trellis.decode(data + 2U, payload); - if (ret) { - trellis.encode(payload, data + 2U); - } else { - LogMessage("DMR Slot %u, unfixable network rate 3/4 data", m_slotNo); - CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); - } - } + char title[80U]; + // Regenerate the rate 1/2 payload + if (dataType == DT_RATE_12_DATA) { + CBPTC19696 bptc; + unsigned char payload[12U]; + bptc.decode(data + 2U, payload); + ::sprintf(title, "DMR Slot %u, Data 1/2", m_slotNo); + CUtils::dump(1U, title, payload, 12U); + bptc.encode(payload, data + 2U); + } else if (dataType == DT_RATE_34_DATA) { + CDMRTrellis trellis; + unsigned char payload[18U]; + bool ret = trellis.decode(data + 2U, payload); + if (ret) { + ::sprintf(title, "DMR Slot %u, Data 3/4", m_slotNo); + CUtils::dump(1U, title, payload, 18U); + trellis.encode(payload, data + 2U); + } else { + LogMessage("DMR Slot %u, unfixable network rate 3/4 data", m_slotNo); + CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); + } + } + else + { + ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); + CUtils::dump(1U, title, data + 2U, 24U); + } + // Regenerate the Slot Type CDMRSlotType slotType; From a79793ee8a97928aa577c1f14d223cf148443da3 Mon Sep 17 00:00:00 2001 From: Alex Ernst Date: Mon, 18 Sep 2023 13:28:42 +0200 Subject: [PATCH 3/4] Fix formatting --- DMRSlot.cpp | 108 ++++++++++++++++++++++++++-------------------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/DMRSlot.cpp b/DMRSlot.cpp index bfd40b4..fce71a1 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -531,33 +531,33 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (m_rfState != RS_RF_DATA || m_rfFrames == 0U) return false; - char title[80U]; - // Regenerate the rate 1/2 payload - if (dataType == DT_RATE_12_DATA) { - CBPTC19696 bptc; - unsigned char payload[12U]; - bptc.decode(data + 2U, payload); - ::sprintf(title, "DMR Slot %u, Data 1/2", m_slotNo); - CUtils::dump(1U, title, payload, 12U); - bptc.encode(payload, data + 2U); - } else if (dataType == DT_RATE_34_DATA) { - CDMRTrellis trellis; - unsigned char payload[18U]; - bool ret = trellis.decode(data + 2U, payload); - if (ret) { - ::sprintf(title, "DMR Slot %u, Data 3/4", m_slotNo); - CUtils::dump(1U, title, payload, 18U); - trellis.encode(payload, data + 2U); - } else { - LogMessage("DMR Slot %u, unfixable RF rate 3/4 data", m_slotNo); - CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); - } - } - else - { - ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); - CUtils::dump(1U, title, data + 2U, 24U); - } + char title[80U]; + // Regenerate the rate 1/2 payload + if (dataType == DT_RATE_12_DATA) { + CBPTC19696 bptc; + unsigned char payload[12U]; + bptc.decode(data + 2U, payload); + ::sprintf(title, "DMR Slot %u, Data 1/2", m_slotNo); + CUtils::dump(1U, title, payload, 12U); + bptc.encode(payload, data + 2U); + } else if (dataType == DT_RATE_34_DATA) { + CDMRTrellis trellis; + unsigned char payload[18U]; + bool ret = trellis.decode(data + 2U, payload); + if (ret) { + ::sprintf(title, "DMR Slot %u, Data 3/4", m_slotNo); + CUtils::dump(1U, title, payload, 18U); + trellis.encode(payload, data + 2U); + } else { + LogMessage("DMR Slot %u, unfixable RF rate 3/4 data", m_slotNo); + CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); + } + } + else + { + ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); + CUtils::dump(1U, title, data + 2U, 24U); + } // Regenerate the Slot Type slotType.getData(data + 2U); @@ -1726,33 +1726,33 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) return; } - char title[80U]; - // Regenerate the rate 1/2 payload - if (dataType == DT_RATE_12_DATA) { - CBPTC19696 bptc; - unsigned char payload[12U]; - bptc.decode(data + 2U, payload); - ::sprintf(title, "DMR Slot %u, Data 1/2", m_slotNo); - CUtils::dump(1U, title, payload, 12U); - bptc.encode(payload, data + 2U); - } else if (dataType == DT_RATE_34_DATA) { - CDMRTrellis trellis; - unsigned char payload[18U]; - bool ret = trellis.decode(data + 2U, payload); - if (ret) { - ::sprintf(title, "DMR Slot %u, Data 3/4", m_slotNo); - CUtils::dump(1U, title, payload, 18U); - trellis.encode(payload, data + 2U); - } else { - LogMessage("DMR Slot %u, unfixable network rate 3/4 data", m_slotNo); - CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); - } - } - else - { - ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); - CUtils::dump(1U, title, data + 2U, 24U); - } + char title[80U]; + // Regenerate the rate 1/2 payload + if (dataType == DT_RATE_12_DATA) { + CBPTC19696 bptc; + unsigned char payload[12U]; + bptc.decode(data + 2U, payload); + ::sprintf(title, "DMR Slot %u, Data 1/2", m_slotNo); + CUtils::dump(1U, title, payload, 12U); + bptc.encode(payload, data + 2U); + } else if (dataType == DT_RATE_34_DATA) { + CDMRTrellis trellis; + unsigned char payload[18U]; + bool ret = trellis.decode(data + 2U, payload); + if (ret) { + ::sprintf(title, "DMR Slot %u, Data 3/4", m_slotNo); + CUtils::dump(1U, title, payload, 18U); + trellis.encode(payload, data + 2U); + } else { + LogMessage("DMR Slot %u, unfixable network rate 3/4 data", m_slotNo); + CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); + } + } + else + { + ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); + CUtils::dump(1U, title, data + 2U, 24U); + } // Regenerate the Slot Type From 05db57273858f2c6306ddd1dc0c4e1bd69125dc1 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 27 Sep 2023 14:29:34 +0100 Subject: [PATCH 4/4] Fix formatting. --- DMRSlot.cpp | 8 ++------ Version.h | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/DMRSlot.cpp b/DMRSlot.cpp index fce71a1..e66e11c 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -552,9 +552,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) LogMessage("DMR Slot %u, unfixable RF rate 3/4 data", m_slotNo); CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); } - } - else - { + } else { ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); CUtils::dump(1U, title, data + 2U, 24U); } @@ -1747,9 +1745,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) LogMessage("DMR Slot %u, unfixable network rate 3/4 data", m_slotNo); CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); } - } - else - { + } else { ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); CUtils::dump(1U, title, data + 2U, 24U); } diff --git a/Version.h b/Version.h index f5c6244..19548a7 100644 --- a/Version.h +++ b/Version.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20220523"; +const char* VERSION = "20230927"; #endif