Skip to content

Commit 5d8947b

Browse files
committed
bsec: cache everything on successfull run()
1 parent aeb9f6b commit 5d8947b

8 files changed

+54
-35
lines changed

src/AirQualityClass.cpp

+12-12
Original file line numberDiff line numberDiff line change
@@ -115,50 +115,50 @@ float AirQualityClass::readVOC()
115115
{
116116
if (_revision == BOARD_REVISION_2) {
117117
if(iaqSensor->run()){
118-
breathVocEquivalent = iaqSensor->breathVocEquivalent;
118+
mkr_iot_carrier_rev2::cache();
119119
}
120120
}
121-
return breathVocEquivalent;
121+
return mkr_iot_carrier_rev2::breathVocEquivalent;
122122
}
123123

124124
float AirQualityClass::readGasResistor()
125125
{
126126
if (_revision == BOARD_REVISION_2) {
127127
if(iaqSensor->run()){
128-
gasResistance = iaqSensor->gasResistance;
128+
mkr_iot_carrier_rev2::cache();
129129
}
130130
}
131-
return gasResistance;
131+
return mkr_iot_carrier_rev2::gasResistance;
132132
}
133133

134134
float AirQualityClass::readIAQ()
135135
{
136136
if (_revision == BOARD_REVISION_2) {
137137
if(iaqSensor->run()){
138-
iaq = iaqSensor->iaq;
138+
mkr_iot_carrier_rev2::cache();
139139
}
140140
}
141-
return iaq;
141+
return mkr_iot_carrier_rev2::iaq;
142142
}
143143

144144
float AirQualityClass::readIAQAccuracy()
145145
{
146146
if (_revision == BOARD_REVISION_2) {
147147
if(iaqSensor->run()){
148-
iaqAccuracy = iaqSensor->iaqAccuracy;
148+
mkr_iot_carrier_rev2::cache();
149149
}
150150
}
151-
return iaqAccuracy;
151+
return mkr_iot_carrier_rev2::iaqAccuracy;
152152
}
153153

154154
float AirQualityClass::readStaticIAQ()
155155
{
156156
if (_revision == BOARD_REVISION_2) {
157157
if(iaqSensor->run()){
158-
staticIaq = iaqSensor->staticIaq;
158+
mkr_iot_carrier_rev2::cache();
159159
}
160160
}
161-
return staticIaq;
161+
return mkr_iot_carrier_rev2::staticIaq;
162162
}
163163

164164

@@ -167,9 +167,9 @@ float AirQualityClass::readCO2()
167167
float reading = 0.0;
168168
if (_revision == BOARD_REVISION_2) {
169169
if(iaqSensor->run()){
170-
co2Equivalent = iaqSensor->co2Equivalent;
170+
mkr_iot_carrier_rev2::cache();
171171
}
172172
}
173-
return co2Equivalent;
173+
return mkr_iot_carrier_rev2::co2Equivalent;
174174
}
175175

src/AirQualityClass.h

