Skip to content

Commit d5ecc08

Browse files
authored
Merge pull request #54 from Sensirion/fix-get-sensor-variant
Fix get sensor variant
2 parents b33daed + 16b7422 commit d5ecc08

File tree

4 files changed

+31
-16
lines changed

4 files changed

+31
-16
lines changed

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
44
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
55

6-
## [Unreleased]
6+
## [Unreleased]
7+
8+
### Fixed
9+
10+
- Wrong computation of sensor variant in method getSensorVariant
11+
712

813
## [1.0.0] - 2025-1-30
914

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ support it are listed in the API description.
2020
| ------------- | -------------- |
2121
|[SCD40](https://sensirion.com/products/catalog/SCD40)| **0x62**|
2222
|[SCD41](https://sensirion.com/products/catalog/SCD41)| **0x62**|
23+
|[SCD43](https://sensirion.com/products/catalog/SCD43)| **0x62**|
2324

2425
The following instructions and examples use a *SCD41*.
2526

src/SensirionI2cScd4x.cpp

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -165,24 +165,27 @@ int16_t SensirionI2cScd4x::getDataReadyStatus(bool& arg0) {
165165

166166
int16_t
167167
SensirionI2cScd4x::getSensorVariant(SCD4xSensorVariant& aSensorVariant) {
168+
SCD4xSensorVariant retVal = SCD4X_SENSOR_VARIANT_MASK;
168169
uint16_t rawSensorVariant = 0;
170+
uint16_t mySensorVariant = 0;
169171
int16_t localError = 0;
172+
retVal = SCD4X_SENSOR_VARIANT_MASK;
173+
uint16_t mask = (uint16_t)(retVal);
170174
localError = getSensorVariantRaw(rawSensorVariant);
171175
if (localError != NO_ERROR) {
172176
return localError;
173177
}
174-
uint16_t variant = (uint16_t)(rawSensorVariant & 4);
175-
if (variant == 0) {
176-
aSensorVariant = SCD4X_SENSOR_VARIANT_SCD40;
177-
;
178-
return localError;
179-
} else if (variant == 1) {
180-
aSensorVariant = SCD4X_SENSOR_VARIANT_SCD41;
181-
;
182-
return localError;
178+
mySensorVariant = (uint16_t)(rawSensorVariant & mask);
179+
if (mySensorVariant == (uint16_t)(SCD4X_SENSOR_VARIANT_SCD40)) {
180+
retVal = SCD4X_SENSOR_VARIANT_SCD40;
181+
} else if (mySensorVariant == (uint16_t)(SCD4X_SENSOR_VARIANT_SCD41)) {
182+
retVal = SCD4X_SENSOR_VARIANT_SCD41;
183+
} else if (mySensorVariant == (uint16_t)(SCD4X_SENSOR_VARIANT_SCD42)) {
184+
retVal = SCD4X_SENSOR_VARIANT_SCD42;
185+
} else if (mySensorVariant == (uint16_t)(SCD4X_SENSOR_VARIANT_SCD43)) {
186+
retVal = SCD4X_SENSOR_VARIANT_SCD43;
183187
}
184-
aSensorVariant = SCD4X_SENSOR_VARIANT_UNKNOWN;
185-
;
188+
aSensorVariant = retVal;
186189
return localError;
187190
}
188191

@@ -555,7 +558,8 @@ int16_t SensirionI2cScd4x::getSerialNumber(uint64_t& serialNumber) {
555558
if (localError != NO_ERROR) {
556559
return localError;
557560
}
558-
localError |= rxFrame.getInteger(reinterpret_cast<uint8_t*>(&serialNumber), LongInteger, 6);
561+
localError |= rxFrame.getInteger(reinterpret_cast<uint8_t*>(&serialNumber),
562+
LongInteger, 6);
559563
return localError;
560564
}
561565

src/SensirionI2cScd4x.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
#define SCD40_I2C_ADDR_62 0x62
4646
#define SCD41_I2C_ADDR_62 0x62
47+
#define SCD43_I2C_ADDR_62 0x62
4748

4849
typedef enum {
4950
SCD4X_START_PERIODIC_MEASUREMENT_CMD_ID = 0x21b1,
@@ -79,9 +80,13 @@ typedef enum {
7980
} SCD4xCmdId;
8081

8182
typedef enum {
82-
SCD4X_SENSOR_VARIANT_UNKNOWN = 0,
83-
SCD4X_SENSOR_VARIANT_SCD40 = 1,
84-
SCD4X_SENSOR_VARIANT_SCD41 = 2,
83+
84+
SCD4X_SENSOR_VARIANT_MASK = 0x00F000,
85+
SCD4X_SENSOR_VARIANT_SCD40 = 0x000000,
86+
SCD4X_SENSOR_VARIANT_SCD41 = 0x001000,
87+
SCD4X_SENSOR_VARIANT_SCD42 = 0x002000,
88+
SCD4X_SENSOR_VARIANT_SCD43 = 0x005000,
89+
8590
} SCD4xSensorVariant;
8691

8792
class SensirionI2cScd4x {

0 commit comments

Comments
 (0)