dps310 - Driver for for DPS310, barometric pressure sensor

group dps310

ESP-IDF driver for DPS310 barometric pressure sensor.

Sponsored by .

DPS310 supports I2C and SPI (3-wires and 4-wires) as digital interface. The driver currently supports:

  • I2C

The driver currently does not support:

  • SPI

  • read measurements by interrupt

  • multi-master I2C configuration

Note that the unit of pressure in this driver is pascal (Pa), not hectopascals (hPa).

Note that the unit of altitude in this driver is meter.

Defines

DPS310_I2C_ADDRESS_0

I2C address when SDO pin is low.

DPS310_I2C_ADDRESS_1

I2C address when SDO pin is high.

DPS310_PRODUCT_ID

Product ID.

DPS310_REVISION_ID

Revision ID.

DPS310_AVERAGE_SEA_LEVEL_PRESSURE_hPa

Average sea-level pressure in hPa.

DPS310_AVERAGE_SEA_LEVEL_PRESSURE_Pa

Average sea-level pressure in Pa.

DPS310_CONFIG_DEFAULT()

A macro to set default dps310_config_t.

DPS310_REG_PRS_B2

DPS310 registers.

DPS310_REG_PRS_B1
DPS310_REG_PRS_B0
DPS310_REG_TMP_B2
DPS310_REG_TMP_B1
DPS310_REG_TMP_B0
DPS310_REG_PRS_CFG
DPS310_REG_TMP_CFG
DPS310_REG_MEAS_CFG
DPS310_REG_CFG_REG
DPS310_REG_INT_STS
DPS310_REG_FIFO_STS
DPS310_REG_RESET
DPS310_REG_ID
DPS310_REG_COEF
DPS310_REG_COEF_LEN
DPS310_REG_COEF_SRCE
DPS310_REG_ID_REV_MASK
DPS310_REG_ID_PROD_MASK
DPS310_REG_RESET_FIFO_FLUSH_MASK
DPS310_REG_RESET_SOFT_RST_MASK
DPS310_REG_PRS_CFG_PM_RATE_MASK
DPS310_REG_PRS_CFG_TMP_RATE_MASK
DPS310_REG_PRS_CFG_PM_PRC_MASK
DPS310_REG_PRS_CFG_TMP_EXT_MASK
DPS310_REG_TMP_CFG_TMP_PRC_MASK
DPS310_REG_CFG_REG_INT_HL_MASK
DPS310_REG_CFG_REG_INT_FIFO_MASK
DPS310_REG_CFG_REG_INT_TMP_MASK
DPS310_REG_CFG_REG_INT_PRS_MASK
DPS310_REG_CFG_REG_T_SHIFT_MASK
DPS310_REG_CFG_REG_P_SHIFT_MASK
DPS310_REG_CFG_REG_FIFO_EN_MASK
DPS310_REG_CFG_REG_SPI_MODE_MASK
DPS310_REG_MEAS_CFG_COEF_RDY_MASK
DPS310_REG_MEAS_CFG_SENSOR_RDY_MASK
DPS310_REG_MEAS_CFG_TMP_RDY_MASK
DPS310_REG_MEAS_CFG_PRS_RDY_MASK
DPS310_REG_MEAS_CFG_MEAS_CTRL_MASK
DPS310_REG_COEF_SRCE_MASK
DPS310_REG_FIFO_STS_FIFO_EMPTY_MASK
DPS310_REG_FIFO_STS_FIFO_FULL_MASK
DPS310_I2C_FREQ_MAX_HZ
DPS310_I2C_FREQ_MAX_ESP_IDF_HZ
DPS310_SPI_FREQ_MAX_HZ
DPS310_TRIM_READY_DELAY_MS
DPS310_SENSOR_READY_DELAY_MS
DPS310_COEFFICIENTS_READY_DELAY_MS
DPS310_STARTUP_DELAY_MS
DPS310_PROD_ID
DPS310_REG_SENSOR_VALUE_LEN
DPS310_REG_FIFO
DPS310_FIFO_EMPTY
DPS310_FIFO_FLUSH_VALUE
DPS310_SOFT_RST_VALUE

Enums

enum dps310_mode_t

Mode of DPS310 module operation.

