From 1f2ae86612d78d8d71761c6a13ef4f4d3c21fde4 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Mon, 16 Jul 2018 13:33:22 -0400 Subject: [PATCH] Reducing DMRIdleRX buffer a little, fix some format and copyrights --- DMRDMORX.cpp | 54 +++++++++++++++---------------- DMRDMORX.h | 2 +- DMRIdleRX.cpp | 7 ++-- DMRIdleRX.h | 4 +-- DMRSlotRX.cpp | 88 ++++++++++++++++++++++++--------------------------- 5 files changed, 72 insertions(+), 83 deletions(-) diff --git a/DMRDMORX.cpp b/DMRDMORX.cpp index e7f8a5c..a8fcb24 100644 --- a/DMRDMORX.cpp +++ b/DMRDMORX.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2009-2016 by Jonathan Naylor G4KLX - * Copyright (C) 2016,2017 by Andy Uribe CA6JAU + * Copyright (C) 2016,2017,2018 by Andy Uribe CA6JAU * * 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 @@ -65,7 +65,7 @@ void CDMRDMORX::reset() } void CDMRDMORX::databit(bool bit) -{ +{ WRITE_BIT1(m_buffer, m_dataPtr, bit); m_patternBuffer <<= 1; @@ -92,7 +92,7 @@ void CDMRDMORX::databit(bool bit) correlateSync(); } } - + if (m_dataPtr == m_endPtr) { frame[0U] = m_control; @@ -189,7 +189,7 @@ void CDMRDMORX::databit(bool bit) // End of this slot, reset some items for the next slot. m_control = CONTROL_NONE; } - + m_dataPtr++; if (m_dataPtr >= DMO_BUFFER_LENGTH_BITS) @@ -199,41 +199,37 @@ void CDMRDMORX::databit(bool bit) } void CDMRDMORX::correlateSync() -{ +{ if ( (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) || \ (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_S2_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) ) { + m_control = CONTROL_DATA; + m_syncPtr = m_dataPtr; - m_control = CONTROL_DATA; - m_syncPtr = m_dataPtr; - - m_startPtr = m_dataPtr + DMO_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; - if (m_startPtr >= DMO_BUFFER_LENGTH_BITS) - m_startPtr -= DMO_BUFFER_LENGTH_BITS; + m_startPtr = m_dataPtr + DMO_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; + if (m_startPtr >= DMO_BUFFER_LENGTH_BITS) + m_startPtr -= DMO_BUFFER_LENGTH_BITS; - m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; - if (m_endPtr >= DMO_BUFFER_LENGTH_BITS) - m_endPtr -= DMO_BUFFER_LENGTH_BITS; - - m_modeTimerCnt = 0; + m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; + if (m_endPtr >= DMO_BUFFER_LENGTH_BITS) + m_endPtr -= DMO_BUFFER_LENGTH_BITS; - //DEBUG4("SYNC MS Data found pos/start/end:", m_dataPtr, m_startPtr, m_endPtr); + m_modeTimerCnt = 0; + //DEBUG4("SYNC MS Data found pos/start/end:", m_dataPtr, m_startPtr, m_endPtr); } else if ( (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) || \ (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_S2_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) ) { + m_control = CONTROL_VOICE; + m_syncPtr = m_dataPtr; - m_control = CONTROL_VOICE; - m_syncPtr = m_dataPtr; + m_startPtr = m_dataPtr + DMO_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; + if (m_startPtr >= DMO_BUFFER_LENGTH_BITS) + m_startPtr -= DMO_BUFFER_LENGTH_BITS; - m_startPtr = m_dataPtr + DMO_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; - if (m_startPtr >= DMO_BUFFER_LENGTH_BITS) - m_startPtr -= DMO_BUFFER_LENGTH_BITS; + m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; + if (m_endPtr >= DMO_BUFFER_LENGTH_BITS) + m_endPtr -= DMO_BUFFER_LENGTH_BITS; - m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; - if (m_endPtr >= DMO_BUFFER_LENGTH_BITS) - m_endPtr -= DMO_BUFFER_LENGTH_BITS; - - m_modeTimerCnt = 0; - - //DEBUG4("SYNC MS Voice found pos/start/end: ", m_dataPtr, m_startPtr, m_endPtr); + m_modeTimerCnt = 0; + //DEBUG4("SYNC MS Voice found pos/start/end: ", m_dataPtr, m_startPtr, m_endPtr); } } diff --git a/DMRDMORX.h b/DMRDMORX.h index 65123c1..5979003 100644 --- a/DMRDMORX.h +++ b/DMRDMORX.h @@ -1,6 +1,6 @@ /* * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX - * Copyright (C) 2016,2017 by Andy Uribe CA6JAU + * Copyright (C) 2016,2017,2018 by Andy Uribe CA6JAU * * 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 diff --git a/DMRIdleRX.cpp b/DMRIdleRX.cpp index 69dd93d..d20fd96 100644 --- a/DMRIdleRX.cpp +++ b/DMRIdleRX.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2009-2017 by Jonathan Naylor G4KLX - * Copyright (C) 2017 by Andy Uribe CA6JAU + * Copyright (C) 2017,2018 by Andy Uribe CA6JAU * * 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 @@ -60,12 +60,11 @@ void CDMRIdleRX::databit(bool bit) m_patternBuffer <<= 1; if (bit) m_patternBuffer |= 0x01U; - + if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) { m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; if (m_endPtr >= DMR_IDLE_LENGTH_BITS) m_endPtr -= DMR_IDLE_LENGTH_BITS; - // DEBUG3("SYNC MS Data found pos/end:", m_dataPtr, m_endPtr); } @@ -81,7 +80,7 @@ void CDMRIdleRX::databit(bool bit) uint8_t dataType; CDMRSlotType slotType; slotType.decode(frame + 1U, colorCode, dataType); - + if (colorCode == m_colorCode && dataType == DT_CSBK) { frame[0U] = CONTROL_IDLE | CONTROL_DATA | DT_CSBK; serial.writeDMRData(false, frame, DMR_FRAME_LENGTH_BYTES + 1U); diff --git a/DMRIdleRX.h b/DMRIdleRX.h index 78b7553..1e3592d 100644 --- a/DMRIdleRX.h +++ b/DMRIdleRX.h @@ -1,6 +1,6 @@ /* * Copyright (C) 2015 by Jonathan Naylor G4KLX - * Copyright (C) 2017 by Andy Uribe CA6JAU + * Copyright (C) 2017,2018 by Andy Uribe CA6JAU * * 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 @@ -26,7 +26,7 @@ #include "DMRDefines.h" -const uint16_t DMR_IDLE_LENGTH_BITS = 400U; +const uint16_t DMR_IDLE_LENGTH_BITS = 320U; class CDMRIdleRX { public: diff --git a/DMRSlotRX.cpp b/DMRSlotRX.cpp index d08338e..07b98f6 100644 --- a/DMRSlotRX.cpp +++ b/DMRSlotRX.cpp @@ -102,8 +102,7 @@ void CDMRSlotRX::reset() bool CDMRSlotRX::databit(bool bit) { - uint16_t min; - uint16_t max; + uint16_t min, max; m_delayPtr++; if (m_delayPtr < m_delay) @@ -367,58 +366,53 @@ void CDMRSlotRX::correlateSync() uint8_t control; if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) { + control = CONTROL_DATA; + syncPtr = m_dataPtr; - control = CONTROL_DATA; - syncPtr = m_dataPtr; + startPtr = m_dataPtr + DMR_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; + if (startPtr >= DMR_BUFFER_LENGTH_BITS) + startPtr -= DMR_BUFFER_LENGTH_BITS; - startPtr = m_dataPtr + DMR_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; - if (startPtr >= DMR_BUFFER_LENGTH_BITS) - startPtr -= DMR_BUFFER_LENGTH_BITS; + endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; + if (endPtr >= DMR_BUFFER_LENGTH_BITS) + endPtr -= DMR_BUFFER_LENGTH_BITS; - endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; - if (endPtr >= DMR_BUFFER_LENGTH_BITS) - endPtr -= DMR_BUFFER_LENGTH_BITS; - - if(m_slot) { - m_syncPtr2 = syncPtr; - m_startPtr2 = startPtr; - m_endPtr2 = endPtr; - m_control2 = control; - } else { - m_syncPtr1 = syncPtr; - m_startPtr1 = startPtr; - m_endPtr1 = endPtr; - m_control1 = control; - } - - //DEBUG5("SYNC corr MS Data found slot/pos/start/end:", m_slot ? 2U : 1U, m_dataPtr, startPtr, endPtr); - + if(m_slot) { + m_syncPtr2 = syncPtr; + m_startPtr2 = startPtr; + m_endPtr2 = endPtr; + m_control2 = control; + } else { + m_syncPtr1 = syncPtr; + m_startPtr1 = startPtr; + m_endPtr1 = endPtr; + m_control1 = control; + } + //DEBUG5("SYNC corr MS Data found slot/pos/start/end:", m_slot ? 2U : 1U, m_dataPtr, startPtr, endPtr); } else if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) { + control = CONTROL_VOICE; + syncPtr = m_dataPtr; - control = CONTROL_VOICE; - syncPtr = m_dataPtr; + startPtr = m_dataPtr + DMR_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; + if (startPtr >= DMR_BUFFER_LENGTH_BITS) + startPtr -= DMR_BUFFER_LENGTH_BITS; - startPtr = m_dataPtr + DMR_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; - if (startPtr >= DMR_BUFFER_LENGTH_BITS) - startPtr -= DMR_BUFFER_LENGTH_BITS; - - endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; - if (endPtr >= DMR_BUFFER_LENGTH_BITS) - endPtr -= DMR_BUFFER_LENGTH_BITS; - - if(m_slot) { - m_syncPtr2 = syncPtr; - m_startPtr2 = startPtr; - m_endPtr2 = endPtr; - m_control2 = control; - } else { - m_syncPtr1 = syncPtr; - m_startPtr1 = startPtr; - m_endPtr1 = endPtr; - m_control1 = control; - } + endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; + if (endPtr >= DMR_BUFFER_LENGTH_BITS) + endPtr -= DMR_BUFFER_LENGTH_BITS; - //DEBUG5("SYNC corr MS Voice found slot/pos/start/end: ", m_slot ? 2U : 1U, m_dataPtr, startPtr, endPtr); + if(m_slot) { + m_syncPtr2 = syncPtr; + m_startPtr2 = startPtr; + m_endPtr2 = endPtr; + m_control2 = control; + } else { + m_syncPtr1 = syncPtr; + m_startPtr1 = startPtr; + m_endPtr1 = endPtr; + m_control1 = control; + } + //DEBUG5("SYNC corr MS Voice found slot/pos/start/end: ", m_slot ? 2U : 1U, m_dataPtr, startPtr, endPtr); } }