From 6bd433af46747345bb5b8d3d8150b9c32ae1a04f Mon Sep 17 00:00:00 2001 From: john30 Date: Wed, 3 Oct 2018 10:53:38 +0200 Subject: [PATCH] fix for bit combinations during write to SymbolString --- src/lib/ebus/datatype.cpp | 2 +- src/lib/ebus/symbol.h | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/lib/ebus/datatype.cpp b/src/lib/ebus/datatype.cpp index 2a55c61e..399cc6fd 100755 --- a/src/lib/ebus/datatype.cpp +++ b/src/lib/ebus/datatype.cpp @@ -781,7 +781,7 @@ result_t NumberDataType::writeRawValue(unsigned int value, size_t offset, size_t symbol = (value / exp) & 0xff; exp <<= 8; } - if (index == start && (m_bitCount % 8) != 0 && offset + index < output->getDataSize()) { + if (index == start && (m_bitCount % 8) != 0 && offset + index < output->getCalculatedDataSize()) { output->dataAt(offset + index) |= symbol; } else { output->dataAt(offset + index) = symbol; diff --git a/src/lib/ebus/symbol.h b/src/lib/ebus/symbol.h index e128e0f5..82c983fc 100755 --- a/src/lib/ebus/symbol.h +++ b/src/lib/ebus/symbol.h @@ -249,7 +249,7 @@ class SymbolString { } else if (m_data.size() >= lengthOffset+255) { return false; } - m_data[lengthOffset] = (symbol_t)(m_data.size() - 1 - lengthOffset); + m_data[lengthOffset] = (symbol_t)(m_data.size() - lengthOffset - 1); return true; } @@ -272,6 +272,18 @@ class SymbolString { return m_data.size() < lengthOffset + 1 + ret ? m_data.size() - lengthOffset - 1 : ret; } + /** + * Return the calculated number of data bytes DD (nnot yet revealed in the length field). + * @return the calculated number of data bytes DD. + */ + size_t getCalculatedDataSize() const { + size_t lengthOffset = (m_isMaster ? 4 : 0); + if (m_data.size() <= lengthOffset) { + return 0; + } + return m_data.size() - lengthOffset - 1; + } + /** * Return the data byte at the specified index (within DD). * @param index the index of the data byte (within DD) to return.