From 2ed602057c78da47a28d55c9aa692e13ca3a23db Mon Sep 17 00:00:00 2001 From: Tyeth Gundry Date: Sun, 29 Jan 2023 07:06:25 +0000 Subject: [PATCH] Add SEN5X to I2C devices (#17736) --- BUILDS.md | 1 + CODE_OWNERS.md | 1 + I2CDEVICES.md | 1 + lib/lib_i2c/Sensirion_Core/.clang-format | 14 + lib/lib_i2c/Sensirion_Core/CHANGELOG.rst | 161 ++++ lib/lib_i2c/Sensirion_Core/LICENSE | 29 + lib/lib_i2c/Sensirion_Core/README.md | 139 +++ .../AllCommandsI2c/AllCommandsI2c.ino | 62 ++ .../AllCommandsShdlc/AllCommandsShdlc.ino | 73 ++ lib/lib_i2c/Sensirion_Core/keywords.txt | 56 ++ lib/lib_i2c/Sensirion_Core/library.properties | 9 + .../Sensirion_Core/src/SensirionCore.h | 46 + .../src/SensirionCoreArduinoLibrary.h | 51 + .../Sensirion_Core/src/SensirionCrc.cpp | 64 ++ lib/lib_i2c/Sensirion_Core/src/SensirionCrc.h | 59 ++ .../Sensirion_Core/src/SensirionErrors.cpp | 148 +++ .../Sensirion_Core/src/SensirionErrors.h | 87 ++ .../src/SensirionI2CCommunication.cpp | 119 +++ .../src/SensirionI2CCommunication.h | 83 ++ .../Sensirion_Core/src/SensirionI2CRxFrame.h | 64 ++ .../src/SensirionI2CTxFrame.cpp | 144 +++ .../Sensirion_Core/src/SensirionI2CTxFrame.h | 197 ++++ .../Sensirion_Core/src/SensirionRxFrame.cpp | 129 +++ .../Sensirion_Core/src/SensirionRxFrame.h | 147 +++ .../src/SensirionShdlcCommunication.cpp | 184 ++++ .../src/SensirionShdlcCommunication.h | 95 ++ .../src/SensirionShdlcRxFrame.h | 86 ++ .../src/SensirionShdlcTxFrame.cpp | 130 +++ .../src/SensirionShdlcTxFrame.h | 184 ++++ .../Sensirion_Core/tests/compile_test.py | 45 + .../Sensirion_Core/tests/run_cppcheck.sh | 3 + .../Sensirion_Core/tests/syntax_check.sh | 5 + lib/lib_i2c/Sensirion_I2C_SEN5X/CHANGELOG.md | 20 + lib/lib_i2c/Sensirion_I2C_SEN5X/LICENSE | 29 + lib/lib_i2c/Sensirion_I2C_SEN5X/README.md | 97 ++ .../examples/exampleUsage/exampleUsage.ino | 249 +++++ .../images/SEN5X_pinout.png | Bin 0 -> 38240 bytes .../Sensirion_I2C_SEN5X/images/SEN5x.png | Bin 0 -> 450015 bytes lib/lib_i2c/Sensirion_I2C_SEN5X/keywords.txt | 55 ++ .../Sensirion_I2C_SEN5X/library.properties | 10 + .../src/SensirionI2CSen5x.cpp | 880 ++++++++++++++++++ .../src/SensirionI2CSen5x.h | 857 +++++++++++++++++ tasmota/include/tasmota_configurations.h | 1 + .../include/tasmota_configurations_ESP32.h | 2 + tasmota/my_user_config.h | 1 + tasmota/tasmota_support/support_features.ino | 5 +- .../tasmota_xsns_sensor/xsns_103_sen5x.ino | 312 +++++++ tools/decode-status.py | 2 +- 48 files changed, 5133 insertions(+), 3 deletions(-) create mode 100644 lib/lib_i2c/Sensirion_Core/.clang-format create mode 100644 lib/lib_i2c/Sensirion_Core/CHANGELOG.rst create mode 100644 lib/lib_i2c/Sensirion_Core/LICENSE create mode 100644 lib/lib_i2c/Sensirion_Core/README.md create mode 100644 lib/lib_i2c/Sensirion_Core/examples/AllCommandsI2c/AllCommandsI2c.ino create mode 100644 lib/lib_i2c/Sensirion_Core/examples/AllCommandsShdlc/AllCommandsShdlc.ino create mode 100644 lib/lib_i2c/Sensirion_Core/keywords.txt create mode 100644 lib/lib_i2c/Sensirion_Core/library.properties create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionCore.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionCoreArduinoLibrary.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionCrc.cpp create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionCrc.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionErrors.cpp create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionErrors.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionI2CCommunication.cpp create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionI2CCommunication.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionI2CRxFrame.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionI2CTxFrame.cpp create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionI2CTxFrame.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionRxFrame.cpp create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionRxFrame.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionShdlcCommunication.cpp create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionShdlcCommunication.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionShdlcRxFrame.h create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionShdlcTxFrame.cpp create mode 100644 lib/lib_i2c/Sensirion_Core/src/SensirionShdlcTxFrame.h create mode 100644 lib/lib_i2c/Sensirion_Core/tests/compile_test.py create mode 100644 lib/lib_i2c/Sensirion_Core/tests/run_cppcheck.sh create mode 100644 lib/lib_i2c/Sensirion_Core/tests/syntax_check.sh create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/CHANGELOG.md create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/LICENSE create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/README.md create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/examples/exampleUsage/exampleUsage.ino create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/images/SEN5X_pinout.png create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/images/SEN5x.png create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/keywords.txt create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/library.properties create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/src/SensirionI2CSen5x.cpp create mode 100644 lib/lib_i2c/Sensirion_I2C_SEN5X/src/SensirionI2CSen5x.h create mode 100644 tasmota/tasmota_xsns_sensor/xsns_103_sen5x.ino diff --git a/BUILDS.md b/BUILDS.md index 12802b096..e5dadfaa6 100644 --- a/BUILDS.md +++ b/BUILDS.md @@ -118,6 +118,7 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up | USE_MGS | - | - / x | - | x | - | - | | USE_SGP30 | - | - / x | - | x | - | - | | USE_SGP40 | - | - / x | - | x | - | - | +| USE_SEN5X | - | - / x | - | x | - | - | | USE_SI1145 | - | - / - | - | - | - | - | | USE_LM75AD | - | - / x | - | x | - | - | | USE_APDS9960 | - | - / - | - | - | - | - | diff --git a/CODE_OWNERS.md b/CODE_OWNERS.md index 37851c86d..9e5b35411 100644 --- a/CODE_OWNERS.md +++ b/CODE_OWNERS.md @@ -198,6 +198,7 @@ In addition to @arendst the following code is mainly owned by: | xsns_100_ina3221 | @barbudor | xsns_101_hmc5883l | Andreas Achtzehn | xsns_102_ld2410 | @arendst +| xsns_103_sen5x | @tyeth | | | Libraries | | | diff --git a/I2CDEVICES.md b/I2CDEVICES.md index 171b04fd7..28818c562 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -111,3 +111,4 @@ Index | Define | Driver | Device | Address(es) | Description 73 | USE_HMC5883L | xsns_101 | HMC5883L | 0x1E | 3-channels Magnetic Field Sensor 74 | USE_DISPLAY_TM1650 | xdsp_20 | TM1650 | 0x24 - 0x27, 0x34 - 0x37 | Four-digit seven-segment LED controller 75 | USE_PCA9632 | xdrv_64 | PCA9632 | 0x60 | 4-channel 4-bit pwm driver + 76 | USE_SEN5X | xsns_103 | SEN5X | 0x69 | Gas (VOC/NOx index) and air quality (PPM <1,<2.5,<4,<10) diff --git a/lib/lib_i2c/Sensirion_Core/.clang-format b/lib/lib_i2c/Sensirion_Core/.clang-format new file mode 100644 index 000000000..047f2adf1 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/.clang-format @@ -0,0 +1,14 @@ +--- +Language: Cpp +BasedOnStyle: LLVM +IndentWidth: 4 +AlignAfterOpenBracket: Align +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +IndentCaseLabels: true +SpacesBeforeTrailingComments: 2 +PointerAlignment: Left +AlignEscapedNewlines: Left +ForEachMacros: ['TEST_GROUP', 'TEST'] +... diff --git a/lib/lib_i2c/Sensirion_Core/CHANGELOG.rst b/lib/lib_i2c/Sensirion_Core/CHANGELOG.rst new file mode 100644 index 000000000..8d7aa66ff --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/CHANGELOG.rst @@ -0,0 +1,161 @@ +Changelog +========= + +All notable changes to this project will be documented in this file. + +The format is based on `Keep a Changelog `_ +and this project adheres to `Semantic Versioning `_. + +`Unreleased`_ +------------- + + +`0.6.0`_ 2022-06-22 +------------------- + +- Fix compiler warnings in SensirionErrors.cpp +- Allow drivers to choose CRC function + +`0.5.3`_ 2021-10-19 +------------------- + +- Add support for sensor specific errors +- Update keywords.txt + + +`0.5.2`_ 2021-08-03 +------------------- + +Fixed +..... + +- Fix CRC insertion in ``SensirionI2CTxFrame`` when more then one parameter + is sent to the sensor. + +`0.5.1`_ 2021-07-08 +------------------- + +Changed +....... + +- Adjusted deprecation warnings + +`0.5.0`_ 2021-07-07 +------------------- + +Added +..... + +- Enable SensirionTxFrame to incorporate Uint8 and Uint16 commands + + +`0.4.3`_ 2021-02-12 +------------------- + +Added +..... + +- Added ``const`` modifier to functions which process MOSI array data. + +`0.4.2`_ 2021-01-29 +------------------- + +Changed +....... + +- Renamed the library header from ``SensirionCoreArduinoLibrary.h`` to ``SensirionCore.h``. + We keep the old header for legacy support. + +`0.4.1`_ 2021-01-28 +------------------- + +Fixed +..... + +- Properly handle I2C write errors + + +`0.4.0`_ 2021-01-20 +------------------- + +Added +..... + +- Documentation for all functions. + +Breaking +........ + +- Change interface of ``errorToString()`` function to include length of the + provided buffer. + +Removed +....... + +- Removed ``reset()`` function from ``SensirionI2CTxFrame`` since the + functionality is not needed. + + +`0.3.0`_ 2021-01-13 +------------------- + +Added +..... + +- Core implementation for I2C communication. This includes a RX and TX frame + and a I2C communication class. + +Changed +....... + +- SHDLC and I2C RX frame inherit from a RX frame base class. +- ESP8266 test board from esp8266:esp8266:arduino to esp8266:esp8266:generic. +- Sorted errors into general, SHDLC and I2C errors. +- Replace C style casts with ``static_cast``. + + +`0.2.0`_ 2021-01-11 +------------------- + +Added +..... + +- Explanation what SHDLC is in README. +- ``SensirionErrors.h`` to ``SensirionCoreArduinoLibrary.h``. +- ``sendAndReceiveFrame()`` function to ``SensirionShdlcCommunication``. This + function combines ``sendFrame()`` and ``receiveFrame()`` into one function and + adds additional error checking. + +Changed +....... + +- Rename DeviceError to ExecutionError. +- Move check for execution error after the whole frame is read and checksum is + checked. This prevents that a wrong checksum can't be displayed as an + execution error. + +Removed +....... + +- ``reset()`` function from ``SensirionShdlcTxFrame`` and ``SensirionShdlcRxFrame``, + since one can just create a new frame object which has the same effect. + +`0.1.0`_ 2021-01-07 +------------------- + +- Initial release + + +.. _Unreleased: https://github.com/Sensirion/arduino-core/compare/0.6.0...main +.. _0.6.0: https://github.com/Sensirion/arduino-core/compare/0.6.0...0.5.3 +.. _0.5.3: https://github.com/Sensirion/arduino-core/compare/0.5.2...0.5.3 +.. _0.5.2: https://github.com/Sensirion/arduino-core/compare/0.5.1...0.5.2 +.. _0.5.1: https://github.com/Sensirion/arduino-core/compare/0.5.0...0.5.1 +.. _0.5.0: https://github.com/Sensirion/arduino-core/compare/0.4.3...0.5.0 +.. _0.4.3: https://github.com/Sensirion/arduino-core/compare/0.4.2...0.4.3 +.. _0.4.2: https://github.com/Sensirion/arduino-core/compare/0.4.1...0.4.2 +.. _0.4.1: https://github.com/Sensirion/arduino-core/compare/0.4.0...0.4.1 +.. _0.4.0: https://github.com/Sensirion/arduino-core/compare/0.3.0...0.4.0 +.. _0.3.0: https://github.com/Sensirion/arduino-core/compare/0.2.0...0.3.0 +.. _0.2.0: https://github.com/Sensirion/arduino-core/compare/0.1.0...0.2.0 +.. _0.1.0: https://github.com/Sensirion/arduino-core/releases/tag/0.1.0 diff --git a/lib/lib_i2c/Sensirion_Core/LICENSE b/lib/lib_i2c/Sensirion_Core/LICENSE new file mode 100644 index 000000000..fad1acd6e --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2020, Sensirion AG +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/lib_i2c/Sensirion_Core/README.md b/lib/lib_i2c/Sensirion_Core/README.md new file mode 100644 index 000000000..1a8cf2c71 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/README.md @@ -0,0 +1,139 @@ + +# Sensirion Arduino Core Library + +This library provides SHDLC and I2C protocol implementations for Sensirion +sensors. There shouldn't be a reason to use it directly, but is required by the +sensor driver libraries provided here: + +- [SCD4x](https://github.com/Sensirion/arduino-i2c-scd4x) +- [SVM40-I2C](https://github.com/Sensirion/arduino-i2c-svm40) +- [SVM40-UART](https://github.com/Sensirion/arduino-uart-svm40) +- [SFA3x-I2C](https://github.com/Sensirion/arduino-i2c-sfa3x) +- [SFA3x-UART](https://github.com/Sensirion/arduino-uart-sfa3x) + +# More Drivers + +Not looking for Arduino drivers? Check out our other drivers here: + +- [Embedded](https://github.com/Sensirion/info#repositories) +- [Python](https://github.com/Sensirion/info#python-drivers) + +# Usage + +## SHDLC + +SHDLC (Sensirion High-Level Data Link Control) is a byte-oriented master-slave +communication protocol based on [ISO +HDLC](https://en.wikipedia.org/wiki/High-Level_Data_Link_Control). It is used +to control some of Sensirion’s devices (for example mass flow controllers). The +detailed protocol documentation is not publicly available (yet). If you need +it, please contact our [customer +support](https://www.sensirion.com/en/about-us/contact/). + +This library provides the following classes for communication with Sensirion +Sensors using the SHDLC protocol. +- `SensirionShdlcTxFrame` +- `SensirionShdlcRxFrame` +- `SensirionShdlcCommunication` + +### Example Usage +First initialize an instance of `SensirionShdlcTxFrame` and +`SensirionShdlcRxFrame` with a properly sized buffer. A good worst case +estimation for the buffer size is `2 * (n+6)` where `n` is the number of bytes +you want to send. After that you can build your frame by first calling +`begin()`. Information about the correct COMMAND and ADDRESS can be found on +the data sheet of your sensor. Then you can add data to the frame by using +different add member functions. See the code below for examples. After adding +your data finish the frame by calling `finish()`. + +To send this frame to the sensor you first need to initialize the correct +Stream object (Serial,UART,...) to talk to your sensor. Don't forget to also +call the `.begin()` function with the right configuration. Then call the static +function `sendAndReceiveFrame()` from `SensirionShdlcCommunication` as shown +below. You need to replace `STREAMOBJECT` with the initialized Stream object of +your choice. Additionally you need to provide a timeout for to receive data +back, consult the data sheet of your sensor for information on the best timeout +value. + +You can decode the frame by using the different get members to convert the +received data to desired data types. + +All functions return a error code if an error occurs during execution and zero +otherwise. + +```cpp +uint8_t txBuffer[256]; +uint8_t rxBuffer[256]; + +SensirionShdlcTxFrame txFrame(txBuffer, 256); +SensirionShdlcRxFrame rxFrame(rxBuffer, 256); + +txFrame.begin(COMMAND, ADDRESS, DATALENGTH); + +txFrame.addUInt8(UINT8); +txFrame.addUInt32(UINT32); + +txFrame.finish(); + +SensirionShdlcCommunication::sendAndReceiveFrame(STREAMOBJECT, txFrame, rxFrame, TIMEOUT); + +rxFrame.getUInt16(UINT16); +rxFrame.getFloat(FLOAT); + +``` + +## I2C + +This library provides the following classes for communication with Sensirion +Sensors using the I2C protocol. +- `SensirionI2cTxFrame` +- `SensirionI2cRxFrame` +- `SensirionI2cCommunication` + +### Example Usage + +First initialize an instance of `SensirionI2CTxFrame` and `SensirionI2CRxFrame` +with a buffer sized the amount of data to read times 1.5. This is needed to +account for the CRC which is added after every second byte. After that you can +build your frame by first calling `addCommand()` to add the command at the +beginning of the frame. Information about the different COMMANDs can be found +on the data sheet of your sensor. Then you can add data to the frame by using +different add member functions. See the code below for examples. + +To send this frame to the sensor you first need to initialize a Wire object. +Don't forget to also call the `.begin()` function with the right configuration. +Then call the static function `sendFrame()` form `SensirionI2CCommunication` as +shown below. You can find the ADDRESS on the data sheet of the sensor. You also +need to replace `WIREOBJECT` with the initialized Wire object. Then wait the in +the data sheet documented `READ_DELAY` before receiving the reply from the +sensor by calling `receiveFrame()` with the same Wire object. + +You then can decode the frame by using the different get members to convert the +received data to desired data types. + +All functions return a error code if an error occurs during execution and zero +otherwise. + +```cpp +uint8_t txBuffer[256]; +uint8_t rxBuffer[256]; + +SensirionShdlcTxFrame txFrame(txBuffer, 256); +SensirionShdlcRxFrame rxFrame(rxBuffer, 256); + +txFrame.addCommand(COMMAND); + +txFrame.addUInt8(UINT8); +txFrame.addUInt32(UINT32); + +SensirionShdlcCommunication::sendFrame(ADDRESS, txFrame, WIREOBJECT); + +delay(READ_DELAY); + +SensirionShdlcCommunication::receiveFrame(ADDRESS, rxFrame, WIREOBJECT); + +rxFrame.getUInt16(UINT16); +rxFrame.getFloat(FLOAT); + +``` diff --git a/lib/lib_i2c/Sensirion_Core/examples/AllCommandsI2c/AllCommandsI2c.ino b/lib/lib_i2c/Sensirion_Core/examples/AllCommandsI2c/AllCommandsI2c.ino new file mode 100644 index 000000000..49b10d868 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/examples/AllCommandsI2c/AllCommandsI2c.ino @@ -0,0 +1,62 @@ +#include +#include +#include + +uint8_t txBuffer[256]; +uint8_t rxBuffer[256]; + +SensirionI2CTxFrame txFrame(txBuffer, 256); +SensirionI2CRxFrame rxFrame(rxBuffer, 256); + +void setup() { + Wire.begin(); +} + +void loop() { + uint16_t mockCommand = 42; + uint16_t error = txFrame.addCommand(mockCommand); + + uint32_t mockUInt32 = 42; + error |= txFrame.addUInt32(mockUInt32); + + int32_t mockInt32 = 42; + error |= txFrame.addInt32(mockInt32); + + uint16_t mockUInt16 = 42; + error |= txFrame.addUInt16(mockUInt16); + + int16_t mockInt16 = 42; + error |= txFrame.addInt16(mockInt16); + + uint8_t mockUInt8 = 42; + error |= txFrame.addUInt8(mockUInt8); + + int8_t mockInt8 = 42; + error |= txFrame.addInt8(mockInt8); + + float mockFloat = 42.0f; + error |= txFrame.addFloat(mockFloat); + + bool mockBool = true; + error |= txFrame.addBool(mockBool); + + uint8_t mockBytes[] = {42, 42, 42, 42}; + error |= txFrame.addBytes(mockBytes, 4); + + uint8_t mockAddress = 42; + + error |= SensirionI2CCommunication::sendFrame(mockAddress, txFrame, Wire); + + size_t mockNumBytes = 42; + error |= SensirionI2CCommunication::receiveFrame(mockAddress, mockNumBytes, + rxFrame, Wire); + + error |= rxFrame.getUInt32(mockUInt32); + error |= rxFrame.getInt32(mockInt32); + error |= rxFrame.getUInt16(mockUInt16); + error |= rxFrame.getInt16(mockInt16); + error |= rxFrame.getUInt8(mockUInt8); + error |= rxFrame.getInt8(mockInt8); + error |= rxFrame.getFloat(mockFloat); + error |= rxFrame.getBytes(mockBytes, 4); +} diff --git a/lib/lib_i2c/Sensirion_Core/examples/AllCommandsShdlc/AllCommandsShdlc.ino b/lib/lib_i2c/Sensirion_Core/examples/AllCommandsShdlc/AllCommandsShdlc.ino new file mode 100644 index 000000000..2ff07bb94 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/examples/AllCommandsShdlc/AllCommandsShdlc.ino @@ -0,0 +1,73 @@ +#include +#include + +uint8_t txBuffer[256]; +uint8_t rxBuffer[256]; + +SensirionShdlcTxFrame txFrame(txBuffer, 256); +SensirionShdlcRxFrame rxFrame(rxBuffer, 256); + +void setup() { + Serial.begin(115200); +} + +void loop() { + uint8_t mockCommand = 42; + uint8_t mockAddress = 42; + uint8_t mockDataLength = 42; + uint16_t error = txFrame.begin(mockCommand, mockAddress, mockDataLength); + + uint32_t mockUInt32 = 42; + error |= txFrame.addUInt32(mockUInt32); + + int32_t mockInt32 = 42; + error |= txFrame.addInt32(mockInt32); + + uint16_t mockUInt16 = 42; + error |= txFrame.addUInt16(mockUInt16); + + int16_t mockInt16 = 42; + error |= txFrame.addInt16(mockInt16); + + uint8_t mockUInt8 = 42; + error |= txFrame.addUInt8(mockUInt8); + + int8_t mockInt8 = 42; + error |= txFrame.addInt8(mockInt8); + + float mockFloat = 42.0f; + error |= txFrame.addFloat(mockFloat); + + bool mockBool = true; + error |= txFrame.addBool(mockBool); + + uint8_t mockBytes[] = {42, 42, 42, 42}; + error |= txFrame.addBytes(mockBytes, 4); + + error |= txFrame.finish(); + + error |= SensirionShdlcCommunication::sendFrame(txFrame, Serial); + + error |= SensirionShdlcCommunication::sendAndReceiveFrame( + Serial, txFrame, rxFrame, 10000000); + + error |= + SensirionShdlcCommunication::receiveFrame(rxFrame, Serial, 1000000); + + error |= rxFrame.getUInt32(mockUInt32); + error |= rxFrame.getInt32(mockInt32); + error |= rxFrame.getUInt16(mockUInt16); + error |= rxFrame.getInt16(mockInt16); + error |= rxFrame.getUInt8(mockUInt8); + error |= rxFrame.getInt8(mockInt8); + error |= rxFrame.getFloat(mockFloat); + error |= rxFrame.getBytes(mockBytes, 4); + + mockCommand = rxFrame.getCommand(); + mockAddress = rxFrame.getAddress(); + mockDataLength = rxFrame.getDataLength(); + uint8_t mockState = rxFrame.getState(); + if (mockState) { + // There is an error in the device. + } +} diff --git a/lib/lib_i2c/Sensirion_Core/keywords.txt b/lib/lib_i2c/Sensirion_Core/keywords.txt new file mode 100644 index 000000000..910b12264 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/keywords.txt @@ -0,0 +1,56 @@ +####################################### +# Syntax Coloring Map +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### +SensirionShdlcCommunication KEYWORD1 +SensirionShdlcRxFrame KEYWORD1 +SensirionShdlcTxFrame KEYWORD1 +SensirionI2CTxFrame KEYWORD1 +SensirionI2CRxFrame KEYWORD1 +SensirionI2CCommunication KEYWORD1 + +# SensirionErrors.h +HighLevelError KEYWORD1 +LowLevelError KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +sendFrame KEYWORD2 +receiveFrame KEYWORD2 +sendAndReceiveFrame KEYWORD2 +addUInt32 KEYWORD2 +addInt32 KEYWORD2 +addUInt16 KEYWORD2 +addInt16 KEYWORD2 +addUInt8 KEYWORD2 +addInt8 KEYWORD2 +addFloat KEYWORD2 +addBytes KEYWORD2 +addBool KEYWORD2 +addCommand KEYWORD2 +begin KEYWORD2 +finish KEYWORD2 +reset KEYWORD2 +getUInt32 KEYWORD2 +getInt32 KEYWORD2 +getUInt16 KEYWORD2 +getInt16 KEYWORD2 +getUInt8 KEYWORD2 +getInt8 KEYWORD2 +getFloat KEYWORD2 +getBytes KEYWORD2 +getCommand KEYWORD2 +getAddress KEYWORD2 +getDataLength KEYWORD2 +getState KEYWORD2 + +# SensirionErrors.h +errorToString KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/lib/lib_i2c/Sensirion_Core/library.properties b/lib/lib_i2c/Sensirion_Core/library.properties new file mode 100644 index 000000000..9c5934fa1 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/library.properties @@ -0,0 +1,9 @@ +name=Sensirion Core +version=0.6.0 +author=Sensirion +maintainer=Sensirion +sentence=Library containing code base for Sensirion Sensor Libraries. +paragraph=All Libraries for Sensirion Sensors use this library as a code base. In this library the Sensirion specific parts for I2C and UART communication are implemented. It provides dynamic frame construction, checksum calculation and buffer handling. +category=Communication +url=https://github.com/Sensirion/arduino-core/ +includes=SensirionCore.h diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionCore.h b/lib/lib_i2c/Sensirion_Core/src/SensirionCore.h new file mode 100644 index 000000000..9222b61dd --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionCore.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _SENSIRION_CORE_H_ +#define _SENSIRION_CORE_H_ + +#include "SensirionCrc.h" +#include "SensirionErrors.h" +#include "SensirionRxFrame.h" + +#include "SensirionShdlcCommunication.h" +#include "SensirionShdlcRxFrame.h" +#include "SensirionShdlcTxFrame.h" + +#include "SensirionI2CCommunication.h" +#include "SensirionI2CRxFrame.h" +#include "SensirionI2CTxFrame.h" + +#endif /* _SENSIRION_CORE_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionCoreArduinoLibrary.h b/lib/lib_i2c/Sensirion_Core/src/SensirionCoreArduinoLibrary.h new file mode 100644 index 000000000..fcfeb6dca --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionCoreArduinoLibrary.h @@ -0,0 +1,51 @@ +/* + * + * THIS IS A LEGACY FILE AND WILL BE REMOVED SOON. + * + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _SENSIRION_CORE_ARDUINO_LIBRARY_H_ +#define _SENSIRION_CORE_ARDUINO_LIBRARY_H_ + +#pragma GCC warning \ + "Legacy file SensirionCoreArdunioLibrary.h included. Please include SensirionCore.h instead." + +#include "SensirionErrors.h" +#include "SensirionRxFrame.h" + +#include "SensirionShdlcCommunication.h" +#include "SensirionShdlcRxFrame.h" +#include "SensirionShdlcTxFrame.h" + +#include "SensirionI2CCommunication.h" +#include "SensirionI2CRxFrame.h" +#include "SensirionI2CTxFrame.h" + +#endif /* _SENSIRION_CORE_ARDUION_LIBRARY_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionCrc.cpp b/lib/lib_i2c/Sensirion_Core/src/SensirionCrc.cpp new file mode 100644 index 000000000..25b8234aa --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionCrc.cpp @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2022, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SensirionCrc.h" + +uint8_t generateCRCGeneric(const uint8_t* data, size_t count, uint8_t init, + uint8_t polynomial) { + uint8_t crc = init; + + /* calculates 8-Bit checksum with given polynomial */ + for (size_t current_byte = 0; current_byte < count; ++current_byte) { + crc ^= (data[current_byte]); + for (uint8_t crc_bit = 8; crc_bit > 0; --crc_bit) { + if (crc & 0x80) + crc = (crc << 1) ^ polynomial; + else + crc = (crc << 1); + } + } + return crc; +} + +uint8_t generateCRC31_ff(const uint8_t* data, size_t count) { + return generateCRCGeneric(data, count, 0xff, 0x31); +} + +uint8_t generateCRC31_00(const uint8_t* data, size_t count) { + return generateCRCGeneric(data, count, 0x00, 0x31); +} + +uint8_t generateCRC(const uint8_t* data, size_t count, CrcPolynomial type) { + if (CRC31_00 == type) { + return generateCRC31_00(data, count); + } + return generateCRC31_ff(data, count); +} diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionCrc.h b/lib/lib_i2c/Sensirion_Core/src/SensirionCrc.h new file mode 100644 index 000000000..904fc9286 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionCrc.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _SENSIRION_CRC_H_ +#define _SENSIRION_CRC_H_ + +#include +#include + +enum CrcPolynomial : uint8_t { + CRC31_00 = 0x0, + CRC31_ff = 0x1, +}; + +uint8_t generateCRCGeneric(const uint8_t* data, size_t count, uint8_t init, + uint8_t polynomial); + +uint8_t generateCRC31_ff(const uint8_t* data, size_t count); + +uint8_t generateCRC31_00(const uint8_t* data, size_t count); + +/** + * @brief Generate a crc for data given a polynomial type + * + * @param data data to calculate CRC for + * @param count the array size of data + * @param poly CRC polynomal to use + */ +uint8_t generateCRC(const uint8_t* data, size_t count, CrcPolynomial type); + +#endif /* _SENSIRION_CRC_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionErrors.cpp b/lib/lib_i2c/Sensirion_Core/src/SensirionErrors.cpp new file mode 100644 index 000000000..b0d7ffe62 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionErrors.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include "SensirionErrors.h" + +#include +#include +#include + +void errorToString(uint16_t error, char errorMessage[], + size_t errorMessageSize) { + + uint16_t highLevelError = error & 0xFF00; + uint16_t lowLevelError = error & 0x00FF; + + if (error & HighLevelError::SensorSpecificError) { + snprintf(errorMessage, errorMessageSize, "Sensor specific error: 0x%2x", + lowLevelError); + return; + } + + switch (highLevelError) { + case HighLevelError::NoError: + if (!error) { + strncpy(errorMessage, "No error", errorMessageSize); + return; + } + break; + case HighLevelError::WriteError: + switch (lowLevelError) { + case LowLevelError::SerialWriteError: + strncpy(errorMessage, "Error writing to serial", + errorMessageSize); + return; + case LowLevelError::InternalBufferSizeError: + strncpy(errorMessage, + "Data too long to fit in transmit buffer", + errorMessageSize); + return; + case LowLevelError::I2cAddressNack: + strncpy(errorMessage, + "Received NACK on transmit of address", + errorMessageSize); + return; + case LowLevelError::I2cDataNack: + strncpy(errorMessage, "Received NACK on transmit of data", + errorMessageSize); + return; + case LowLevelError::I2cOtherError: + strncpy(errorMessage, "Error writing to I2C bus", + errorMessageSize); + return; + } + break; + case HighLevelError::ReadError: + switch (lowLevelError) { + case LowLevelError::NonemptyFrameError: + strncpy(errorMessage, "Frame already contains data", + errorMessageSize); + return; + case LowLevelError::TimeoutError: + strncpy(errorMessage, "Timeout while reading data", + errorMessageSize); + return; + case LowLevelError::ChecksumError: + strncpy(errorMessage, "Checksum is wrong", + errorMessageSize); + return; + case LowLevelError::CRCError: + strncpy(errorMessage, "Wrong CRC found", errorMessageSize); + return; + case LowLevelError::WrongNumberBytesError: + strncpy(errorMessage, "Number of bytes not a multiple of 3", + errorMessageSize); + return; + case LowLevelError::NotEnoughDataError: + strncpy(errorMessage, "Not enough data received", + errorMessageSize); + return; + case LowLevelError::InternalBufferSizeError: + strncpy(errorMessage, "Internal I2C buffer too small", + errorMessageSize); + return; + } + break; + case HighLevelError::ExecutionError: { + char format[] = "Execution error, status register: 0x%x"; + snprintf(errorMessage, errorMessageSize, format, lowLevelError); + return; + } + case HighLevelError::TxFrameError: + switch (lowLevelError) { + case LowLevelError::BufferSizeError: + strncpy(errorMessage, "Not enough space in buffer", + errorMessageSize); + return; + } + break; + case HighLevelError::RxFrameError: + switch (lowLevelError) { + case LowLevelError::BufferSizeError: + strncpy(errorMessage, "Not enough space in buffer", + errorMessageSize); + return; + case LowLevelError::NoDataError: + strncpy(errorMessage, "No more data in frame", + errorMessageSize); + return; + case LowLevelError::RxAddressError: + strncpy(errorMessage, "Wrong address in return frame", + errorMessageSize); + return; + case LowLevelError::RxCommandError: + strncpy(errorMessage, "Wrong command in return frame", + errorMessageSize); + return; + } + } + strncpy(errorMessage, "Error processing error", errorMessageSize); + return; +} diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionErrors.h b/lib/lib_i2c/Sensirion_Core/src/SensirionErrors.h new file mode 100644 index 000000000..268d9754f --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionErrors.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _SENSIRION_ERRORS_H_ +#define _SENSIRION_ERRORS_H_ + +#include +#include + +enum HighLevelError : uint16_t { + // general errors + NoError = 0, + WriteError = 0x0100, + ReadError = 0x0200, + TxFrameError = 0x0300, + RxFrameError = 0x0400, + // shdlc errors + ExecutionError = 0x0500, + // i2c errors + + // Sensor specific errors. All errors higher than that are depending on the + // sensor used. + SensorSpecificError = 0x8000, +}; + +enum LowLevelError : uint16_t { + // general errors + NonemptyFrameError, + NoDataError, + BufferSizeError, + // shdlc errors + StopByteError, + ChecksumError, + TimeoutError, + RxCommandError, + RxAddressError, + SerialWriteError, + // i2c errors + WrongNumberBytesError, + CRCError, + I2cAddressNack, + I2cDataNack, + I2cOtherError, + NotEnoughDataError, + InternalBufferSizeError, +}; + +/** + * errorToString() - Convert error code to a human readable error message + * + * @param error Error code to be converted. + * @param errorMessage String where the error text can be + * stored. + * @param errorMessageSize Size in bytes of the string buffer for the error + * message. + */ +void errorToString(uint16_t error, char errorMessage[], + size_t errorMessageSize); + +#endif /* _SENSIRION_ERRORS_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionI2CCommunication.cpp b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CCommunication.cpp new file mode 100644 index 000000000..2d8b7acab --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CCommunication.cpp @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include "SensirionI2CCommunication.h" + +#include +#include + +#include "Arduino.h" +#include "SensirionCrc.h" +#include "SensirionErrors.h" +#include "SensirionI2CRxFrame.h" +#include "SensirionI2CTxFrame.h" + +static void clearRxBuffer(TwoWire& i2cBus) { + while (i2cBus.available()) { + (void)i2cBus.read(); + } +} + +uint16_t SensirionI2CCommunication::sendFrame(uint8_t address, + SensirionI2CTxFrame& frame, + TwoWire& i2cBus) { + i2cBus.beginTransmission(address); + size_t writtenBytes = i2cBus.write(frame._buffer, frame._index); + uint8_t i2c_error = i2cBus.endTransmission(); + if (writtenBytes != frame._index) { + return WriteError | I2cOtherError; + } + // translate Arduino errors, see + // https://www.arduino.cc/en/Reference/WireEndTransmission + switch (i2c_error) { + case 0: + return NoError; + case 1: + return WriteError | InternalBufferSizeError; + case 2: + return WriteError | I2cAddressNack; + case 3: + return WriteError | I2cDataNack; + default: + return WriteError | I2cOtherError; + } +} + +uint16_t SensirionI2CCommunication::receiveFrame(uint8_t address, + size_t numBytes, + SensirionI2CRxFrame& frame, + TwoWire& i2cBus, + CrcPolynomial poly) { + size_t readAmount; + size_t i = 0; + +#ifdef I2C_BUFFER_LENGTH + const uint8_t sizeBuffer = + (static_cast(I2C_BUFFER_LENGTH) / static_cast(3)) * 3; +#elif defined(BUFFER_LENGTH) + const uint8_t sizeBuffer = + (static_cast(BUFFER_LENGTH) / static_cast(3)) * 3; +#else + const uint8_t sizeBuffer = 30; +#endif + + if (numBytes % 3) { + return ReadError | WrongNumberBytesError; + } + if ((numBytes / 3) * 2 > frame._bufferSize) { + return ReadError | BufferSizeError; + } + if (numBytes > sizeBuffer) { + return ReadError | InternalBufferSizeError; + } + + readAmount = i2cBus.requestFrom(address, static_cast(numBytes), + static_cast(true)); + if (numBytes != readAmount) { + return ReadError | NotEnoughDataError; + } + do { + frame._buffer[i++] = i2cBus.read(); + frame._buffer[i++] = i2cBus.read(); + uint8_t actualCRC = i2cBus.read(); + uint8_t expectedCRC = generateCRC(&frame._buffer[i - 2], 2, poly); + if (actualCRC != expectedCRC) { + clearRxBuffer(i2cBus); + return ReadError | CRCError; + } + readAmount -= 3; + } while (readAmount > 0); + frame._numBytes = i; + return NoError; +} diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionI2CCommunication.h b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CCommunication.h new file mode 100644 index 000000000..98aead75a --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CCommunication.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef SENSIRION_I2C_COMMUNICATION_H_ +#define SENSIRION_I2C_COMMUNICATION_H_ + +#include +#include + +#include "Arduino.h" +#include "Wire.h" + +#include "SensirionI2CRxFrame.h" +#include "SensirionI2CTxFrame.h" + +class SensirionI2CTxFrame; +class SensirionI2CRxFrame; + +/* + * SensirionI2CCommunication - Class which is responsible for the communication + * via a I2C bus. It provides functionality to send and receive frames from a + * Sensirion sensor. The data is sent and received in a SensirionI2cTxFrame or + * SensirionI2cRxFrame respectively. + */ +class SensirionI2CCommunication { + public: + /** + * sendFrame() - Sends frame to sensor + * + * @param address I2C address of the sensor. + * @param frame Tx frame object containing a finished frame to send to + * the sensor. + * @param i2cBus TwoWire object to communicate with the sensor. + * + * @return NoError on success, an error code otherwise + */ + static uint16_t sendFrame(uint8_t address, SensirionI2CTxFrame& frame, + TwoWire& i2cBus); + + /** + * receiveFrame() - Receive Frame from sensor + * + * @param address I2C address of the sensor. + * @param numBytes Number of bytes to receive. + * @param frame Rx frame to store the received data in. + * @param i2cBus TwoWire object to communicate with the sensor. + * @param poly CRC polynomal to use. Defaults to 0x31 with init 0xFF + * + * @return NoError on success, an error code otherwise + */ + static uint16_t receiveFrame(uint8_t address, size_t numBytes, + SensirionI2CRxFrame& frame, TwoWire& i2cBus, + CrcPolynomial poly = CRC31_ff); +}; + +#endif /* SENSIRION_I2C_COMMUNICATION_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionI2CRxFrame.h b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CRxFrame.h new file mode 100644 index 000000000..e15cfa28b --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CRxFrame.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef SENSIRION_I2C_RX_FRAME_H_ +#define SENSIRION_I2C_RX_FRAME_H_ + +#include +#include + +#include "SensirionI2CCommunication.h" +#include "SensirionRxFrame.h" + +/** + * SenirionI2CRxFrame - Class which decodes the through I2C received data into + * common data types. It contains a buffer which is filled by the + * SensirionI2CCommunication class. By calling the different decode function + * inherited from the SensirionRxFrame base class the raw data can be decoded + * into different data types. + */ +class SensirionI2CRxFrame : public SensirionRxFrame { + + friend class SensirionI2CCommunication; + + public: + /** + * Constructor + * + * @param buffer Buffer in which the receive frame will be + * stored. + * @param bufferSize Number of bytes in the buffer for the receive frame. + * + */ + SensirionI2CRxFrame(uint8_t buffer[], size_t bufferSize) + : SensirionRxFrame(buffer, bufferSize){}; +}; + +#endif /* SENSIRION_I2C_RX_FRAME_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionI2CTxFrame.cpp b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CTxFrame.cpp new file mode 100644 index 000000000..67999f86c --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CTxFrame.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SensirionI2CTxFrame.h" + +#include +#include + +#include "SensirionCrc.h" +#include "SensirionErrors.h" + +SensirionI2CTxFrame::SensirionI2CTxFrame(uint8_t buffer[], size_t bufferSize, + size_t numCommandBytes, + CrcPolynomial poly) + : _buffer(buffer), _bufferSize(bufferSize), _index(numCommandBytes), + _numCommandBytes(numCommandBytes), _polynomial_type(poly) { +} + +SensirionI2CTxFrame::SensirionI2CTxFrame(uint8_t buffer[], size_t bufferSize, + CrcPolynomial poly) + : SensirionI2CTxFrame(buffer, bufferSize, 2, poly) { +} + +SensirionI2CTxFrame SensirionI2CTxFrame::createWithUInt8Command( + uint8_t command, uint8_t buffer[], size_t bufferSize, CrcPolynomial poly) { + SensirionI2CTxFrame instance = + SensirionI2CTxFrame(buffer, bufferSize, 1, poly); + instance._buffer[0] = command; + return instance; +} + +SensirionI2CTxFrame SensirionI2CTxFrame::createWithUInt16Command( + uint16_t command, uint8_t buffer[], size_t bufferSize, CrcPolynomial poly) { + SensirionI2CTxFrame instance = + SensirionI2CTxFrame(buffer, bufferSize, 2, poly); + instance._buffer[0] = static_cast((command & 0xFF00) >> 8); + instance._buffer[1] = static_cast((command & 0x00FF) >> 0); + return instance; +} + +uint16_t SensirionI2CTxFrame::addCommand(uint16_t command) { + if (_bufferSize < 2) { + return TxFrameError | BufferSizeError; + } + _buffer[0] = static_cast((command & 0xFF00) >> 8); + _buffer[1] = static_cast((command & 0x00FF) >> 0); + return NoError; +} + +uint16_t SensirionI2CTxFrame::addUInt32(uint32_t data) { + uint16_t error = _addByte(static_cast((data & 0xFF000000) >> 24)); + error |= _addByte(static_cast((data & 0x00FF0000) >> 16)); + error |= _addByte(static_cast((data & 0x0000FF00) >> 8)); + error |= _addByte(static_cast((data & 0x000000FF) >> 0)); + return error; +} + +uint16_t SensirionI2CTxFrame::addInt32(int32_t data) { + return addUInt32(static_cast(data)); +} + +uint16_t SensirionI2CTxFrame::addUInt16(uint16_t data) { + uint16_t error = _addByte(static_cast((data & 0xFF00) >> 8)); + error |= _addByte(static_cast((data & 0x00FF) >> 0)); + return error; +} + +uint16_t SensirionI2CTxFrame::addInt16(int16_t data) { + return addUInt16(static_cast(data)); +} + +uint16_t SensirionI2CTxFrame::addUInt8(uint8_t data) { + return _addByte(data); +} + +uint16_t SensirionI2CTxFrame::addInt8(int8_t data) { + return _addByte(static_cast(data)); +} + +uint16_t SensirionI2CTxFrame::addBool(bool data) { + return _addByte(static_cast(data)); +} + +uint16_t SensirionI2CTxFrame::addFloat(float data) { + union { + uint32_t uInt32Data; + float floatData; + } convert; + + convert.floatData = data; + return addUInt32(convert.uInt32Data); +} + +uint16_t SensirionI2CTxFrame::addBytes(const uint8_t data[], + size_t dataLength) { + uint16_t error = 0; + for (size_t i = 0; i < dataLength; i++) { + error |= _addByte(data[i]); + } + return error; +} + +uint16_t SensirionI2CTxFrame::_addByte(uint8_t data) { + if (_bufferSize <= _index) { + return TxFrameError | BufferSizeError; + } + _buffer[_index++] = data; + if ((_index - _numCommandBytes) % 3 == 2) { + if (_bufferSize <= _index) { + return TxFrameError | BufferSizeError; + } + uint8_t crc = generateCRC(&_buffer[_index - 2], 2, _polynomial_type); + _buffer[_index++] = crc; + } + return NoError; +} diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionI2CTxFrame.h b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CTxFrame.h new file mode 100644 index 000000000..3e5cee3df --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionI2CTxFrame.h @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef SENSIRION_I2C_TX_FRAME_H_ +#define SENSIRION_I2C_TX_FRAME_H_ + +#include +#include + +#include "SensirionCrc.h" +#include "SensirionI2CCommunication.h" + +/* + * SensirionI2CTxFrame - Class which helps to build a correct I2C frame for + * Sensirion Sensors. The different addDatatype() functions add the frame data + * and the addCommand() function writes the command at the beginning. Using + * these functions one can easily construct a I2C frame for Sensirion sensors. + */ +class SensirionI2CTxFrame { + + friend class SensirionI2CCommunication; + + public: + /** + * Factory to create a SensirionI2CTxFrame using a UInt8 command. + * + * @param command Command to add to the send frame. + * @param buffer Buffer in which the send frame will be stored. + * @param bufferSize Number of bytes in the buffer for the send frame. + * @param poly CRC polynomal to use. Defaults to 0x31 with init 0xFF + * + * @return the constructed SensirionI2CTxFrame. + */ + static SensirionI2CTxFrame + createWithUInt8Command(uint8_t command, uint8_t buffer[], size_t bufferSize, + CrcPolynomial poly = CRC31_ff); + + /** + * Factory to create a SensirionI2CTxFrame using a UInt16 command. + * + * @param command Command to add to the send frame. + * @param buffer Buffer in which the send frame will be stored. + * @param bufferSize Number of bytes in the buffer for the send frame. + * @param poly CRC polynomal to use. Defaults to 0x31 with init 0xFF + * + * @return the constructed SensirionI2CTxFrame. + */ + static SensirionI2CTxFrame + createWithUInt16Command(uint16_t command, uint8_t buffer[], + size_t bufferSize, CrcPolynomial poly = CRC31_ff); + + /** + * Constructor + * + * @param buffer Buffer in which the send frame will be stored. + * @param bufferSize Number of bytes in the buffer for the send frame. + * @param poly CRC polynomal to use. Defaults to 0x31 with init 0xFF + * + * @deprecated Use createWithUInt16Command() instead + */ + SensirionI2CTxFrame(uint8_t buffer[], size_t bufferSize, + CrcPolynomial poly = CRC31_ff); + + /** + * addCommand() - Add command to the send frame. + * + * @param command Command to add to the send frame. + * + * @return NoError on success, an error code otherwise + * + * @deprecated Use createWithUInt16Command() instead + */ + uint16_t addCommand(uint16_t command); + + /** + * addUInt32() - Add unsigned 32bit integer to the send frame. + * + * @param data Unsigned 32bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addUInt32(uint32_t data); + + /** + * addInt32() - Add signed 32bit integer to the send frame. + * + * @param data Signed 32bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addInt32(int32_t data); + + /** + * addUInt16() - Add unsigned 16bit integer to the send frame. + * + * @param data Unsigned 16bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addUInt16(uint16_t data); + + /** + * addInt16() - Add signed 16bit integer to the send frame. + * + * @param data Signed 16bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addInt16(int16_t data); + + /** + * addUInt8() - Add unsigned 8bit integer to the send frame. + * + * @param data Unsigned 8bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addUInt8(uint8_t data); + + /** + * addInt8() - Add signed 8bit integer to the send frame. + * + * @param data Signed 8bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addInt8(int8_t data); + + /** + * addBool() - Add boolean to the send frame. + * + * @param data Boolean to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addBool(bool data); + + /** + * addFloat() - Add float to the send frame. + * + * @param data Float to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addFloat(float data); + + /** + * addBytes() - Add byte array to the send frame. + * + * @param data Byte array to add to the send frame. + * @param dataLength Number of bytes to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addBytes(const uint8_t data[], size_t dataLength); + + private: + SensirionI2CTxFrame(uint8_t buffer[], size_t bufferSize, + size_t numCommandBytes, CrcPolynomial poly = CRC31_ff); + + uint16_t _addByte(uint8_t data); + + uint8_t* _buffer; + size_t _bufferSize; + size_t _index; + size_t _numCommandBytes; + CrcPolynomial _polynomial_type; +}; + +#endif /* SENSIRION_I2C_TX_FRAME_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionRxFrame.cpp b/lib/lib_i2c/Sensirion_Core/src/SensirionRxFrame.cpp new file mode 100644 index 000000000..c653c250d --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionRxFrame.cpp @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SensirionRxFrame.h" + +#include +#include + +#include "SensirionErrors.h" + +SensirionRxFrame::SensirionRxFrame(uint8_t buffer[], size_t bufferSize) + : _buffer(buffer), _bufferSize(bufferSize), _index(0), _numBytes(0) { +} + +uint16_t SensirionRxFrame::getUInt32(uint32_t& data) { + if (_numBytes < 4) { + return RxFrameError | NoDataError; + } + data = static_cast(_buffer[_index++]) << 24; + data |= static_cast(_buffer[_index++]) << 16; + data |= static_cast(_buffer[_index++]) << 8; + data |= static_cast(_buffer[_index++]); + _numBytes -= 4; + return NoError; +} + +uint16_t SensirionRxFrame::getInt32(int32_t& data) { + uint32_t ret; + uint16_t error = getUInt32(ret); + data = static_cast(ret); + return error; +} + +uint16_t SensirionRxFrame::getUInt16(uint16_t& data) { + if (_numBytes < 2) { + return RxFrameError | NoDataError; + } + data = static_cast(_buffer[_index++]) << 8; + data |= static_cast(_buffer[_index++]); + _numBytes -= 2; + return NoError; +} + +uint16_t SensirionRxFrame::getInt16(int16_t& data) { + uint16_t ret; + uint16_t error = getUInt16(ret); + data = static_cast(ret); + return error; +} + +uint16_t SensirionRxFrame::getUInt8(uint8_t& data) { + if (_numBytes < 1) { + return RxFrameError | NoDataError; + } + data = _buffer[_index++]; + _numBytes -= 1; + return NoError; +} + +uint16_t SensirionRxFrame::getInt8(int8_t& data) { + if (_numBytes < 1) { + return RxFrameError | NoDataError; + } + data = static_cast(_buffer[_index++]); + _numBytes -= 1; + return NoError; +} + +uint16_t SensirionRxFrame::getBool(bool& data) { + if (_numBytes < 1) { + return RxFrameError | NoDataError; + } + data = static_cast(_buffer[_index++]); + _numBytes -= 1; + return NoError; +} + +uint16_t SensirionRxFrame::getFloat(float& data) { + union { + uint32_t uInt32Data; + float floatData; + } convert; + uint16_t error = getUInt32(convert.uInt32Data); + data = convert.floatData; + return error; +} + +uint16_t SensirionRxFrame::getBytes(uint8_t data[], size_t maxBytes) { + if (_numBytes < 1) { + return RxFrameError | NoDataError; + } + size_t readAmount = maxBytes; + if (_numBytes < maxBytes) { + readAmount = _numBytes; + } + for (size_t i = 0; i < readAmount; i++) { + data[i] = _buffer[_index++]; + } + _numBytes -= readAmount; + return NoError; +} diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionRxFrame.h b/lib/lib_i2c/Sensirion_Core/src/SensirionRxFrame.h new file mode 100644 index 000000000..a4384fb6c --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionRxFrame.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef SENSIRION_RX_FRAME_H_ +#define SENSIRION_RX_FRAME_H_ + +#include +#include + +/** + * SenirionRxFrame - Base class for SensirionShdlcRxFrame and + * SensirionI2cRxFrame. It decodes received data into common data types. The + * data is contained in a buffer which is filled by the one of the two + * communication classes. By calling the different decode function the raw data + * can be decoded into different data types. + */ +class SensirionRxFrame { + + friend class SensirionI2CCommunication; + friend class SensirionShdlcCommunication; + + public: + /** + * Constructor + * + * @param buffer Buffer in which the receive frame will be stored. + * @param bufferSize Number of bytes in the buffer for the receive frame. + */ + SensirionRxFrame(uint8_t buffer[], size_t bufferSize); + + /** + * getUInt32() - Get unsigned 32bit integer from the received data. + * + * @param data Memory to store unsigned 32bit integer in. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getUInt32(uint32_t& data); + + /** + * getInt32() - Get signed 32bit integer from the received data. + * + * @param data Memory to store signed 32bit integer in. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getInt32(int32_t& data); + + /** + * getUInt16() - Get unsigned 16bit integer from the received data. + * + * @param data Memory to store unsigned 16bit integer in. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getUInt16(uint16_t& data); + + /** + * getInt16() - Get signed 16bit integer from the received data. + * + * @param data Memory to store signed 16bit integer in. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getInt16(int16_t& data); + + /** + * getUInt8() - Get unsigned 8bit integer from the received data. + * + * @param data Memory to store unsigned 8bit integer in. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getUInt8(uint8_t& data); + + /** + * getInt8() - Get signed 8bit integer from the received data. + * + * @param data Memory to store signed 8bit integer in. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getInt8(int8_t& data); + + /** + * getBool() - Get Boolean from the received data. + * + * @param data Memory to store boolean in. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getBool(bool& data); + + /** + * getFloat() - Get float from the received data. + * + * @param data Memory to store float in. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getFloat(float& data); + + /** + * getBytes() - Get an array of bytes from the received data. + * + * @param data Buffer to store the bytes in. + * @param maxBytes Maximal amount of bytes to read from the received data. + * + * @return NoError on success, an error code otherwise + */ + uint16_t getBytes(uint8_t data[], size_t maxBytes); + + private: + uint8_t* _buffer = 0; + size_t _bufferSize = 0; + size_t _index = 0; + size_t _numBytes = 0; +}; + +#endif /* SENSIRION_RX_FRAME_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcCommunication.cpp b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcCommunication.cpp new file mode 100644 index 000000000..300546ee8 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcCommunication.cpp @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include "SensirionShdlcCommunication.h" + +#include +#include + +#include "Arduino.h" +#include "SensirionErrors.h" +#include "SensirionShdlcRxFrame.h" +#include "SensirionShdlcTxFrame.h" + +static uint16_t readByte(uint8_t& data, Stream& serial, unsigned long startTime, + unsigned long timeoutMicros) { + do { + if (micros() - startTime > timeoutMicros) { + return ReadError | TimeoutError; + } + } while (!serial.available()); + data = serial.read(); + return NoError; +} + +static uint16_t unstuffByte(uint8_t& data, Stream& serial, + unsigned long startTime, + unsigned long timeoutMicros) { + uint16_t error = readByte(data, serial, startTime, timeoutMicros); + if (error) { + return error; + } + if (data == 0x7d) { + error = readByte(data, serial, startTime, timeoutMicros); + if (error) { + return error; + } + data = data ^ (1 << 5); + } + return NoError; +} + +uint16_t SensirionShdlcCommunication::sendFrame(SensirionShdlcTxFrame& frame, + Stream& serial) { + size_t writtenBytes = serial.write(&frame._buffer[0], frame._index); + if (writtenBytes != frame._index) { + return WriteError | SerialWriteError; + } + return NoError; +} + +uint16_t SensirionShdlcCommunication::receiveFrame( + SensirionShdlcRxFrame& frame, Stream& serial, unsigned long timeoutMicros) { + unsigned long startTime = micros(); + uint16_t error; + uint8_t dataLength; + uint8_t current = 0; + + if (frame._numBytes) { + return ReadError | NonemptyFrameError; + } + + // Wait for start byte and ignore all other bytes in case a partial frame + // is still in the receive buffer due to a previous error. + do { + error = readByte(current, serial, startTime, timeoutMicros); + if (error) { + return error; + } + } while (current != 0x7e); + + // Handle a repeated start byte which may happen + do { + error = unstuffByte(current, serial, startTime, timeoutMicros); + if (error) { + return error; + } + } while (current == 0x7e); + + frame._address = current; + error = unstuffByte(frame._command, serial, startTime, timeoutMicros); + if (error) { + return error; + } + error = unstuffByte(frame._state, serial, startTime, timeoutMicros); + if (error) { + return error; + } + error = unstuffByte(dataLength, serial, startTime, timeoutMicros); + if (error) { + return error; + } + + uint8_t checksum = + frame._address + frame._command + frame._state + dataLength; + + if (dataLength > frame._bufferSize) { + return RxFrameError | BufferSizeError; + } + + size_t i = 0; + while (i < dataLength) { + error = unstuffByte(current, serial, startTime, timeoutMicros); + if (error) { + return error; + } + frame._buffer[i] = current; + checksum += current; + i++; + } + + uint8_t expectedChecksum = ~checksum; + uint8_t actualChecksum; + error = unstuffByte(actualChecksum, serial, startTime, timeoutMicros); + if (error) { + return error; + } + if (expectedChecksum != actualChecksum) { + return ReadError | ChecksumError; + } + + uint8_t stop; + error = readByte(stop, serial, startTime, timeoutMicros); + if (error) { + return error; + } + if (stop != 0x7e) { + return ReadError | StopByteError; + } + if (frame._state & 0x7F) { + return ExecutionError | frame._state; + } + frame._dataLength = dataLength; + frame._numBytes = dataLength; + return NoError; +} + +uint16_t SensirionShdlcCommunication::sendAndReceiveFrame( + Stream& serial, SensirionShdlcTxFrame& txFrame, + SensirionShdlcRxFrame& rxFrame, unsigned long rxTimeoutMicros) { + uint16_t error; + error = SensirionShdlcCommunication::sendFrame(txFrame, serial); + if (error) { + return error; + } + error = SensirionShdlcCommunication::receiveFrame(rxFrame, serial, + rxTimeoutMicros); + if (error) { + return error; + } + if (rxFrame.getCommand() != txFrame.getCommand()) { + return RxFrameError | RxCommandError; + } + if (rxFrame.getAddress() != txFrame.getAddress()) { + return RxFrameError | RxAddressError; + } + return NoError; +} diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcCommunication.h b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcCommunication.h new file mode 100644 index 000000000..9d2dc35b1 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcCommunication.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef SENSIRION_SHDLC_COMMUNICATION_H_ +#define SENSIRION_SHDLC_COMMUNICATION_H_ + +#include +#include + +#include "Arduino.h" + +#include "SensirionShdlcRxFrame.h" +#include "SensirionShdlcTxFrame.h" + +class SensirionShdlcTxFrame; +class SensirionShdlcRxFrame; + +/* + * SensirionShdlcCommunication - Class which is responsible for the + * communication via a UART (Serial) interface. It provides functionality to + * send and receive frames from a Sensirion sensor. The data is sent and + * received in a SensirionShdlcTxFrame or SensirionShdlcRxFrame respectively. + */ +class SensirionShdlcCommunication { + + public: + /** + * sendFrame() - Sends frame to sensor + * + * @param frame Tx frame object containing a finished frame to send to the + * sensor. + * @param serial Stream object to communicate with the sensor. + * + * @return NoError on success, an error code otherwise + */ + static uint16_t sendFrame(SensirionShdlcTxFrame& frame, Stream& serial); + + /** + * receiveFrame() - Receive Frame from sensor + * + * @param frame Rx frame to store the received data in. + * @param serial Stream object to communicate with the sensor. + * @param timeoutMicros Timeout in micro seconds for the receive operation. + * + * @return NoError on success, an error code otherwise + */ + static uint16_t receiveFrame(SensirionShdlcRxFrame& frame, Stream& serial, + unsigned long timeoutMicros); + + /** + * sendAndReceiveFrame() - Send and receive a frame from sensor. + * + * @param serial Stream object to communicate with the sensor. + * @param txFrame Tx frame object containing a finished frame to + * send to the sensor. + * @param rxFrame Rx frame to store the received data in. + * @param rxTimeoutMicros Timeout in micro seconds for the receive + * operation. + * + * @return NoError on success, an error code otherwise + */ + static uint16_t sendAndReceiveFrame(Stream& serial, + SensirionShdlcTxFrame& txFrame, + SensirionShdlcRxFrame& rxFrame, + unsigned long rxTimeoutMicros); +}; + +#endif /* SENSIRION_SHDLC_COMMUNICATION_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcRxFrame.h b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcRxFrame.h new file mode 100644 index 000000000..d4bca0e2a --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcRxFrame.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef SENSIRION_SHDLC_RX_FRAME_H_ +#define SENSIRION_SHDLC_RX_FRAME_H_ + +#include +#include + +#include "SensirionRxFrame.h" +#include "SensirionShdlcCommunication.h" + +/** + * SenirionShdlcRxFrame - Class which decodes the through UART received data + * into common data types. It contains a buffer which is filled by the + * SensirionShdlcCommunication class. By calling the different decode function + * inherited from the SensirionRxFrame base class the raw data can be decoded + * into different data types. In addition to that it also stores the four + * header bytes defined by the SHDLC protocol state, command, address, + * datalength. These bytes can be read out by the corresponding getter method. + */ +class SensirionShdlcRxFrame : public SensirionRxFrame { + + friend class SensirionShdlcCommunication; + + public: + /** + * Constructor + * + * @param buffer Buffer in which the receive frame will be stored. + * @param bufferSize Number of bytes in the buffer for the receive frame. + */ + SensirionShdlcRxFrame(uint8_t buffer[], size_t bufferSize) + : SensirionRxFrame(buffer, bufferSize){}; + + uint8_t getAddress(void) const { + return _address; + }; + + uint8_t getCommand(void) const { + return _command; + }; + + uint8_t getState(void) const { + return _state; + }; + + uint8_t getDataLength(void) const { + return _dataLength; + }; + + private: + uint8_t _address = 0; + uint8_t _command = 0; + uint8_t _state = 0; + uint8_t _dataLength = 0; +}; + +#endif /* SENSIRION_SHDLC_RX_FRAME_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcTxFrame.cpp b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcTxFrame.cpp new file mode 100644 index 000000000..fc8c4c994 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcTxFrame.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SensirionShdlcTxFrame.h" + +#include +#include + +#include "SensirionErrors.h" + +uint16_t SensirionShdlcTxFrame::begin(uint8_t command, uint8_t address, + uint8_t dataLength) { + _buffer[_index++] = 0x7e; + uint16_t error = addUInt8(address); + error |= addUInt8(command); + error |= addUInt8(dataLength); + _command = command; + _address = address; + return error; +} + +uint16_t SensirionShdlcTxFrame::finish(void) { + uint16_t error = addUInt8(~_checksum); + if (error) { + return error; + } + if (_index + 1 > _bufferSize) { + return TxFrameError | BufferSizeError; + } + _buffer[_index++] = 0x7e; + _isFinished = true; + return NoError; +} + +uint16_t SensirionShdlcTxFrame::addUInt32(uint32_t data) { + uint16_t error = addUInt8(static_cast((data & 0xFF000000) >> 24)); + error |= addUInt8(static_cast((data & 0x00FF0000) >> 16)); + error |= addUInt8(static_cast((data & 0x0000FF00) >> 8)); + error |= addUInt8(static_cast((data & 0x000000FF) >> 0)); + return error; +} + +uint16_t SensirionShdlcTxFrame::addInt32(int32_t data) { + return addUInt32(static_cast(data)); +} + +uint16_t SensirionShdlcTxFrame::addUInt16(uint16_t data) { + uint16_t error = addUInt8(static_cast((data & 0xFF00) >> 8)); + error |= addUInt8(static_cast((data & 0x00FF) >> 0)); + return error; +} + +uint16_t SensirionShdlcTxFrame::addInt16(int16_t data) { + return addUInt16(static_cast(data)); +} + +uint16_t SensirionShdlcTxFrame::addUInt8(uint8_t data) { + if (_index + 2 > _bufferSize) { + return TxFrameError | BufferSizeError; + } + switch (data) { + case 0x11: + case 0x13: + case 0x7d: + case 0x7e: + // byte stuffing is done by inserting 0x7d and inverting bit 5 + _buffer[_index++] = 0x7d; + _buffer[_index++] = data ^ (1 << 5); + break; + default: + _buffer[_index++] = data; + } + _checksum += data; + return NoError; +} + +uint16_t SensirionShdlcTxFrame::addInt8(int8_t data) { + return addUInt8(static_cast(data)); +} + +uint16_t SensirionShdlcTxFrame::addBool(bool data) { + return addUInt8(static_cast(data)); +} + +uint16_t SensirionShdlcTxFrame::addFloat(float data) { + union { + uint32_t uInt32Data; + float floatData; + } convert; + + convert.floatData = data; + return addUInt32(convert.uInt32Data); +} + +uint16_t SensirionShdlcTxFrame::addBytes(const uint8_t data[], + size_t dataLength) { + uint16_t error = 0; + for (size_t i = 0; i < dataLength; i++) { + error |= addUInt8(data[i]); + } + return error; +} diff --git a/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcTxFrame.h b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcTxFrame.h new file mode 100644 index 000000000..eb2dbc6e7 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/src/SensirionShdlcTxFrame.h @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2020, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef SENSIRION_SHDLC_TX_FRAME_H_ +#define SENSIRION_SHDLC_TX_FRAME_H_ + +#include +#include + +#include "SensirionShdlcCommunication.h" + +/* + * SensirionShdlcTxFrame - Class which helps to build a correct SHDLC frame. + * The begin() functions writes the header. The different addDatatype() + * functions add the frame data and the finish() function writes the tail. + * Using these functions one can easily construct a SHDLC frame. + */ +class SensirionShdlcTxFrame { + + friend class SensirionShdlcCommunication; + + public: + /** + * Constructor + * + * @param buffer Buffer in which the send frame will be stored. + * @param bufferSize Number of bytes in the buffer for the send frame. + */ + SensirionShdlcTxFrame(uint8_t buffer[], size_t bufferSize) + : _buffer(buffer), _bufferSize(bufferSize) { + } + + /** + * begin() - Begin frame and write header. + * + * @note This function needs to be called before calling other + * data add functions to write the header at the beginning. + * + * @param command Command byte to add to the send frame. + * @param address Address byte to add to the send frame. + * @param dataLength Data length byte to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t begin(uint8_t command, uint8_t address, uint8_t dataLength); + + /** + * finish() - Finish frame and write tail. + * + * @note This function needs to be called last, after adding all + * data to frame and before sending the frame to the sensor. + * + * @return NoError on success, an error code otherwise + */ + uint16_t finish(void); + + /** + * addUInt32() - Add unsigned 32bit integer to the send frame. + * + * @param data Unsigned 32bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addUInt32(uint32_t data); + + /** + * addInt32() - Add signed 32bit integer to the send frame. + * + * @param data Signed 32bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addInt32(int32_t data); + + /** + * addUInt16() - Add unsigned 16bit integer to the send frame. + * + * @param data Unsigned 16bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addUInt16(uint16_t data); + + /** + * addInt16() - Add signed 16bit integer to the send frame. + * + * @param data Signed 16bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addInt16(int16_t data); + + /** + * addUInt8() - Add unsigned 8bit integer to the send frame. + * + * @param data Unsigned 8bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addUInt8(uint8_t data); + + /** + * addInt8() - Add signed 8bit integer to the send frame. + * + * @param data Signed 8bit integer to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addInt8(int8_t data); + + /** + * addBool() - Add boolean to the send frame. + * + * @param data Boolean to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addBool(bool data); + + /** + * addFloat() - Add float to the send frame. + * + * @param data Float to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addFloat(float data); + + /** + * addBytes() - Add byte array to the send frame. + * + * @param data Byte array to add to the send frame. + * @param dataLength Number of bytes to add to the send frame. + * + * @return NoError on success, an error code otherwise + */ + uint16_t addBytes(const uint8_t data[], size_t dataLength); + + uint8_t getCommand(void) const { + return _command; + }; + + uint8_t getAddress(void) const { + return _address; + } + + private: + uint8_t* _buffer; + size_t _bufferSize; + size_t _index = 0; + uint8_t _checksum = 0; + bool _isFinished = false; + uint8_t _command = 0; + uint8_t _address = 0; +}; + +#endif /* SENSIRION_SHDLC_TX_FRAME_H_ */ diff --git a/lib/lib_i2c/Sensirion_Core/tests/compile_test.py b/lib/lib_i2c/Sensirion_Core/tests/compile_test.py new file mode 100644 index 000000000..81c543a68 --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/tests/compile_test.py @@ -0,0 +1,45 @@ +#! /usr/bin/env python3 +import subprocess +import json +import argparse +import sys +import logging + + +def main(): + parser = argparse.ArgumentParser() + parser.description = u'Compile test a sketch for all available boards' + parser.add_argument(u'-s', u'--sketch', dest=u'sketch', + required=True, help=u'Path to sketch') + args = parser.parse_args() + test_all_boards(args.sketch) + + +def test_all_boards(sketch): + logging.basicConfig(level=logging.INFO, + format='%(asctime)s [%(levelname)s] %(message)s') + log = logging.getLogger('arduino-compile-test') + process = subprocess.run("arduino-cli board listall --format json".split(), + stdout=subprocess.PIPE) + board_list_json = process.stdout.decode('utf-8') + board_list = json.loads(board_list_json) + test_list = ["arduino:samd:mkrzero", "arduino:avr:mega", + "arduino:avr:nano", "arduino:avr:uno", + "esp32:esp32:esp32", "esp8266:esp8266:generic"] + for board in test_list: + if board in (b['fqbn'] for b in board_list['boards']): + log.info('Test compilation for board {}'.format(board)) + command = 'arduino-cli compile --libraries="." --warnings all'\ + ' --fqbn {board} {sketch}'.format(board=board, + sketch=sketch) + process = subprocess.run(command.split(), stdout=subprocess.PIPE) + if process.returncode: + log.error(process.stdout.decode('utf-8')) + sys.exit(process.returncode) + else: + log.error('Board not installed: {}'.format(board)) + sys.exit(-1) + + +if __name__ == '__main__': + main() diff --git a/lib/lib_i2c/Sensirion_Core/tests/run_cppcheck.sh b/lib/lib_i2c/Sensirion_Core/tests/run_cppcheck.sh new file mode 100644 index 000000000..60d620b1e --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/tests/run_cppcheck.sh @@ -0,0 +1,3 @@ +#!/bin/bash +set -euxo pipefail +cppcheck --std=c++11 --language=c++ --error-exitcode=1 --enable=warning,style,performance,portability src/* diff --git a/lib/lib_i2c/Sensirion_Core/tests/syntax_check.sh b/lib/lib_i2c/Sensirion_Core/tests/syntax_check.sh new file mode 100644 index 000000000..53aeaba2c --- /dev/null +++ b/lib/lib_i2c/Sensirion_Core/tests/syntax_check.sh @@ -0,0 +1,5 @@ +#! /bin/bash +set -euxo pipefail +editorconfig-checker +flake8 +find . -type f -iregex ".*\.\(c\|h\|cpp\|ino\)" -exec clang-format-6.0 -i -style=file {} \; && git diff --exit-code diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/CHANGELOG.md b/lib/lib_i2c/Sensirion_I2C_SEN5X/CHANGELOG.md new file mode 100644 index 000000000..a1d8044bc --- /dev/null +++ b/lib/lib_i2c/Sensirion_I2C_SEN5X/CHANGELOG.md @@ -0,0 +1,20 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + + +## [0.2.0] - 2022-03-30 + +Add support for SEN50 + +## [0.1.0] - 2022-01-05 + +Initial release + +[0.2.0]: https://github.com/Sensirion/embedded-i2c-sen5x/compare/0.1.0...0.2.0 +[0.1.0]: https://github.com/Sensirion/arduino-i2c-sen5x/releases/tag/0.1.0 + diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/LICENSE b/lib/lib_i2c/Sensirion_I2C_SEN5X/LICENSE new file mode 100644 index 000000000..ff20c41df --- /dev/null +++ b/lib/lib_i2c/Sensirion_I2C_SEN5X/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2021, Sensirion AG +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/README.md b/lib/lib_i2c/Sensirion_I2C_SEN5X/README.md new file mode 100644 index 000000000..5165ad7c3 --- /dev/null +++ b/lib/lib_i2c/Sensirion_I2C_SEN5X/README.md @@ -0,0 +1,97 @@ + +# Sensirion I2C SEN5X Arduino Library + +This is the Sensirion SEN5X library for Arduino using the +modules I2C interface. + +
+ +## Supported sensors + +- SEN50 (only particulate matter signals available) +- SEN54 (no NOx signal available) +- SEN55 (full feature set) + +# Installation + +To install, download the latest release as .zip file and add it to your +[Arduino IDE](http://www.arduino.cc/en/main/software) via + + Sketch => Include Library => Add .ZIP Library... + +Don't forget to **install the dependencies** listed below the same way via `Add +.ZIP Library` + +Note: Installation via the Arduino Library Manager is coming soon. + +# Dependencies + +* [Sensirion Core](https://github.com/Sensirion/arduino-core) + + +# Quick Start + +1. Connect the SEN5X Sensor to your Arduino board's standard + I2C bus. Check the pinout of your Arduino board to find the correct pins. + The pinout of the SEN5X Sensor board can be found in the + data sheet. + + | *SEN5X* | *Arduino* | *Jumper Wire* | + | ------- | ----------- | ------------- | + | VCC | 5V | Red | + | GND | GND | Black | + | SDA | SDA | Green | + | SCL | SCL | Yellow | + | SEL | GND for I2C | Blue | + +
+ + | *Pin* | *Name* | *Description* | *Comments* | + | ----- | ------ | ------------------------------- | -------------------------------- | + | 1 | VCC | Supply Voltage | 5V ±10% | + | 2 | GND | Ground | + | 3 | SDA | I2C: Serial data input / output | TTL 5V and LVTTL 3.3V compatible | + | 4 | SCL | I2C: Serial clock input | TTL 5V and LVTTL 3.3V compatible | + | 5 | SEL | Interface select | Pull to GND to select I2C | + | 6 | NC | Do not connect | + +2. Open the `exampleUsage` sample project within the Arduino IDE + + File => Examples => Sensirion I2C SEN5X => exampleUsage + +3. Click the `Upload` button in the Arduino IDE or + + Sketch => Upload + +4. When the upload process has finished, open the `Serial Monitor` or `Serial + Plotter` via the `Tools` menu to observe the measurement values. Note that + the `Baud Rate` in the corresponding window has to be set to `115200 baud`. + +# Contributing + +**Contributions are welcome!** + +We develop and test this driver using our company internal tools (version +control, continuous integration, code review etc.) and automatically +synchronize the master branch with GitHub. But this doesn't mean that we don't +respond to issues or don't accept pull requests on GitHub. In fact, you're very +welcome to open issues or create pull requests :) + +This Sensirion library uses +[`clang-format`](https://releases.llvm.org/download.html) to standardize the +formatting of all our `.cpp` and `.h` files. Make sure your contributions are +formatted accordingly: + +The `-i` flag will apply the format changes to the files listed. + +```bash +clang-format -i src/*.cpp src/*.h +``` + +Note that differences from this formatting will result in a failed build until +they are fixed. + +# License + +See [LICENSE](LICENSE). diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/examples/exampleUsage/exampleUsage.ino b/lib/lib_i2c/Sensirion_I2C_SEN5X/examples/exampleUsage/exampleUsage.ino new file mode 100644 index 000000000..c92a10374 --- /dev/null +++ b/lib/lib_i2c/Sensirion_I2C_SEN5X/examples/exampleUsage/exampleUsage.ino @@ -0,0 +1,249 @@ + +/* + * I2C-Generator: 0.3.0 + * Yaml Version: 2.1.3 + * Template Version: 0.7.0-112-g190ecaa + */ +/* + * Copyright (c) 2021, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +// The used commands use up to 48 bytes. On some Arduino's the default buffer +// space is not large enough +#define MAXBUF_REQUIREMENT 48 + +#if (defined(I2C_BUFFER_LENGTH) && \ + (I2C_BUFFER_LENGTH >= MAXBUF_REQUIREMENT)) || \ + (defined(BUFFER_LENGTH) && BUFFER_LENGTH >= MAXBUF_REQUIREMENT) +#define USE_PRODUCT_INFO +#endif + +SensirionI2CSen5x sen5x; + +void printModuleVersions() { + uint16_t error; + char errorMessage[256]; + + unsigned char productName[32]; + uint8_t productNameSize = 32; + + error = sen5x.getProductName(productName, productNameSize); + + if (error) { + Serial.print("Error trying to execute getProductName(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } else { + Serial.print("ProductName:"); + Serial.println((char*)productName); + } + + uint8_t firmwareMajor; + uint8_t firmwareMinor; + bool firmwareDebug; + uint8_t hardwareMajor; + uint8_t hardwareMinor; + uint8_t protocolMajor; + uint8_t protocolMinor; + + error = sen5x.getVersion(firmwareMajor, firmwareMinor, firmwareDebug, + hardwareMajor, hardwareMinor, protocolMajor, + protocolMinor); + if (error) { + Serial.print("Error trying to execute getVersion(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } else { + Serial.print("Firmware: "); + Serial.print(firmwareMajor); + Serial.print("."); + Serial.print(firmwareMinor); + Serial.print(", "); + + Serial.print("Hardware: "); + Serial.print(hardwareMajor); + Serial.print("."); + Serial.println(hardwareMinor); + } +} + +void printSerialNumber() { + uint16_t error; + char errorMessage[256]; + unsigned char serialNumber[32]; + uint8_t serialNumberSize = 32; + + error = sen5x.getSerialNumber(serialNumber, serialNumberSize); + if (error) { + Serial.print("Error trying to execute getSerialNumber(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } else { + Serial.print("SerialNumber:"); + Serial.println((char*)serialNumber); + } +} + +void setup() { + + Serial.begin(115200); + while (!Serial) { + delay(100); + } + + Wire.begin(); + + sen5x.begin(Wire); + + uint16_t error; + char errorMessage[256]; + error = sen5x.deviceReset(); + if (error) { + Serial.print("Error trying to execute deviceReset(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } + +// Print SEN55 module information if i2c buffers are large enough +#ifdef USE_PRODUCT_INFO + printSerialNumber(); + printModuleVersions(); +#endif + + // set a temperature offset in degrees celsius + // Note: supported by SEN54 and SEN55 sensors + // By default, the temperature and humidity outputs from the sensor + // are compensated for the modules self-heating. If the module is + // designed into a device, the temperature compensation might need + // to be adapted to incorporate the change in thermal coupling and + // self-heating of other device components. + // + // A guide to achieve optimal performance, including references + // to mechanical design-in examples can be found in the app note + // “SEN5x – Temperature Compensation Instruction” at www.sensirion.com. + // Please refer to those application notes for further information + // on the advanced compensation settings used + // in `setTemperatureOffsetParameters`, `setWarmStartParameter` and + // `setRhtAccelerationMode`. + // + // Adjust tempOffset to account for additional temperature offsets + // exceeding the SEN module's self heating. + float tempOffset = 0.0; + error = sen5x.setTemperatureOffsetSimple(tempOffset); + if (error) { + Serial.print("Error trying to execute setTemperatureOffsetSimple(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } else { + Serial.print("Temperature Offset set to "); + Serial.print(tempOffset); + Serial.println(" deg. Celsius (SEN54/SEN55 only"); + } + + // Start Measurement + error = sen5x.startMeasurement(); + if (error) { + Serial.print("Error trying to execute startMeasurement(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } +} + +void loop() { + uint16_t error; + char errorMessage[256]; + + delay(1000); + + // Read Measurement + float massConcentrationPm1p0; + float massConcentrationPm2p5; + float massConcentrationPm4p0; + float massConcentrationPm10p0; + float ambientHumidity; + float ambientTemperature; + float vocIndex; + float noxIndex; + + error = sen5x.readMeasuredValues( + massConcentrationPm1p0, massConcentrationPm2p5, massConcentrationPm4p0, + massConcentrationPm10p0, ambientHumidity, ambientTemperature, vocIndex, + noxIndex); + + if (error) { + Serial.print("Error trying to execute readMeasuredValues(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } else { + Serial.print("MassConcentrationPm1p0:"); + Serial.print(massConcentrationPm1p0); + Serial.print("\t"); + Serial.print("MassConcentrationPm2p5:"); + Serial.print(massConcentrationPm2p5); + Serial.print("\t"); + Serial.print("MassConcentrationPm4p0:"); + Serial.print(massConcentrationPm4p0); + Serial.print("\t"); + Serial.print("MassConcentrationPm10p0:"); + Serial.print(massConcentrationPm10p0); + Serial.print("\t"); + Serial.print("AmbientHumidity:"); + if (isnan(ambientHumidity)) { + Serial.print("n/a"); + } else { + Serial.print(ambientHumidity); + } + Serial.print("\t"); + Serial.print("AmbientTemperature:"); + if (isnan(ambientTemperature)) { + Serial.print("n/a"); + } else { + Serial.print(ambientTemperature); + } + Serial.print("\t"); + Serial.print("VocIndex:"); + if (isnan(vocIndex)) { + Serial.print("n/a"); + } else { + Serial.print(vocIndex); + } + Serial.print("\t"); + Serial.print("NoxIndex:"); + if (isnan(noxIndex)) { + Serial.println("n/a"); + } else { + Serial.println(noxIndex); + } + } +} diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/images/SEN5X_pinout.png b/lib/lib_i2c/Sensirion_I2C_SEN5X/images/SEN5X_pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..c42395c2f4cb8abc8bad6df32a337481cb2f7de9 GIT binary patch literal 38240 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 literal 0 HcmV?d00001 diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/images/SEN5x.png b/lib/lib_i2c/Sensirion_I2C_SEN5X/images/SEN5x.png new file mode 100644 index 0000000000000000000000000000000000000000..32bb95b0142600145f1f10028b6d0840d01b0a27 GIT binary patch literal 450015 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

jM(%b8pDizN5pd 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[h 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 z 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%0D-_ICZjBoFFh%i~-3I4Km}X!_y68s&p;aKSq2UMH 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

9!X8kny}U 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

0iPbGzzJYTK#m0Y|;I%RH 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 literal 0 HcmV?d00001 diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/keywords.txt b/lib/lib_i2c/Sensirion_I2C_SEN5X/keywords.txt new file mode 100644 index 000000000..295031081 --- /dev/null +++ b/lib/lib_i2c/Sensirion_I2C_SEN5X/keywords.txt @@ -0,0 +1,55 @@ +####################################### +# Syntax Coloring Map +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +SensirionI2CSen5x KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +startMeasurement KEYWORD2 +startMeasurementWithoutPm KEYWORD2 +stopMeasurement KEYWORD2 +readDataReady KEYWORD2 +readMeasuredValues KEYWORD2 +readMeasuredValuesAsIntegers KEYWORD2 +readMeasuredValuesSen50 KEYWORD2 +readMeasuredRawValues KEYWORD2 +readMeasuredPmValues KEYWORD2 +readMeasuredPmValuesAsIntegers KEYWORD2 +startFanCleaning KEYWORD2 +setTemperatureOffsetSimple KEYWORD2 +getTemperatureOffsetSimple KEYWORD2 +setTemperatureOffsetParameters KEYWORD2 +getTemperatureOffsetParameters KEYWORD2 +setWarmStartParameter KEYWORD2 +getWarmStartParameter KEYWORD2 +setVocAlgorithmTuningParameters KEYWORD2 +getVocAlgorithmTuningParameters KEYWORD2 +setNoxAlgorithmTuningParameters KEYWORD2 +getNoxAlgorithmTuningParameters KEYWORD2 +setRhtAccelerationMode KEYWORD2 +getRhtAccelerationMode KEYWORD2 +setVocAlgorithmState KEYWORD2 +getVocAlgorithmState KEYWORD2 +setFanAutoCleaningInterval KEYWORD2 +getFanAutoCleaningInterval KEYWORD2 +getProductName KEYWORD2 +getSerialNumber KEYWORD2 +getVersion KEYWORD2 +readDeviceStatus KEYWORD2 +readAndClearDeviceStatus KEYWORD2 +deviceReset KEYWORD2 +####################################### +# Instances (KEYWORD2) +####################################### + +sen5x KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/library.properties b/lib/lib_i2c/Sensirion_I2C_SEN5X/library.properties new file mode 100644 index 000000000..ea4a9000b --- /dev/null +++ b/lib/lib_i2c/Sensirion_I2C_SEN5X/library.properties @@ -0,0 +1,10 @@ +name=Sensirion I2C SEN5X +version=0.2.0 +author=Sensirion +maintainer=Sensirion +sentence=Library for the SEN5X sensor family by Sensirion +paragraph=Enables you to use the SEN50, SEN54 and SEN55 via I2C. +url=https://github.com/Sensirion/arduino-i2c-sen5x +category=Sensors +depends=Sensirion Core +includes=SensirionI2CSen5x.h diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/src/SensirionI2CSen5x.cpp b/lib/lib_i2c/Sensirion_I2C_SEN5X/src/SensirionI2CSen5x.cpp new file mode 100644 index 000000000..3008e5226 --- /dev/null +++ b/lib/lib_i2c/Sensirion_I2C_SEN5X/src/SensirionI2CSen5x.cpp @@ -0,0 +1,880 @@ +/* + * THIS FILE IS AUTOMATICALLY GENERATED + * + * I2C-Generator: 0.3.0 + * Yaml Version: 2.1.3 + * Template Version: 0.7.0-112-g190ecaa + */ +/* + * Copyright (c) 2021, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SensirionI2CSen5x.h" +#include "Arduino.h" +#include "SensirionCore.h" +#include +#include + +#define SEN5X_I2C_ADDRESS 0x69 +#define UINT_INVALID 0xFFFF +#define INT_INVALID 0x7FFF + +SensirionI2CSen5x::SensirionI2CSen5x() { +} + +void SensirionI2CSen5x::begin(TwoWire& i2cBus) { + _i2cBus = &i2cBus; +} + +uint16_t SensirionI2CSen5x::startMeasurement() { + uint16_t error = 0; + uint8_t buffer[2]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x21, buffer, 2); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(50); + return error; +} + +uint16_t SensirionI2CSen5x::startMeasurementWithoutPm() { + uint16_t error = 0; + uint8_t buffer[2]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x37, buffer, 2); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(50); + return error; +} + +uint16_t SensirionI2CSen5x::stopMeasurement() { + uint16_t error = 0; + uint8_t buffer[2]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x104, buffer, 2); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(200); + return error; +} + +uint16_t SensirionI2CSen5x::readDataReady(bool& dataReady) { + uint16_t error = 0; + uint8_t buffer[3]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x202, buffer, 3); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 3); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 3, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + uint8_t padding; + error |= rxFrame.getUInt8(padding); // remove padding + error |= rxFrame.getBool(dataReady); + return error; +} + +uint16_t SensirionI2CSen5x::readMeasuredValues( + float& massConcentrationPm1p0, float& massConcentrationPm2p5, + float& massConcentrationPm4p0, float& massConcentrationPm10p0, + float& ambientHumidity, float& ambientTemperature, float& vocIndex, + float& noxIndex) { + + uint16_t error = 0; + uint16_t massConcentrationPm1p0Int; + uint16_t massConcentrationPm2p5Int; + uint16_t massConcentrationPm4p0Int; + uint16_t massConcentrationPm10p0Int; + int16_t ambientHumidityInt; + int16_t ambientTemperatureInt; + int16_t vocIndexInt; + int16_t noxIndexInt; + + error = readMeasuredValuesAsIntegers( + massConcentrationPm1p0Int, massConcentrationPm2p5Int, + massConcentrationPm4p0Int, massConcentrationPm10p0Int, + ambientHumidityInt, ambientTemperatureInt, vocIndexInt, noxIndexInt); + + if (error) { + return error; + } + + massConcentrationPm1p0 = massConcentrationPm1p0Int == UINT_INVALID + ? NAN + : massConcentrationPm1p0Int / 10.0f; + massConcentrationPm2p5 = massConcentrationPm2p5Int == UINT_INVALID + ? NAN + : massConcentrationPm2p5Int / 10.0f; + massConcentrationPm4p0 = massConcentrationPm4p0Int == UINT_INVALID + ? NAN + : massConcentrationPm4p0Int / 10.0f; + massConcentrationPm10p0 = massConcentrationPm10p0Int == UINT_INVALID + ? NAN + : massConcentrationPm10p0Int / 10.0f; + ambientHumidity = + ambientHumidityInt == INT_INVALID ? NAN : ambientHumidityInt / 100.0f; + ambientTemperature = ambientTemperatureInt == INT_INVALID + ? NAN + : ambientTemperatureInt / 200.0f; + vocIndex = vocIndexInt == INT_INVALID ? NAN : vocIndexInt / 10.0f; + noxIndex = noxIndexInt == INT_INVALID ? NAN : noxIndexInt / 10.0f; + + return NoError; +} + +uint16_t SensirionI2CSen5x::readMeasuredValuesAsIntegers( + uint16_t& massConcentrationPm1p0, uint16_t& massConcentrationPm2p5, + uint16_t& massConcentrationPm4p0, uint16_t& massConcentrationPm10p0, + int16_t& ambientHumidity, int16_t& ambientTemperature, int16_t& vocIndex, + int16_t& noxIndex) { + uint16_t error = 0; + uint8_t buffer[24]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x3C4, buffer, 24); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 24); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 24, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getUInt16(massConcentrationPm1p0); + error |= rxFrame.getUInt16(massConcentrationPm2p5); + error |= rxFrame.getUInt16(massConcentrationPm4p0); + error |= rxFrame.getUInt16(massConcentrationPm10p0); + error |= rxFrame.getInt16(ambientHumidity); + error |= rxFrame.getInt16(ambientTemperature); + error |= rxFrame.getInt16(vocIndex); + error |= rxFrame.getInt16(noxIndex); + return error; +} + +uint16_t SensirionI2CSen5x::readMeasuredRawValues(int16_t& rawHumidity, + int16_t& rawTemperature, + uint16_t& rawVoc, + uint16_t& rawNox) { + uint16_t error = 0; + uint8_t buffer[12]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x3D2, buffer, 12); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 12); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 12, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getInt16(rawHumidity); + error |= rxFrame.getInt16(rawTemperature); + error |= rxFrame.getUInt16(rawVoc); + error |= rxFrame.getUInt16(rawNox); + return error; +} + +uint16_t SensirionI2CSen5x::readMeasuredValuesSen50( + float& massConcentrationPm1p0, float& massConcentrationPm2p5, + float& massConcentrationPm4p0, float& massConcentrationPm10p0) { + + uint16_t error = 0; + float ambientHumidityDummy; + float ambientTemperatureDummy; + float vocIndexDummy; + float noxIndexDummy; + error = readMeasuredValues(massConcentrationPm1p0, massConcentrationPm2p5, + massConcentrationPm4p0, massConcentrationPm10p0, + ambientHumidityDummy, ambientTemperatureDummy, + vocIndexDummy, noxIndexDummy); + return error; +} + +uint16_t SensirionI2CSen5x::readMeasuredPmValues( + float& massConcentrationPm1p0, float& massConcentrationPm2p5, + float& massConcentrationPm4p0, float& massConcentrationPm10p0, + float& numberConcentrationPm0p5, float& numberConcentrationPm1p0, + float& numberConcentrationPm2p5, float& numberConcentrationPm4p0, + float& numberConcentrationPm10p0, float& typicalParticleSize) { + + uint16_t error = 0; + uint16_t massConcentrationPm1p0Int; + uint16_t massConcentrationPm2p5Int; + uint16_t massConcentrationPm4p0Int; + uint16_t massConcentrationPm10p0Int; + uint16_t numberConcentrationPm0p5Int; + uint16_t numberConcentrationPm1p0Int; + uint16_t numberConcentrationPm2p5Int; + uint16_t numberConcentrationPm4p0Int; + uint16_t numberConcentrationPm10p0Int; + uint16_t typicalParticleSizeInt; + + error = readMeasuredPmValuesAsIntegers( + massConcentrationPm1p0Int, massConcentrationPm2p5Int, + massConcentrationPm4p0Int, massConcentrationPm10p0Int, + numberConcentrationPm0p5Int, numberConcentrationPm1p0Int, + numberConcentrationPm2p5Int, numberConcentrationPm4p0Int, + numberConcentrationPm10p0Int, typicalParticleSizeInt); + + if (error) { + return error; + } + + massConcentrationPm1p0 = massConcentrationPm1p0Int == UINT_INVALID + ? NAN + : massConcentrationPm1p0Int / 10.0f; + massConcentrationPm2p5 = massConcentrationPm2p5Int == UINT_INVALID + ? NAN + : massConcentrationPm2p5Int / 10.0f; + massConcentrationPm4p0 = massConcentrationPm4p0Int == UINT_INVALID + ? NAN + : massConcentrationPm4p0Int / 10.0f; + massConcentrationPm10p0 = massConcentrationPm10p0Int == UINT_INVALID + ? NAN + : massConcentrationPm10p0Int / 10.0f; + numberConcentrationPm0p5 = numberConcentrationPm0p5Int == UINT_INVALID + ? NAN + : numberConcentrationPm0p5Int / 10.0f; + numberConcentrationPm1p0 = numberConcentrationPm1p0Int == UINT_INVALID + ? NAN + : numberConcentrationPm1p0Int / 10.0f; + numberConcentrationPm2p5 = numberConcentrationPm2p5Int == UINT_INVALID + ? NAN + : numberConcentrationPm2p5Int / 10.0f; + numberConcentrationPm4p0 = numberConcentrationPm4p0Int == UINT_INVALID + ? NAN + : numberConcentrationPm4p0Int / 10.0f; + numberConcentrationPm10p0 = numberConcentrationPm10p0Int == UINT_INVALID + ? NAN + : numberConcentrationPm10p0Int / 10.0f; + typicalParticleSize = typicalParticleSizeInt == UINT_INVALID + ? NAN + : typicalParticleSizeInt / 1000.0f; + + return NoError; +} + +uint16_t SensirionI2CSen5x::readMeasuredPmValuesAsIntegers( + uint16_t& massConcentrationPm1p0, uint16_t& massConcentrationPm2p5, + uint16_t& massConcentrationPm4p0, uint16_t& massConcentrationPm10p0, + uint16_t& numberConcentrationPm0p5, uint16_t& numberConcentrationPm1p0, + uint16_t& numberConcentrationPm2p5, uint16_t& numberConcentrationPm4p0, + uint16_t& numberConcentrationPm10p0, uint16_t& typicalParticleSize) { + uint16_t error = 0; + uint8_t buffer[30]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x413, buffer, 30); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 30); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 30, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getUInt16(massConcentrationPm1p0); + error |= rxFrame.getUInt16(massConcentrationPm2p5); + error |= rxFrame.getUInt16(massConcentrationPm4p0); + error |= rxFrame.getUInt16(massConcentrationPm10p0); + error |= rxFrame.getUInt16(numberConcentrationPm0p5); + error |= rxFrame.getUInt16(numberConcentrationPm1p0); + error |= rxFrame.getUInt16(numberConcentrationPm2p5); + error |= rxFrame.getUInt16(numberConcentrationPm4p0); + error |= rxFrame.getUInt16(numberConcentrationPm10p0); + error |= rxFrame.getUInt16(typicalParticleSize); + return error; +} + +uint16_t SensirionI2CSen5x::startFanCleaning() { + uint16_t error = 0; + uint8_t buffer[2]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x5607, buffer, 2); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(20); + return error; +} + +uint16_t SensirionI2CSen5x::setTemperatureOffsetSimple(float tempOffset) { + int16_t defaultSlope = 0; + uint16_t defaultTimeConstant = 0; + int16_t tempOffsetTicks = static_cast(tempOffset * 200); + return setTemperatureOffsetParameters(tempOffsetTicks, defaultSlope, + defaultTimeConstant); +} + +uint16_t SensirionI2CSen5x::getTemperatureOffsetSimple(float& tempOffset) { + int16_t tempOffsetTicks; + int16_t slope; + uint16_t timeConstant; + uint16_t error = 0; + + error = + getTemperatureOffsetParameters(tempOffsetTicks, slope, timeConstant); + if (error) { + return error; + } + + tempOffset = static_cast(tempOffsetTicks) / 200.0f; + + return NoError; +} + +uint16_t SensirionI2CSen5x::setTemperatureOffsetParameters( + int16_t tempOffset, int16_t slope, uint16_t timeConstant) { + uint16_t error = 0; + uint8_t buffer[11]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60B2, buffer, 11); + + error |= txFrame.addInt16(tempOffset); + error |= txFrame.addInt16(slope); + error |= txFrame.addUInt16(timeConstant); + + if (error) { + return error; + } + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(20); + return error; +} + +uint16_t SensirionI2CSen5x::getTemperatureOffsetParameters( + int16_t& tempOffset, int16_t& slope, uint16_t& timeConstant) { + uint16_t error = 0; + uint8_t buffer[9]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60B2, buffer, 9); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 9); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 9, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getInt16(tempOffset); + error |= rxFrame.getInt16(slope); + error |= rxFrame.getUInt16(timeConstant); + return error; +} + +uint16_t SensirionI2CSen5x::setWarmStartParameter(uint16_t warmStart) { + uint16_t error = 0; + uint8_t buffer[5]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60C6, buffer, 5); + + error |= txFrame.addUInt16(warmStart); + + if (error) { + return error; + } + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(20); + return error; +} + +uint16_t SensirionI2CSen5x::getWarmStartParameter(uint16_t& warmStart) { + uint16_t error = 0; + uint8_t buffer[3]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60C6, buffer, 3); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 3); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 3, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getUInt16(warmStart); + return error; +} + +uint16_t SensirionI2CSen5x::setVocAlgorithmTuningParameters( + int16_t indexOffset, int16_t learningTimeOffsetHours, + int16_t learningTimeGainHours, int16_t gatingMaxDurationMinutes, + int16_t stdInitial, int16_t gainFactor) { + uint16_t error = 0; + uint8_t buffer[20]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60D0, buffer, 20); + + error |= txFrame.addInt16(indexOffset); + error |= txFrame.addInt16(learningTimeOffsetHours); + error |= txFrame.addInt16(learningTimeGainHours); + error |= txFrame.addInt16(gatingMaxDurationMinutes); + error |= txFrame.addInt16(stdInitial); + error |= txFrame.addInt16(gainFactor); + + if (error) { + return error; + } + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(20); + return error; +} + +uint16_t SensirionI2CSen5x::getVocAlgorithmTuningParameters( + int16_t& indexOffset, int16_t& learningTimeOffsetHours, + int16_t& learningTimeGainHours, int16_t& gatingMaxDurationMinutes, + int16_t& stdInitial, int16_t& gainFactor) { + uint16_t error = 0; + uint8_t buffer[18]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60D0, buffer, 18); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 18); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 18, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getInt16(indexOffset); + error |= rxFrame.getInt16(learningTimeOffsetHours); + error |= rxFrame.getInt16(learningTimeGainHours); + error |= rxFrame.getInt16(gatingMaxDurationMinutes); + error |= rxFrame.getInt16(stdInitial); + error |= rxFrame.getInt16(gainFactor); + return error; +} + +uint16_t SensirionI2CSen5x::setNoxAlgorithmTuningParameters( + int16_t indexOffset, int16_t learningTimeOffsetHours, + int16_t learningTimeGainHours, int16_t gatingMaxDurationMinutes, + int16_t stdInitial, int16_t gainFactor) { + uint16_t error = 0; + uint8_t buffer[20]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60E1, buffer, 20); + + error |= txFrame.addInt16(indexOffset); + error |= txFrame.addInt16(learningTimeOffsetHours); + error |= txFrame.addInt16(learningTimeGainHours); + error |= txFrame.addInt16(gatingMaxDurationMinutes); + error |= txFrame.addInt16(stdInitial); + error |= txFrame.addInt16(gainFactor); + + if (error) { + return error; + } + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(20); + return error; +} + +uint16_t SensirionI2CSen5x::getNoxAlgorithmTuningParameters( + int16_t& indexOffset, int16_t& learningTimeOffsetHours, + int16_t& learningTimeGainHours, int16_t& gatingMaxDurationMinutes, + int16_t& stdInitial, int16_t& gainFactor) { + uint16_t error = 0; + uint8_t buffer[18]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60E1, buffer, 18); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 18); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 18, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getInt16(indexOffset); + error |= rxFrame.getInt16(learningTimeOffsetHours); + error |= rxFrame.getInt16(learningTimeGainHours); + error |= rxFrame.getInt16(gatingMaxDurationMinutes); + error |= rxFrame.getInt16(stdInitial); + error |= rxFrame.getInt16(gainFactor); + return error; +} + +uint16_t SensirionI2CSen5x::setRhtAccelerationMode(uint16_t mode) { + uint16_t error = 0; + uint8_t buffer[5]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60F7, buffer, 5); + + error |= txFrame.addUInt16(mode); + + if (error) { + return error; + } + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(20); + return error; +} + +uint16_t SensirionI2CSen5x::getRhtAccelerationMode(uint16_t& mode) { + uint16_t error = 0; + uint8_t buffer[3]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x60F7, buffer, 3); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 3); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 3, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getUInt16(mode); + return error; +} + +uint16_t SensirionI2CSen5x::setVocAlgorithmState(const uint8_t state[], + uint8_t stateSize) { + uint16_t error = 0; + uint8_t buffer[14]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x6181, buffer, 14); + + error |= txFrame.addBytes(state, stateSize); + + if (error) { + return error; + } + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(20); + return error; +} + +uint16_t SensirionI2CSen5x::getVocAlgorithmState(uint8_t state[], + uint8_t stateSize) { + uint16_t error = 0; + uint8_t buffer[12]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x6181, buffer, 12); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 12); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 12, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getBytes(state, stateSize); + return error; +} + +uint16_t SensirionI2CSen5x::setFanAutoCleaningInterval(uint32_t interval) { + uint16_t error = 0; + uint8_t buffer[8]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x8004, buffer, 8); + + error |= txFrame.addUInt32(interval); + + if (error) { + return error; + } + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(20); + return error; +} + +uint16_t SensirionI2CSen5x::getFanAutoCleaningInterval(uint32_t& interval) { + uint16_t error = 0; + uint8_t buffer[6]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0x8004, buffer, 6); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 6); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 6, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getUInt32(interval); + return error; +} + +uint16_t SensirionI2CSen5x::getProductName(unsigned char productName[], + uint8_t productNameSize) { + uint16_t error = 0; + uint8_t buffer[48]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0xD014, buffer, 48); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(50); + + SensirionI2CRxFrame rxFrame(buffer, 48); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 48, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getBytes(productName, productNameSize); + return error; +} + +uint16_t SensirionI2CSen5x::getSerialNumber(unsigned char serialNumber[], + uint8_t serialNumberSize) { + uint16_t error = 0; + uint8_t buffer[48]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0xD033, buffer, 48); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(50); + + SensirionI2CRxFrame rxFrame(buffer, 48); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 48, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getBytes(serialNumber, serialNumberSize); + return error; +} + +uint16_t +SensirionI2CSen5x::getVersion(uint8_t& firmwareMajor, uint8_t& firmwareMinor, + bool& firmwareDebug, uint8_t& hardwareMajor, + uint8_t& hardwareMinor, uint8_t& protocolMajor, + uint8_t& protocolMinor) { + uint16_t error = 0; + uint8_t buffer[12]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0xD100, buffer, 12); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 12); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 12, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getUInt8(firmwareMajor); + error |= rxFrame.getUInt8(firmwareMinor); + error |= rxFrame.getBool(firmwareDebug); + error |= rxFrame.getUInt8(hardwareMajor); + error |= rxFrame.getUInt8(hardwareMinor); + error |= rxFrame.getUInt8(protocolMajor); + error |= rxFrame.getUInt8(protocolMinor); + uint8_t padding; + error |= rxFrame.getUInt8(padding); // remove padding + return error; +} + +uint16_t SensirionI2CSen5x::readDeviceStatus(uint32_t& deviceStatus) { + uint16_t error = 0; + uint8_t buffer[6]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0xD206, buffer, 6); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 6); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 6, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getUInt32(deviceStatus); + return error; +} + +uint16_t SensirionI2CSen5x::readAndClearDeviceStatus(uint32_t& deviceStatus) { + uint16_t error = 0; + uint8_t buffer[6]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0xD210, buffer, 6); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + if (error) { + return error; + } + + delay(20); + + SensirionI2CRxFrame rxFrame(buffer, 6); + error = SensirionI2CCommunication::receiveFrame(SEN5X_I2C_ADDRESS, 6, + rxFrame, *_i2cBus); + if (error) { + return error; + } + + error |= rxFrame.getUInt32(deviceStatus); + return error; +} + +uint16_t SensirionI2CSen5x::deviceReset() { + uint16_t error = 0; + uint8_t buffer[2]; + SensirionI2CTxFrame txFrame = + SensirionI2CTxFrame::createWithUInt16Command(0xD304, buffer, 2); + + error = SensirionI2CCommunication::sendFrame(SEN5X_I2C_ADDRESS, txFrame, + *_i2cBus); + delay(200); + return error; +} diff --git a/lib/lib_i2c/Sensirion_I2C_SEN5X/src/SensirionI2CSen5x.h b/lib/lib_i2c/Sensirion_I2C_SEN5X/src/SensirionI2CSen5x.h new file mode 100644 index 000000000..a572ff3fe --- /dev/null +++ b/lib/lib_i2c/Sensirion_I2C_SEN5X/src/SensirionI2CSen5x.h @@ -0,0 +1,857 @@ +/* + * THIS FILE IS AUTOMATICALLY GENERATED + * + * I2C-Generator: 0.3.0 + * Yaml Version: 2.1.3 + * Template Version: 0.7.0-112-g190ecaa + */ +/* + * Copyright (c) 2021, Sensirion AG + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Sensirion AG nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef SENSIRIONI2CSEN5X_H +#define SENSIRIONI2CSEN5X_H + +#include + +#include + +class SensirionI2CSen5x { + + public: + SensirionI2CSen5x(); + /** + * begin() - Initializes the SensirionI2CSen5x class. + * + * @param serial Arduino stream object to be communicated with. + * + */ + void begin(TwoWire& i2cBus); + + /** + * startMeasurement() - Starts a continuous measurement. + + * After starting the measurement, it takes some time (~1s) until the first + * measurement results are available. You could poll with the command + * 0x0202 \"Read Data Ready\" to check when the results are ready to read. + * + * This command is only available in idle mode. If the device is already + * in any measure mode, this command has no effect. + * + * @return 0 on success, an error code otherwise + */ + uint16_t startMeasurement(void); + + /** + * startMeasurementWithoutPm() - Starts a continuous measurement without PM. + * Only humidity, temperature, VOC and NOx are available in this mode. Laser + * and fan are switched off to keep power consumption low. + * + * After starting the measurement, it takes some time (~1s) until the first + * measurement results are available. You could poll with the command + * 0x0202 \"Read Data Ready\" to check when the results are ready to read. + * + * This command is only available in idle mode. If the device is already + * in any measure mode, this command has no effect. + * + * Supported sensors: SEN54, SEN55 + * + * @return 0 on success, an error code otherwise + */ + uint16_t startMeasurementWithoutPm(void); + + /** + * stopMeasurement() - Stops the measurement and returns to idle mode. + * + * If the device is already in idle mode, this command has no effect. + * + * @return 0 on success, an error code otherwise + */ + uint16_t stopMeasurement(void); + + /** + * readDataReady() - This command can be used to check if new measurement + * results are ready to read. The data ready flag is automatically reset + * after reading the measurement values with the 0x03.. \"Read Measured + * Values\" commands. + * + * @note During fan (auto-)cleaning, no measurement data is available for + * several seconds and thus this flag will not be set until cleaning has + * finished. So please expect gaps of several seconds at any time if fan + * auto-cleaning is enabled. + * + * @param padding Padding byte, always 0x00. + * + * @param dataReady True (0x01) if data is ready, False (0x00) if not. When + * no measurement is running, False will be returned. + * + * @return 0 on success, an error code otherwise + */ + uint16_t readDataReady(bool& dataReady); + + /** + * readMeasuredValues() - Returns the measured values. + * + * The command 0x0202 \"Read Data Ready\" can be used to check if new + * data is available since the last read operation. If no new data is + * available, the previous values will be returned again. If no data is + * available at all (e.g. measurement not running for at least one + * second), all values will be NAN. + * + * @param massConcentrationPm1p0 PM1.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm2p5 PM2.5 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm4p0 PM4.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm10p0 PM10.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param ambientHumidity RH [%] + * Note: If this value is unknown, NAN is returned.* + * + * @param ambientTemperature T [°C] + * Note: If this value is unknown, NAN is returned.* + * + * @param vocIndex VOC Index + * Note: If this value is unknown, NAN is returned.* + * + * @param noxIndex NOx Index + * Note: If this value is unknown, which is true for SEN54, + * NAN is returned. During the first 10..11 seconds after + * power-on or device reset, this value will be NAN as well.* + * + * @return 0 on success, an error code otherwise + */ + uint16_t readMeasuredValues(float& massConcentrationPm1p0, + float& massConcentrationPm2p5, + float& massConcentrationPm4p0, + float& massConcentrationPm10p0, + float& ambientHumidity, + float& ambientTemperature, float& vocIndex, + float& noxIndex); + + /** + * readMeasuredValuesAsIntegers() - Returns the measured values + * without scaling factors applied. + * + * The command 0x0202 \"Read Data Ready\" can be used to check if new + * data is available since the last read operation. If no new data is + * available, the previous values will be returned again. If no data is + * available at all (e.g. measurement not running for at least one + * second), all values will be at their upper limit (0xFFFF for `uint16`, + * 0x7FFF for `int16`). + * + * @param massConcentrationPm1p0 Value is scaled with factor 10: + * PM1.0 [µg/m³] = value / 10 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param massConcentrationPm2p5 Value is scaled with factor 10: + * PM2.5 [µg/m³] = value / 10 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param massConcentrationPm4p0 Value is scaled with factor 10: + * PM4.0 [µg/m³] = value / 10 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param massConcentrationPm10p0 Value is scaled with factor 10: + * PM10.0 [µg/m³] = value / 10 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param ambientHumidity Value is scaled with factor 100: + * RH [%] = value /100 + * Note: If this value is unknown, 0x7FFF is returned.* + * + * @param ambientTemperature Value is scaled with factor 200: + * T [°C] = value / 200 + * Note: If this value is unknown, 0x7FFF is returned.* + * + * @param vocIndex Value is scaled with factor 10: VOC Index = value / 10 + * Note: If this value is unknown, 0x7FFF is returned.* + * + * @param noxIndex Value is scaled with factor 10: NOx Index = value / 10 + * Note: If this value is unknown, which is the case for SEN54, + * 0x7FFF is returned. During the first 10..11 seconds after power-on + * or device reset, this value will be 0x7FFF as well.* + * + * @return 0 on success, an error code otherwise + */ + uint16_t readMeasuredValuesAsIntegers(uint16_t& massConcentrationPm1p0, + uint16_t& massConcentrationPm2p5, + uint16_t& massConcentrationPm4p0, + uint16_t& massConcentrationPm10p0, + int16_t& ambientHumidity, + int16_t& ambientTemperature, + int16_t& vocIndex, int16_t& noxIndex); + + /** + * readMeasuredRawValues() - Returns the measured raw values. + * + * The command 0x0202 \"Read Data Ready\" can be used to check if new + * data is available since the last read operation. If no new data is + * available, the previous values will be returned again. If no data + * is available at all (e.g. measurement not running for at least one + * second), all values will be at their upper limit (0xFFFF for `uint16`, + * 0x7FFF for `int16`). + * + * Supported sensors: SEN54 (no NOx), SEN55 + * + * @param rawHumidity Value is scaled with factor 100: RH [%] = value / 100 + * Note: If this value is unknown, 0x7FFF is returned.* + * + * @param rawTemperature Value is scaled with factor 200: + * T [°C] = value / 200 + * Note: If this value is unknown, 0x7FFF is returned.* + * + * @param rawVoc Raw measured VOC ticks without scale factor. + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param rawNox Raw measured NOx ticks without scale factor. + * Note: If this value is unknown, which is the case for SEN54, + * 0x7FFF is returned. During the first 10..11 seconds after power-on + * or device reset, this value will be 0x7FFF as well.* + * + * @return 0 on success, an error code otherwise + */ + uint16_t readMeasuredRawValues(int16_t& rawHumidity, + int16_t& rawTemperature, uint16_t& rawVoc, + uint16_t& rawNox); + + /** + * readMeasuredValuesSen50() - Returns the measured values for SEN50. + * + * The command 0x0202 \"Read Data Ready\" can be used to check if new + * data is available since the last read operation. If no new data is + * available, the previous values will be returned again. If no data is + * available at all (e.g. measurement not running for at least one + * second), all values will be NAN. + * + * @param massConcentrationPm1p0 PM1.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm2p5 PM2.5 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm4p0 PM4.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm10p0 PM10.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @return 0 on success, an error code otherwise + */ + uint16_t readMeasuredValuesSen50(float& massConcentrationPm1p0, + float& massConcentrationPm2p5, + float& massConcentrationPm4p0, + float& massConcentrationPm10p0); + + /** + * readMeasuredPmValues() - Returns the measured particulate matter values. + * + * The command 0x0202 \"Read Data Ready\" can be used to check if new + * data is available since the last read operation. If no new data is + * available, the previous values will be returned again. If no data + * is available at all (e.g. measurement not running for at least one + * second), all values will be NAN. + * + * @param massConcentrationPm1p0 PM1.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm2p5 PM2.5 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm4p0 PM4.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param massConcentrationPm10p0 PM10.0 [µg/m³] + * Note: If this value is unknown, NAN is returned.* + * + * @param numberConcentrationPm0p5 PM0.5 [#/cm³] + * Note: If this value is unknown, NAN is returned.* + * + * @param numberConcentrationPm1p0 PM1.0 [#/cm³] + * Note: If this value is unknown, NAN is returned.* + * + * @param numberConcentrationPm2p5 PM2.5 [#/cm³] + * Note: If this value is unknown, NAN is returned.* + * + * @param numberConcentrationPm4p0 PM4.0 [#/cm³] + * Note: If this value is unknown, NAN is returned.* + * + * @param numberConcentrationPm10p0 PM10.0 [#/cm³] + * Note: If this value is unknown, NAN is returned.* + * + * @param typicalParticleSize Size [µm] + * Note: If this value is unknown, NAN is returned.* + * + * @return 0 on success, an error code otherwise + */ + uint16_t readMeasuredPmValues( + float& massConcentrationPm1p0, float& massConcentrationPm2p5, + float& massConcentrationPm4p0, float& massConcentrationPm10p0, + float& numberConcentrationPm0p5, float& numberConcentrationPm1p0, + float& numberConcentrationPm2p5, float& numberConcentrationPm4p0, + float& numberConcentrationPm10p0, float& typicalParticleSize); + + /** + * readMeasuredPmValuesAsIntegers() - Returns the measured particulate + * matter values. + * + * The command 0x0202 \"Read Data Ready\" can be used to check if new + * data is available since the last read operation. If no new data is + * available, the previous values will be returned again. If no data + * is available at all (e.g. measurement not running for at least one + * second), all values will be 0xFFFF. + * + * @param massConcentrationPm1p0 Value is scaled with factor 10: + * PM1.0 [µg/m³] = value / 1 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param massConcentrationPm2p5 Value is scaled with factor 10: + * PM2.5 [µg/m³] = value / 1 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param massConcentrationPm4p0 Value is scaled with factor 10: + * PM4.0 [µg/m³] = value / 1 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param massConcentrationPm10p0 Value is scaled with factor 10: + * PM10.0 [µg/m³] = value / 1 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param numberConcentrationPm0p5 Value is scaled with factor 10: + * PM0.5 [#/cm³] = value / 1 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param numberConcentrationPm1p0 Value is scaled with factor 10: + * PM1.0 [#/cm³] = value / 1 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param numberConcentrationPm2p5 Value is scaled with factor 10: + * PM2.5 [#/cm³] = value / 1 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param numberConcentrationPm4p0 Value is scaled with factor 10: + * PM4.0 [#/cm³] = value / 1 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param numberConcentrationPm10p0 Value is scaled with factor 10: + * PM10.0 [#/cm³] = value / 10 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @param typicalParticleSize Value is scaled with factor 1000: + * Size [µm] = value / 1000 + * Note: If this value is unknown, 0xFFFF is returned.* + * + * @return 0 on success, an error code otherwise + */ + uint16_t readMeasuredPmValuesAsIntegers( + uint16_t& massConcentrationPm1p0, uint16_t& massConcentrationPm2p5, + uint16_t& massConcentrationPm4p0, uint16_t& massConcentrationPm10p0, + uint16_t& numberConcentrationPm0p5, uint16_t& numberConcentrationPm1p0, + uint16_t& numberConcentrationPm2p5, uint16_t& numberConcentrationPm4p0, + uint16_t& numberConcentrationPm10p0, uint16_t& typicalParticleSize); + + /** + * startFanCleaning() - Starts the fan cleaning manually. The \"data + * ready\"-flag will be cleared immediately and during the next few seconds, + * no new measurement results will be available (old values will be + * returned). Once the cleaning is finished, the \"data ready\"-flag will be + * set and new measurement results will be available. + * + * When executing this command while cleaning is already active, the + * command does nothing. + * + * If you stop the measurement while fan cleaning is active, the cleaning + * will be aborted immediately. + * + * @note This command is only available in measure mode with PM measurement + * enabled, i.e. only if the fan is already running. In any other state, + * this command does nothing. + * + * @return 0 on success, an error code otherwise + */ + uint16_t startFanCleaning(void); + + /** + * setTemperatureOffsetSimple() - Sets the temperature offset parameter + * in degrees celsius for the device, while leaving the other parameters at + * their default setting. + * + * Supported sensors: SEN54, SEN55 + * + * @param tempOffset Constant temperature offset in degrees celsius. + * The default value is 0. + * + * @return 0 on success, an error code otherwise + */ + uint16_t setTemperatureOffsetSimple(float tempOffset); + + /** + * getTemperatureOffsetSimple() - Gets the temperature offset parameter + * in degrees celsius from the device. + * @note The other parameters, such as slope and time constant may differ + * from the default values, if they were previously set using + * `setTemperatureOffsetParameters`. + * + * Supported sensors: SEN54, SEN55 + * + * @param tempOffset Constant temperature offset in degrees celsius. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getTemperatureOffsetSimple(float& tempOffset); + + /** + * setTemperatureOffsetParameters() - Sets the temperature offset parameters + * for the device. + * + * Supported sensors: SEN54, SEN55 + * + * @param tempOffset Constant temperature offset scaled with factor 200 (T + * [°C] = value / 200). The default value is 0. + * + * @param slope Normalized temperature offset slope scaled with factor 10000 + * (applied factor = value / 10000). The default value is 0. + * + * @param timeConstant Time constant [s] how fast the new slope and offset + * will be applied. After the specified value in seconds, 63% of the new + * slope and offset are applied. A time constant of zero means the new + * values will be applied immediately (within the next measure interval of 1 + * second). + * + * @return 0 on success, an error code otherwise + */ + uint16_t setTemperatureOffsetParameters(int16_t tempOffset, int16_t slope, + uint16_t timeConstant); + + /** + * getTemperatureOffsetParameters() - Gets the temperature offset parameters + * from the device. + * + * Supported sensors: SEN54, SEN55 + * + * @param tempOffset Constant temperature offset scaled with factor 200 (T + * [°C] = value / 200). + * + * @param slope Normalized temperature offset slope scaled with factor 10000 + * (applied factor = value / 10000). + * + * @param timeConstant Time constant [s] how fast the slope and offset are + * applied. After the specified value in seconds, 63% of the new slope and + * offset are applied. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getTemperatureOffsetParameters(int16_t& tempOffset, int16_t& slope, + uint16_t& timeConstant); + + /** + * setWarmStartParameter() - Sets the warm start parameter for the device. + * + * Supported sensors: SEN54, SEN55 + * + * @note This parameter can be changed in any state of the device (and the + * getter immediately returns the new value), but it is applied only the + * next time starting a measurement, i.e. when sending a \"Start + * Measurement\" command! So the parameter needs to be set *before* a + * warm-start measurement is started. + * + * @param warmStart Warm start behavior as a value in the range from 0 (cold + * start) to 65535 (warm start). The default value is 0. + * + * @return 0 on success, an error code otherwise + */ + uint16_t setWarmStartParameter(uint16_t warmStart); + + /** + * getWarmStartParameter() - Gets the warm start parameter from the device. + * + * Supported sensors: SEN54, SEN55 + * + * @param warmStart Warm start behavior as a value in the range from 0 (cold + * start) to 65535 (warm start). + * + * @return 0 on success, an error code otherwise + */ + uint16_t getWarmStartParameter(uint16_t& warmStart); + + /** + * setVocAlgorithmTuningParameters() - Sets the tuning parameters of the VOC + * algorithm. + * + * Supported sensors: SEN54, SEN55 + * + * @note This command is available only in idle mode. In measure mode, this + * command has no effect. In addition, it has no effect if at least one + * parameter is outside the specified range. + * + * @param indexOffset VOC index representing typical (average) conditions. + * Allowed values are in range 1..250. The default value is 100. + * + * @param learningTimeOffsetHours Time constant to estimate the VOC + * algorithm offset from the history in hours. Past events will be forgotten + * after about twice the learning time. Allowed values are in range 1..1000. + * The default value is 12 hours. + * + * @param learningTimeGainHours Time constant to estimate the VOC algorithm + * gain from the history in hours. Past events will be forgotten after about + * twice the learning time. Allowed values are in range 1..1000. The default + * value is 12 hours. + * + * @param gatingMaxDurationMinutes Maximum duration of gating in minutes + * (freeze of estimator during high VOC index signal). Set to zero to + * disable the gating. Allowed values are in range 0..3000. The default + * value is 180 minutes. + * + * @param stdInitial Initial estimate for standard deviation. Lower value + * boosts events during initial learning period, but may result in larger + * device-to-device variations. Allowed values are in range 10..5000. The + * default value is 50. + * + * @param gainFactor Gain factor to amplify or to attenuate the VOC index + * output. Allowed values are in range 1..1000. The default value is 230. + * + * @return 0 on success, an error code otherwise + */ + uint16_t setVocAlgorithmTuningParameters(int16_t indexOffset, + int16_t learningTimeOffsetHours, + int16_t learningTimeGainHours, + int16_t gatingMaxDurationMinutes, + int16_t stdInitial, + int16_t gainFactor); + + /** + * getVocAlgorithmTuningParameters() - Gets the currently set tuning + * parameters of the VOC algorithm. + * + * Supported sensors: SEN54, SEN55 + * + * @param indexOffset VOC index representing typical (average) conditions. + * + * @param learningTimeOffsetHours Time constant to estimate the VOC + * algorithm offset from the history in hours. Past events will be forgotten + * after about twice the learning time. + * + * @param learningTimeGainHours Time constant to estimate the VOC algorithm + * gain from the history in hours. Past events will be forgotten after about + * twice the learning time. + * + * @param gatingMaxDurationMinutes Maximum duration of gating in minutes + * (freeze of estimator during high VOC index signal). Zero disables the + * gating. + * + * @param stdInitial Initial estimate for standard deviation. Lower value + * boosts events during initial learning period, but may result in larger + * device-to-device variations. + * + * @param gainFactor Gain factor to amplify or to attenuate the VOC index + * output. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getVocAlgorithmTuningParameters(int16_t& indexOffset, + int16_t& learningTimeOffsetHours, + int16_t& learningTimeGainHours, + int16_t& gatingMaxDurationMinutes, + int16_t& stdInitial, + int16_t& gainFactor); + + /** + * setNoxAlgorithmTuningParameters() - Sets the tuning parameters of the NOx + * algorithm. + * + * Supported sensors: SEN55 + * + * @note This command is available only in idle mode. In measure mode, this + * command has no effect. In addition, it has no effect if at least one + * parameter is outside the specified range. + * + * @param indexOffset NOx index representing typical (average) conditions. + * Allowed values are in range 1..250. The default value is 1. + * + * @param learningTimeOffsetHours Time constant to estimate the NOx + * algorithm offset from the history in hours. Past events will be forgotten + * after about twice the learning time. Allowed values are in range 1..1000. + * The default value is 12 hours. + * + * @param learningTimeGainHours The time constant to estimate the NOx + * algorithm gain from the history has no impact for NOx. This parameter is + * still in place for consistency reasons with the VOC tuning parameters + * command. This parameter must always be set to 12 hours. + * + * @param gatingMaxDurationMinutes Maximum duration of gating in minutes + * (freeze of estimator during high NOx index signal). Set to zero to + * disable the gating. Allowed values are in range 0..3000. The default + * value is 720 minutes. + * + * @param stdInitial The initial estimate for standard deviation parameter + * has no impact for NOx. This parameter is still in place for consistency + * reasons with the VOC tuning parameters command. This parameter must + * always be set to 50. + * + * @param gainFactor Gain factor to amplify or to attenuate the NOx index + * output. Allowed values are in range 1..1000. The default value is 230. + * + * @return 0 on success, an error code otherwise + */ + uint16_t setNoxAlgorithmTuningParameters(int16_t indexOffset, + int16_t learningTimeOffsetHours, + int16_t learningTimeGainHours, + int16_t gatingMaxDurationMinutes, + int16_t stdInitial, + int16_t gainFactor); + + /** + * getNoxAlgorithmTuningParameters() - Gets the currently set tuning + * parameters of the NOx algorithm. + * + * Supported sensors: SEN55 + * + * @param indexOffset NOx index representing typical (average) conditions. + * + * @param learningTimeOffsetHours Time constant to estimate the NOx + * algorithm offset from the history in hours. Past events will be forgotten + * after about twice the learning time. + * + * @param learningTimeGainHours The time constant to estimate the NOx + * algorithm gain from the history has no impact for NOx. This parameter is + * still in place for consistency reasons with the VOC tuning parameters + * command. + * + * @param gatingMaxDurationMinutes Maximum duration of gating in minutes + * (freeze of estimator during high NOx index signal). Zero disables the + * gating. + * + * @param stdInitial The initial estimate for standard deviation has no + * impact for NOx. This parameter is still in place for consistency reasons + * with the VOC tuning parameters command. + * + * @param gainFactor Gain factor to amplify or to attenuate the NOx index + * output. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getNoxAlgorithmTuningParameters(int16_t& indexOffset, + int16_t& learningTimeOffsetHours, + int16_t& learningTimeGainHours, + int16_t& gatingMaxDurationMinutes, + int16_t& stdInitial, + int16_t& gainFactor); + + /** + * setRhtAccelerationMode() - Sets the RH/T acceleration mode. + * + * Supported sensors: SEN54, SEN55 + * + * @note This parameter can be changed in any state of the device (and the + * getter immediately returns the new value), but it is applied only the + * next time starting a measurement, i.e. when sending a \"Start + * Measurement\" command. So the parameter needs to be set *before* a new + * measurement is started. + * + * @param mode The new RH/T acceleration mode. + * + * @return 0 on success, an error code otherwise + */ + uint16_t setRhtAccelerationMode(uint16_t mode); + + /** + * getRhtAccelerationMode() - Gets the RH/T acceleration mode. + * + * Supported sensors: SEN54, SEN55 + * + * @param mode The current RH/T acceleration mode. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getRhtAccelerationMode(uint16_t& mode); + + /** + * setVocAlgorithmState() - Sets the VOC algorithm state previously received + * with the \"Get VOC Algorithm State\" command. + * + * Supported sensors: SEN54, SEN55 + * + * @note This command is only available in idle mode and the state will be + * applied only once when starting the next measurement. Any further + * measurements (i.e. when stopping and restarting the measure mode) will + * reset the state to initial values. In measure mode, this command has no + * effect. + * + * @param state VOC algorithm state to restore. + * + * @return 0 on success, an error code otherwise + */ + uint16_t setVocAlgorithmState(const uint8_t state[], uint8_t stateSize); + + /** + * getVocAlgorithmState() - Gets the current VOC algorithm state. This data + * can be used to restore the state with the \"Set VOC Algorithm State\" + * command after a short power cycle or device reset. + * + * This command can be used either in measure mode or in idle mode + * (which will then return the state at the time when the measurement + * was stopped). In measure mode, the state can be read each measure + * interval to always have the latest state available, even in case of + * a sudden power loss. + * + * Supported sensors: SEN54, SEN55 + * + * @param state Current VOC algorithm state. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getVocAlgorithmState(uint8_t state[], uint8_t stateSize); + + /** + * setFanAutoCleaningInterval() - Sets the fan auto cleaning interval for + * the device. + * + * @param interval Fan auto cleaning interval [s]. Set to zero to disable + * auto cleaning. + * + * @return 0 on success, an error code otherwise + */ + uint16_t setFanAutoCleaningInterval(uint32_t interval); + + /** + * getFanAutoCleaningInterval() - Gets the fan auto cleaning interval from + * the device. + * + * @param interval Fan auto cleaning interval [s]. Zero means auto cleaning + * is disabled. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getFanAutoCleaningInterval(uint32_t& interval); + + /** + * getProductName() - Gets the product name from the device. + * + * @param productName Null-terminated ASCII string containing the product + * name. Up to 32 characters can be read from the device. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getProductName(unsigned char productName[], + uint8_t productNameSize); + + /** + * getSerialNumber() - Gets the serial number from the device. + * + * @param serialNumber Null-terminated ASCII string containing the serial + * number. Up to 32 characters can be read from the device. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getSerialNumber(unsigned char serialNumber[], + uint8_t serialNumberSize); + + /** + * getVersion() - Gets the version information for the hardware, firmware + * and communication protocol. + * + * @param firmwareMajor Firmware major version number. + * + * @param firmwareMinor Firmware minor version number. + * + * @param firmwareDebug Firmware debug state. If the debug state is set, the + * firmware is in development. + * + * @param hardwareMajor Hardware major version number. + * + * @param hardwareMinor Hardware minor version number. + * + * @param protocolMajor Protocol major version number. + * + * @param protocolMinor Protocol minor version number. + * + * @param padding Padding byte, ignore this. + * + * @return 0 on success, an error code otherwise + */ + uint16_t getVersion(uint8_t& firmwareMajor, uint8_t& firmwareMinor, + bool& firmwareDebug, uint8_t& hardwareMajor, + uint8_t& hardwareMinor, uint8_t& protocolMajor, + uint8_t& protocolMinor); + + /** + * readDeviceStatus() - Reads the current device status. + * + * Use this command to get detailed information about the device status. + * The device status is encoded in flags. Each device status flag + * represents a single bit in a 32-bit integer value. If more than one + * error is present, the device status register value is the sum of the + * corresponding flag values. For details about the available flags, + * refer to the device status flags documentation. + * + * @note The status flags of type \"Error\" are sticky, i.e. they are not + * cleared automatically even if the error condition no longer exists. So + * they can only be cleared manually with the command 0xD210 \"Read And + * Clear Device Status\" or with a device reset. All other flags are not + * sticky, i.e. they are cleared automatically if the trigger condition + * disappears. + * + * @param deviceStatus Device status (32 flags as an integer value). For + * details, please refer to the device status flags documentation. + * + * @return 0 on success, an error code otherwise + */ + uint16_t readDeviceStatus(uint32_t& deviceStatus); + + /** + * readAndClearDeviceStatus() - Reads the current device status (like + * command 0xD206 \"Read Device Status\") and afterwards clears all flags. + * + * @param deviceStatus Device status (32 flags as an integer value) + * **before** clearing it. For details, please refer to the device status + * flags documentation. + * + * @return 0 on success, an error code otherwise + */ + uint16_t readAndClearDeviceStatus(uint32_t& deviceStatus); + + /** + * deviceReset() - Executes a reset on the device. This has the same effect + * as a power cycle. + * + * @return 0 on success, an error code otherwise + */ + uint16_t deviceReset(void); + + private: + TwoWire* _i2cBus = nullptr; +}; + +#endif /* SENSIRIONI2CSEN5X_H */ diff --git a/tasmota/include/tasmota_configurations.h b/tasmota/include/tasmota_configurations.h index 1ed060c54..bc572e890 100644 --- a/tasmota/include/tasmota_configurations.h +++ b/tasmota/include/tasmota_configurations.h @@ -98,6 +98,7 @@ #define USE_MGS // [I2cDriver17] Enable Xadow and Grove Mutichannel Gas sensor using library Multichannel_Gas_Sensor (+10k code) #define USE_SGP30 // [I2cDriver18] Enable SGP30 sensor (I2C address 0x58) (+1k1 code) #define USE_SGP40 // [I2cDriver69] Enable SGP40 sensor (I2C address 0x59) (+1k4 code) +#define USE_SEN5X // [I2cDriver76] Enable SEN5X sensor (I2C address 0x69) (+3k code) //#define USE_SI1145 // [I2cDriver19] Enable SI1145/46/47 sensor (I2C address 0x60) (+1k code) #define USE_LM75AD // [I2cDriver20] Enable LM75AD sensor (I2C addresses 0x48 - 0x4F) (+0k5 code) //#define USE_APDS9960 // [I2cDriver21] Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code) diff --git a/tasmota/include/tasmota_configurations_ESP32.h b/tasmota/include/tasmota_configurations_ESP32.h index 9360a109c..673c70d49 100644 --- a/tasmota/include/tasmota_configurations_ESP32.h +++ b/tasmota/include/tasmota_configurations_ESP32.h @@ -369,6 +369,7 @@ //#define USE_MGS // [I2cDriver17] Enable Xadow and Grove Mutichannel Gas sensor using library Multichannel_Gas_Sensor (+10k code) //#define USE_SGP30 // [I2cDriver18] Enable SGP30 sensor (I2C address 0x58) (+1k1 code) //#define USE_SGP40 // [I2cDriver69] Enable SGP40 sensor (I2C address 0x59) (+1k4 code) +//#define USE_SEN5X // [I2cDriver76] Enable SEN5X sensor (I2C address 0x69) (+3k code) //#define USE_SI1145 // [I2cDriver19] Enable SI1145/46/47 sensor (I2C address 0x60) (+1k code) //#define USE_LM75AD // [I2cDriver20] Enable LM75AD sensor (I2C addresses 0x48 - 0x4F) (+0k5 code) //#define USE_APDS9960 // [I2cDriver21] Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code) @@ -586,6 +587,7 @@ #define USE_MGS // [I2cDriver17] Enable Xadow and Grove Mutichannel Gas sensor using library Multichannel_Gas_Sensor (+10k code) #define USE_SGP30 // [I2cDriver18] Enable SGP30 sensor (I2C address 0x58) (+1k1 code) #define USE_SGP40 // [I2cDriver69] Enable SGP40 sensor (I2C address 0x59) (+1k4 code) +#define USE_SEN5X // [I2cDriver76] Enable SEN5X sensor (I2C address 0x69) (+3k code) //#define USE_SI1145 // [I2cDriver19] Enable SI1145/46/47 sensor (I2C address 0x60) (+1k code) #define USE_LM75AD // [I2cDriver20] Enable LM75AD sensor (I2C addresses 0x48 - 0x4F) (+0k5 code) //#define USE_APDS9960 // [I2cDriver21] Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 6eee06d05..64b040afc 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -619,6 +619,7 @@ #define MGS_SENSOR_ADDR 0x04 // Default Mutichannel Gas sensor i2c address // #define USE_SGP30 // [I2cDriver18] Enable SGP30 sensor (I2C address 0x58) (+1k1 code) // #define USE_SGP40 // [I2cDriver69] Enable SGP40 sensor (I2C address 0x59) (+1k4 code) +// #define USE_SEN5X // [I2cDriver76] Enable SEN5X sensor (I2C address 0x69) (+3k code) // #define USE_SI1145 // [I2cDriver19] Enable SI1145/46/47 sensor (I2C address 0x60) (+1k code) // #define USE_LM75AD // [I2cDriver20] Enable LM75AD sensor (I2C addresses 0x48 - 0x4F) (+0k5 code) // #define USE_APDS9960 // [I2cDriver21] Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code) diff --git a/tasmota/tasmota_support/support_features.ino b/tasmota/tasmota_support/support_features.ino index 8f52b111e..c1e816293 100644 --- a/tasmota/tasmota_support/support_features.ino +++ b/tasmota/tasmota_support/support_features.ino @@ -870,8 +870,9 @@ void ResponseAppendFeatures(void) #ifdef USE_TUYAMCUBR feature9 |= 0x00004000; // xdrv_65_tuyamcubr.ino #endif - -// feature9 |= 0x00008000; +#if defined(USE_I2C) && defined(USE_SEN5X) + feature9 |= 0x00008000; // xsns_103_sen5x.ino +#endif // feature9 |= 0x00010000; // feature9 |= 0x00020000; diff --git a/tasmota/tasmota_xsns_sensor/xsns_103_sen5x.ino b/tasmota/tasmota_xsns_sensor/xsns_103_sen5x.ino new file mode 100644 index 000000000..720550137 --- /dev/null +++ b/tasmota/tasmota_xsns_sensor/xsns_103_sen5x.ino @@ -0,0 +1,312 @@ +/* + xsns_103_sen5x.ino - SEN5X gas and air quality sensor support for Tasmota + + Copyright (C) 2022 Tyeth Gundry + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef USE_I2C +#ifdef USE_SEN5X +/*********************************************************************************************\ + * SEN5X - Gas (VOC - Volatile Organic Compounds / NOx - Nitrous Oxides) and Particulates (PPM) + * + * Source: Sensirion SEN5X Driver + Example, and Tasmota Driver 98 by Jean-Pierre Deschamps + * Adaption for TASMOTA: Tyeth Gundry + * + * I2C Address: 0x59 +\*********************************************************************************************/ + +#define XSNS_103 103 +#define XI2C_76 76 // See I2CDEVICES.md + +#define SEN5X_ADDRESS 0x69 + +#include +#include +SensirionI2CSen5x *sen5x = nullptr; + +struct SEN5XDATA_s { + bool sen5x_ready; + float abshum; + float massConcentrationPm1p0; + float massConcentrationPm2p5; + float massConcentrationPm4p0; + float massConcentrationPm10p0; + float ambientHumidity; + float ambientTemperature; + float vocIndex; + float noxIndex; +} *SEN5XDATA = nullptr; +/********************************************************************************************/ + +void sen5x_Init(void) +{ + if(!TasmotaGlobal.i2c_enabled){ + DEBUG_SENSOR_LOG(PSTR("I2C Not enabled, so not loading SEN5X driver.")); + return; + } + int usingI2cBus = 0; +#ifdef ESP32 + if (!I2cSetDevice(SEN5X_ADDRESS, 0)) + { + DEBUG_SENSOR_LOG(PSTR("Sensirion SEN5X not found, i2c bus 0")); + if (TasmotaGlobal.i2c_enabled_2 ){ + + if(!I2cSetDevice(SEN5X_ADDRESS, 1)){ + DEBUG_SENSOR_LOG(PSTR("Sensirion SEN5X not found, i2c bus 1")); + return; + } + usingI2cBus = 1; + } + else { + return; + } + } +#else + if (!I2cSetDevice(SEN5X_ADDRESS)) + { + DEBUG_SENSOR_LOG(PSTR("Sensirion SEN5X not found, i2c bus 0")); + return; + } +#endif + if (SEN5XDATA == nullptr) + SEN5XDATA = (SEN5XDATA_s *)calloc(1, sizeof(struct SEN5XDATA_s)); + SEN5XDATA->sen5x_ready = false; + if(sen5x == nullptr) sen5x = new SensirionI2CSen5x(); + if(usingI2cBus==1){ +#ifdef ESP32 + sen5x->begin(Wire1); +#else + sen5x->begin(Wire); +#endif + } + else { + sen5x->begin(Wire); + } + int error_stop = sen5x->deviceReset(); + if (error_stop != 0) + { + DEBUG_SENSOR_LOG(PSTR("Sensirion SEN5X failed to reset device (I2C Bus %d)"), usingI2cBus); + return; + } + // Wait 1 second for sensors to start recording + 100ms for reset command + delay(1100); + int error_start = sen5x->startMeasurement(); + if (error_start != 0) + { + DEBUG_SENSOR_LOG(PSTR("Sensirion SEN5X failed to start measurement (I2C Bus %d)"), usingI2cBus); + return; + } + SEN5XDATA->sen5x_ready = true; + I2cSetActiveFound(SEN5X_ADDRESS, "SEN5X", usingI2cBus); + DEBUG_SENSOR_LOG(PSTR("Sensirion SEN5X found, i2c bus %d"), usingI2cBus); +} + +// #define POW_FUNC pow +#define POW_FUNC FastPrecisePow + +float sen5x_AbsoluteHumidity(float temperature, float humidity) +{ + // taken from https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/ + // precision is about 0.1°C in range -30 to 35°C + // August-Roche-Magnus 6.1094 exp(17.625 x T)/(T + 243.04) + // Buck (1981) 6.1121 exp(17.502 x T)/(T + 240.97) + // reference https://www.eas.ualberta.ca/jdwilson/EAS372_13/Vomel_CIRES_satvpformulae.html + float temp = NAN; + const float mw = 18.01534f; // molar mass of water g/mol + const float r = 8.31447215f; // Universal gas constant J/mol/K + + if (isnan(temperature) || isnan(humidity)) + { + return NAN; + } + + temp = POW_FUNC(2.718281828f, (17.67f * temperature) / (temperature + 243.5f)); + + // return (6.112 * temp * humidity * 2.1674) / (273.15 + temperature); //simplified version + return (6.112f * temp * humidity * mw) / ((273.15f + temperature) * r); // long version +} + +#define SAVE_PERIOD 30 + +void SEN5XUpdate(void) // Perform every second to ensure proper operation of the baseline compensation algorithm +{ + uint16_t error; + char errorMessage[256]; + DEBUG_SENSOR_LOG(PSTR("Running readMeasuredValues for SEN5X...")); + + error = sen5x->readMeasuredValues( + SEN5XDATA->massConcentrationPm1p0, SEN5XDATA->massConcentrationPm2p5, SEN5XDATA->massConcentrationPm4p0, + SEN5XDATA->massConcentrationPm10p0, SEN5XDATA->ambientHumidity, SEN5XDATA->ambientTemperature, SEN5XDATA->vocIndex, + SEN5XDATA->noxIndex); + + if (error) + { + AddLog(LOG_LEVEL_DEBUG, PSTR("Failed to retrieve SEN5X readings.")); + #ifdef DEBUG_TASMOTA_SENSOR + DEBUG_SENSOR_LOG(PSTR("Error trying to execute readMeasuredValues(): \n")); + errorToString(error, errorMessage, 256); + DEBUG_SENSOR_LOG(errorMessage); + #endif + } + else + { +#ifdef DEBUG_TASMOTA_SENSOR + DEBUG_SENSOR_LOG(PSTR("SEN5x readings:-")); + DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm1p0: %f\n"), SEN5XDATA->massConcentrationPm1p0); + DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm2p5: %f\n"), SEN5XDATA->massConcentrationPm2p5); + DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm4p0: %f\n"), SEN5XDATA->massConcentrationPm4p0); + DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm10p0: %f\n"), SEN5XDATA->massConcentrationPm10p0); + if (isnan(SEN5XDATA->ambientHumidity)) + { + DEBUG_SENSOR_LOG(PSTR("AmbientHumidity: n/a\n")); + } + else + { + DEBUG_SENSOR_LOG(PSTR("AmbientHumidity: %f\n"), SEN5XDATA->ambientHumidity); + } + + if (isnan(SEN5XDATA->ambientTemperature)) + { + DEBUG_SENSOR_LOG(PSTR("AmbientTemperature: n/a\n")); + } + else + { + DEBUG_SENSOR_LOG(PSTR("AmbientTemperature: %f\n"), SEN5XDATA->ambientTemperature); + } + + if (isnan(SEN5XDATA->vocIndex)) + { + DEBUG_SENSOR_LOG(PSTR("VocIndex: n/a\n")); + } + else + { + DEBUG_SENSOR_LOG(PSTR("VocIndex: %f\n"), SEN5XDATA->vocIndex); + } + + if (isnan(SEN5XDATA->noxIndex)) + { + DEBUG_SENSOR_LOG(PSTR("NoxIndex: n/a\n")); + } + else + { + DEBUG_SENSOR_LOG(PSTR("NoxIndex: %f\n"), SEN5XDATA->noxIndex); + } +#endif + } + if (!isnan(SEN5XDATA->ambientTemperature) && SEN5XDATA->ambientHumidity > 0) { + SEN5XDATA->abshum = sen5x_AbsoluteHumidity(SEN5XDATA->ambientTemperature, SEN5XDATA->ambientHumidity); + DEBUG_SENSOR_LOG(PSTR("AbsoluteHumidity: %f\n"), SEN5XDATA->abshum); + } +} + +#ifdef USE_WEBSERVER +const char HTTP_SNS_SEN5X_UNITS[] PROGMEM = "{s}SEN5X %s{m}%.*f %s{e}"; +const char HTTP_SNS_SEN5X_UNITLESS[] PROGMEM = "{s}SEN5X %s{m}%.*f{e}"; +// {s} = , {m} = , {e} = +const char HTTP_SNS_AHUMSEN5X[] PROGMEM = "{s}SEN5X Abs Humidity{m}%s g/m³{e}"; +#endif + +#define D_JSON_AHUM "aHumidity" + +void SEN5XShow(bool json) +{ + if (SEN5XDATA->sen5x_ready) + { + char sen5x_abs_hum[33]; + bool ahum_available = !isnan(SEN5XDATA->ambientTemperature) && (SEN5XDATA->ambientHumidity > 0); + if (ahum_available) + { + // has humidity + temperature + dtostrfd(SEN5XDATA->abshum, 4, sen5x_abs_hum); + } + if (json) + { + ResponseAppend_P(PSTR(",\"SEN5X\":{")); + ResponseAppend_P(PSTR("\"PM1\":%.1f,"), SEN5XDATA->massConcentrationPm1p0); + ResponseAppend_P(PSTR("\"PM2.5\":%.1f,"), SEN5XDATA->massConcentrationPm2p5); + ResponseAppend_P(PSTR("\"PM4\":%.1f,"), SEN5XDATA->massConcentrationPm4p0); + ResponseAppend_P(PSTR("\"PM10\":%.1f,"), SEN5XDATA->massConcentrationPm10p0); + if (!isnan(SEN5XDATA->noxIndex)) + ResponseAppend_P(PSTR("\"NOx\":%.0f,"), SEN5XDATA->noxIndex); + if (!isnan(SEN5XDATA->vocIndex)) + ResponseAppend_P(PSTR("\"VOC\":%.0f,"), SEN5XDATA->vocIndex); + if (!isnan(SEN5XDATA->ambientTemperature)) + ResponseAppendTHD(SEN5XDATA->ambientTemperature, SEN5XDATA->ambientHumidity); + if (ahum_available) + ResponseAppend_P(PSTR(",\"" D_JSON_AHUM "\":%s"), sen5x_abs_hum); + ResponseJsonEnd(); + } + +#ifdef USE_WEBSERVER + + WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "PM1", 1, SEN5XDATA->massConcentrationPm1p0, "μg/m³"); + WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "PM2.5", 1, SEN5XDATA->massConcentrationPm2p5, "μg/m³"); + WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "PM4", 1, SEN5XDATA->massConcentrationPm4p0, "μg/m³"); + WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "PM10", 1, SEN5XDATA->massConcentrationPm10p0, "μg/m³"); + if (!isnan(SEN5XDATA->noxIndex)) + WSContentSend_PD(HTTP_SNS_SEN5X_UNITLESS, "NOx", 0, SEN5XDATA->noxIndex); + if (!isnan(SEN5XDATA->vocIndex)) + WSContentSend_PD(HTTP_SNS_SEN5X_UNITLESS, "VOC", 0, SEN5XDATA->vocIndex); + if (!isnan(SEN5XDATA->ambientTemperature)) + WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "Temperature", 2, SEN5XDATA->ambientTemperature, "°C"); + if (!isnan(SEN5XDATA->ambientHumidity)) + WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "Humidity", 2, SEN5XDATA->ambientHumidity, "%RH"); + if (ahum_available) + WSContentSend_PD(HTTP_SNS_AHUMSEN5X, sen5x_abs_hum); + +#endif + } +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xsns103(uint32_t function) +{ + if (!I2cEnabled(XI2C_76)) + { + return false; + } + + bool result = false; + + if (FUNC_INIT == function) + { + sen5x_Init(); + } + else if (SEN5XDATA != nullptr) + { + switch (function) + { + case FUNC_EVERY_SECOND: + SEN5XUpdate(); + break; + case FUNC_JSON_APPEND: + SEN5XShow(1); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + SEN5XShow(0); + break; +#endif // USE_WEBSERVER + } + } + return result; +} + +#endif // USE_SEN5X +#endif // USE_I2C diff --git a/tools/decode-status.py b/tools/decode-status.py index 843a2d0e8..567d54d90 100755 --- a/tools/decode-status.py +++ b/tools/decode-status.py @@ -290,7 +290,7 @@ a_features = [[ "USE_SGP40","USE_LUXV30B","USE_CANSNIFFER","USE_QMC5883L", "USE_MODBUS_ENERGY","USE_SHELLY_PRO","USE_DALI","USE_BP1658CJ", "USE_DINGTIAN_RELAY","USE_HMC5883L","USE_LD2410","USE_ME007", - "USE_DISPLAY_TM1650","USE_PCA9632","USE_TUYAMCUBR","", + "USE_DISPLAY_TM1650","USE_PCA9632","USE_TUYAMCUBR","USE_SEN5X", "","","","", "","","","", "","","","",