2022-03-14 13:12:12 +01:00

379 lines
13 KiB
C

/*
* THIS FILE IS AUTOMATICALLY GENERATED AND MUST NOT BE EDITED MANUALLY!
*
* I2C-Generator: 0.2.0
* Yaml Version: 0.1.0
* Template Version: 0.2.1
*/
/*
* Copyright (c) 2021, Sensirion AG
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of Sensirion AG nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef SCD4X_I2C_H
#define SCD4X_I2C_H
#ifdef __cplusplus
extern "C" {
#endif
#include "sensirion_config.h"
/**
* scd4x_start_periodic_measurement() - start periodic measurement, signal
* update interval is 5 seconds.
*
* @note This command is only available in idle mode.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_start_periodic_measurement(void);
/**
* scd4x_read_measurement_ticks() - read sensor output. The measurement data can
* only be read out once per signal update interval as the buffer is emptied
* upon read-out. If no data is available in the buffer, the sensor returns a
* NACK. To avoid a NACK response the get_data_ready_status can be issued to
* check data status. The I2C master can abort the read transfer with a NACK
* followed by a STOP condition after any data byte if the user is not
* interested in subsequent data.
*
* @note This command is only available in measurement mode. The firmware
* updates the measurement values depending on the measurement mode.
*
* @param co2 CO₂ concentration in ppm
*
* @param temperature Convert value to °C by: -45 °C + 175 °C * value/2^16
*
* @param humidity Convert value to %RH by: 100%RH * value/2^16
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_read_measurement_ticks(uint16_t* co2, uint16_t* temperature,
uint16_t* humidity);
/**
* scd4x_read_measurement() - read sensor output and convert.
* See @ref scd4x_read_measurement_ticks() for more details.
*
* @note This command is only available in measurement mode. The firmware
* updates the measurement values depending on the measurement mode.
*
* @param co2 CO₂ concentration in ppm
*
* @param temperature_m_deg_c Temperature in milli degrees celsius (°C * 1000)
*
* @param humidity_m_percent_rh Relative humidity in milli percent RH
* (%RH * 1000)
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_read_measurement(uint16_t* co2, int32_t* temperature_m_deg_c,
int32_t* humidity_m_percent_rh);
/**
* scd4x_stop_periodic_measurement() - Stop periodic measurement and return to
* idle mode for sensor configuration or to safe energy.
*
* @note This command is only available in measurement mode.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_stop_periodic_measurement(void);
/**
* scd4x_get_temperature_offset_ticks() - The temperature offset represents the
* difference between the measured temperature by the SCD4x and the actual
* ambient temperature. Per default, the temperature offset is set to 4°C.
*
* @note Only available in idle mode.
*
* @param t_offset Temperature offset. Convert value to °C by: 175 * value /
* 2^16
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_get_temperature_offset_ticks(uint16_t* t_offset);
/**
* scd4x_get_temperature_offset() - The temperature offset represents the
* difference between the measured temperature by the SCD4x and the actual
* ambient temperature. Per default, the temperature offset is set to 4°C.
*
* @note Only available in idle mode.
*
* @param t_offset_m_deg_c Temperature offset in milli degrees Celsius.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_get_temperature_offset(int32_t* t_offset_m_deg_c);
/**
* scd4x_set_temperature_offset_ticks() - Setting the temperature offset of the
* SCD4x inside the customer device correctly allows the user to leverage the RH
* and T output signal. Note that the temperature offset can depend on various
* factors such as the SCD4x measurement mode, self-heating of close components,
* the ambient temperature and air flow. Thus, the SCD4x temperature offset
* should be determined inside the customer device under its typical operation
* and in thermal equilibrium.
*
* @note Only available in idle mode.
*
* @param t_offset Temperature offset. Convert °C to value by: T * 2^16 / 175.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_set_temperature_offset_ticks(uint16_t t_offset);
/**
* scd4x_set_temperature_offset() - Setting the temperature offset of the SCD4x
* inside the customer device correctly allows the user to leverage the RH and T
* output signal. Note that the temperature offset can depend on various factors
* such as the SCD4x measurement mode, self-heating of close components, the
* ambient temperature and air flow. Thus, the SCD4x temperature offset should
* be determined inside the customer device under its typical operation and in
* thermal equilibrium.
*
* @note Only available in idle mode.
*
* @param t_offset_m_deg_c Temperature offset in milli degrees Celsius.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_set_temperature_offset(int32_t t_offset_m_deg_c);
/**
* scd4x_get_sensor_altitude() - Get configured sensor altitude in meters above
* sea level. Per default, the sensor altitude is set to 0 meter above
* sea-level.
*
* @note Only available in idle mode.
*
* @param sensor_altitude Sensor altitude in meters.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_get_sensor_altitude(uint16_t* sensor_altitude);
/**
* scd4x_set_sensor_altitude() - Set sensor altitude in meters above sea level.
* Note that setting a sensor altitude to the sensor overrides any pressure
* compensation based on a previously set ambient pressure.
*
* @note Only available in idle mode.
*
* @param sensor_altitude Sensor altitude in meters.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_set_sensor_altitude(uint16_t sensor_altitude);
/**
* scd4x_set_ambient_pressure() - The set_ambient_pressure command can be sent
* during periodic measurements to enable continuous pressure compensation. Note
* that setting an ambient pressure to the sensor overrides any pressure
* compensation based on a previously set sensor altitude.
*
* @note Available during measurements.
*
* @param ambient_pressure Ambient pressure in hPa. Convert value to Pa by:
* value * 100.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_set_ambient_pressure(uint16_t ambient_pressure);
/**
* scd4x_perform_forced_recalibration() - To successfully conduct an accurate
forced recalibration, the following steps need to be carried out:
1. Operate the SCD4x in a periodic measurement mode for > 3 minutes in an
environment with homogenous and constant CO₂ concentration.
2. Stop periodic measurement. Wait 500 ms.
3. Subsequently issue the perform_forced_recalibration command and optionally
read out the baseline correction. A return value of 0xffff indicates that the
forced recalibration failed.
*
* @param target_co2_concentration Target CO₂ concentration in ppm.
*
* @param frc_correction FRC correction value in CO₂ ppm or 0xFFFF if the
command failed. Convert value to CO₂ ppm with: value - 0x8000
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_perform_forced_recalibration(uint16_t target_co2_concentration,
uint16_t* frc_correction);
/**
* scd4x_get_automatic_self_calibration() - By default, the ASC is enabled.
*
* @param asc_enabled 1 if ASC is enabled, 0 if ASC is disabled
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_get_automatic_self_calibration(uint16_t* asc_enabled);
/**
* scd4x_set_automatic_self_calibration() - By default, the ASC is enabled.
*
* @param asc_enabled 1 to enable ASC, 0 to disable ASC
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_set_automatic_self_calibration(uint16_t asc_enabled);
/**
* scd4x_start_low_power_periodic_measurement() - Start low power periodic
* measurement, signal update interval is 30 seconds.
*
* @note This command is only available in idle mode.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_start_low_power_periodic_measurement(void);
/**
* scd4x_get_data_ready_status() - Check whether new measurement data is
* available for read-out.
*
* @param data_ready If last 11 bits are 0 data not ready, else data ready
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_get_data_ready_status(uint16_t* data_ready);
/**
* scd4x_persist_settings() - Configuration settings such as the temperature
* offset, sensor altitude and the ASC enabled/disabled parameter are by default
* stored in the volatile memory (RAM) only and will be lost after a
* power-cycle. The persist_settings command stores the current configuration in
* the EEPROM of the SCD4x, making them resistant to power-cycling. To avoid
* unnecessary wear of the EEPROM, the persist_settings command should only be
* sent when persistence is required and if actual changes to the configuration
* have been made. Note that field calibration history (i.e. FRC and ASC) is
* stored in the EEPROM automatically.
*
* @note
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_persist_settings(void);
/**
* scd4x_get_serial_number() - Reading out the serial number can be used to
* identify the chip and to verify the presence of the sensor. The get serial
* number command returns 3 words. Together, the 3 words constitute a unique
* serial number with a length of 48 bits (big endian format).
*
* @param serial_0 First word of the 48 bit serial number
*
* @param serial_1 Second word of the 48 bit serial number
*
* @param serial_2 Third word of the 48 bit serial number
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_get_serial_number(uint16_t* serial_0, uint16_t* serial_1,
uint16_t* serial_2);
/**
* scd4x_perform_self_test() - The perform_self_test feature can be used as an
* end-of-line test to confirm sensor functionality.
*
* @param sensor_status 0 means no malfunction detected
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_perform_self_test(uint16_t* sensor_status);
/**
* scd4x_perform_factory_reset() - Initiates the reset of all configurations
* stored in the EEPROM and erases the FRC and ASC algorithm history.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_perform_factory_reset(void);
/**
* scd4x_reinit() - The reinit command reinitializes the sensor by reloading
* user settings from EEPROM. Before sending the reinit command, the stop
* measurement command must be issued. If reinit command does not trigger the
* desired re-initialization, a power-cycle should be applied to the SCD4x.
*
* @note Only available in idle mode.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_reinit(void);
/**
* scd4x_measure_single_shot() - On-demand measurement of CO₂ concentration,
* relative humidity and temperature. The sensor output is read with the
* read_measurement command.
*
* @note Only available in idle mode.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_measure_single_shot(void);
/**
* scd4x_measure_single_shot_rht_only() - On-demand measurement of relative
* humidity and temperature only.
*
* @note Only available in idle mode.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_measure_single_shot_rht_only(void);
/**
* scd4x_power_down() - Put the sensor from idle to sleep mode to reduce current
* consumption.
*
* @note Only available in idle mode.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_power_down(void);
/**
* scd4x_wake_up() - Wake up sensor from sleep mode to idle mode.
*
* @note Only available in sleep mode.
*
* @return 0 on success, an error code otherwise
*/
int16_t scd4x_wake_up(void);
#ifdef __cplusplus
}
#endif
#endif /* SCD4X_I2C_H */