| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | /* * Copyright (c) 2018 Peter Bigot Consulting, LLC * * SPDX-License-Identifier: Apache-2.0 *//** * @file * @brief Extended public API for CCS811 Indoor Air Quality Sensor * * Some capabilities and operational requirements for this sensor * cannot be expressed within the sensor driver abstraction. */#ifndef ZEPHYR_INCLUDE_DRIVERS_SENSOR_CCS811_H_#define ZEPHYR_INCLUDE_DRIVERS_SENSOR_CCS811_H_#ifdef __cplusplusextern "C" {#endif#include <device.h>#include <drivers/sensor.h>/* Status register fields */#define CCS811_STATUS_ERROR             BIT(0)#define CCS811_STATUS_DATA_READY        BIT(3)#define CCS811_STATUS_APP_VALID         BIT(4)#define CCS811_STATUS_FW_MODE           BIT(7)/* Error register fields */#define CCS811_ERROR_WRITE_REG_INVALID  BIT(0)#define CCS811_ERROR_READ_REG_INVALID   BIT(1)#define CCS811_ERROR_MEASMODE_INVALID   BIT(2)#define CCS811_ERROR_MAX_RESISTANCE     BIT(3)#define CCS811_ERROR_HEATER_FAULT       BIT(4)#define CCS811_ERROR_HEATER_SUPPLY      BIT(5)/* Measurement mode constants */#define CCS811_MODE_IDLE                0x00#define CCS811_MODE_IAQ_1SEC            0x10#define CCS811_MODE_IAQ_10SEC           0x20#define CCS811_MODE_IAQ_60SEC           0x30#define CCS811_MODE_IAQ_250MSEC         0x40#define CCS811_MODE_MSK                 0x70/** @brief Information collected from the sensor on each fetch. */struct ccs811_result_type {	/** Equivalent carbon dioxide in parts-per-million volume (ppmv). */	uint16_t co2;	/**	 * Equivalent total volatile organic compounts in	 * parts-per-billion volume.	 */	uint16_t voc;	/** Raw voltage and current measured by sensor. */	uint16_t raw;	/** Sensor status at completion of most recent fetch. */	uint8_t status;	/**	 * Sensor error flags at completion of most recent fetch.	 *	 * Note that errors are cleared when read.	 */	uint8_t error;};/** * @brief Access storage for the most recent data read from the sensor. * * This content of the object referenced is updated by * sensor_fetch_sample(), except for ccs811_result_type::mode which is * set on driver initialization. * * @param dev Pointer to the sensor device * * @return a pointer to the result information. */const struct ccs811_result_type *ccs811_result(const struct device *dev);/** * @brief Get information about static CCS811 state. * * This includes the configured operating mode as well as hardware and * firmware versions. */struct ccs811_configver_type {	uint16_t fw_boot_version;	uint16_t fw_app_version;	uint8_t hw_version;	uint8_t mode;};/** * @brief Fetch operating mode and version information. * * @param dev Pointer to the sensor device * * @param ptr Pointer to where the returned information should be stored * * @return 0 on success, or a negative errno code on failure. */int ccs811_configver_fetch(const struct device *dev,			   struct ccs811_configver_type *ptr);/** * @brief Fetch the current value of the BASELINE register. * * The BASELINE register encodes data used to correct sensor readings * based on individual device configuration and variation over time. * * For proper management of the BASELINE register see AN000370 * "Baseline Save and Restore on CCS811". * * @param dev Pointer to the sensor device * * @return a non-negative 16-bit register value, or a negative errno * code on failure. */int ccs811_baseline_fetch(const struct device *dev);/** * @brief Update the BASELINE register. * * For proper management of the BASELINE register see AN000370 * "Baseline Save and Restore on CCS811". * * @param dev Pointer to the sensor device * * @param baseline the value to be stored in the BASELINE register. * * @return 0 if successful, negative errno code if failure. */int ccs811_baseline_update(const struct device *dev, uint16_t baseline);/** * @brief Update the ENV_DATA register. * * Accurate calculation of gas levels requires accurate environment * data.  Measurements are only accurate to 0.5 Cel and 0.5 %RH. * * @param dev Pointer to the sensor device * * @param temperature the current temperature at the sensor * * @param humidity the current humidity at the sensor * * @return 0 if successful, negative errno code if failure. */int ccs811_envdata_update(const struct device *dev,			  const struct sensor_value *temperature,			  const struct sensor_value *humidity);#ifdef __cplusplus}#endif#endif /* ZEPHYR_INCLUDE_DRIVERS_SENSOR_CCS811_H_ */
 |