22#include " SensirionCore.h"
33#include < map>
44
5- namespace sensirion ::upt::i2c_autodetect{
5+ namespace sensirion ::upt::i2c_autodetect {
66
7- Sen5x::Sen5x (TwoWire& wire, uint16_t address) :
8- mWire (wire),
9- mAddress {address},
10- mMetadata {core::SEN5X ()} {};
7+ Sen5x::Sen5x (TwoWire& wire, uint16_t address)
8+ : mWire (wire), mAddress {address}, mMetadata {core::SEN5X ()} {};
119
1210uint16_t Sen5x::start () {
1311 mDriver .begin (mWire );
@@ -37,48 +35,41 @@ uint16_t Sen5x::measureAndWrite(MeasurementList& measurements,
3735 return error;
3836 }
3937
40- measurements.emplace_back (mMetadata ,
41- core::SignalType::PM1P0_MICRO_GRAMM_PER_CUBIC_METER,
38+ measurements.emplace_back (
39+ mMetadata , core::SignalType::PM1P0_MICRO_GRAMM_PER_CUBIC_METER,
4240 core::DataPoint{timeStamp, massConcentrationPm1p0});
4341
44- measurements.emplace_back (mMetadata ,
45- core::SignalType::PM2P5_MICRO_GRAMM_PER_CUBIC_METER,
42+ measurements.emplace_back (
43+ mMetadata , core::SignalType::PM2P5_MICRO_GRAMM_PER_CUBIC_METER,
4644 core::DataPoint{timeStamp, massConcentrationPm2p5});
4745
48- measurements.emplace_back (mMetadata ,
49- core::SignalType::PM4P0_MICRO_GRAMM_PER_CUBIC_METER,
46+ measurements.emplace_back (
47+ mMetadata , core::SignalType::PM4P0_MICRO_GRAMM_PER_CUBIC_METER,
5048 core::DataPoint{timeStamp, massConcentrationPm4p0});
5149
52- measurements.emplace_back (mMetadata ,
53- core::SignalType::PM10P0_MICRO_GRAMM_PER_CUBIC_METER,
50+ measurements.emplace_back (
51+ mMetadata , core::SignalType::PM10P0_MICRO_GRAMM_PER_CUBIC_METER,
5452 core::DataPoint{timeStamp, massConcentrationPm10p0});
5553
54+ // Versions 54, 55
55+ if (getDeviceType () == core::SEN54 () or getDeviceType () == core::SEN55 ()) {
5656
57-
58- // Verions 54, 55
59- if (getDeviceType () == core::SEN54 () or
60- getDeviceType () == core::SEN55 ()) {
61-
62- measurements.emplace_back (mMetadata ,
63- core::SignalType::RELATIVE_HUMIDITY_PERCENTAGE,
57+ measurements.emplace_back (
58+ mMetadata , core::SignalType::RELATIVE_HUMIDITY_PERCENTAGE,
6459 core::DataPoint{timeStamp, ambientHumidity});
6560
66- measurements.emplace_back (mMetadata ,
67- core::SignalType::TEMPERATURE_DEGREES_CELSIUS,
61+ measurements.emplace_back (
62+ mMetadata , core::SignalType::TEMPERATURE_DEGREES_CELSIUS,
6863 core::DataPoint{timeStamp, ambientTemperature});
6964
70- measurements.emplace_back (mMetadata ,
71- core::SignalType::VOC_INDEX,
72- core::DataPoint{timeStamp, vocIndex});
73-
65+ measurements.emplace_back (mMetadata , core::SignalType::VOC_INDEX,
66+ core::DataPoint{timeStamp, vocIndex});
7467 }
7568 // Version 55
7669 if (getDeviceType () == core::SEN55 ()) {
7770
78- measurements.emplace_back (mMetadata ,
79- core::SignalType::NOX_INDEX,
80- core::DataPoint{timeStamp, noxIndex});
81-
71+ measurements.emplace_back (mMetadata , core::SignalType::NOX_INDEX,
72+ core::DataPoint{timeStamp, noxIndex});
8273 }
8374 return HighLevelError::NoError;
8475}
@@ -97,14 +88,14 @@ uint16_t Sen5x::initializationStep() {
9788 }
9889
9990 // Get sensor unique ID (last 8 chars of serial no.)
100- uint8_t serialNumberSize = 32 ;
91+ constexpr uint8_t serialNumberSize = 32 ;
10192 unsigned char serialNumber[serialNumberSize];
10293 error = mDriver .getSerialNumber (serialNumber, serialNumberSize);
10394 if (error) {
10495 return error;
10596 }
106- size_t actualLen = strlen (( const char *) serialNumber);
107- size_t numBytesToCopy = min (8 , ( int ) actualLen);
97+ size_t actualLen = strlen (reinterpret_cast < const char *>( serialNumber) );
98+ size_t numBytesToCopy = min (8 , static_cast < int >( actualLen) );
10899 uint64_t sensorID = 0 ;
109100 for (int i = 0 ; i < numBytesToCopy - 1 ; i++) {
110101 sensorID |= (serialNumber[actualLen - numBytesToCopy - 1 + i]);
@@ -139,7 +130,7 @@ size_t Sen5x::getNumberOfDataPoints() const {
139130 {core::SEN55 (), 8 },
140131 };
141132 const auto iter = deviceToSignalCount.find (getDeviceType ());
142- if (iter == deviceToSignalCount.cend ()){
133+ if (iter == deviceToSignalCount.cend ()) {
143134 return 0 ;
144135 }
145136 return iter->second ;
@@ -150,21 +141,25 @@ unsigned long Sen5x::getMinimumMeasurementIntervalMs() const {
150141}
151142
152143bool Sen5x::probe () {
153- return _determineSensorVersion () == HighLevelError::NoError;
144+ // reset the device before probing to ensure a clean state
145+ mDriver .deviceReset ();
146+
147+ return _determineSensorVersion () == NoError;
154148}
155149
156150void * Sen5x::getDriver () {
157- return reinterpret_cast < void *>( &mDriver ) ;
151+ return &mDriver ;
158152}
159153
160154uint8_t Sen5x::getI2CAddress () const {
161155 return mAddress ;
162156};
163157
164158uint16_t Sen5x::_determineSensorVersion () {
165- uint8_t sensorNameSize = 32 ;
159+ constexpr uint8_t sensorNameSize = 32 ;
166160 unsigned char sensorNameStr[sensorNameSize];
167- uint16_t error = mDriver .getProductName (sensorNameStr, sensorNameSize);
161+ const uint16_t error =
162+ mDriver .getProductName (sensorNameStr, sensorNameSize);
168163
169164 if (error) {
170165 return error;
@@ -183,4 +178,4 @@ uint16_t Sen5x::_determineSensorVersion() {
183178 }
184179 return 0 ;
185180}
186- } // namespace sensirion::upt::i2c_autodetect
181+ } // namespace sensirion::upt::i2c_autodetect
0 commit comments