rename getData to get in RingBuffer; ensure the RingBuffer contains a data to the given length before attempting to return that data;

pull/42/head
Bryan Biedenkapp 2 years ago
parent 2e65458008
commit c67314e49d

@ -99,7 +99,7 @@ public:
/// <param name="buffer">Buffer to write data to be retrieved.</param> /// <param name="buffer">Buffer to write data to be retrieved.</param>
/// <param name="length">Length of data to retrieve.</param> /// <param name="length">Length of data to retrieve.</param>
/// <returns>True, if data is read from ring buffer, otherwise false.</returns> /// <returns>True, if data is read from ring buffer, otherwise false.</returns>
bool getData(T* buffer, uint32_t length) bool get(T* buffer, uint32_t length)
{ {
if (dataSize() < length) { if (dataSize() < length) {
LogError(LOG_HOST, "**** Underflow in %s ring buffer, %u < %u", m_name, dataSize(), length); LogError(LOG_HOST, "**** Underflow in %s ring buffer, %u < %u", m_name, dataSize(), length);

@ -333,12 +333,12 @@ uint32_t Slot::getFrame(uint8_t* data)
// tx immediate queue takes priority // tx immediate queue takes priority
if (!m_txImmQueue.isEmpty()) { if (!m_txImmQueue.isEmpty()) {
m_txImmQueue.getData(&len, 1U); m_txImmQueue.get(&len, 1U);
m_txImmQueue.getData(data, len); m_txImmQueue.get(data, len);
} }
else { else {
m_txQueue.getData(&len, 1U); m_txQueue.get(&len, 1U);
m_txQueue.getData(data, len); m_txQueue.get(data, len);
} }
return len; return len;

@ -340,8 +340,8 @@ bool HostSetup::portModemHandler(Modem* modem, uint32_t ms, RESP_TYPE_DVM rspTyp
uint8_t data[p25::P25_LDU_FRAME_LENGTH_BYTES + 2U]; uint8_t data[p25::P25_LDU_FRAME_LENGTH_BYTES + 2U];
dataLen = 0U; dataLen = 0U;
m_queue.getData(&dataLen, 1U); m_queue.get(&dataLen, 1U);
m_queue.getData(data, dataLen); m_queue.get(data, dataLen);
uint8_t buffer[250U]; uint8_t buffer[250U];

@ -1010,12 +1010,17 @@ uint32_t Modem::readDMRFrame1(uint8_t* data)
return 0U; return 0U;
uint8_t len = 0U; uint8_t len = 0U;
m_rxDMRQueue1.getData(&len, 1U); m_rxDMRQueue1.peek(&len, 1U);
m_rxDMRQueue1.getData(data, len); if (m_rxDMRQueue1.dataSize() >= len) {
m_rxDMRQueue1.get(&len, 1U); // ensure we pop the length off
m_rxDMRQueue1.get(data, len);
return len; return len;
} }
return 0U;
}
/// <summary> /// <summary>
/// Reads DMR Slot 2 frame data from the DMR Slot 2 ring buffer. /// Reads DMR Slot 2 frame data from the DMR Slot 2 ring buffer.
/// </summary> /// </summary>
@ -1029,12 +1034,17 @@ uint32_t Modem::readDMRFrame2(uint8_t* data)
return 0U; return 0U;
uint8_t len = 0U; uint8_t len = 0U;
m_rxDMRQueue2.getData(&len, 1U); m_rxDMRQueue2.peek(&len, 1U);
m_rxDMRQueue2.getData(data, len); if (m_rxDMRQueue2.dataSize() >= len) {
m_rxDMRQueue2.get(&len, 1U); // ensure we pop the length off
m_rxDMRQueue2.get(data, len);
return len; return len;
} }
return 0U;
}
/// <summary> /// <summary>
/// Reads P25 frame data from the P25 ring buffer. /// Reads P25 frame data from the P25 ring buffer.
/// </summary> /// </summary>
@ -1048,12 +1058,17 @@ uint32_t Modem::readP25Frame(uint8_t* data)
return 0U; return 0U;
uint8_t len = 0U; uint8_t len = 0U;
m_rxP25Queue.getData(&len, 1U); m_rxP25Queue.peek(&len, 1U);
m_rxP25Queue.getData(data, len); if (m_rxP25Queue.dataSize() >= len) {
m_rxP25Queue.get(&len, 1U); // ensure we pop the length off
m_rxP25Queue.get(data, len);
return len; return len;
} }
return 0U;
}
/// <summary> /// <summary>
/// Reads NXDN frame data from the NXDN ring buffer. /// Reads NXDN frame data from the NXDN ring buffer.
/// </summary> /// </summary>
@ -1067,12 +1082,17 @@ uint32_t Modem::readNXDNFrame(uint8_t* data)
return 0U; return 0U;
uint8_t len = 0U; uint8_t len = 0U;
m_rxNXDNQueue.getData(&len, 1U); m_rxNXDNQueue.peek(&len, 1U);
m_rxNXDNQueue.getData(data, len); if (m_rxNXDNQueue.dataSize() >= len) {
m_rxNXDNQueue.get(&len, 1U); // ensure we pop the length off
m_rxNXDNQueue.get(data, len);
return len; return len;
} }
return 0U;
}
/// <summary> /// <summary>
/// Helper to test if the DMR Slot 1 ring buffer has free space. /// Helper to test if the DMR Slot 1 ring buffer has free space.
/// </summary> /// </summary>

