LCOV - code coverage report
Current view: top level - zephyr/drivers/sensor - ccs811.h Hit Total Coverage
Test: new.info Lines: 13 33 39.4 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright (c) 2018 Peter Bigot Consulting, LLC
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : /**
       8             :  * @file
       9             :  * @brief Extended public API for CCS811 Indoor Air Quality Sensor
      10             :  *
      11             :  * Some capabilities and operational requirements for this sensor
      12             :  * cannot be expressed within the sensor driver abstraction.
      13             :  */
      14             : 
      15             : #ifndef ZEPHYR_INCLUDE_DRIVERS_SENSOR_CCS811_H_
      16             : #define ZEPHYR_INCLUDE_DRIVERS_SENSOR_CCS811_H_
      17             : 
      18             : #ifdef __cplusplus
      19             : extern "C" {
      20             : #endif
      21             : 
      22             : #include <zephyr/device.h>
      23             : #include <zephyr/drivers/sensor.h>
      24             : 
      25             : /* Status register fields */
      26           0 : #define CCS811_STATUS_ERROR             BIT(0)
      27           0 : #define CCS811_STATUS_DATA_READY        BIT(3)
      28           0 : #define CCS811_STATUS_APP_VALID         BIT(4)
      29           0 : #define CCS811_STATUS_FW_MODE           BIT(7)
      30             : 
      31             : /* Error register fields */
      32           0 : #define CCS811_ERROR_WRITE_REG_INVALID  BIT(0)
      33           0 : #define CCS811_ERROR_READ_REG_INVALID   BIT(1)
      34           0 : #define CCS811_ERROR_MEASMODE_INVALID   BIT(2)
      35           0 : #define CCS811_ERROR_MAX_RESISTANCE     BIT(3)
      36           0 : #define CCS811_ERROR_HEATER_FAULT       BIT(4)
      37           0 : #define CCS811_ERROR_HEATER_SUPPLY      BIT(5)
      38             : 
      39             : /* Measurement mode constants */
      40           0 : #define CCS811_MODE_IDLE                0x00
      41           0 : #define CCS811_MODE_IAQ_1SEC            0x10
      42           0 : #define CCS811_MODE_IAQ_10SEC           0x20
      43           0 : #define CCS811_MODE_IAQ_60SEC           0x30
      44           0 : #define CCS811_MODE_IAQ_250MSEC         0x40
      45           0 : #define CCS811_MODE_MSK                 0x70
      46             : 
      47             : /** @brief Information collected from the sensor on each fetch. */
      48           1 : struct ccs811_result_type {
      49             :         /** Equivalent carbon dioxide in parts-per-million volume (ppmv). */
      50           1 :         uint16_t co2;
      51             : 
      52             :         /**
      53             :          * Equivalent total volatile organic compounds in
      54             :          * parts-per-billion volume.
      55             :          */
      56           1 :         uint16_t voc;
      57             : 
      58             :         /** Raw voltage and current measured by sensor. */
      59           1 :         uint16_t raw;
      60             : 
      61             :         /** Sensor status at completion of most recent fetch. */
      62           1 :         uint8_t status;
      63             : 
      64             :         /**
      65             :          * Sensor error flags at completion of most recent fetch.
      66             :          *
      67             :          * Note that errors are cleared when read.
      68             :          */
      69           1 :         uint8_t error;
      70             : };
      71             : 
      72             : /**
      73             :  * @brief Access storage for the most recent data read from the sensor.
      74             :  *
      75             :  * This content of the object referenced is updated by
      76             :  * sensor_fetch_sample(), except for ccs811_result_type::mode which is
      77             :  * set on driver initialization.
      78             :  *
      79             :  * @param dev Pointer to the sensor device
      80             :  *
      81             :  * @return a pointer to the result information.
      82             :  */
      83           1 : const struct ccs811_result_type *ccs811_result(const struct device *dev);
      84             : 
      85             : /**
      86             :  * @brief Get information about static CCS811 state.
      87             :  *
      88             :  * This includes the configured operating mode as well as hardware and
      89             :  * firmware versions.
      90             :  */
      91           1 : struct ccs811_configver_type {
      92           0 :         uint16_t fw_boot_version;
      93           0 :         uint16_t fw_app_version;
      94           0 :         uint8_t hw_version;
      95           0 :         uint8_t mode;
      96             : };
      97             : 
      98             : /**
      99             :  * @brief Fetch operating mode and version information.
     100             :  *
     101             :  * @param dev Pointer to the sensor device
     102             :  *
     103             :  * @param ptr Pointer to where the returned information should be stored
     104             :  *
     105             :  * @return 0 on success, or a negative errno code on failure.
     106             :  */
     107           1 : int ccs811_configver_fetch(const struct device *dev,
     108             :                            struct ccs811_configver_type *ptr);
     109             : 
     110             : /**
     111             :  * @brief Fetch the current value of the BASELINE register.
     112             :  *
     113             :  * The BASELINE register encodes data used to correct sensor readings
     114             :  * based on individual device configuration and variation over time.
     115             :  *
     116             :  * For proper management of the BASELINE register see AN000370
     117             :  * "Baseline Save and Restore on CCS811".
     118             :  *
     119             :  * @param dev Pointer to the sensor device
     120             :  *
     121             :  * @return a non-negative 16-bit register value, or a negative errno
     122             :  * code on failure.
     123             :  */
     124           1 : int ccs811_baseline_fetch(const struct device *dev);
     125             : 
     126             : /**
     127             :  * @brief Update the BASELINE register.
     128             :  *
     129             :  * For proper management of the BASELINE register see AN000370
     130             :  * "Baseline Save and Restore on CCS811".
     131             :  *
     132             :  * @param dev Pointer to the sensor device
     133             :  *
     134             :  * @param baseline the value to be stored in the BASELINE register.
     135             :  *
     136             :  * @return 0 if successful, negative errno code if failure.
     137             :  */
     138           1 : int ccs811_baseline_update(const struct device *dev, uint16_t baseline);
     139             : 
     140             : /**
     141             :  * @brief Update the ENV_DATA register.
     142             :  *
     143             :  * Accurate calculation of gas levels requires accurate environment
     144             :  * data.  Measurements are only accurate to 0.5 Cel and 0.5 %RH.
     145             :  *
     146             :  * @param dev Pointer to the sensor device
     147             :  *
     148             :  * @param temperature the current temperature at the sensor
     149             :  *
     150             :  * @param humidity the current humidity at the sensor
     151             :  *
     152             :  * @return 0 if successful, negative errno code if failure.
     153             :  */
     154           1 : int ccs811_envdata_update(const struct device *dev,
     155             :                           const struct sensor_value *temperature,
     156             :                           const struct sensor_value *humidity);
     157             : 
     158             : #ifdef __cplusplus
     159             : }
     160             : #endif
     161             : 
     162             : #endif /* ZEPHYR_INCLUDE_DRIVERS_SENSOR_CCS811_H_ */

Generated by: LCOV version 1.14