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