See 4.1 Operating Modes.

Values:

enumerator DPS310_MODE_STANDBY

Standby mode.

enumerator DPS310_MODE_COMMAND_PRESSURE

Command mode, pressure measurement.

enumerator DPS310_MODE_COMMAND_TEMPERATURE

Command mode, temperature measurement.

enumerator DPS310_MODE_BACKGROUND_PRESSURE

Background mode, continuous pressure measurement.

enumerator DPS310_MODE_BACKGROUND_TEMPERATURE

Background mode, continuous temperature measurement.

enumerator DPS310_MODE_BACKGROUND_ALL

Background mode, continuous pressure and temperature measurement.

enum dps310_pm_rate_t

Pressure measurement rate.

Values:

enumerator DPS310_PM_RATE_1

1 measurements / sec

enumerator DPS310_PM_RATE_2

2 measurements / sec

enumerator DPS310_PM_RATE_4

4 measurements / sec

enumerator DPS310_PM_RATE_8

8 measurements / sec

enumerator DPS310_PM_RATE_16

16 measurements / sec

enumerator DPS310_PM_RATE_32

32 measurements / sec

enumerator DPS310_PM_RATE_64

64 measurements / sec

enumerator DPS310_PM_RATE_128

128 measurements / sec

enum dps310_pm_oversampling_t

Pressure resolution, or oversampling rate.

Values:

enumerator DPS310_PM_PRC_1

Single (Low Precision)

enumerator DPS310_PM_PRC_2

2 times (Low Power).

enumerator DPS310_PM_PRC_4

4 times

enumerator DPS310_PM_PRC_8

8 times

enumerator DPS310_PM_PRC_16

16 times (Standard)

enumerator DPS310_PM_PRC_32

32 times

enumerator DPS310_PM_PRC_64

64 times (High Precision)

enumerator DPS310_PM_PRC_128

128 times

enum dps310_tmp_src_ext_t

Temperature measurement source.

Used for temperature measurement and temperature coefficients.

Values:

enumerator DPS310_TMP_SRC_INTERNAL

Internal sensor (in ASIC)

enumerator DPS310_TMP_SRC_EXTERNAL

External sensor (in pressure sensor MEMS element)

enum dps310_tmp_rate_t

Temperature measurement rate.

Values:

enumerator DPS310_TMP_RATE_1

1 measurements / sec

enumerator DPS310_TMP_RATE_2

2 measurements / sec

enumerator DPS310_TMP_RATE_4

4 measurements / sec

enumerator DPS310_TMP_RATE_8

8 measurements / sec

enumerator DPS310_TMP_RATE_16

16 measurements / sec

enumerator DPS310_TMP_RATE_32

32 measurements / sec

enumerator DPS310_TMP_RATE_64

64 measurements / sec

enumerator DPS310_TMP_RATE_128

128 measurements / sec

enum dps310_tmp_oversampling_t

Pressure resolution, or oversampling rate.

Values:

enumerator DPS310_TMP_PRC_1

Single (Low Precision)

enumerator DPS310_TMP_PRC_2

2 times (Low Power).

enumerator DPS310_TMP_PRC_4

4 times

enumerator DPS310_TMP_PRC_8

8 times

enumerator DPS310_TMP_PRC_16

16 times (Standard)

enumerator DPS310_TMP_PRC_32

32 times

enumerator DPS310_TMP_PRC_64

64 times (High Precision)

enumerator DPS310_TMP_PRC_128

128 times

enum dps310_int_hl_active_level_t

Interupt (on SDO pin) active level.

Values:

enumerator DPS310_INT_HL_ACTIVE_LOW

Active low.

enumerator DPS310_INT_HL_ACTIVE_HIGH

Active high.

enum dps310_int_fifo_mode_t

Mode of interupt when the FIFO is full.

Values:

enumerator DPS310_INT_FIFO_DISABLE

Disable interrupt when the FIFO is full.

enumerator DPS310_INT_FIFO_ENABLE

Enable interrupt when the FIFO is full.

enum dps310_int_tmp_mode_t

Mode of interupt when a temperature measurement is ready.

Values:

enumerator DPS310_INT_TMP_DISABLE