-6
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@ class AirQualityClass {
2525
private:
2626
// Helper functions declarations
2727
int checkIaqSensorStatus(void);
28-
float breathVocEquivalent = 0.0f;
29-
float gasResistance = 0.0f;
30-
float iaq = 0.0f;
31-
float iaqAccuracy = 0.0f;
32-
float staticIaq = 0.0f;
33-
float co2Equivalent = 0.0f;
3428

3529
private:
3630

src/Arduino_MKRIoTCarrier.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ bool CARRIER_CASE = false;
2626

2727
mkr_iot_carrier_rev2 mkr_iot_carrier_rev2_instance;
2828
Bsec* mkr_iot_carrier_rev2::iaqSensor;
29+
float mkr_iot_carrier_rev2::breathVocEquivalent;
30+
float mkr_iot_carrier_rev2::gasResistance;
31+
float mkr_iot_carrier_rev2::iaq;
32+
float mkr_iot_carrier_rev2::iaqAccuracy;
33+
float mkr_iot_carrier_rev2::staticIaq;
34+
float mkr_iot_carrier_rev2::co2Equivalent;
35+
float mkr_iot_carrier_rev2::temperature;
36+
float mkr_iot_carrier_rev2::pressure;
37+
float mkr_iot_carrier_rev2::humidity;
2938

3039
MKRIoTCarrier::MKRIoTCarrier() {
3140
}

src/EnvClass.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,12 @@ float EnvClass::readTemperature(int units /*= CELSIUS*/)
109109
{
110110
if (_revision == BOARD_REVISION_2) {
111111
if(iaqSensor->run()){
112-
temperature = iaqSensor->temperature;
112+
mkr_iot_carrier_rev2::cache();
113113
}
114114
if (units == FAHRENHEIT){
115-
return (temperature * 9.0 / 5.0) + 32.0;
115+
return (mkr_iot_carrier_rev2::temperature * 9.0 / 5.0) + 32.0;
116116
} else {
117-
return temperature;
117+
return mkr_iot_carrier_rev2::temperature;
118118
}
119119
}
120120
return HTS221->readTemperature(units);
@@ -124,9 +124,9 @@ float EnvClass::readHumidity()
124124
{
125125
if (_revision == BOARD_REVISION_2) {
126126
if(iaqSensor->run()){
127-
humidity = iaqSensor->humidity;
127+
mkr_iot_carrier_rev2::cache();
128128
}
129-
return humidity;
129+
return mkr_iot_carrier_rev2::humidity;
130130
}
131131
return HTS221->readHumidity();
132132
}

src/EnvClass.h

-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ class EnvClass {
2828

2929
int (*board_revision)(void);
3030
int _revision;
31-
float temperature = 0.0f;
32-
float humidity = 0.0f;
3331
};
3432

3533
#endif //_ENVCLASS_H_INCLUDED

src/MKRIoTCarrierDefines.h

+20
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,26 @@ class mkr_iot_carrier_rev2 {
8484
GROVE_AN1 = A0,
8585
GROVE_AN2 = A6,
8686
};
87+
static void cache() {
88+
breathVocEquivalent = iaqSensor->breathVocEquivalent;
89+
gasResistance = iaqSensor->gasResistance;
90+
iaq = iaqSensor->iaq;
91+
iaqAccuracy = iaqSensor->iaqAccuracy;
92+
staticIaq = iaqSensor->staticIaq;
93+
co2Equivalent = iaqSensor->co2Equivalent;
94+
temperature = iaqSensor->temperature;
95+
pressure = iaqSensor->pressure;
96+
humidity = iaqSensor->humidity;
97+
};
98+
static float breathVocEquivalent;
99+
static float gasResistance;
100+
static float iaq;
101+
static float iaqAccuracy;
102+
static float staticIaq;
103+
static float co2Equivalent;
104+
static float temperature;
105+
static float pressure;
106+
static float humidity;
87107
};
88108

89109
extern mkr_iot_carrier_rev2 mkr_iot_carrier_rev2_instance;

src/PressureClass.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,15 @@ float PressureClass::readPressure(int units)
109109
{
110110
if (_revision == BOARD_REVISION_2) {
111111
if(iaqSensor->run()){
112-
pressure = iaqSensor->pressure/1000;
112+
mkr_iot_carrier_rev2::cache();
113113
}
114+
auto _pressure = mkr_iot_carrier_rev2::pressure / 1000;
114115
if (units == MILLIBAR) { // 1 kPa = 10 millibar
115-
return pressure * 10;
116+
return _pressure * 10;
116117
} else if (units == PSI) { // 1 kPa = 0.145038 PSI
117-
return pressure * 0.145038;
118+
return _pressure * 0.145038;
118119
} else {
119-
return pressure;
120+
return _pressure;
120121
}
121122
}
122123
return LPS22HB->readPressure(units);
@@ -126,12 +127,12 @@ float PressureClass::readTemperature(int units /*= CELSIUS*/)
126127
{
127128
if (_revision == BOARD_REVISION_2) {
128129
if(iaqSensor->run()){
129-
temperature = iaqSensor->temperature;
130+
mkr_iot_carrier_rev2::cache();
130131
}
131132
if (units == FAHRENHEIT){
132-
return (temperature * 9.0 / 5.0) + 32.0;
133+
return (mkr_iot_carrier_rev2::temperature * 9.0 / 5.0) + 32.0;
133134
} else {
134-
return temperature;
135+
return mkr_iot_carrier_rev2::temperature;
135136
}
136137
}
137138
return LPS22HB->readTemperature();

src/PressureClass.h

-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ class PressureClass {
2424

2525
LPS22HBClass* LPS22HB;
2626

27-
float pressure = 0.0f;
28-
float temperature = 0.0f;
29-
3027
private:
3128

3229
int (*board_revision)(void);

0 commit comments

Comments
 (0)