blob: 93e7bff871c94250dc1f12c5e8f09b4d3ebca333 [file] [log] [blame]
#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();
}
};
/**
* @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