Low voltage digital temperature sensor

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3

Revision:
0:128dae13c732
Child:
1:5859badee052
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stts751_reg.h	Wed Mar 06 10:18:41 2019 +0000
@@ -0,0 +1,325 @@
+/*
+ ******************************************************************************
+ * @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>&copy; 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****/