Disable interrupt when a temperature measurement is ready.

enumerator DPS310_INT_TMP_ENABLE

Enable interrupt when a temperature measurement is ready.

enum dps310_int_prs_mode_t

Mode of interupt when a pressure measurement is ready.

Values:

enumerator DPS310_INT_PRS_DISABLE

Disable interrupt when a pressure measurement is ready.

enumerator DPS310_INT_PRS_ENABLE

Enable interrupt when a pressure measurement is ready.

enum dps310_t_shift_mode_t

Mode of temperature result bit-shift.

Values:

enumerator DPS310_T_SHIFT_DISABLE

No shift.

enumerator DPS310_T_SHIFT_ENABLE

Shift result right in data register.

enum dps310_p_shift_mode_t

Mode of pressure result bit-shift.

Values:

enumerator DPS310_P_SHIFT_DISABLE

No shift.

enumerator DPS310_P_SHIFT_ENABLE

Shift result right in data register.

enum dps310_fifo_en_mode_t

Mode of FIFO.

Values:

enumerator DPS310_FIFO_DISABLE

Disable FIFO.

enumerator DPS310_FIFO_ENABLE

Enable FIFO.

enum dps310_spi_mode_t

SPI mode.

Values:

enumerator DPS310_SPI_MODE_4WIRE

SPI 4-wires.

enumerator DPS310_SPI_MODE_3WIRE

SPI 3-wires.

enum dps310_fifo_measurement_type_t

Type of measurement result in FIFO.

When the type is DPS310_MEASUREMENT_EMPTY, the result is always zero. Otherwise, the result is the compensated value of each type.

Values:

enumerator DPS310_MEASUREMENT_TEMPERATURE

Temperature.

enumerator DPS310_MEASUREMENT_PRESSURE

Pressure.

enumerator DPS310_MEASUREMENT_EMPTY

Empty, no measurement available.

Functions

esp_err_t dps310_init_desc(dps310_t *dev, uint8_t addr, i2c_port_t port, gpio_num_t sda_gpio, gpio_num_t scl_gpio)

Initialize device descriptor.

Parameters
Returns

ESP_OK on success

esp_err_t dps310_free_desc(dps310_t *dev)

Free the device descriptor.

The device descriptor must NOT be NULL. dps310_free_desc() does not free() the device descriptor on error.

Parameters

dev[out] Device descriptor

Returns

ESP_OK on success

esp_err_t dps310_init(dps310_t *dev, dps310_config_t *config)

Initialize DPS310 module.

The function does the followings:

  • read the DPS310_REG_ID, and identify the product ID. Return ESP_FAIL if the product ID does not match expected product ID.

  • reset the chip

  • perform a quirk

Parameters
  • dev[in] – Device descriptor

  • config[in] – Configuration

Returns

ESP_OK on success

esp_err_t dps310_reset(dps310_t *dev)

Reset the device.

Perform “soft reset” and ensure the chip is fully functional by delaying DPS310_STARTUP_DELAY_MS.

Parameters

dev[in] The device descriptor

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or config is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_rate_p(dps310_t *dev, dps310_pm_rate_t *value)

Get pressure measurement rate.

Parameters
  • dev[in] The device descriptor

  • value[out] the value in the resister

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_rate_p(dps310_t *dev, dps310_pm_rate_t value)

Set pressure measurement rate.

Parameters
  • dev[in] The device descriptor.

  • value[in] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or config is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_rate_t(dps310_t *dev, dps310_tmp_rate_t *value)

Get temperature measurement rate.

Parameters
  • dev[in] The device descriptor

  • value[out] the value in the resister

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_rate_t(dps310_t *dev, dps310_tmp_rate_t value)

Set temperature measurement rate.

Parameters
  • dev[in] The device descriptor.

  • value[in] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or config is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_oversampling_p(dps310_t *dev, dps310_pm_oversampling_t *value)

Get pressure oversampling rate.

Parameters
  • dev[in] The device descriptor

  • value[out] the value in the resister

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_oversampling_p(dps310_t *dev, dps310_pm_oversampling_t value)

Set pressure oversampling rate.

Parameters
  • dev[in] The device descriptor.

  • value[in] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or config is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_oversampling_t(dps310_t *dev, dps310_tmp_oversampling_t *value)