@ -84,7 +84,7 @@ int ModemNullPort::read(uint8_t* buffer, uint32_t length)
if (length > dataSize) if (length > dataSize)
length = dataSize; length = dataSize;
m_buffer.getData(buffer, length); m_buffer.get(buffer, length);
return int(length); return int(length);
} }

@ -134,7 +134,7 @@ int UDPPort::read(uint8_t* buffer, uint32_t length)
length = avail; length = avail;
if (length > 0U) if (length > 0U)
m_buffer.getData(buffer, length); m_buffer.get(buffer, length);
return int(length); return int(length);
} }

@ -276,7 +276,7 @@ UInt8Array BaseNetwork::readDMR(bool& ret, uint32_t& frameLength)
} }
uint8_t length = 0U; uint8_t length = 0U;
m_rxDMRData.getData(&length, 1U); m_rxDMRData.get(&length, 1U);
if (length == 0U) { if (length == 0U) {
ret = false; ret = false;
return nullptr; return nullptr;
@ -286,7 +286,7 @@ UInt8Array BaseNetwork::readDMR(bool& ret, uint32_t& frameLength)
frameLength = length; frameLength = length;
buffer = std::unique_ptr<uint8_t[]>(new uint8_t[length]); buffer = std::unique_ptr<uint8_t[]>(new uint8_t[length]);
::memset(buffer.get(), 0x00U, length); ::memset(buffer.get(), 0x00U, length);
m_rxDMRData.getData(buffer.get(), length); m_rxDMRData.get(buffer.get(), length);
return buffer; return buffer;
} }
@ -363,7 +363,7 @@ UInt8Array BaseNetwork::readP25(bool& ret, uint32_t& frameLength)
} }
uint8_t length = 0U; uint8_t length = 0U;
m_rxP25Data.getData(&length, 1U); m_rxP25Data.get(&length, 1U);
if (length == 0U) { if (length == 0U) {
ret = false; ret = false;
return nullptr; return nullptr;
@ -373,7 +373,7 @@ UInt8Array BaseNetwork::readP25(bool& ret, uint32_t& frameLength)
frameLength = length; frameLength = length;
buffer = std::unique_ptr<uint8_t[]>(new uint8_t[length]); buffer = std::unique_ptr<uint8_t[]>(new uint8_t[length]);
::memset(buffer.get(), 0x00U, length); ::memset(buffer.get(), 0x00U, length);
m_rxP25Data.getData(buffer.get(), length); m_rxP25Data.get(buffer.get(), length);
return buffer; return buffer;
} }
@ -545,7 +545,7 @@ UInt8Array BaseNetwork::readNXDN(bool& ret, uint32_t& frameLength)
} }
uint8_t length = 0U; uint8_t length = 0U;
m_rxNXDNData.getData(&length, 1U); m_rxNXDNData.get(&length, 1U);
if (length == 0U) { if (length == 0U) {
ret = false; ret = false;
return nullptr; return nullptr;
@ -555,7 +555,7 @@ UInt8Array BaseNetwork::readNXDN(bool& ret, uint32_t& frameLength)
frameLength = length; frameLength = length;
buffer = std::unique_ptr<uint8_t[]>(new uint8_t[length]); buffer = std::unique_ptr<uint8_t[]>(new uint8_t[length]);
::memset(buffer.get(), 0x00U, length); ::memset(buffer.get(), 0x00U, length);
m_rxNXDNData.getData(buffer.get(), length); m_rxNXDNData.get(buffer.get(), length);
return buffer; return buffer;
} }

@ -546,12 +546,12 @@ uint32_t Control::getFrame(uint8_t* data)
// tx immediate queue takes priority // tx immediate queue takes priority
if (!m_txImmQueue.isEmpty()) { if (!m_txImmQueue.isEmpty()) {
m_txImmQueue.getData(&len, 1U); m_txImmQueue.get(&len, 1U);
m_txImmQueue.getData(data, len); m_txImmQueue.get(data, len);
} }
else { else {
m_txQueue.getData(&len, 1U); m_txQueue.get(&len, 1U);
m_txQueue.getData(data, len); m_txQueue.get(data, len);
} }
return len; return len;

@ -721,12 +721,12 @@ uint32_t Control::getFrame(uint8_t* data)
// tx immediate queue takes priority // tx immediate queue takes priority
if (!m_txImmQueue.isEmpty()) { if (!m_txImmQueue.isEmpty()) {
m_txImmQueue.getData(&len, 1U); m_txImmQueue.get(&len, 1U);
m_txImmQueue.getData(data, len); m_txImmQueue.get(data, len);
} }
else { else {
m_txQueue.getData(&len, 1U); m_txQueue.get(&len, 1U);
m_txQueue.getData(data, len); m_txQueue.get(data, len);
} }
return len; return len;

Loading…
Cancel
Save

Powered by TurnKey Linux.