Skip to content

Commit

Permalink
Precise ISR buffer size calculation. Fix 0 to default deduction.
Browse files Browse the repository at this point in the history
  • Loading branch information
dok-net committed Jun 7, 2020
1 parent 91ea6b1 commit c801b61
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions src/SoftwareSerial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,14 @@ void SoftwareSerial::begin(uint32_t baud, SoftwareSerialConfig config,
m_bitCycles = (ESP.getCpuFreqMHz() * 1000000UL + baud / 2) / baud;
m_intTxEnabled = true;
if (isValidRxGPIOpin(m_rxPin)) {
std::unique_ptr<circular_queue<uint8_t> > buffer(new circular_queue<uint8_t>((bufCapacity > 0) ? bufCapacity : 64));
m_buffer = move(buffer);
m_buffer.reset(new circular_queue<uint8_t>((bufCapacity > 0) ? bufCapacity : 64));
if (m_parityMode)
{
std::unique_ptr<circular_queue<uint8_t> > parityBuffer(new circular_queue<uint8_t>((bufCapacity > 0) ? (bufCapacity + 7) / 8 : 8));
m_parityBuffer = move(parityBuffer);
m_parityBuffer.reset(new circular_queue<uint8_t>((m_buffer->capacity() + 7) / 8));
m_parityInPos = m_parityOutPos = 1;
}
std::unique_ptr<circular_queue<uint32_t> > isrBuffer(new circular_queue<uint32_t>((isrBufCapacity > 0) ? isrBufCapacity : (sizeof(uint8_t) * 8 + 2) * bufCapacity));
m_isrBuffer = move(isrBuffer);
m_isrBuffer.reset(new circular_queue<uint32_t>((isrBufCapacity > 0) ?
isrBufCapacity : m_buffer->capacity() * (2 + m_dataBits + static_cast<bool>(m_parityMode))));
if (m_buffer && (!m_parityMode || m_parityBuffer) && m_isrBuffer) {
m_rxValid = true;
pinMode(m_rxPin, INPUT_PULLUP);
Expand Down

0 comments on commit c801b61

Please sign in to comment.