forked from project-chip/connectedhomeip
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathair-quality-sensor-manager.h
192 lines (168 loc) · 9.56 KB
/
air-quality-sensor-manager.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include <app-common/zap-generated/ids/Attributes.h>
#include <app-common/zap-generated/ids/Clusters.h>
#include <app/clusters/air-quality-server/air-quality-server.h>
#include <app/clusters/concentration-measurement-server/concentration-measurement-server.h>
#include <relative-humidity-sensor-manager.h>
#include <temperature-sensor-manager.h>
#pragma once
namespace chip {
namespace app {
namespace Clusters {
class AirQualitySensorManager
{
public:
// Delete copy constructor and assignment operator.
AirQualitySensorManager(const AirQualitySensorManager &) = delete;
AirQualitySensorManager(const AirQualitySensorManager &&) = delete;
AirQualitySensorManager & operator=(const AirQualitySensorManager &) = delete;
static void InitInstance(EndpointId aEndpointId = 1)
{
if (mInstance == nullptr)
{
mInstance = new AirQualitySensorManager(aEndpointId);
mInstance->Init();
}
};
/**
* @return The current AirQuality value.
*/
AirQuality::AirQualityEnum GetAirQuality();
/**
* @brief Get an Air Quality Manager object - this class acts as a singleton device manager for the air quality device
* @param[in] aEndpointId Endpoint that the air quality is on
* @return mInstance The AirQualitySensorManager instance, note this this could be nullptr if InitInstance has not been
* called
*/
static AirQualitySensorManager * GetInstance() { return mInstance; };
/**
* @brief Handles changes in Carbon Dioxide concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void Init();
/**
* @brief Handles changes in Air Quality measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnAirQualityChangeHandler(AirQuality::AirQualityEnum newValue);
/**
* @brief Handles changes in Carbon Dioxide concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnCarbonDioxideMeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in Carbon Monoxide concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnCarbonMonoxideMeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in Nitrogen Dioxide concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnNitrogenDioxideMeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in PM1 concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnPm1MeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in PM10 concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnPm10MeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in PM2.5 concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnPm25MeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in Radon concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnRadonMeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in Total Volatile Organic Compounds concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnTotalVolatileOrganicCompoundsMeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in Ozone concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnOzoneMeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in Formaldehyde concentration measurement.
* @param[in] newValue The new air value to be applied.
*/
void OnFormaldehydeMeasurementChangeHandler(float newValue);
/**
* @brief Handles changes in Temperature measurement.
* @param[in] newValue The new value to be applied.
*/
void OnTemperatureMeasurementChangeHandler(int16_t newValue);
/**
* @brief Handles changes in Humidity measurement.
* @param[in] newValue The new value to be applied.
*/
void OnHumidityMeasurementChangeHandler(uint16_t newValue);
private:
inline static AirQualitySensorManager * mInstance;
EndpointId mEndpointId;
AirQuality::Instance mAirQualityInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mCarbonDioxideConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mCarbonMonoxideConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mNitrogenDioxideConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mPm1ConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mPm10ConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mPm25ConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mRadonConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true>
mTotalVolatileOrganicCompoundsConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mOzoneConcentrationMeasurementInstance;
ConcentrationMeasurement::Instance<true, true, true, true, true, true> mFormaldehydeConcentrationMeasurementInstance;
TemperatureSensorManager mTemperatureSensorManager;
RelativeHumiditySensorManager mHumiditySensorManager;
/**
* @brief Construct a new Air Quality Manager object - this class acts as a singleton device manager for the air quality device
* @param[in] endpointId Endpoint that the air quality device is on
*/
AirQualitySensorManager(EndpointId aEndpointId) :
mEndpointId(aEndpointId),
mAirQualityInstance(mEndpointId,
BitMask<AirQuality::Feature, uint32_t>(AirQuality::Feature::kModerate, AirQuality::Feature::kFair,
AirQuality::Feature::kVeryPoor,
AirQuality::Feature::kExtremelyPoor)),
mCarbonDioxideConcentrationMeasurementInstance(mEndpointId, CarbonDioxideConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mCarbonMonoxideConcentrationMeasurementInstance(mEndpointId, CarbonMonoxideConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mNitrogenDioxideConcentrationMeasurementInstance(mEndpointId, NitrogenDioxideConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mPm1ConcentrationMeasurementInstance(mEndpointId, Pm1ConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mPm10ConcentrationMeasurementInstance(mEndpointId, Pm10ConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mPm25ConcentrationMeasurementInstance(mEndpointId, Pm25ConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mRadonConcentrationMeasurementInstance(mEndpointId, RadonConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mTotalVolatileOrganicCompoundsConcentrationMeasurementInstance(
mEndpointId, TotalVolatileOrganicCompoundsConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir, ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mOzoneConcentrationMeasurementInstance(mEndpointId, OzoneConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mFormaldehydeConcentrationMeasurementInstance(mEndpointId, FormaldehydeConcentrationMeasurement::Id,
ConcentrationMeasurement::MeasurementMediumEnum::kAir,
ConcentrationMeasurement::MeasurementUnitEnum::kPpm),
mTemperatureSensorManager(mEndpointId), mHumiditySensorManager(mEndpointId){};
};
} // namespace Clusters
} // namespace app
} // namespace chip