From bc20833a369fc02a2f7e67a9b6f86822278cec31 Mon Sep 17 00:00:00 2001 From: Pascal Sachs Date: Tue, 30 Apr 2024 10:11:54 +0200 Subject: [PATCH 1/2] Fix low level error undefined issue Add a undefined default for low level error 0 instead of fallback to NonemptyFrameError if low level error is not defined. Fix missing low level error if not enough data is available on the I2C bus. --- src/SensirionErrors.cpp | 13 +++++++++++++ src/SensirionErrors.h | 3 ++- src/SensirionI2CCommunication.cpp | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/SensirionErrors.cpp b/src/SensirionErrors.cpp index b0d7ffe..cccb60b 100644 --- a/src/SensirionErrors.cpp +++ b/src/SensirionErrors.cpp @@ -55,6 +55,10 @@ void errorToString(uint16_t error, char errorMessage[], break; case HighLevelError::WriteError: switch (lowLevelError) { + case LowLevelError::Undefined: + strncpy(errorMessage, "Write error", + errorMessageSize); + return; case LowLevelError::SerialWriteError: strncpy(errorMessage, "Error writing to serial", errorMessageSize); @@ -81,6 +85,9 @@ void errorToString(uint16_t error, char errorMessage[], break; case HighLevelError::ReadError: switch (lowLevelError) { + case LowLevelError::Undefined: + strncpy(errorMessage, "Read error", errorMessageSize); + return; case LowLevelError::NonemptyFrameError: strncpy(errorMessage, "Frame already contains data", errorMessageSize); @@ -117,6 +124,9 @@ void errorToString(uint16_t error, char errorMessage[], } case HighLevelError::TxFrameError: switch (lowLevelError) { + case LowLevelError::Undefined: + strncpy(errorMessage, "Tx frame error", errorMessageSize); + return; case LowLevelError::BufferSizeError: strncpy(errorMessage, "Not enough space in buffer", errorMessageSize); @@ -125,6 +135,9 @@ void errorToString(uint16_t error, char errorMessage[], break; case HighLevelError::RxFrameError: switch (lowLevelError) { + case LowLevelError::Undefined: + strncpy(errorMessage, "Rx frame error", errorMessageSize); + return; case LowLevelError::BufferSizeError: strncpy(errorMessage, "Not enough space in buffer", errorMessageSize); diff --git a/src/SensirionErrors.h b/src/SensirionErrors.h index 268d975..50e41b8 100644 --- a/src/SensirionErrors.h +++ b/src/SensirionErrors.h @@ -50,8 +50,9 @@ enum HighLevelError : uint16_t { SensorSpecificError = 0x8000, }; -enum LowLevelError : uint16_t { +enum LowLevelError : uint8_t { // general errors + Undefined = 0, NonemptyFrameError, NoDataError, BufferSizeError, diff --git a/src/SensirionI2CCommunication.cpp b/src/SensirionI2CCommunication.cpp index f5957d6..d089ce0 100644 --- a/src/SensirionI2CCommunication.cpp +++ b/src/SensirionI2CCommunication.cpp @@ -104,7 +104,7 @@ uint16_t SensirionI2CCommunication::receiveFrame(uint8_t address, uint8_t available = i2cBus.requestFrom(address, bytesToRead, static_cast(stop)); if (bytesToRead != available) { - return ReadError; + return ReadError | NotEnoughDataError; } while (available > 0) { frame._buffer[i++] = i2cBus.read(); From 2a7aaf33180e6ad604d28a8c28097bdd5c7a8eb6 Mon Sep 17 00:00:00 2001 From: Pascal Sachs Date: Tue, 30 Apr 2024 10:15:06 +0200 Subject: [PATCH 2/2] Bump version to 0.7.1 Prepare for 0.7.1 bugfix release. Update version and changelog. --- CHANGELOG.rst | 6 ++++++ library.properties | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 52b3d5e..3796359 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,12 @@ and this project adheres to `Semantic Versioning