From 7b88e883f993c2e3468ee81adc764412c50c4476 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sat, 3 Feb 2018 20:10:25 -0300 Subject: [PATCH 1/4] Adding some additional idle frames after a DMR Abort --- DMRTX.cpp | 8 +++++++- DMRTX.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) mode change 100644 => 100755 DMRTX.cpp mode change 100644 => 100755 DMRTX.h diff --git a/DMRTX.cpp b/DMRTX.cpp old mode 100644 new mode 100755 index 9824f9c..b4d43b4 --- a/DMRTX.cpp +++ b/DMRTX.cpp @@ -54,6 +54,7 @@ const uint8_t BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02 #define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) const uint32_t STARTUP_COUNT = 20U; +const uint32_t ABORT_COUNT = 8U; CDMRTX::CDMRTX() : m_fifo(), @@ -69,6 +70,7 @@ m_poBuffer(), m_poLen(0U), m_poPtr(0U), m_frameCount(0U), +m_abortCount(0U), m_abort() { ::memset(m_modState, 0x00U, 16U * sizeof(q15_t)); @@ -210,10 +212,12 @@ uint8_t CDMRTX::writeAbort(const uint8_t* data, uint8_t length) switch (data[0U]) { case 1U: + m_abortCount = 0U; m_abort[0U] = true; return 0U; case 2U: + m_abortCount = 0U; m_abort[1U] = true; return 0U; @@ -227,6 +231,7 @@ void CDMRTX::setStart(bool start) m_state = start ? DMRTXSTATE_SLOT1 : DMRTXSTATE_IDLE; m_frameCount = 0U; + m_abortCount = 0U; m_abort[0U] = false; m_abort[1U] = false; @@ -282,7 +287,7 @@ uint8_t CDMRTX::getSpace2() const void CDMRTX::createData(uint8_t slotIndex) { - if (m_fifo[slotIndex].getData() > 0U && m_frameCount >= STARTUP_COUNT) { + if (m_fifo[slotIndex].getData() > 0U && m_frameCount >= STARTUP_COUNT && m_abortCount >= ABORT_COUNT) { for (unsigned int i = 0U; i < DMR_FRAME_LENGTH_BYTES; i++) { m_poBuffer[i] = m_fifo[slotIndex].get(); m_markBuffer[i] = MARK_NONE; @@ -335,6 +340,7 @@ void CDMRTX::createCal() void CDMRTX::createCACH(uint8_t txSlotIndex, uint8_t rxSlotIndex) { m_frameCount++; + m_abortCount++; if (m_cachPtr >= 12U) m_cachPtr = 0U; diff --git a/DMRTX.h b/DMRTX.h old mode 100644 new mode 100755 index 00977d5..867ee4c --- a/DMRTX.h +++ b/DMRTX.h @@ -72,6 +72,7 @@ private: uint16_t m_poLen; uint16_t m_poPtr; uint32_t m_frameCount; + uint32_t m_abortCount; bool m_abort[2U]; void createData(uint8_t slotIndex); From 555c308749a5561eb808b6186f78b085199be92d Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Mon, 5 Feb 2018 09:12:05 -0300 Subject: [PATCH 2/4] Updating DMR abort delay --- DMRTX.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DMRTX.cpp b/DMRTX.cpp index b4d43b4..b708f46 100755 --- a/DMRTX.cpp +++ b/DMRTX.cpp @@ -54,7 +54,7 @@ const uint8_t BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02 #define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) const uint32_t STARTUP_COUNT = 20U; -const uint32_t ABORT_COUNT = 8U; +const uint32_t ABORT_COUNT = 6U; CDMRTX::CDMRTX() : m_fifo(), From caaf090b101cd28c5394d0fd5d998584a7ebca79 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Mon, 5 Feb 2018 22:36:05 -0300 Subject: [PATCH 3/4] DMR abort counter for each slot --- DMRTX.cpp | 17 +++++++++++------ DMRTX.h | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/DMRTX.cpp b/DMRTX.cpp index b708f46..0f4f56c 100755 --- a/DMRTX.cpp +++ b/DMRTX.cpp @@ -70,7 +70,7 @@ m_poBuffer(), m_poLen(0U), m_poPtr(0U), m_frameCount(0U), -m_abortCount(0U), +m_abortCount(), m_abort() { ::memset(m_modState, 0x00U, 16U * sizeof(q15_t)); @@ -85,6 +85,9 @@ m_abort() m_abort[0U] = false; m_abort[1U] = false; + + m_abortCount[0U] = 0U; + m_abortCount[1U] = 0U; } void CDMRTX::process() @@ -212,12 +215,12 @@ uint8_t CDMRTX::writeAbort(const uint8_t* data, uint8_t length) switch (data[0U]) { case 1U: - m_abortCount = 0U; + m_abortCount[0U] = 0U; m_abort[0U] = true; return 0U; case 2U: - m_abortCount = 0U; + m_abortCount[1U] = 0U; m_abort[1U] = true; return 0U; @@ -231,7 +234,8 @@ void CDMRTX::setStart(bool start) m_state = start ? DMRTXSTATE_SLOT1 : DMRTXSTATE_IDLE; m_frameCount = 0U; - m_abortCount = 0U; + m_abortCount[0U] = 0U; + m_abortCount[1U] = 0U; m_abort[0U] = false; m_abort[1U] = false; @@ -287,7 +291,7 @@ uint8_t CDMRTX::getSpace2() const void CDMRTX::createData(uint8_t slotIndex) { - if (m_fifo[slotIndex].getData() > 0U && m_frameCount >= STARTUP_COUNT && m_abortCount >= ABORT_COUNT) { + if (m_fifo[slotIndex].getData() > 0U && m_frameCount >= STARTUP_COUNT && m_abortCount[slotIndex] >= ABORT_COUNT) { for (unsigned int i = 0U; i < DMR_FRAME_LENGTH_BYTES; i++) { m_poBuffer[i] = m_fifo[slotIndex].get(); m_markBuffer[i] = MARK_NONE; @@ -340,7 +344,8 @@ void CDMRTX::createCal() void CDMRTX::createCACH(uint8_t txSlotIndex, uint8_t rxSlotIndex) { m_frameCount++; - m_abortCount++; + m_abortCount[0U]++; + m_abortCount[1U]++; if (m_cachPtr >= 12U) m_cachPtr = 0U; diff --git a/DMRTX.h b/DMRTX.h index 867ee4c..1e2f617 100755 --- a/DMRTX.h +++ b/DMRTX.h @@ -72,7 +72,7 @@ private: uint16_t m_poLen; uint16_t m_poPtr; uint32_t m_frameCount; - uint32_t m_abortCount; + uint32_t m_abortCount[2U]; bool m_abort[2U]; void createData(uint8_t slotIndex); From 2bc99deec24f90d9dd63edc5feca392f1c702863 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Wed, 7 Feb 2018 13:55:15 -0300 Subject: [PATCH 4/4] Additional available data FIFO check --- DMRTX.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DMRTX.cpp b/DMRTX.cpp index 0f4f56c..81437ec 100755 --- a/DMRTX.cpp +++ b/DMRTX.cpp @@ -291,7 +291,7 @@ uint8_t CDMRTX::getSpace2() const void CDMRTX::createData(uint8_t slotIndex) { - if (m_fifo[slotIndex].getData() > 0U && m_frameCount >= STARTUP_COUNT && m_abortCount[slotIndex] >= ABORT_COUNT) { + if (m_fifo[slotIndex].getData() >= DMR_FRAME_LENGTH_BYTES && m_frameCount >= STARTUP_COUNT && m_abortCount[slotIndex] >= ABORT_COUNT) { for (unsigned int i = 0U; i < DMR_FRAME_LENGTH_BYTES; i++) { m_poBuffer[i] = m_fifo[slotIndex].get(); m_markBuffer[i] = MARK_NONE;