Low voltage digital temperature sensor
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3
Diff: STTS751Sensor.cpp
- Revision:
- 1:5859badee052
- Parent:
- 0:128dae13c732
- Child:
- 2:2ea2e88ce467
diff -r 128dae13c732 -r 5859badee052 STTS751Sensor.cpp
--- a/STTS751Sensor.cpp Wed Mar 06 10:18:41 2019 +0000
+++ b/STTS751Sensor.cpp Wed Jul 24 14:20:10 2019 +0000
@@ -4,7 +4,7 @@
* @author SRA
* @version V1.0.0
* @date February 2019
- * @brief Implementation of a STTS751 temperature sensor.
+ * @brief Implementation of a STTS751 temperature sensor.
******************************************************************************
* @attention
*
@@ -50,10 +50,10 @@
*/
STTS751Sensor::STTS751Sensor(DevI2C *i2c, uint8_t address, PinName int_pin) : _dev_i2c(i2c), _address(address), _int_irq(int_pin)
{
- assert (i2c);
- _reg_ctx.write_reg = STTS751_io_write;
- _reg_ctx.read_reg = STTS751_io_read;
- _reg_ctx.handle = (void *)this;
+ assert(i2c);
+ _reg_ctx.write_reg = STTS751_io_write;
+ _reg_ctx.read_reg = STTS751_io_read;
+ _reg_ctx.handle = (void *)this;
}
/**
@@ -63,30 +63,27 @@
*/
int STTS751Sensor::init(void *init)
{
- /* Disable EVENT pin of SMBus. */
- if (stts751_pin_event_route_set(&_reg_ctx, PROPERTY_ENABLE) != 0)
- {
- return 1;
- }
+ /* Disable EVENT pin of SMBus. */
+ if (stts751_pin_event_route_set(&_reg_ctx, PROPERTY_ENABLE) != 0) {
+ return 1;
+ }
- /* Set default ODR */
- _last_odr = 1.0f;
+ /* Set default ODR */
+ _last_odr = 1.0f;
- /* Set the resolution to the maximum allowed value */
- if (stts751_resolution_set(&_reg_ctx, STTS751_12bit) != 0)
- {
- return 1;
- }
+ /* Set the resolution to the maximum allowed value */
+ if (stts751_resolution_set(&_reg_ctx, STTS751_12bit) != 0) {
+ return 1;
+ }
- /* Put the component in standby mode. */
- if (stts751_temp_data_rate_set(&_reg_ctx, STTS751_TEMP_ODR_OFF) != 0)
- {
- return 1;
- }
-
- _is_enabled = 0;
-
- return 0;
+ /* Put the component in standby mode. */
+ if (stts751_temp_data_rate_set(&_reg_ctx, STTS751_TEMP_ODR_OFF) != 0) {
+ return 1;
+ }
+
+ _is_enabled = 0;
+
+ return 0;
}
/**
@@ -96,16 +93,15 @@
*/
int STTS751Sensor::read_id(uint8_t *id)
{
- stts751_id_t buf;
+ stts751_id_t buf;
- if (stts751_device_id_get(&_reg_ctx, &buf) != 0)
- {
- return 1;
- }
+ if (stts751_device_id_get(&_reg_ctx, &buf) != 0) {
+ return 1;
+ }
- *id = buf.manufacturer_id;
+ *id = buf.manufacturer_id;
- return 0;
+ return 0;
}
/**
@@ -114,21 +110,19 @@
*/
int STTS751Sensor::enable()
{
- /* Check if the component is already enabled */
- if (_is_enabled == 1U)
- {
- return 0;
- }
+ /* Check if the component is already enabled */
+ if (_is_enabled == 1U) {
+ return 0;
+ }
- /* Power on the component and set the odr. */
- if (set_odr(_last_odr) != 0)
- {
- return 1;
- }
+ /* Power on the component and set the odr. */
+ if (set_odr(_last_odr) != 0) {
+ return 1;
+ }
- _is_enabled = 1;
+ _is_enabled = 1;
- return 0;
+ return 0;
}
/**
@@ -137,27 +131,24 @@
*/
int STTS751Sensor::disable()
{
- /* Check if the component is already disabled */
- if (_is_enabled == 0U)
- {
- return 0;
- }
+ /* Check if the component is already disabled */
+ if (_is_enabled == 0U) {
+ return 0;
+ }
- /* Save the current odr. */
- if (get_odr(&_last_odr) != 0)
- {
- return 1;
- }
-
- /* Put the component in standby mode. */
- if (stts751_temp_data_rate_set(&_reg_ctx, STTS751_TEMP_ODR_OFF) != 0)
- {
- return 1;
- }
+ /* Save the current odr. */
+ if (get_odr(&_last_odr) != 0) {
+ return 1;
+ }
- _is_enabled = 0;
+ /* Put the component in standby mode. */
+ if (stts751_temp_data_rate_set(&_reg_ctx, STTS751_TEMP_ODR_OFF) != 0) {
+ return 1;
+ }
- return 0;
+ _is_enabled = 0;
+
+ return 0;
}
/**
@@ -167,67 +158,65 @@
*/
int STTS751Sensor::get_odr(float *odr)
{
- int ret = 0;
- stts751_odr_t odr_low_level;
+ int ret = 0;
+ stts751_odr_t odr_low_level;
- if (stts751_temp_data_rate_get(&_reg_ctx, &odr_low_level) != 0)
- {
- return 1;
- }
+ if (stts751_temp_data_rate_get(&_reg_ctx, &odr_low_level) != 0) {
+ return 1;
+ }
- switch (odr_low_level)
- {
- case STTS751_TEMP_ODR_OFF:
- case STTS751_TEMP_ODR_ONE_SHOT:
- *odr = 0.0f;
- break;
+ switch (odr_low_level) {
+ case STTS751_TEMP_ODR_OFF:
+ case STTS751_TEMP_ODR_ONE_SHOT:
+ *odr = 0.0f;
+ break;
- case STTS751_TEMP_ODR_62mHz5:
- *odr = 0.0625f;
- break;
+ case STTS751_TEMP_ODR_62mHz5:
+ *odr = 0.0625f;
+ break;
- case STTS751_TEMP_ODR_125mHz:
- *odr = 0.125f;
- break;
+ case STTS751_TEMP_ODR_125mHz:
+ *odr = 0.125f;
+ break;
- case STTS751_TEMP_ODR_250mHz:
- *odr = 0.250f;
- break;
+ case STTS751_TEMP_ODR_250mHz:
+ *odr = 0.250f;
+ break;
- case STTS751_TEMP_ODR_500mHz:
- *odr = 0.500f;
- break;
+ case STTS751_TEMP_ODR_500mHz:
+ *odr = 0.500f;
+ break;
- case STTS751_TEMP_ODR_1Hz:
- *odr = 1.0f;
- break;
+ case STTS751_TEMP_ODR_1Hz:
+ *odr = 1.0f;
+ break;
- case STTS751_TEMP_ODR_2Hz:
- *odr = 2.0f;
- break;
+ case STTS751_TEMP_ODR_2Hz:
+ *odr = 2.0f;
+ break;
- case STTS751_TEMP_ODR_4Hz:
- *odr = 4.0f;
- break;
+ case STTS751_TEMP_ODR_4Hz:
+ *odr = 4.0f;
+ break;
- case STTS751_TEMP_ODR_8Hz:
- *odr = 8.0f;
- break;
+ case STTS751_TEMP_ODR_8Hz:
+ *odr = 8.0f;
+ break;
- case STTS751_TEMP_ODR_16Hz:
- *odr = 16.0f;
- break;
+ case STTS751_TEMP_ODR_16Hz:
+ *odr = 16.0f;
+ break;
- case STTS751_TEMP_ODR_32Hz:
- *odr = 32.0f;
- break;
+ case STTS751_TEMP_ODR_32Hz:
+ *odr = 32.0f;
+ break;
- default:
- ret = 1;
- break;
- }
+ default:
+ ret = 1;
+ break;
+ }
- return ret;
+ return ret;
}
/**
@@ -237,52 +226,46 @@
*/
int STTS751Sensor::set_odr(float odr)
{
- stts751_odr_t new_odr;
- stts751_tres_t res;
+ stts751_odr_t new_odr;
+ stts751_tres_t res;
- /* Get the current resolution */
- if (stts751_resolution_get(&_reg_ctx, &res) != 0)
- {
- return 1;
- }
+ /* Get the current resolution */
+ if (stts751_resolution_get(&_reg_ctx, &res) != 0) {
+ return 1;
+ }
- /* If the requested odr is 16Hz we cannot use the 12 bits resolution */
- if(odr == 16.0f && res == STTS751_12bit)
- {
- /* We force resolution to the maximum allowed value */
- if (stts751_resolution_set(&_reg_ctx, STTS751_11bit) != 0)
- {
- return 1;
+ /* If the requested odr is 16Hz we cannot use the 12 bits resolution */
+ if (odr == 16.0f && res == STTS751_12bit) {
+ /* We force resolution to the maximum allowed value */
+ if (stts751_resolution_set(&_reg_ctx, STTS751_11bit) != 0) {
+ return 1;
+ }
}
- }
- /* If the requested odr is 32Hz we cannot use the 12 bits and 11 bits resolutions */
- if(odr == 32.0f && (res == STTS751_12bit || res == STTS751_11bit))
- {
- /* We force resolution to the maximum allowed value */
- if (stts751_resolution_set(&_reg_ctx, STTS751_10bit) != 0)
- {
- return 1;
+ /* If the requested odr is 32Hz we cannot use the 12 bits and 11 bits resolutions */
+ if (odr == 32.0f && (res == STTS751_12bit || res == STTS751_11bit)) {
+ /* We force resolution to the maximum allowed value */
+ if (stts751_resolution_set(&_reg_ctx, STTS751_10bit) != 0) {
+ return 1;
+ }
}
- }
- new_odr = (odr <= 0.0625f) ? STTS751_TEMP_ODR_62mHz5
- : (odr <= 0.125f ) ? STTS751_TEMP_ODR_125mHz
- : (odr <= 0.25f ) ? STTS751_TEMP_ODR_250mHz
- : (odr <= 0.5f ) ? STTS751_TEMP_ODR_500mHz
- : (odr <= 1.0f ) ? STTS751_TEMP_ODR_1Hz
- : (odr <= 2.0f ) ? STTS751_TEMP_ODR_2Hz
- : (odr <= 4.0f ) ? STTS751_TEMP_ODR_4Hz
- : (odr <= 8.0f ) ? STTS751_TEMP_ODR_8Hz
- : (odr <= 16.0f ) ? STTS751_TEMP_ODR_16Hz
- : STTS751_TEMP_ODR_32Hz;
+ new_odr = (odr <= 0.0625f) ? STTS751_TEMP_ODR_62mHz5
+ : (odr <= 0.125f) ? STTS751_TEMP_ODR_125mHz
+ : (odr <= 0.25f) ? STTS751_TEMP_ODR_250mHz
+ : (odr <= 0.5f) ? STTS751_TEMP_ODR_500mHz
+ : (odr <= 1.0f) ? STTS751_TEMP_ODR_1Hz
+ : (odr <= 2.0f) ? STTS751_TEMP_ODR_2Hz
+ : (odr <= 4.0f) ? STTS751_TEMP_ODR_4Hz
+ : (odr <= 8.0f) ? STTS751_TEMP_ODR_8Hz
+ : (odr <= 16.0f) ? STTS751_TEMP_ODR_16Hz
+ : STTS751_TEMP_ODR_32Hz;
- if (stts751_temp_data_rate_set(&_reg_ctx, new_odr) != 0)
- {
- return 1;
- }
+ if (stts751_temp_data_rate_set(&_reg_ctx, new_odr) != 0) {
+ return 1;
+ }
- return 0;
+ return 0;
}
/**
@@ -292,17 +275,16 @@
*/
int STTS751Sensor::get_temperature(float *value)
{
- int16_t raw_value = 0;
+ int16_t raw_value = 0;
- /* Get the temperature */
- if (stts751_temperature_raw_get(&_reg_ctx, &raw_value) != 0)
- {
- return 1;
- }
+ /* Get the temperature */
+ if (stts751_temperature_raw_get(&_reg_ctx, &raw_value) != 0) {
+ return 1;
+ }
- *value = stts751_from_lsb_to_celsius(raw_value);
+ *value = stts751_from_lsb_to_celsius(raw_value);
- return 0;
+ return 0;
}
/**
@@ -312,22 +294,19 @@
*/
int STTS751Sensor::get_temp_drdy_status(uint8_t *status)
{
- uint8_t val;
+ uint8_t val;
- if (stts751_flag_busy_get(&_reg_ctx, &val) != 0)
- {
- return 1;
- }
+ if (stts751_flag_busy_get(&_reg_ctx, &val) != 0) {
+ return 1;
+ }
- if(val)
- {
- *status = 0;
- } else
- {
- *status = 1;
- }
+ if (val) {
+ *status = 0;
+ } else {
+ *status = 1;
+ }
- return 0;
+ return 0;
}
/**
@@ -337,17 +316,16 @@
*/
int STTS751Sensor::set_low_temp_thr(float value)
{
- int16_t raw_value;
+ int16_t raw_value;
- raw_value = stts751_from_celsius_to_lsb(value);
+ raw_value = stts751_from_celsius_to_lsb(value);
- /* Set the temperature threshold */
- if (stts751_low_temperature_threshold_set(&_reg_ctx, raw_value) != 0)
- {
- return 1;
- }
+ /* Set the temperature threshold */
+ if (stts751_low_temperature_threshold_set(&_reg_ctx, raw_value) != 0) {
+ return 1;
+ }
- return 0;
+ return 0;
}
/**
@@ -357,17 +335,16 @@
*/
int STTS751Sensor::set_high_temp_thr(float value)
{
- int16_t raw_value;
+ int16_t raw_value;
- raw_value = stts751_from_celsius_to_lsb(value);
+ raw_value = stts751_from_celsius_to_lsb(value);
- /* Set the temperature threshold */
- if (stts751_high_temperature_threshold_set(&_reg_ctx, raw_value) != 0)
- {
- return 1;
- }
+ /* Set the temperature threshold */
+ if (stts751_high_temperature_threshold_set(&_reg_ctx, raw_value) != 0) {
+ return 1;
+ }
- return 0;
+ return 0;
}
/**
@@ -379,19 +356,18 @@
*/
int STTS751Sensor::get_temp_limit_status(uint8_t *high_limit, uint8_t *low_limit, uint8_t *therm_limit)
{
- stts751_status_t status;
+ stts751_status_t status;
- /* Read status register */
- if (stts751_status_reg_get(&_reg_ctx, &status) != 0)
- {
- return 1;
- }
+ /* Read status register */
+ if (stts751_status_reg_get(&_reg_ctx, &status) != 0) {
+ return 1;
+ }
- *high_limit = status.t_high;
- *low_limit = status.t_low;
- *therm_limit = status.thrm;
+ *high_limit = status.t_high;
+ *low_limit = status.t_low;
+ *therm_limit = status.thrm;
- return 0;
+ return 0;
}
/**
@@ -401,17 +377,20 @@
*/
int STTS751Sensor::set_event_pin(uint8_t enable)
{
- uint8_t state;
-
- /* The MASK1 bit in configuration register has inverted logic */
- if (enable == 0) state = PROPERTY_ENABLE; else state = PROPERTY_DISABLE;
+ uint8_t state;
- if (stts751_pin_event_route_set(&_reg_ctx, state) != 0)
- {
- return 1;
- }
+ /* The MASK1 bit in configuration register has inverted logic */
+ if (enable == 0) {
+ state = PROPERTY_ENABLE;
+ } else {
+ state = PROPERTY_DISABLE;
+ }
- return 0;
+ if (stts751_pin_event_route_set(&_reg_ctx, state) != 0) {
+ return 1;
+ }
+
+ return 0;
}
/**
@@ -422,12 +401,11 @@
*/
int STTS751Sensor::read_reg(uint8_t reg, uint8_t *data)
{
- if (stts751_read_reg(&_reg_ctx, reg, data, 1) != 0)
- {
- return 1;
- }
+ if (stts751_read_reg(&_reg_ctx, reg, data, 1) != 0) {
+ return 1;
+ }
- return 0;
+ return 0;
}
/**
@@ -438,12 +416,11 @@
*/
int STTS751Sensor::write_reg(uint8_t reg, uint8_t data)
{
- if (stts751_write_reg(&_reg_ctx, reg, &data, 1) != 0)
- {
- return 1;
- }
+ if (stts751_write_reg(&_reg_ctx, reg, &data, 1) != 0) {
+ return 1;
+ }
- return 0;
+ return 0;
}
/**
@@ -452,13 +429,12 @@
*/
int STTS751Sensor::set_one_shot()
{
- /* Start One Shot Measurement */
- if(stts751_temp_data_rate_set(&_reg_ctx, STTS751_TEMP_ODR_ONE_SHOT) != 0)
- {
- return 1;
- }
+ /* Start One Shot Measurement */
+ if (stts751_temp_data_rate_set(&_reg_ctx, STTS751_TEMP_ODR_ONE_SHOT) != 0) {
+ return 1;
+ }
- return 0;
+ return 0;
}
/**
@@ -468,33 +444,29 @@
*/
int STTS751Sensor::get_one_shot_status(uint8_t *status)
{
- uint8_t busy;
+ uint8_t busy;
- /* Get Busy flag */
- if(stts751_flag_busy_get(&_reg_ctx, &busy) != 0)
- {
- return 1;
- }
+ /* Get Busy flag */
+ if (stts751_flag_busy_get(&_reg_ctx, &busy) != 0) {
+ return 1;
+ }
- if(busy)
- {
- *status = 0;
- }
- else
- {
- *status = 1;
- }
+ if (busy) {
+ *status = 0;
+ } else {
+ *status = 1;
+ }
- return 0;
+ return 0;
}
int32_t STTS751_io_write(void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite)
{
- return ((STTS751Sensor *)handle)->io_write(pBuffer, WriteAddr, nBytesToWrite);
+ return ((STTS751Sensor *)handle)->io_write(pBuffer, WriteAddr, nBytesToWrite);
}
int32_t STTS751_io_read(void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead)
{
- return ((STTS751Sensor *)handle)->io_read(pBuffer, ReadAddr, nBytesToRead);
+ return ((STTS751Sensor *)handle)->io_read(pBuffer, ReadAddr, nBytesToRead);
}