From 267f1e7dc765cfe9b7c424f0e9e08021b52c4791 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Sun, 30 Oct 2022 11:00:23 -0400 Subject: [PATCH] make incoming data FIFO sizes consistent; --- SerialBuffer.cpp | 22 ++++++++++++++++++++++ SerialBuffer.h | 7 ++++++- dmr/DMRDMOTX.cpp | 2 +- dmr/DMRDefines.h | 2 ++ dmr/DMRTX.cpp | 3 +++ nxdn/NXDNDefines.h | 2 +- p25/P25Defines.h | 2 +- 7 files changed, 36 insertions(+), 4 deletions(-) diff --git a/SerialBuffer.cpp b/SerialBuffer.cpp index 0657059..48f2e21 100644 --- a/SerialBuffer.cpp +++ b/SerialBuffer.cpp @@ -13,6 +13,7 @@ /* * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX * Serial FIFO Control Copyright (C) 2015 by James McLaughlin KI6ZUM +* Copyright (C) 2022 by Bryan Biedenkapp N2PLL * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -49,6 +50,14 @@ SerialBuffer::SerialBuffer(uint16_t length) : m_buffer = new uint8_t[length]; } +/// +/// Finalizes a instance of the SerialBuffer class. +/// +SerialBuffer::~SerialBuffer() +{ + delete[] m_buffer; +} + /// /// Helper to get how much space the ring buffer has for samples. /// @@ -94,6 +103,19 @@ void SerialBuffer::reset() m_full = false; } +/// +/// Helper to reset and reinitialize data values to defaults. +/// +void SerialBuffer::reinitialize(uint16_t length) +{ + reset(); + + m_length = length; + + delete[] m_buffer; + m_buffer = new uint8_t[length]; +} + /// /// /// diff --git a/SerialBuffer.h b/SerialBuffer.h index 5ce3b66..d9a7ce7 100644 --- a/SerialBuffer.h +++ b/SerialBuffer.h @@ -13,6 +13,7 @@ /* * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX * Serial FIFO Control Copyright (C) 2015 by James McLaughlin KI6ZUM +* Copyright (C) 2022 by Bryan Biedenkapp N2PLL * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -46,7 +47,7 @@ // Constants // --------------------------------------------------------------------------- -const uint16_t SERIAL_RINGBUFFER_SIZE = 1000U; +const uint16_t SERIAL_RINGBUFFER_SIZE = 396U; // --------------------------------------------------------------------------- // Class Declaration @@ -57,6 +58,8 @@ class DSP_FW_API SerialBuffer { public: /// Initializes a new instance of the SerialBuffer class. SerialBuffer(uint16_t length = SERIAL_RINGBUFFER_SIZE); + /// Finalizes a instance of the SerialBuffer class. + ~SerialBuffer(); /// Helper to get how much space the ring buffer has for samples. uint16_t getSpace() const; @@ -66,6 +69,8 @@ public: /// Helper to reset data values to defaults. void reset(); + /// Helper to reset and reinitialize data values to defaults. + void reinitialize(uint16_t length); /// bool put(uint8_t c); diff --git a/dmr/DMRDMOTX.cpp b/dmr/DMRDMOTX.cpp index 191ec8d..ffd42e7 100644 --- a/dmr/DMRDMOTX.cpp +++ b/dmr/DMRDMOTX.cpp @@ -54,7 +54,7 @@ const uint8_t PR_FILL[] = /// Initializes a new instance of the DMRDMOTX class. /// DMRDMOTX::DMRDMOTX() : - m_fifo(875U), + m_fifo(DMR_TX_BUFFER_LEN), m_poBuffer(), m_poLen(0U), m_poPtr(0U), diff --git a/dmr/DMRDefines.h b/dmr/DMRDefines.h index e582ff0..b871d3f 100644 --- a/dmr/DMRDefines.h +++ b/dmr/DMRDefines.h @@ -126,6 +126,8 @@ namespace dmr const int8_t DMR_MS_VOICE_SYNC_SYMBOLS_VALUES[] = { +3, -3, -3, -3, +3, -3, -3, +3, +3, +3, -3, +3, -3, +3, +3, +3, +3, -3, -3, +3, -3, -3, -3, +3 }; + const uint32_t DMR_TX_BUFFER_LEN = 1023U; // 1023 = DMR_FRAME_LENGTH_BYTES * 31 (BUFFER_LEN = DMR_FRAME_LENGTH_BYTES * NO_OF_FRAMES) + // Data Type(s) const uint8_t DT_VOICE_PI_HEADER = 0U; const uint8_t DT_VOICE_LC_HEADER = 1U; diff --git a/dmr/DMRTX.cpp b/dmr/DMRTX.cpp index c58d252..81c4d57 100644 --- a/dmr/DMRTX.cpp +++ b/dmr/DMRTX.cpp @@ -84,6 +84,9 @@ DMRTX::DMRTX() : m_cachATControl(0U), m_controlPrev(MARK_NONE) { + m_fifo[0U].reinitialize(DMR_TX_BUFFER_LEN); + m_fifo[1U].reinitialize(DMR_TX_BUFFER_LEN); + ::memcpy(m_newShortLC, EMPTY_SHORT_LC, 12U); ::memcpy(m_shortLC, EMPTY_SHORT_LC, 12U); diff --git a/nxdn/NXDNDefines.h b/nxdn/NXDNDefines.h index 9aac0e7..fdb8dd1 100644 --- a/nxdn/NXDNDefines.h +++ b/nxdn/NXDNDefines.h @@ -68,7 +68,7 @@ namespace nxdn const uint16_t NXDN_FSW_SYMBOLS = 0x014DU; const uint16_t NXDN_FSW_SYMBOLS_MASK = 0x03FFU; - const uint32_t NXDN_TX_BUFFER_LEN = 2000U; + const uint32_t NXDN_TX_BUFFER_LEN = 2016U; // 2016 = NXDN_FRAME_LENGTH_BYTES * 42 (BUFFER_LEN = NXDN_FRAME_LENGTH_BYTES * NO_OF_FRAMES) } // namespace nxdn #endif // __NXDN_DEFINES_H__ diff --git a/p25/P25Defines.h b/p25/P25Defines.h index 0aa319f..02b657b 100644 --- a/p25/P25Defines.h +++ b/p25/P25Defines.h @@ -120,7 +120,7 @@ namespace p25 const uint32_t P25_SYNC_SYMBOLS = 0x00FB30A0U; const uint32_t P25_SYNC_SYMBOLS_MASK = 0x00FFFFFFU; - const uint32_t P25_TX_BUFFER_LEN = 2000U; + const uint32_t P25_TX_BUFFER_LEN = 2592U; // 2592 = P25_LDU_FRAME_LENGTH_BYTES * 12 (BUFFER_LEN = P25_LDU_FRAME_LENGTH_BYTES * NO_OF_FRAMES) // Data Unit ID(s) const uint8_t P25_DUID_HDU = 0x00U; // Header Data Unit