Get temperature oversampling rate.

Parameters
  • dev[in] The device descriptor

  • value[out] the value in the resister

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_oversampling_t(dps310_t *dev, dps310_tmp_oversampling_t value)

Set temperature oversampling rate.

Parameters
  • dev[in] The device descriptor.

  • value[in] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or config is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_tmp_ext(dps310_t *dev, dps310_tmp_src_ext_t *value)

Get temperature measurement source.

Parameters
  • dev[in] The device descriptor.

  • value[out] the value in the resister.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_tmp_ext(dps310_t *dev, dps310_tmp_src_ext_t value)

Set temperature measurement source.

Parameters
  • dev[in] The device descriptor.

  • value[in] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_tmp_coef_ext(dps310_t *dev, dps310_tmp_src_ext_t value)

Set temperature coefficient source.

Parameters
  • dev[in] The device descriptor.

  • value[in] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_int_hl(dps310_t *dev, dps310_int_hl_active_level_t *value)

Get interrupt active level.

Parameters
  • dev[in] The device descriptor.

  • value[out] the value in the resister.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_int_hl(dps310_t *dev, dps310_int_hl_active_level_t value)

Set interrupt active level.

Parameters
  • dev[in] The device descriptor.

  • value[in] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_int_fifo(dps310_t *dev, dps310_int_fifo_mode_t *value)

Get the status of FIFO interrupt.

Parameters
  • dev[in] The device descriptor.

  • value[out] Current configuration of INT_FIFO.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_int_fifo(dps310_t *dev, dps310_int_fifo_mode_t value)

Set the status of FIFO interrupt.

Parameters
  • dev[in] The device descriptor.

  • value[out] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_int_tmp(dps310_t *dev, dps310_int_tmp_mode_t *value)

Get the status of temperature interrupt.

Parameters
  • dev[in] The device descriptor.

  • value[out] Current configuration of INT_TMP.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_int_tmp(dps310_t *dev, dps310_int_tmp_mode_t value)

Set the status of temperature interrupt.

Parameters
  • dev[in] The device descriptor.

  • value[out] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_int_prs(dps310_t *dev, dps310_int_prs_mode_t *value)

Get the status of pressure interrupt.

Parameters
  • dev[in] The device descriptor.

  • value[out] Current configuration of INT_PRS.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_int_prs(dps310_t *dev, dps310_int_prs_mode_t value)

Set the status of pressure interrupt.

Parameters
  • dev[in] The device descriptor.

  • value[out] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_t_shift(dps310_t *dev, dps310_t_shift_mode_t *value)

Get the status of temperature result bit-shift.

Parameters
  • dev[in] The device descriptor.

  • value[out] Current configuration of T_SHIFT.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_t_shift(dps310_t *dev, dps310_t_shift_mode_t value)

Set the status of temperature result bit-shift.

Must be set to DPS310_T_SHIFT_ENABLE when the oversampling rate is >8 times.

Parameters
  • dev[in] The device descriptor.

  • value[out] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_p_shift(dps310_t *dev, dps310_p_shift_mode_t *value)

Get the status of pressure result bit-shift.

Parameters
  • dev[in] The device descriptor.

  • value[out] Current configuration of T_SHIFT.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_p_shift(dps310_t *dev, dps310_p_shift_mode_t value)

Set the status of pressure result bit-shift.

Must be set to DPS310_P_SHIFT_ENABLE when the oversampling rate is >8 times.

Parameters
  • dev[in] The device descriptor.

  • value[out] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_fifo_en(dps310_t *dev, dps310_fifo_en_mode_t *value)

Get the status of FIFO.

Parameters
  • dev[in] The device descriptor.

  • value[out] Current configuration of FIFO_EN.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_fifo_en(dps310_t *dev, dps310_fifo_en_mode_t value)

Set the status of FIFO.

Parameters
  • dev[in] The device descriptor.

  • value[out] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_spi_mode(dps310_t *dev, dps310_spi_mode_t *value)

Get the mode of SPI.

Parameters
  • dev[in] The device descriptor.

  • value[out] Current configuration of SPI_MODE.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev and/or value is NULL, or other errors when I2C communication fails.

