Low voltage digital temperature sensor
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3
stts751_reg.h
- Committer:
- cparata
- Date:
- 2019-03-06
- Revision:
- 0:128dae13c732
- Child:
- 1:5859badee052
File content as of revision 0:128dae13c732:
/* ****************************************************************************** * @file stts751_reg.h * @author Sensors Software Solution Team * @brief This file contains all the functions prototypes for the * stts751_reg.c driver. ****************************************************************************** * @attention * * <h2><center>© COPYRIGHT(c) 2018 STMicroelectronics</center></h2> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of STMicroelectronics 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. * */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef STTS751_REGS_H #define STTS751_REGS_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include <stdint.h> #include <math.h> /** @addtogroup STTS751 * @{ * */ /** @defgroup STTS751_sensors_common_types * @{ * */ #ifndef MEMS_SHARED_TYPES #define MEMS_SHARED_TYPES /** * @defgroup axisXbitXX_t * @brief These unions are useful to represent different sensors data type. * These unions are not need by the driver. * * REMOVING the unions you are compliant with: * MISRA-C 2012 [Rule 19.2] -> " Union are not allowed " * * @{ * */ typedef union{ int16_t i16bit[3]; uint8_t u8bit[6]; } axis3bit16_t; typedef union{ int16_t i16bit; uint8_t u8bit[2]; } axis1bit16_t; typedef union{ int32_t i32bit[3]; uint8_t u8bit[12]; } axis3bit32_t; typedef union{ int32_t i32bit; uint8_t u8bit[4]; } axis1bit32_t; /** * @} * */ typedef struct{ uint8_t bit0 : 1; uint8_t bit1 : 1; uint8_t bit2 : 1; uint8_t bit3 : 1; uint8_t bit4 : 1; uint8_t bit5 : 1; uint8_t bit6 : 1; uint8_t bit7 : 1; } bitwise_t; #define PROPERTY_DISABLE (0U) #define PROPERTY_ENABLE (1U) #endif /* MEMS_SHARED_TYPES */ /** * @} * */ /** @addtogroup STTS751_Interfaces_Functions * @brief This section provide a set of functions used to read and * write a generic register of the device. * MANDATORY: return 0 -> no Error. * @{ * */ typedef int32_t (*stts751_write_ptr)(void *, uint8_t, uint8_t*, uint16_t); typedef int32_t (*stts751_read_ptr) (void *, uint8_t, uint8_t*, uint16_t); typedef struct { /** Component mandatory fields **/ stts751_write_ptr write_reg; stts751_read_ptr read_reg; /** Customizable optional pointer **/ void *handle; } stts751_ctx_t; /** * @} * */ /** @defgroup STTS751_Infos * @{ * */ /** I2C Device Address 8 bit format **/ #define STTS751_0xxxx_ADD_7K5 0x91U #define STTS751_0xxxx_ADD_12K 0x93U #define STTS751_0xxxx_ADD_20K 0x71U #define STTS751_0xxxx_ADD_33K 0x73U #define STTS751_1xxxx_ADD_7K5 0x95U #define STTS751_1xxxx_ADD_12K 0x97U #define STTS751_1xxxx_ADD_20K 0x75U #define STTS751_1xxxx_ADD_33K 0x77U /** Device Identification **/ /* Product ID */ #define STTS751_ID_0xxxx 0x00U #define STTS751_ID_1xxxx 0x01U /* Manufacturer ID */ #define STTS751_ID_MAN 0x53U /* Revision number */ #define STTS751_REV 0x01U /** * @} * */ #define STTS751_TEMPERATURE_HIGH 0x00U #define STTS751_STATUS 0x01U typedef struct { uint8_t thrm : 1; uint8_t not_used_01 : 4; uint8_t t_low : 1; uint8_t t_high : 1; uint8_t busy : 1; } stts751_status_t; #define STTS751_TEMPERATURE_LOW 0x02U #define STTS751_CONFIGURATION 0x03U typedef struct { uint8_t not_used_01 : 2; uint8_t tres : 2; uint8_t not_used_02 : 2; uint8_t stop : 1; uint8_t mask1 : 1; } stts751_configuration_t; #define STTS751_CONVERSION_RATE 0x04U typedef struct { uint8_t conv : 4; uint8_t not_used_01 : 4; } stts751_conversion_rate_t; #define STTS751_TEMPERATURE_HIGH_LIMIT_HIGH 0x05U #define STTS751_TEMPERATURE_HIGH_LIMIT_LOW 0x06U #define STTS751_TEMPERATURE_LOW_LIMIT_HIGH 0x07U #define STTS751_TEMPERATURE_LOW_LIMIT_LOW 0x08U #define STTS751_ONE_SHOT 0x0FU #define STTS751_THERM_LIMIT 0x20U #define STTS751_THERM_HYSTERESIS 0x21U #define STTS751_SMBUS_TIMEOUT 0x22U typedef struct { uint8_t not_used_01 : 7; uint8_t timeout : 1; } stts751_smbus_timeout_t; #define STTS751_PRODUCT_ID 0xFDU #define STTS751_MANUFACTURER_ID 0xFEU #define STTS751_REVISION_ID 0xFFU /** * @defgroup STTS751_Register_Union * @brief This union group all the registers that has a bitfield * description. * This union is useful but not need by the driver. * * REMOVING this union you are compliant with: * MISRA-C 2012 [Rule 19.2] -> " Union are not allowed " * * @{ * */ typedef union{ stts751_status_t status; stts751_configuration_t configuration; stts751_conversion_rate_t conversion_rate; stts751_smbus_timeout_t smbus_timeout; bitwise_t bitwise; uint8_t byte; } stts751_reg_t; /** * @} * */ int32_t stts751_read_reg(stts751_ctx_t *ctx, uint8_t reg, uint8_t* data, uint16_t len); int32_t stts751_write_reg(stts751_ctx_t *ctx, uint8_t reg, uint8_t* data, uint16_t len); extern float stts751_from_lsb_to_celsius(int16_t lsb); extern int16_t stts751_from_celsius_to_lsb(float celsius); typedef enum { STTS751_TEMP_ODR_OFF = 0x80, STTS751_TEMP_ODR_ONE_SHOT = 0x90, STTS751_TEMP_ODR_62mHz5 = 0x00, STTS751_TEMP_ODR_125mHz = 0x01, STTS751_TEMP_ODR_250mHz = 0x02, STTS751_TEMP_ODR_500mHz = 0x03, STTS751_TEMP_ODR_1Hz = 0x04, STTS751_TEMP_ODR_2Hz = 0x05, STTS751_TEMP_ODR_4Hz = 0x06, STTS751_TEMP_ODR_8Hz = 0x07, STTS751_TEMP_ODR_16Hz = 0x08, /* 9, 10, or 11-bit resolutions only */ STTS751_TEMP_ODR_32Hz = 0x09, /* 9 or 10-bit resolutions only */ } stts751_odr_t; int32_t stts751_temp_data_rate_set(stts751_ctx_t *ctx, stts751_odr_t val); int32_t stts751_temp_data_rate_get(stts751_ctx_t *ctx, stts751_odr_t *val); typedef enum { STTS751_9bit = 2, STTS751_10bit = 0, STTS751_11bit = 1, STTS751_12bit = 3, } stts751_tres_t; int32_t stts751_resolution_set(stts751_ctx_t *ctx, stts751_tres_t val); int32_t stts751_resolution_get(stts751_ctx_t *ctx, stts751_tres_t *val); int32_t stts751_status_reg_get(stts751_ctx_t *ctx, stts751_status_t *val); int32_t stts751_flag_busy_get(stts751_ctx_t *ctx, uint8_t *val); int32_t stts751_temperature_raw_get(stts751_ctx_t *ctx, int16_t *buff); int32_t stts751_pin_event_route_set(stts751_ctx_t *ctx, uint8_t val); int32_t stts751_pin_event_route_get(stts751_ctx_t *ctx, uint8_t *val); int32_t stts751_high_temperature_threshold_set(stts751_ctx_t *ctx, int16_t buff); int32_t stts751_high_temperature_threshold_get(stts751_ctx_t *ctx, int16_t *buff); int32_t stts751_low_temperature_threshold_set(stts751_ctx_t *ctx, int16_t buff); int32_t stts751_low_temperature_threshold_get(stts751_ctx_t *ctx, int16_t *buff); int32_t stts751_ota_thermal_limit_set(stts751_ctx_t *ctx, int8_t val); int32_t stts751_ota_thermal_limit_get(stts751_ctx_t *ctx, int8_t *val); int32_t stts751_ota_thermal_hyst_set(stts751_ctx_t *ctx, int8_t val); int32_t stts751_ota_thermal_hyst_get(stts751_ctx_t *ctx, int8_t *val); int32_t stts751_smbus_timeout_set(stts751_ctx_t *ctx, uint8_t val); int32_t stts751_smbus_timeout_get(stts751_ctx_t *ctx, uint8_t *val); typedef struct { uint8_t product_id; uint8_t manufacturer_id; uint8_t revision_id; } stts751_id_t; int32_t stts751_device_id_get(stts751_ctx_t *ctx, stts751_id_t *buff); /** * @} * */ #ifdef __cplusplus } #endif #endif /*STTS751_REGS_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/