esp_err_t dps310_set_spi_mode(dps310_t *dev, dps310_spi_mode_t value)

Set the mode of SPI.

Parameters
  • dev[in] The device descriptor.

  • value[out] The value to set.

Returns

ESP_OK on success, ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_coef(dps310_t *dev)

Get Calibration Coefficients (COEF), update COEF in the device descriptor.

Parameters

dev[in] The device descriptor.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_get_mode(dps310_t *dev, dps310_mode_t *mode)

Get operating mode.

Parameters
  • dev[in] The device descriptor.

  • mode[out] The operating mode.

esp_err_t dps310_set_mode(dps310_t *dev, dps310_mode_t mode)

Set operating mode.

Parameters
  • dev[in] The device descriptor.

  • mode[in] The operating mode.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_flush_fifo(dps310_t *dev)

Flush FIFO.

Parameters

dev[in] The device descriptor.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_enable_fifo(dps310_t *dev, bool enable)

Enable or disable FIFO.

The function performs flush (dps310_flush_fifo()) before disabling FIFO.

Parameters
  • dev[in] The device descriptor.

  • enable[in] Enable FIFO when true, disable FIFO when false.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_read_raw(dps310_t *dev, uint8_t reg, int32_t *value)

Read the raw sensor value from resisters.

The real raw value is 2’s complement. The function internally converts the value from the 2’s complement to uint32_t number.

Parameters
  • dev[in] The device descriptor.

  • reg[in] Either DPS310_REG_TMP_B2 or DPS310_REG_PRS_B2.

  • value[out] The raw value in the three resisters.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_read_pressure(dps310_t *dev, float *pressure)

Read compensated pressure value.

Parameters
  • dev[in] The device descriptor.

  • pressure[out] Compensated pressure value in Pascal (not hPa).

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_read_pressure_wait(dps310_t *dev, uint16_t delay_ms, uint8_t max_attempt, float *pressure)

Read compensated temperature value after waiting for PRES_RDY bit.

Parameters
  • dev[in] The device descriptor.

  • delay_ms[in] Time in microseconds to wait when the value is not ready.

  • max_attempt[in] Number of attempt to read.

  • pressure[out] Compensated pressure value in Pascal (not hPa).

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL. ESP_ERR_TIMEOUT when failed to read the measurement within max_attempt, or other errors when I2C communication fails.

esp_err_t dps310_read_temp(dps310_t *dev, float *temperature)

Read compensated temperature value.

Parameters
  • dev[in] The device descriptor.

  • temperature[out] Compensated temperature value.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_read_temp_wait(dps310_t *dev, uint16_t delay_ms, uint8_t max_attempt, float *temperature)

Read compensated temperature value after waiting for TMP_RDY bit.

Parameters
  • dev[in] The device descriptor.

  • delay_ms[in] Time in microseconds to wait when the value is not ready.

  • max_attempt[in] Number of attempt to read.

  • temperature[out] Compensated temperature value.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL. ESP_ERR_TIMEOUT when failed to read the measurement within max_attempt, or other errors when I2C communication fails.

esp_err_t dps310_is_ready_for(dps310_t *dev, uint8_t reg, uint8_t mask, bool *ready)

Test if a single bit in a resister is set.

Parameters
  • dev[in] The device descriptor.

  • reg[in] The resister

  • mask[in] bit mask to test

  • ready[out] true when the bit is set, false when the bit is cleared.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_is_ready_for_coef(dps310_t *dev, bool *ready)

Test COEF_RDY in MEAS_CFG resister is set.

Parameters
  • dev[in] The device descriptor.

  • ready[out] true when the bit is set, false when the bit is cleared.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_is_ready_for_sensor(dps310_t *dev, bool *ready)

Test SENSOR_RDY in MEAS_CFG resister is set.

Parameters
  • dev[in] The device descriptor.

  • ready[out] true when the bit is set, false when the bit is cleared.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_is_ready_for_temp(dps310_t *dev, bool *ready)

Test TMP_RDY in MEAS_CFG resister is set.

Parameters
  • dev[in] The device descriptor.

  • ready[out] true when the bit is set, false when the bit is cleared.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_is_ready_for_pressure(dps310_t *dev, bool *ready)

Test PRS_RDY in MEAS_CFG resister is set.

Parameters
  • dev[in] The device descriptor.

  • ready[out] true when the bit is set, false when the bit is cleared.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_quirk(dps310_t *dev)

Reset undocumented internal resisters.

The function is supposed to fix an issue in the sensor by writing magic values to magic resisters. However, the issue is not documented. The latest data sheet does not mention the issue, nor an errata.

After issuing magic commands, the function re-reads COEF and temperature once so that the subsequent pressure reads return compensated values with internal cached parameters.

See: https://github.com/Infineon/DPS310-Pressure-Sensor#temperature-measurement-issue https://github.com/Infineon/DPS310-Pressure-Sensor/blob/3edb0e58dfd7691491ae8d7f6a86277b001ad93f/src/DpsClass.cpp#L442-L461 https://github.com/Infineon/DPS310-Pressure-Sensor/blob/ed02f803fc780cbcab54ed8b35dd3d718f2ebbda/src/Dps310.cpp#L84-L86 https://github.com/Infineon/DPS310-Pressure-Sensor/issues/15#issuecomment-475394536

Parameters

dev[in] The device descriptor.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_is_fifo_empty(dps310_t *dev, bool *result)

See if FIFO is empty.

Parameters
  • dev[in] The device descriptor.

  • result[out] The result. true if empty, false otherwise.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_read_fifo(dps310_t *dev, dps310_fifo_measurement_t *measurement)

Read measurement result from FIFO.

Parameters
  • dev[in] The device descriptor.

  • measurement[out] Measured value.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_backgorund_start(dps310_t *dev, dps310_mode_t mode)

Start background measurement.

This function is a syntax-sugar of dps310_set_mode() just for readbility and for an emphasis on a fact that measurement starts immediately after this.

Parameters
  • dev[in] The device descriptor.

  • mode[in] The mode of background measurement.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_backgorund_stop(dps310_t *dev)

Stop background measurement.

This function is a syntax-sugar of dps310_set_mode().

Parameters

dev[in] The device descriptor.

Returns

ESP_OK on success. ESP_ERR_INVALID_ARG when dev is NULL, or other errors when I2C communication fails.

esp_err_t dps310_calibrate_altitude(dps310_t *dev, float altitude_real)

Calibrate altitude offset from the altitude of the device.

Call this function before dps310_read_altitude() for higher accuracy.

By default, the driver calculates altitude using average sea-level pressure. This function updates internal offset of altitude by reading pressure from the sensor, and given altitude. There are public web services that provide altitude at a specific location, such as Google Earth.

The function attempts to keep original oversampling rates during calibration. When it fails to do so due to errors, the oversampling rates might be different.

Parameters
  • dev[in] The device descriptor.

  • altitude_real[in] Real (known) altitude.

esp_err_t dps310_calc_altitude(dps310_t *dev, float pressure, float *altitude)

Calculate altitude from pressure.

Calculates altitude from pressure given. Call dps310_calibrate_altitude() before this function for higher accuracy. The function adds the offset to calculated altitude.

Parameters
  • dev[in] The device descriptor.

  • pressure[in] The pressure.

  • altitude[out] The calicurated altitude.

esp_err_t dps310_read_altitude(dps310_t *dev, float *altitude)

Read pressure from the sensor, calculates altitude.

Make sure that pressure measurement value is available.

Parameters
  • dev[in] The device descriptor.

  • altitude[out] The calculated altitude.

struct dps310_fifo_measurement_t
#include <dps310.h>
struct dps310_config_t
#include <dps310.h>

Configuration parameters for DPS310.

struct dps310_coef_t
#include <dps310.h>

Calibration Coefficients (COEF).

struct dps310_t
#include <dps310.h>

Device descriptor.

Public Members

i2c_dev_t i2c_dev

I2C device descriptor.

uint8_t prod_id

Product ID.

uint8_t prod_rev

Product revision.

uint8_t t_rate

latest P_rate

uint8_t p_rate

latest T_rate

int32_t t_raw

latest T_raw

dps310_coef_t coef

coefficients

float offset

offset in meter

float pressure_s

calculated pressure at sea-level