Garage Door Monitor and Opener

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Introduction

This system implements a simple garage door opener and environmental monitor. The hardware connects to the internet using Wi-Fi then on to the Pelion Device Management Platform which provides device monitoring and secure firmware updates over the air (FOTA). Pelion Device Management provides a flexible set of REST APIs which we will use to communicate to a web application running on an EC-2 instance in AWS. The web application will serve a web page where we can monitor and control our garage..

This project is intended to work on the DISCO-L475VG-IOT01A from ST Microelectronics It implements a simple actuator to drive a relay to simulate pushing the "open" button on older style garage doors which do not use a rolling code interface.

The system is designed to be mounted over the door so that the on board time of flight sensor can be used to detect if the door is open or closed.

The system also monitors temperature, humidity and barometric pressure.

https://os.mbed.com/media/uploads/JimCarver/garageopener.jpg

Hardware Requirements:

DISCO-L475G-IOT01A https://os.mbed.com/platforms/ST-Discovery-L475E-IOT01A/

Seeed Studio Grove Relay module https://www.seeedstudio.com/Grove-Relay.html

Seeed Studio Grove cable, I used this one: https://www.seeedstudio.com/Grove-4-pin-Male-Jumper-to-Grove-4-pin-Conversion-Cable-5-PCs-per-Pack.html

Connect to the PMOD connector like this:

https://os.mbed.com/media/uploads/JimCarver/opener.jpg

This shows how I installed so that the time of flight sensor can detect when the door is open

https://os.mbed.com/media/uploads/JimCarver/opener1.jpg https://os.mbed.com/media/uploads/JimCarver/opener2.jpg

To use the project:

You will also need a Pelion developers account.

I suggest you first use the Pelion quick state to become familiar with Pelion Device Management. https://os.mbed.com/guides/connect-device-to-pelion/1/?board=ST-Discovery-L475E-IOT01A

Web Interface

For my web interface I am running node-red under Ubuntu in an EC2 instance on AWS. This can run for 12 month within the constraints of their free tier. Here is a tutorial: https://nodered.org/docs/getting-started/aws

You will also need to install several node-red add ons:

sudo npm install -g node-red-dashboard

sudo npm install -g node-red-contrib-mbed-cloud

sudo npm istall -g node-red-contrib-moment

After starting node-red import the contents of GarageFlow.txt from the project, pin the flow into the page.

To enable your web app to access your Pelion account you need an API key.

First you will neet to use your Pelion account to create an API key.

https://os.mbed.com/media/uploads/JimCarver/api_portal.jpg

Now we need to apply that API key to your Node-Red flow.

https://os.mbed.com/media/uploads/JimCarver/api_node-red.jpg

Committer:
JimCarver
Date:
Thu Dec 05 19:03:48 2019 +0000
Revision:
37:ec1124e5ec1f
Parent:
18:a15bfe7aaebd
Bug fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 18:a15bfe7aaebd 1 /**
screamer 18:a15bfe7aaebd 2 ******************************************************************************
screamer 18:a15bfe7aaebd 3 * @file HTS221_driver.c
screamer 18:a15bfe7aaebd 4 * @author HESA Application Team
screamer 18:a15bfe7aaebd 5 * @version V1.1
screamer 18:a15bfe7aaebd 6 * @date 10-August-2016
screamer 18:a15bfe7aaebd 7 * @brief HTS221 driver file
screamer 18:a15bfe7aaebd 8 ******************************************************************************
screamer 18:a15bfe7aaebd 9 * @attention
screamer 18:a15bfe7aaebd 10 *
screamer 18:a15bfe7aaebd 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
screamer 18:a15bfe7aaebd 12 *
screamer 18:a15bfe7aaebd 13 * Redistribution and use in source and binary forms, with or without modification,
screamer 18:a15bfe7aaebd 14 * are permitted provided that the following conditions are met:
screamer 18:a15bfe7aaebd 15 * 1. Redistributions of source code must retain the above copyright notice,
screamer 18:a15bfe7aaebd 16 * this list of conditions and the following disclaimer.
screamer 18:a15bfe7aaebd 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
screamer 18:a15bfe7aaebd 18 * this list of conditions and the following disclaimer in the documentation
screamer 18:a15bfe7aaebd 19 * and/or other materials provided with the distribution.
screamer 18:a15bfe7aaebd 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
screamer 18:a15bfe7aaebd 21 * may be used to endorse or promote products derived from this software
screamer 18:a15bfe7aaebd 22 * without specific prior written permission.
screamer 18:a15bfe7aaebd 23 *
screamer 18:a15bfe7aaebd 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
screamer 18:a15bfe7aaebd 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
screamer 18:a15bfe7aaebd 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
screamer 18:a15bfe7aaebd 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
screamer 18:a15bfe7aaebd 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
screamer 18:a15bfe7aaebd 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
screamer 18:a15bfe7aaebd 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
screamer 18:a15bfe7aaebd 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
screamer 18:a15bfe7aaebd 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
screamer 18:a15bfe7aaebd 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
screamer 18:a15bfe7aaebd 34 *
screamer 18:a15bfe7aaebd 35 ******************************************************************************
screamer 18:a15bfe7aaebd 36 */
screamer 18:a15bfe7aaebd 37
screamer 18:a15bfe7aaebd 38 /* Includes ------------------------------------------------------------------*/
screamer 18:a15bfe7aaebd 39 #include "HTS221_driver.h"
screamer 18:a15bfe7aaebd 40
screamer 18:a15bfe7aaebd 41 #ifdef __cplusplus
screamer 18:a15bfe7aaebd 42 extern "C" {
screamer 18:a15bfe7aaebd 43 #endif
screamer 18:a15bfe7aaebd 44
screamer 18:a15bfe7aaebd 45 #ifdef USE_FULL_ASSERT_HTS221
screamer 18:a15bfe7aaebd 46 #include <stdio.h>
screamer 18:a15bfe7aaebd 47 #endif
screamer 18:a15bfe7aaebd 48
screamer 18:a15bfe7aaebd 49
screamer 18:a15bfe7aaebd 50 /** @addtogroup Environmental_Sensor
screamer 18:a15bfe7aaebd 51 * @{
screamer 18:a15bfe7aaebd 52 */
screamer 18:a15bfe7aaebd 53
screamer 18:a15bfe7aaebd 54 /** @defgroup HTS221_DRIVER
screamer 18:a15bfe7aaebd 55 * @brief HTS221 DRIVER
screamer 18:a15bfe7aaebd 56 * @{
screamer 18:a15bfe7aaebd 57 */
screamer 18:a15bfe7aaebd 58
screamer 18:a15bfe7aaebd 59 /** @defgroup HTS221_Imported_Function_Prototypes
screamer 18:a15bfe7aaebd 60 * @{
screamer 18:a15bfe7aaebd 61 */
screamer 18:a15bfe7aaebd 62
screamer 18:a15bfe7aaebd 63 extern uint8_t HTS221_io_write( void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite );
screamer 18:a15bfe7aaebd 64 extern uint8_t HTS221_io_read( void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead );
screamer 18:a15bfe7aaebd 65
screamer 18:a15bfe7aaebd 66 /**
screamer 18:a15bfe7aaebd 67 * @}
screamer 18:a15bfe7aaebd 68 */
screamer 18:a15bfe7aaebd 69
screamer 18:a15bfe7aaebd 70 /** @defgroup HTS221_Private_Function_Prototypes
screamer 18:a15bfe7aaebd 71 * @{
screamer 18:a15bfe7aaebd 72 */
screamer 18:a15bfe7aaebd 73
screamer 18:a15bfe7aaebd 74 /**
screamer 18:a15bfe7aaebd 75 * @}
screamer 18:a15bfe7aaebd 76 */
screamer 18:a15bfe7aaebd 77
screamer 18:a15bfe7aaebd 78 /** @defgroup HTS221_Private_Functions
screamer 18:a15bfe7aaebd 79 * @{
screamer 18:a15bfe7aaebd 80 */
screamer 18:a15bfe7aaebd 81
screamer 18:a15bfe7aaebd 82 /**
screamer 18:a15bfe7aaebd 83 * @}
screamer 18:a15bfe7aaebd 84 */
screamer 18:a15bfe7aaebd 85
screamer 18:a15bfe7aaebd 86 /** @defgroup HTS221_Public_Functions
screamer 18:a15bfe7aaebd 87 * @{
screamer 18:a15bfe7aaebd 88 */
screamer 18:a15bfe7aaebd 89
screamer 18:a15bfe7aaebd 90 /*******************************************************************************
screamer 18:a15bfe7aaebd 91 * Function Name : HTS221_read_reg
screamer 18:a15bfe7aaebd 92 * Description : Generic Reading function. It must be fullfilled with either
screamer 18:a15bfe7aaebd 93 * : I2C or SPI reading functions
screamer 18:a15bfe7aaebd 94 * Input : Register Address
screamer 18:a15bfe7aaebd 95 * Output : Data Read
screamer 18:a15bfe7aaebd 96 * Return : None
screamer 18:a15bfe7aaebd 97 *******************************************************************************/
screamer 18:a15bfe7aaebd 98 HTS221_Error_et HTS221_read_reg( void *handle, uint8_t RegAddr, uint16_t NumByteToRead, uint8_t *Data )
screamer 18:a15bfe7aaebd 99 {
screamer 18:a15bfe7aaebd 100
screamer 18:a15bfe7aaebd 101 if ( NumByteToRead > 1 ) RegAddr |= 0x80;
screamer 18:a15bfe7aaebd 102
screamer 18:a15bfe7aaebd 103 if ( HTS221_io_read( handle, RegAddr, Data, NumByteToRead ) )
screamer 18:a15bfe7aaebd 104 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 105 else
screamer 18:a15bfe7aaebd 106 return HTS221_OK;
screamer 18:a15bfe7aaebd 107 }
screamer 18:a15bfe7aaebd 108
screamer 18:a15bfe7aaebd 109 /*******************************************************************************
screamer 18:a15bfe7aaebd 110 * Function Name : HTS221_write_reg
screamer 18:a15bfe7aaebd 111 * Description : Generic Writing function. It must be fullfilled with either
screamer 18:a15bfe7aaebd 112 * : I2C or SPI writing function
screamer 18:a15bfe7aaebd 113 * Input : Register Address, Data to be written
screamer 18:a15bfe7aaebd 114 * Output : None
screamer 18:a15bfe7aaebd 115 * Return : None
screamer 18:a15bfe7aaebd 116 *******************************************************************************/
screamer 18:a15bfe7aaebd 117 HTS221_Error_et HTS221_write_reg( void *handle, uint8_t RegAddr, uint16_t NumByteToWrite, uint8_t *Data )
screamer 18:a15bfe7aaebd 118 {
screamer 18:a15bfe7aaebd 119
screamer 18:a15bfe7aaebd 120 if ( NumByteToWrite > 1 ) RegAddr |= 0x80;
screamer 18:a15bfe7aaebd 121
screamer 18:a15bfe7aaebd 122 if ( HTS221_io_write( handle, RegAddr, Data, NumByteToWrite ) )
screamer 18:a15bfe7aaebd 123 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 124 else
screamer 18:a15bfe7aaebd 125 return HTS221_OK;
screamer 18:a15bfe7aaebd 126 }
screamer 18:a15bfe7aaebd 127
screamer 18:a15bfe7aaebd 128 /**
screamer 18:a15bfe7aaebd 129 * @brief Get the version of this driver.
screamer 18:a15bfe7aaebd 130 * @param pxVersion pointer to a HTS221_DriverVersion_st structure that contains the version information.
screamer 18:a15bfe7aaebd 131 * This parameter is a pointer to @ref HTS221_DriverVersion_st.
screamer 18:a15bfe7aaebd 132 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 133 */
screamer 18:a15bfe7aaebd 134 HTS221_Error_et HTS221_Get_DriverVersion(HTS221_DriverVersion_st* version)
screamer 18:a15bfe7aaebd 135 {
screamer 18:a15bfe7aaebd 136 version->Major = HTS221_DRIVER_VERSION_MAJOR;
screamer 18:a15bfe7aaebd 137 version->Minor = HTS221_DRIVER_VERSION_MINOR;
screamer 18:a15bfe7aaebd 138 version->Point = HTS221_DRIVER_VERSION_POINT;
screamer 18:a15bfe7aaebd 139
screamer 18:a15bfe7aaebd 140 return HTS221_OK;
screamer 18:a15bfe7aaebd 141 }
screamer 18:a15bfe7aaebd 142
screamer 18:a15bfe7aaebd 143 /**
screamer 18:a15bfe7aaebd 144 * @brief Get device type ID.
screamer 18:a15bfe7aaebd 145 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 146 * @param deviceid pointer to the returned device type ID.
screamer 18:a15bfe7aaebd 147 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 148 */
screamer 18:a15bfe7aaebd 149 HTS221_Error_et HTS221_Get_DeviceID(void *handle, uint8_t* deviceid)
screamer 18:a15bfe7aaebd 150 {
screamer 18:a15bfe7aaebd 151 if(HTS221_read_reg(handle, HTS221_WHO_AM_I_REG, 1, deviceid))
screamer 18:a15bfe7aaebd 152 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 153
screamer 18:a15bfe7aaebd 154 return HTS221_OK;
screamer 18:a15bfe7aaebd 155 }
screamer 18:a15bfe7aaebd 156
screamer 18:a15bfe7aaebd 157 /**
screamer 18:a15bfe7aaebd 158 * @brief Initializes the HTS221 with the specified parameters in HTS221_Init_st struct.
screamer 18:a15bfe7aaebd 159 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 160 * @param pxInit pointer to a HTS221_Init_st structure that contains the configuration.
screamer 18:a15bfe7aaebd 161 * This parameter is a pointer to @ref HTS221_Init_st.
screamer 18:a15bfe7aaebd 162 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 163 */
screamer 18:a15bfe7aaebd 164 HTS221_Error_et HTS221_Set_InitConfig(void *handle, HTS221_Init_st* pxInit)
screamer 18:a15bfe7aaebd 165 {
screamer 18:a15bfe7aaebd 166 uint8_t buffer[3];
screamer 18:a15bfe7aaebd 167
screamer 18:a15bfe7aaebd 168 HTS221_assert_param(IS_HTS221_AVGH(pxInit->avg_h));
screamer 18:a15bfe7aaebd 169 HTS221_assert_param(IS_HTS221_AVGT(pxInit->avg_t));
screamer 18:a15bfe7aaebd 170 HTS221_assert_param(IS_HTS221_ODR(pxInit->odr));
screamer 18:a15bfe7aaebd 171 HTS221_assert_param(IS_HTS221_State(pxInit->bdu_status));
screamer 18:a15bfe7aaebd 172 HTS221_assert_param(IS_HTS221_State(pxInit->heater_status));
screamer 18:a15bfe7aaebd 173
screamer 18:a15bfe7aaebd 174 HTS221_assert_param(IS_HTS221_DrdyLevelType(pxInit->irq_level));
screamer 18:a15bfe7aaebd 175 HTS221_assert_param(IS_HTS221_OutputType(pxInit->irq_output_type));
screamer 18:a15bfe7aaebd 176 HTS221_assert_param(IS_HTS221_State(pxInit->irq_enable));
screamer 18:a15bfe7aaebd 177
screamer 18:a15bfe7aaebd 178 if(HTS221_read_reg(handle, HTS221_AV_CONF_REG, 1, buffer))
screamer 18:a15bfe7aaebd 179 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 180
screamer 18:a15bfe7aaebd 181 buffer[0] &= ~(HTS221_AVGH_MASK | HTS221_AVGT_MASK);
screamer 18:a15bfe7aaebd 182 buffer[0] |= (uint8_t)pxInit->avg_h;
screamer 18:a15bfe7aaebd 183 buffer[0] |= (uint8_t)pxInit->avg_t;
screamer 18:a15bfe7aaebd 184
screamer 18:a15bfe7aaebd 185 if(HTS221_write_reg(handle, HTS221_AV_CONF_REG, 1, buffer))
screamer 18:a15bfe7aaebd 186 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 187
screamer 18:a15bfe7aaebd 188 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 3, buffer))
screamer 18:a15bfe7aaebd 189 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 190
screamer 18:a15bfe7aaebd 191 buffer[0] &= ~(HTS221_BDU_MASK | HTS221_ODR_MASK);
screamer 18:a15bfe7aaebd 192 buffer[0] |= (uint8_t)pxInit->odr;
screamer 18:a15bfe7aaebd 193 buffer[0] |= ((uint8_t)pxInit->bdu_status) << HTS221_BDU_BIT;
screamer 18:a15bfe7aaebd 194
screamer 18:a15bfe7aaebd 195 buffer[1] &= ~HTS221_HEATHER_BIT;
screamer 18:a15bfe7aaebd 196 buffer[1] |= ((uint8_t)pxInit->heater_status) << HTS221_HEATHER_BIT;
screamer 18:a15bfe7aaebd 197
screamer 18:a15bfe7aaebd 198 buffer[2] &= ~(HTS221_DRDY_H_L_MASK | HTS221_PP_OD_MASK | HTS221_DRDY_MASK);
screamer 18:a15bfe7aaebd 199 buffer[2] |= ((uint8_t)pxInit->irq_level) << HTS221_DRDY_H_L_BIT;
screamer 18:a15bfe7aaebd 200 buffer[2] |= (uint8_t)pxInit->irq_output_type;
screamer 18:a15bfe7aaebd 201 buffer[2] |= ((uint8_t)pxInit->irq_enable) << HTS221_DRDY_BIT;
screamer 18:a15bfe7aaebd 202
screamer 18:a15bfe7aaebd 203 if(HTS221_write_reg(handle, HTS221_CTRL_REG1, 3, buffer))
screamer 18:a15bfe7aaebd 204 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 205
screamer 18:a15bfe7aaebd 206 return HTS221_OK;
screamer 18:a15bfe7aaebd 207 }
screamer 18:a15bfe7aaebd 208
screamer 18:a15bfe7aaebd 209 /**
screamer 18:a15bfe7aaebd 210 * @brief Returns a HTS221_Init_st struct with the actual configuration.
screamer 18:a15bfe7aaebd 211 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 212 * @param pxInit pointer to a HTS221_Init_st structure.
screamer 18:a15bfe7aaebd 213 * This parameter is a pointer to @ref HTS221_Init_st.
screamer 18:a15bfe7aaebd 214 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 215 */
screamer 18:a15bfe7aaebd 216 HTS221_Error_et HTS221_Get_InitConfig(void *handle, HTS221_Init_st* pxInit)
screamer 18:a15bfe7aaebd 217 {
screamer 18:a15bfe7aaebd 218 uint8_t buffer[3];
screamer 18:a15bfe7aaebd 219
screamer 18:a15bfe7aaebd 220 if(HTS221_read_reg(handle, HTS221_AV_CONF_REG, 1, buffer))
screamer 18:a15bfe7aaebd 221 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 222
screamer 18:a15bfe7aaebd 223 pxInit->avg_h = (HTS221_Avgh_et)(buffer[0] & HTS221_AVGH_MASK);
screamer 18:a15bfe7aaebd 224 pxInit->avg_t = (HTS221_Avgt_et)(buffer[0] & HTS221_AVGT_MASK);
screamer 18:a15bfe7aaebd 225
screamer 18:a15bfe7aaebd 226 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 3, buffer))
screamer 18:a15bfe7aaebd 227 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 228
screamer 18:a15bfe7aaebd 229 pxInit->odr = (HTS221_Odr_et)(buffer[0] & HTS221_ODR_MASK);
screamer 18:a15bfe7aaebd 230 pxInit->bdu_status = (HTS221_State_et)((buffer[0] & HTS221_BDU_MASK) >> HTS221_BDU_BIT);
screamer 18:a15bfe7aaebd 231 pxInit->heater_status = (HTS221_State_et)((buffer[1] & HTS221_HEATHER_MASK) >> HTS221_HEATHER_BIT);
screamer 18:a15bfe7aaebd 232
screamer 18:a15bfe7aaebd 233 pxInit->irq_level = (HTS221_DrdyLevel_et)(buffer[2] & HTS221_DRDY_H_L_MASK);
screamer 18:a15bfe7aaebd 234 pxInit->irq_output_type = (HTS221_OutputType_et)(buffer[2] & HTS221_PP_OD_MASK);
screamer 18:a15bfe7aaebd 235 pxInit->irq_enable = (HTS221_State_et)((buffer[2] & HTS221_DRDY_MASK) >> HTS221_DRDY_BIT);
screamer 18:a15bfe7aaebd 236
screamer 18:a15bfe7aaebd 237 return HTS221_OK;
screamer 18:a15bfe7aaebd 238 }
screamer 18:a15bfe7aaebd 239
screamer 18:a15bfe7aaebd 240 /**
screamer 18:a15bfe7aaebd 241 * @brief De initialization function for HTS221.
screamer 18:a15bfe7aaebd 242 * This function put the HTS221 in power down, make a memory boot and clear the data output flags.
screamer 18:a15bfe7aaebd 243 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 244 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 245 */
screamer 18:a15bfe7aaebd 246 HTS221_Error_et HTS221_DeInit(void *handle)
screamer 18:a15bfe7aaebd 247 {
screamer 18:a15bfe7aaebd 248 uint8_t buffer[4];
screamer 18:a15bfe7aaebd 249
screamer 18:a15bfe7aaebd 250 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 2, buffer))
screamer 18:a15bfe7aaebd 251 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 252
screamer 18:a15bfe7aaebd 253 /* HTS221 in power down */
screamer 18:a15bfe7aaebd 254 buffer[0] |= 0x01 << HTS221_PD_BIT;
screamer 18:a15bfe7aaebd 255
screamer 18:a15bfe7aaebd 256 /* Make HTS221 boot */
screamer 18:a15bfe7aaebd 257 buffer[1] |= 0x01 << HTS221_BOOT_BIT;
screamer 18:a15bfe7aaebd 258
screamer 18:a15bfe7aaebd 259 if(HTS221_write_reg(handle, HTS221_CTRL_REG1, 2, buffer))
screamer 18:a15bfe7aaebd 260 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 261
screamer 18:a15bfe7aaebd 262 /* Dump of data output */
screamer 18:a15bfe7aaebd 263 if(HTS221_read_reg(handle, HTS221_HR_OUT_L_REG, 4, buffer))
screamer 18:a15bfe7aaebd 264 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 265
screamer 18:a15bfe7aaebd 266 return HTS221_OK;
screamer 18:a15bfe7aaebd 267 }
screamer 18:a15bfe7aaebd 268
screamer 18:a15bfe7aaebd 269 /**
screamer 18:a15bfe7aaebd 270 * @brief Read HTS221 output registers, and calculate humidity and temperature.
screamer 18:a15bfe7aaebd 271 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 272 * @param humidity pointer to the returned humidity value that must be divided by 10 to get the value in [%].
screamer 18:a15bfe7aaebd 273 * @param temperature pointer to the returned temperature value that must be divided by 10 to get the value in ['C].
screamer 18:a15bfe7aaebd 274 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 275 */
screamer 18:a15bfe7aaebd 276 HTS221_Error_et HTS221_Get_Measurement(void *handle, uint16_t* humidity, int16_t* temperature)
screamer 18:a15bfe7aaebd 277 {
screamer 18:a15bfe7aaebd 278 if ( HTS221_Get_Temperature( handle, temperature ) == HTS221_ERROR ) return HTS221_ERROR;
screamer 18:a15bfe7aaebd 279 if ( HTS221_Get_Humidity( handle, humidity ) == HTS221_ERROR ) return HTS221_ERROR;
screamer 18:a15bfe7aaebd 280
screamer 18:a15bfe7aaebd 281 return HTS221_OK;
screamer 18:a15bfe7aaebd 282 }
screamer 18:a15bfe7aaebd 283
screamer 18:a15bfe7aaebd 284 /**
screamer 18:a15bfe7aaebd 285 * @brief Read HTS221 output registers. Humidity and temperature.
screamer 18:a15bfe7aaebd 286 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 287 * @param humidity pointer to the returned humidity raw value.
screamer 18:a15bfe7aaebd 288 * @param temperature pointer to the returned temperature raw value.
screamer 18:a15bfe7aaebd 289 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 290 */
screamer 18:a15bfe7aaebd 291 HTS221_Error_et HTS221_Get_RawMeasurement(void *handle, int16_t* humidity, int16_t* temperature)
screamer 18:a15bfe7aaebd 292 {
screamer 18:a15bfe7aaebd 293 uint8_t buffer[4];
screamer 18:a15bfe7aaebd 294
screamer 18:a15bfe7aaebd 295 if(HTS221_read_reg(handle, HTS221_HR_OUT_L_REG, 4, buffer))
screamer 18:a15bfe7aaebd 296 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 297
screamer 18:a15bfe7aaebd 298 *humidity = (int16_t)((((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0]);
screamer 18:a15bfe7aaebd 299 *temperature = (int16_t)((((uint16_t)buffer[3]) << 8) | (uint16_t)buffer[2]);
screamer 18:a15bfe7aaebd 300
screamer 18:a15bfe7aaebd 301 return HTS221_OK;
screamer 18:a15bfe7aaebd 302 }
screamer 18:a15bfe7aaebd 303
screamer 18:a15bfe7aaebd 304 /**
screamer 18:a15bfe7aaebd 305 * @brief Read HTS221 Humidity output registers, and calculate humidity.
screamer 18:a15bfe7aaebd 306 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 307 * @param Pointer to the returned humidity value that must be divided by 10 to get the value in [%].
screamer 18:a15bfe7aaebd 308 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 309 */
screamer 18:a15bfe7aaebd 310 HTS221_Error_et HTS221_Get_Humidity(void *handle, uint16_t* value)
screamer 18:a15bfe7aaebd 311 {
screamer 18:a15bfe7aaebd 312 int16_t H0_T0_out, H1_T0_out, H_T_out;
screamer 18:a15bfe7aaebd 313 int16_t H0_rh, H1_rh;
screamer 18:a15bfe7aaebd 314 uint8_t buffer[2];
screamer 18:a15bfe7aaebd 315 float tmp_f;
screamer 18:a15bfe7aaebd 316
screamer 18:a15bfe7aaebd 317 if(HTS221_read_reg(handle, HTS221_H0_RH_X2, 2, buffer))
screamer 18:a15bfe7aaebd 318 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 319 H0_rh = buffer[0] >> 1;
screamer 18:a15bfe7aaebd 320 H1_rh = buffer[1] >> 1;
screamer 18:a15bfe7aaebd 321
screamer 18:a15bfe7aaebd 322 if(HTS221_read_reg(handle, HTS221_H0_T0_OUT_L, 2, buffer))
screamer 18:a15bfe7aaebd 323 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 324 H0_T0_out = (((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0];
screamer 18:a15bfe7aaebd 325
screamer 18:a15bfe7aaebd 326 if(HTS221_read_reg(handle, HTS221_H1_T0_OUT_L, 2, buffer))
screamer 18:a15bfe7aaebd 327 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 328 H1_T0_out = (((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0];
screamer 18:a15bfe7aaebd 329
screamer 18:a15bfe7aaebd 330 if(HTS221_read_reg(handle, HTS221_HR_OUT_L_REG, 2, buffer))
screamer 18:a15bfe7aaebd 331 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 332 H_T_out = (((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0];
screamer 18:a15bfe7aaebd 333
screamer 18:a15bfe7aaebd 334 tmp_f = (float)(H_T_out - H0_T0_out) * (float)(H1_rh - H0_rh) / (float)(H1_T0_out - H0_T0_out) + H0_rh;
screamer 18:a15bfe7aaebd 335 tmp_f *= 10.0f;
screamer 18:a15bfe7aaebd 336
screamer 18:a15bfe7aaebd 337 *value = ( tmp_f > 1000.0f ) ? 1000
screamer 18:a15bfe7aaebd 338 : ( tmp_f < 0.0f ) ? 0
screamer 18:a15bfe7aaebd 339 : ( uint16_t )tmp_f;
screamer 18:a15bfe7aaebd 340
screamer 18:a15bfe7aaebd 341 return HTS221_OK;
screamer 18:a15bfe7aaebd 342 }
screamer 18:a15bfe7aaebd 343
screamer 18:a15bfe7aaebd 344 /**
screamer 18:a15bfe7aaebd 345 * @brief Read HTS221 humidity output registers.
screamer 18:a15bfe7aaebd 346 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 347 * @param Pointer to the returned humidity raw value.
screamer 18:a15bfe7aaebd 348 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 349 */
screamer 18:a15bfe7aaebd 350 HTS221_Error_et HTS221_Get_HumidityRaw(void *handle, int16_t* value)
screamer 18:a15bfe7aaebd 351 {
screamer 18:a15bfe7aaebd 352 uint8_t buffer[2];
screamer 18:a15bfe7aaebd 353
screamer 18:a15bfe7aaebd 354 if(HTS221_read_reg(handle, HTS221_HR_OUT_L_REG, 2, buffer))
screamer 18:a15bfe7aaebd 355 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 356
screamer 18:a15bfe7aaebd 357 *value = (int16_t)((((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0]);
screamer 18:a15bfe7aaebd 358
screamer 18:a15bfe7aaebd 359 return HTS221_OK;
screamer 18:a15bfe7aaebd 360 }
screamer 18:a15bfe7aaebd 361
screamer 18:a15bfe7aaebd 362 /**
screamer 18:a15bfe7aaebd 363 * @brief Read HTS221 temperature output registers, and calculate temperature.
screamer 18:a15bfe7aaebd 364 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 365 * @param Pointer to the returned temperature value that must be divided by 10 to get the value in ['C].
screamer 18:a15bfe7aaebd 366 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 367 */
screamer 18:a15bfe7aaebd 368 HTS221_Error_et HTS221_Get_Temperature(void *handle, int16_t *value)
screamer 18:a15bfe7aaebd 369 {
screamer 18:a15bfe7aaebd 370 int16_t T0_out, T1_out, T_out, T0_degC_x8_u16, T1_degC_x8_u16;
screamer 18:a15bfe7aaebd 371 int16_t T0_degC, T1_degC;
screamer 18:a15bfe7aaebd 372 uint8_t buffer[4], tmp;
screamer 18:a15bfe7aaebd 373 float tmp_f;
screamer 18:a15bfe7aaebd 374
screamer 18:a15bfe7aaebd 375 if(HTS221_read_reg(handle, HTS221_T0_DEGC_X8, 2, buffer))
screamer 18:a15bfe7aaebd 376 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 377 if(HTS221_read_reg(handle, HTS221_T0_T1_DEGC_H2, 1, &tmp))
screamer 18:a15bfe7aaebd 378 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 379
screamer 18:a15bfe7aaebd 380 T0_degC_x8_u16 = (((uint16_t)(tmp & 0x03)) << 8) | ((uint16_t)buffer[0]);
screamer 18:a15bfe7aaebd 381 T1_degC_x8_u16 = (((uint16_t)(tmp & 0x0C)) << 6) | ((uint16_t)buffer[1]);
screamer 18:a15bfe7aaebd 382 T0_degC = T0_degC_x8_u16 >> 3;
screamer 18:a15bfe7aaebd 383 T1_degC = T1_degC_x8_u16 >> 3;
screamer 18:a15bfe7aaebd 384
screamer 18:a15bfe7aaebd 385 if(HTS221_read_reg(handle, HTS221_T0_OUT_L, 4, buffer))
screamer 18:a15bfe7aaebd 386 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 387
screamer 18:a15bfe7aaebd 388 T0_out = (((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0];
screamer 18:a15bfe7aaebd 389 T1_out = (((uint16_t)buffer[3]) << 8) | (uint16_t)buffer[2];
screamer 18:a15bfe7aaebd 390
screamer 18:a15bfe7aaebd 391 if(HTS221_read_reg(handle, HTS221_TEMP_OUT_L_REG, 2, buffer))
screamer 18:a15bfe7aaebd 392 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 393
screamer 18:a15bfe7aaebd 394 T_out = (((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0];
screamer 18:a15bfe7aaebd 395
screamer 18:a15bfe7aaebd 396 tmp_f = (float)(T_out - T0_out) * (float)(T1_degC - T0_degC) / (float)(T1_out - T0_out) + T0_degC;
screamer 18:a15bfe7aaebd 397 tmp_f *= 10.0f;
screamer 18:a15bfe7aaebd 398
screamer 18:a15bfe7aaebd 399 *value = ( int16_t )tmp_f;
screamer 18:a15bfe7aaebd 400
screamer 18:a15bfe7aaebd 401 return HTS221_OK;
screamer 18:a15bfe7aaebd 402 }
screamer 18:a15bfe7aaebd 403
screamer 18:a15bfe7aaebd 404 /**
screamer 18:a15bfe7aaebd 405 * @brief Read HTS221 temperature output registers.
screamer 18:a15bfe7aaebd 406 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 407 * @param Pointer to the returned temperature raw value.
screamer 18:a15bfe7aaebd 408 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 409 */
screamer 18:a15bfe7aaebd 410 HTS221_Error_et HTS221_Get_TemperatureRaw(void *handle, int16_t* value)
screamer 18:a15bfe7aaebd 411 {
screamer 18:a15bfe7aaebd 412 uint8_t buffer[2];
screamer 18:a15bfe7aaebd 413
screamer 18:a15bfe7aaebd 414 if(HTS221_read_reg(handle, HTS221_TEMP_OUT_L_REG, 2, buffer))
screamer 18:a15bfe7aaebd 415 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 416
screamer 18:a15bfe7aaebd 417 *value = (int16_t)((((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0]);
screamer 18:a15bfe7aaebd 418
screamer 18:a15bfe7aaebd 419 return HTS221_OK;
screamer 18:a15bfe7aaebd 420 }
screamer 18:a15bfe7aaebd 421
screamer 18:a15bfe7aaebd 422 /**
screamer 18:a15bfe7aaebd 423 * @brief Get the availability of new data for humidity and temperature.
screamer 18:a15bfe7aaebd 424 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 425 * @param humidity pointer to the returned humidity data status [HTS221_SET/HTS221_RESET].
screamer 18:a15bfe7aaebd 426 * @param temperature pointer to the returned temperature data status [HTS221_SET/HTS221_RESET].
screamer 18:a15bfe7aaebd 427 * This parameter is a pointer to @ref HTS221_BitStatus_et.
screamer 18:a15bfe7aaebd 428 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 429 */
screamer 18:a15bfe7aaebd 430 HTS221_Error_et HTS221_Get_DataStatus(void *handle, HTS221_BitStatus_et* humidity, HTS221_BitStatus_et* temperature)
screamer 18:a15bfe7aaebd 431 {
screamer 18:a15bfe7aaebd 432 uint8_t tmp;
screamer 18:a15bfe7aaebd 433
screamer 18:a15bfe7aaebd 434 if(HTS221_read_reg(handle, HTS221_STATUS_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 435 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 436
screamer 18:a15bfe7aaebd 437 *humidity = (HTS221_BitStatus_et)((tmp & HTS221_HDA_MASK) >> HTS221_H_DA_BIT);
screamer 18:a15bfe7aaebd 438 *temperature = (HTS221_BitStatus_et)(tmp & HTS221_TDA_MASK);
screamer 18:a15bfe7aaebd 439
screamer 18:a15bfe7aaebd 440 return HTS221_OK;
screamer 18:a15bfe7aaebd 441 }
screamer 18:a15bfe7aaebd 442
screamer 18:a15bfe7aaebd 443 /**
screamer 18:a15bfe7aaebd 444 * @brief Exit from power down mode.
screamer 18:a15bfe7aaebd 445 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 446 * @param void.
screamer 18:a15bfe7aaebd 447 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 448 */
screamer 18:a15bfe7aaebd 449 HTS221_Error_et HTS221_Activate(void *handle)
screamer 18:a15bfe7aaebd 450 {
screamer 18:a15bfe7aaebd 451 uint8_t tmp;
screamer 18:a15bfe7aaebd 452
screamer 18:a15bfe7aaebd 453 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 454 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 455
screamer 18:a15bfe7aaebd 456 tmp |= HTS221_PD_MASK;
screamer 18:a15bfe7aaebd 457
screamer 18:a15bfe7aaebd 458 if(HTS221_write_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 459 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 460
screamer 18:a15bfe7aaebd 461 return HTS221_OK;
screamer 18:a15bfe7aaebd 462 }
screamer 18:a15bfe7aaebd 463
screamer 18:a15bfe7aaebd 464 /**
screamer 18:a15bfe7aaebd 465 * @brief Put the sensor in power down mode.
screamer 18:a15bfe7aaebd 466 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 467 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 468 */
screamer 18:a15bfe7aaebd 469 HTS221_Error_et HTS221_DeActivate(void *handle)
screamer 18:a15bfe7aaebd 470 {
screamer 18:a15bfe7aaebd 471 uint8_t tmp;
screamer 18:a15bfe7aaebd 472
screamer 18:a15bfe7aaebd 473 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 474 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 475
screamer 18:a15bfe7aaebd 476 tmp &= ~HTS221_PD_MASK;
screamer 18:a15bfe7aaebd 477
screamer 18:a15bfe7aaebd 478 if(HTS221_write_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 479 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 480
screamer 18:a15bfe7aaebd 481 return HTS221_OK;
screamer 18:a15bfe7aaebd 482 }
screamer 18:a15bfe7aaebd 483
screamer 18:a15bfe7aaebd 484
screamer 18:a15bfe7aaebd 485
screamer 18:a15bfe7aaebd 486 /**
screamer 18:a15bfe7aaebd 487 * @brief Check if the single measurement has completed.
screamer 18:a15bfe7aaebd 488 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 489 * @param tmp is set to 1, when the measure is completed
screamer 18:a15bfe7aaebd 490 * @retval Status [HTS221_ERROR, HTS221_OK]
screamer 18:a15bfe7aaebd 491 */
screamer 18:a15bfe7aaebd 492 HTS221_Error_et HTS221_IsMeasurementCompleted(void *handle, HTS221_BitStatus_et* Is_Measurement_Completed)
screamer 18:a15bfe7aaebd 493 {
screamer 18:a15bfe7aaebd 494 uint8_t tmp;
screamer 18:a15bfe7aaebd 495
screamer 18:a15bfe7aaebd 496 if(HTS221_read_reg(handle, HTS221_STATUS_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 497 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 498
screamer 18:a15bfe7aaebd 499 if((tmp & (uint8_t)(HTS221_HDA_MASK | HTS221_TDA_MASK)) == (uint8_t)(HTS221_HDA_MASK | HTS221_TDA_MASK))
screamer 18:a15bfe7aaebd 500 *Is_Measurement_Completed = HTS221_SET;
screamer 18:a15bfe7aaebd 501 else
screamer 18:a15bfe7aaebd 502 *Is_Measurement_Completed = HTS221_RESET;
screamer 18:a15bfe7aaebd 503
screamer 18:a15bfe7aaebd 504 return HTS221_OK;
screamer 18:a15bfe7aaebd 505 }
screamer 18:a15bfe7aaebd 506
screamer 18:a15bfe7aaebd 507
screamer 18:a15bfe7aaebd 508 /**
screamer 18:a15bfe7aaebd 509 * @brief Set_ humidity and temperature average mode.
screamer 18:a15bfe7aaebd 510 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 511 * @param avgh is the average mode for humidity, this parameter is @ref HTS221_Avgh_et.
screamer 18:a15bfe7aaebd 512 * @param avgt is the average mode for temperature, this parameter is @ref HTS221_Avgt_et.
screamer 18:a15bfe7aaebd 513 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 514 */
screamer 18:a15bfe7aaebd 515 HTS221_Error_et HTS221_Set_AvgHT(void *handle, HTS221_Avgh_et avgh, HTS221_Avgt_et avgt)
screamer 18:a15bfe7aaebd 516 {
screamer 18:a15bfe7aaebd 517 uint8_t tmp;
screamer 18:a15bfe7aaebd 518
screamer 18:a15bfe7aaebd 519 HTS221_assert_param(IS_HTS221_AVGH(avgh));
screamer 18:a15bfe7aaebd 520 HTS221_assert_param(IS_HTS221_AVGT(avgt));
screamer 18:a15bfe7aaebd 521
screamer 18:a15bfe7aaebd 522 if(HTS221_read_reg(handle, HTS221_AV_CONF_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 523 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 524
screamer 18:a15bfe7aaebd 525 tmp &= ~(HTS221_AVGH_MASK | HTS221_AVGT_MASK);
screamer 18:a15bfe7aaebd 526 tmp |= (uint8_t)avgh;
screamer 18:a15bfe7aaebd 527 tmp |= (uint8_t)avgt;
screamer 18:a15bfe7aaebd 528
screamer 18:a15bfe7aaebd 529 if(HTS221_write_reg(handle, HTS221_AV_CONF_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 530 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 531
screamer 18:a15bfe7aaebd 532 return HTS221_OK;
screamer 18:a15bfe7aaebd 533 }
screamer 18:a15bfe7aaebd 534
screamer 18:a15bfe7aaebd 535 /**
screamer 18:a15bfe7aaebd 536 * @brief Set humidity average mode.
screamer 18:a15bfe7aaebd 537 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 538 * @param avgh is the average mode for humidity, this parameter is @ref HTS221_Avgh_et.
screamer 18:a15bfe7aaebd 539 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 540 */
screamer 18:a15bfe7aaebd 541 HTS221_Error_et HTS221_Set_AvgH(void *handle, HTS221_Avgh_et avgh)
screamer 18:a15bfe7aaebd 542 {
screamer 18:a15bfe7aaebd 543 uint8_t tmp;
screamer 18:a15bfe7aaebd 544
screamer 18:a15bfe7aaebd 545 HTS221_assert_param(IS_HTS221_AVGH(avgh));
screamer 18:a15bfe7aaebd 546
screamer 18:a15bfe7aaebd 547 if(HTS221_read_reg(handle, HTS221_AV_CONF_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 548 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 549
screamer 18:a15bfe7aaebd 550 tmp &= ~HTS221_AVGH_MASK;
screamer 18:a15bfe7aaebd 551 tmp |= (uint8_t)avgh;
screamer 18:a15bfe7aaebd 552
screamer 18:a15bfe7aaebd 553 if(HTS221_write_reg(handle, HTS221_AV_CONF_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 554 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 555
screamer 18:a15bfe7aaebd 556 return HTS221_OK;
screamer 18:a15bfe7aaebd 557 }
screamer 18:a15bfe7aaebd 558
screamer 18:a15bfe7aaebd 559 /**
screamer 18:a15bfe7aaebd 560 * @brief Set temperature average mode.
screamer 18:a15bfe7aaebd 561 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 562 * @param avgt is the average mode for temperature, this parameter is @ref HTS221_Avgt_et.
screamer 18:a15bfe7aaebd 563 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 564 */
screamer 18:a15bfe7aaebd 565 HTS221_Error_et HTS221_Set_AvgT(void *handle, HTS221_Avgt_et avgt)
screamer 18:a15bfe7aaebd 566 {
screamer 18:a15bfe7aaebd 567 uint8_t tmp;
screamer 18:a15bfe7aaebd 568
screamer 18:a15bfe7aaebd 569 HTS221_assert_param(IS_HTS221_AVGT(avgt));
screamer 18:a15bfe7aaebd 570
screamer 18:a15bfe7aaebd 571 if(HTS221_read_reg(handle, HTS221_AV_CONF_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 572 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 573
screamer 18:a15bfe7aaebd 574 tmp &= ~HTS221_AVGT_MASK;
screamer 18:a15bfe7aaebd 575 tmp |= (uint8_t)avgt;
screamer 18:a15bfe7aaebd 576
screamer 18:a15bfe7aaebd 577 if(HTS221_write_reg(handle, HTS221_AV_CONF_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 578 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 579
screamer 18:a15bfe7aaebd 580 return HTS221_OK;
screamer 18:a15bfe7aaebd 581 }
screamer 18:a15bfe7aaebd 582
screamer 18:a15bfe7aaebd 583 /**
screamer 18:a15bfe7aaebd 584 * @brief Get humidity and temperature average mode.
screamer 18:a15bfe7aaebd 585 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 586 * @param avgh pointer to the returned value with the humidity average mode.
screamer 18:a15bfe7aaebd 587 * @param avgt pointer to the returned value with the temperature average mode.
screamer 18:a15bfe7aaebd 588 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 589 */
screamer 18:a15bfe7aaebd 590 HTS221_Error_et HTS221_Get_AvgHT(void *handle, HTS221_Avgh_et* avgh, HTS221_Avgt_et* avgt)
screamer 18:a15bfe7aaebd 591 {
screamer 18:a15bfe7aaebd 592 uint8_t tmp;
screamer 18:a15bfe7aaebd 593
screamer 18:a15bfe7aaebd 594 if(HTS221_read_reg(handle, HTS221_AV_CONF_REG, 1, &tmp))
screamer 18:a15bfe7aaebd 595 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 596
screamer 18:a15bfe7aaebd 597 *avgh = (HTS221_Avgh_et)(tmp & HTS221_AVGH_MASK);
screamer 18:a15bfe7aaebd 598 *avgt = (HTS221_Avgt_et)(tmp & HTS221_AVGT_MASK);
screamer 18:a15bfe7aaebd 599
screamer 18:a15bfe7aaebd 600 return HTS221_OK;
screamer 18:a15bfe7aaebd 601 }
screamer 18:a15bfe7aaebd 602
screamer 18:a15bfe7aaebd 603 /**
screamer 18:a15bfe7aaebd 604 * @brief Set block data update mode.
screamer 18:a15bfe7aaebd 605 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 606 * @param status can be HTS221_ENABLE: enable the block data update, output data registers are updated once both MSB and LSB are read.
screamer 18:a15bfe7aaebd 607 * @param status can be HTS221_DISABLE: output data registers are continuously updated.
screamer 18:a15bfe7aaebd 608 * This parameter is a @ref HTS221_BitStatus_et.
screamer 18:a15bfe7aaebd 609 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 610 */
screamer 18:a15bfe7aaebd 611 HTS221_Error_et HTS221_Set_BduMode(void *handle, HTS221_State_et status)
screamer 18:a15bfe7aaebd 612 {
screamer 18:a15bfe7aaebd 613 uint8_t tmp;
screamer 18:a15bfe7aaebd 614
screamer 18:a15bfe7aaebd 615 HTS221_assert_param(IS_HTS221_State(status));
screamer 18:a15bfe7aaebd 616
screamer 18:a15bfe7aaebd 617 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 618 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 619
screamer 18:a15bfe7aaebd 620 tmp &= ~HTS221_BDU_MASK;
screamer 18:a15bfe7aaebd 621 tmp |= ((uint8_t)status) << HTS221_BDU_BIT;
screamer 18:a15bfe7aaebd 622
screamer 18:a15bfe7aaebd 623 if(HTS221_write_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 624 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 625
screamer 18:a15bfe7aaebd 626 return HTS221_OK;
screamer 18:a15bfe7aaebd 627 }
screamer 18:a15bfe7aaebd 628
screamer 18:a15bfe7aaebd 629 /**
screamer 18:a15bfe7aaebd 630 * @brief Get block data update mode.
screamer 18:a15bfe7aaebd 631 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 632 * @param Pointer to the returned value with block data update mode status.
screamer 18:a15bfe7aaebd 633 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 634 */
screamer 18:a15bfe7aaebd 635 HTS221_Error_et HTS221_Get_BduMode(void *handle, HTS221_State_et* status)
screamer 18:a15bfe7aaebd 636 {
screamer 18:a15bfe7aaebd 637 uint8_t tmp;
screamer 18:a15bfe7aaebd 638
screamer 18:a15bfe7aaebd 639 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 640 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 641
screamer 18:a15bfe7aaebd 642 *status = (HTS221_State_et)((tmp & HTS221_BDU_MASK) >> HTS221_BDU_BIT);
screamer 18:a15bfe7aaebd 643
screamer 18:a15bfe7aaebd 644 return HTS221_OK;
screamer 18:a15bfe7aaebd 645 }
screamer 18:a15bfe7aaebd 646
screamer 18:a15bfe7aaebd 647 /**
screamer 18:a15bfe7aaebd 648 * @brief Enter or exit from power down mode.
screamer 18:a15bfe7aaebd 649 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 650 * @param status can be HTS221_SET: HTS221 in power down mode.
screamer 18:a15bfe7aaebd 651 * @param status can be HTS221_REET: HTS221 in active mode.
screamer 18:a15bfe7aaebd 652 * This parameter is a @ref HTS221_BitStatus_et.
screamer 18:a15bfe7aaebd 653 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 654 */
screamer 18:a15bfe7aaebd 655 HTS221_Error_et HTS221_Set_PowerDownMode(void *handle, HTS221_BitStatus_et status)
screamer 18:a15bfe7aaebd 656 {
screamer 18:a15bfe7aaebd 657 uint8_t tmp;
screamer 18:a15bfe7aaebd 658
screamer 18:a15bfe7aaebd 659 HTS221_assert_param(IS_HTS221_BitStatus(status));
screamer 18:a15bfe7aaebd 660
screamer 18:a15bfe7aaebd 661 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 662 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 663
screamer 18:a15bfe7aaebd 664 tmp &= ~HTS221_PD_MASK;
screamer 18:a15bfe7aaebd 665 tmp |= ((uint8_t)status) << HTS221_PD_BIT;
screamer 18:a15bfe7aaebd 666
screamer 18:a15bfe7aaebd 667 if(HTS221_write_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 668 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 669
screamer 18:a15bfe7aaebd 670 return HTS221_OK;
screamer 18:a15bfe7aaebd 671 }
screamer 18:a15bfe7aaebd 672
screamer 18:a15bfe7aaebd 673 /**
screamer 18:a15bfe7aaebd 674 * @brief Get if HTS221 is in active mode or in power down mode.
screamer 18:a15bfe7aaebd 675 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 676 * @param Pointer to the returned value with HTS221 status.
screamer 18:a15bfe7aaebd 677 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 678 */
screamer 18:a15bfe7aaebd 679 HTS221_Error_et HTS221_Get_PowerDownMode(void *handle, HTS221_BitStatus_et* status)
screamer 18:a15bfe7aaebd 680 {
screamer 18:a15bfe7aaebd 681 uint8_t tmp;
screamer 18:a15bfe7aaebd 682
screamer 18:a15bfe7aaebd 683 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 684 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 685
screamer 18:a15bfe7aaebd 686 *status = (HTS221_BitStatus_et)((tmp & HTS221_PD_MASK) >> HTS221_PD_BIT);
screamer 18:a15bfe7aaebd 687
screamer 18:a15bfe7aaebd 688 return HTS221_OK;
screamer 18:a15bfe7aaebd 689 }
screamer 18:a15bfe7aaebd 690
screamer 18:a15bfe7aaebd 691 /**
screamer 18:a15bfe7aaebd 692 * @brief Set the output data rate mode.
screamer 18:a15bfe7aaebd 693 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 694 * @param odr is the output data rate mode.
screamer 18:a15bfe7aaebd 695 * This parameter is a @ref HTS221_Odr_et.
screamer 18:a15bfe7aaebd 696 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 697 */
screamer 18:a15bfe7aaebd 698 HTS221_Error_et HTS221_Set_Odr(void *handle, HTS221_Odr_et odr)
screamer 18:a15bfe7aaebd 699 {
screamer 18:a15bfe7aaebd 700 uint8_t tmp;
screamer 18:a15bfe7aaebd 701
screamer 18:a15bfe7aaebd 702 HTS221_assert_param(IS_HTS221_ODR(odr));
screamer 18:a15bfe7aaebd 703
screamer 18:a15bfe7aaebd 704 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 705 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 706
screamer 18:a15bfe7aaebd 707 tmp &= ~HTS221_ODR_MASK;
screamer 18:a15bfe7aaebd 708 tmp |= (uint8_t)odr;
screamer 18:a15bfe7aaebd 709
screamer 18:a15bfe7aaebd 710 if(HTS221_write_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 711 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 712
screamer 18:a15bfe7aaebd 713 return HTS221_OK;
screamer 18:a15bfe7aaebd 714 }
screamer 18:a15bfe7aaebd 715
screamer 18:a15bfe7aaebd 716 /**
screamer 18:a15bfe7aaebd 717 * @brief Get the output data rate mode.
screamer 18:a15bfe7aaebd 718 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 719 * @param Pointer to the returned value with output data rate mode.
screamer 18:a15bfe7aaebd 720 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 721 */
screamer 18:a15bfe7aaebd 722 HTS221_Error_et HTS221_Get_Odr(void *handle, HTS221_Odr_et* odr)
screamer 18:a15bfe7aaebd 723 {
screamer 18:a15bfe7aaebd 724 uint8_t tmp;
screamer 18:a15bfe7aaebd 725
screamer 18:a15bfe7aaebd 726 if(HTS221_read_reg(handle, HTS221_CTRL_REG1, 1, &tmp))
screamer 18:a15bfe7aaebd 727 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 728
screamer 18:a15bfe7aaebd 729 tmp &= HTS221_ODR_MASK;
screamer 18:a15bfe7aaebd 730 *odr = (HTS221_Odr_et)tmp;
screamer 18:a15bfe7aaebd 731
screamer 18:a15bfe7aaebd 732 return HTS221_OK;
screamer 18:a15bfe7aaebd 733 }
screamer 18:a15bfe7aaebd 734
screamer 18:a15bfe7aaebd 735 /**
screamer 18:a15bfe7aaebd 736 * @brief Reboot Memory Content.
screamer 18:a15bfe7aaebd 737 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 738 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 739 */
screamer 18:a15bfe7aaebd 740 HTS221_Error_et HTS221_MemoryBoot(void *handle)
screamer 18:a15bfe7aaebd 741 {
screamer 18:a15bfe7aaebd 742 uint8_t tmp;
screamer 18:a15bfe7aaebd 743
screamer 18:a15bfe7aaebd 744 if(HTS221_read_reg(handle, HTS221_CTRL_REG2, 1, &tmp))
screamer 18:a15bfe7aaebd 745 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 746
screamer 18:a15bfe7aaebd 747 tmp |= HTS221_BOOT_MASK;
screamer 18:a15bfe7aaebd 748
screamer 18:a15bfe7aaebd 749 if(HTS221_write_reg(handle, HTS221_CTRL_REG2, 1, &tmp))
screamer 18:a15bfe7aaebd 750 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 751
screamer 18:a15bfe7aaebd 752 return HTS221_OK;
screamer 18:a15bfe7aaebd 753 }
screamer 18:a15bfe7aaebd 754
screamer 18:a15bfe7aaebd 755 /**
screamer 18:a15bfe7aaebd 756 * @brief Configure the internal heater.
screamer 18:a15bfe7aaebd 757 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 758 * @param The status of the internal heater [HTS221_ENABLE/HTS221_DISABLE].
screamer 18:a15bfe7aaebd 759 * This parameter is a @ref HTS221_State_et.
screamer 18:a15bfe7aaebd 760 * @retval Error code [HTS221_OK, HTS221_ERROR]
screamer 18:a15bfe7aaebd 761 */
screamer 18:a15bfe7aaebd 762 HTS221_Error_et HTS221_Set_HeaterState(void *handle, HTS221_State_et status)
screamer 18:a15bfe7aaebd 763 {
screamer 18:a15bfe7aaebd 764 uint8_t tmp;
screamer 18:a15bfe7aaebd 765
screamer 18:a15bfe7aaebd 766 HTS221_assert_param(IS_HTS221_State(status));
screamer 18:a15bfe7aaebd 767
screamer 18:a15bfe7aaebd 768 if(HTS221_read_reg(handle, HTS221_CTRL_REG2, 1, &tmp))
screamer 18:a15bfe7aaebd 769 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 770
screamer 18:a15bfe7aaebd 771 tmp &= ~HTS221_HEATHER_MASK;
screamer 18:a15bfe7aaebd 772 tmp |= ((uint8_t)status) << HTS221_HEATHER_BIT;
screamer 18:a15bfe7aaebd 773
screamer 18:a15bfe7aaebd 774 if(HTS221_write_reg(handle, HTS221_CTRL_REG2, 1, &tmp))
screamer 18:a15bfe7aaebd 775 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 776
screamer 18:a15bfe7aaebd 777 return HTS221_OK;
screamer 18:a15bfe7aaebd 778 }
screamer 18:a15bfe7aaebd 779
screamer 18:a15bfe7aaebd 780 /**
screamer 18:a15bfe7aaebd 781 * @brief Get the internal heater.
screamer 18:a15bfe7aaebd 782 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 783 * @param Pointer to the returned status of the internal heater [HTS221_ENABLE/HTS221_DISABLE].
screamer 18:a15bfe7aaebd 784 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 785 */
screamer 18:a15bfe7aaebd 786 HTS221_Error_et HTS221_Get_HeaterState(void *handle, HTS221_State_et* status)
screamer 18:a15bfe7aaebd 787 {
screamer 18:a15bfe7aaebd 788 uint8_t tmp;
screamer 18:a15bfe7aaebd 789
screamer 18:a15bfe7aaebd 790 if(HTS221_read_reg(handle, HTS221_CTRL_REG2, 1, &tmp))
screamer 18:a15bfe7aaebd 791 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 792
screamer 18:a15bfe7aaebd 793 *status = (HTS221_State_et)((tmp & HTS221_HEATHER_MASK) >> HTS221_HEATHER_BIT);
screamer 18:a15bfe7aaebd 794
screamer 18:a15bfe7aaebd 795 return HTS221_OK;
screamer 18:a15bfe7aaebd 796 }
screamer 18:a15bfe7aaebd 797
screamer 18:a15bfe7aaebd 798 /**
screamer 18:a15bfe7aaebd 799 * @brief Set ONE_SHOT bit to start a new conversion (ODR mode has to be 00).
screamer 18:a15bfe7aaebd 800 * Once the measurement is done, ONE_SHOT bit is self-cleared.
screamer 18:a15bfe7aaebd 801 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 802 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 803 */
screamer 18:a15bfe7aaebd 804 HTS221_Error_et HTS221_StartOneShotMeasurement(void *handle)
screamer 18:a15bfe7aaebd 805 {
screamer 18:a15bfe7aaebd 806 uint8_t tmp;
screamer 18:a15bfe7aaebd 807
screamer 18:a15bfe7aaebd 808 if(HTS221_read_reg(handle, HTS221_CTRL_REG2, 1, &tmp))
screamer 18:a15bfe7aaebd 809 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 810
screamer 18:a15bfe7aaebd 811 tmp |= HTS221_ONE_SHOT_MASK;
screamer 18:a15bfe7aaebd 812
screamer 18:a15bfe7aaebd 813 if(HTS221_write_reg(handle, HTS221_CTRL_REG2, 1, &tmp))
screamer 18:a15bfe7aaebd 814 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 815
screamer 18:a15bfe7aaebd 816 return HTS221_OK;
screamer 18:a15bfe7aaebd 817
screamer 18:a15bfe7aaebd 818 }
screamer 18:a15bfe7aaebd 819
screamer 18:a15bfe7aaebd 820 /**
screamer 18:a15bfe7aaebd 821 * @brief Set level configuration of the interrupt pin DRDY.
screamer 18:a15bfe7aaebd 822 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 823 * @param status can be HTS221_LOW_LVL: active level is LOW.
screamer 18:a15bfe7aaebd 824 * @param status can be HTS221_HIGH_LVL: active level is HIGH.
screamer 18:a15bfe7aaebd 825 * This parameter is a @ref HTS221_State_et.
screamer 18:a15bfe7aaebd 826 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 827 */
screamer 18:a15bfe7aaebd 828 HTS221_Error_et HTS221_Set_IrqActiveLevel(void *handle, HTS221_DrdyLevel_et value)
screamer 18:a15bfe7aaebd 829 {
screamer 18:a15bfe7aaebd 830 uint8_t tmp;
screamer 18:a15bfe7aaebd 831
screamer 18:a15bfe7aaebd 832 HTS221_assert_param(IS_HTS221_DrdyLevelType(value));
screamer 18:a15bfe7aaebd 833
screamer 18:a15bfe7aaebd 834 if(HTS221_read_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 835 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 836
screamer 18:a15bfe7aaebd 837 tmp &= ~HTS221_DRDY_H_L_MASK;
screamer 18:a15bfe7aaebd 838 tmp |= (uint8_t)value;
screamer 18:a15bfe7aaebd 839
screamer 18:a15bfe7aaebd 840 if(HTS221_write_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 841 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 842
screamer 18:a15bfe7aaebd 843 return HTS221_OK;
screamer 18:a15bfe7aaebd 844 }
screamer 18:a15bfe7aaebd 845
screamer 18:a15bfe7aaebd 846 /**
screamer 18:a15bfe7aaebd 847 * @brief Get level configuration of the interrupt pin DRDY.
screamer 18:a15bfe7aaebd 848 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 849 * @param Pointer to the returned status of the level configuration [HTS221_ENABLE/HTS221_DISABLE].
screamer 18:a15bfe7aaebd 850 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 851 */
screamer 18:a15bfe7aaebd 852 HTS221_Error_et HTS221_Get_IrqActiveLevel(void *handle, HTS221_DrdyLevel_et* value)
screamer 18:a15bfe7aaebd 853 {
screamer 18:a15bfe7aaebd 854 uint8_t tmp;
screamer 18:a15bfe7aaebd 855
screamer 18:a15bfe7aaebd 856 if(HTS221_read_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 857 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 858
screamer 18:a15bfe7aaebd 859 *value = (HTS221_DrdyLevel_et)(tmp & HTS221_DRDY_H_L_MASK);
screamer 18:a15bfe7aaebd 860
screamer 18:a15bfe7aaebd 861 return HTS221_OK;
screamer 18:a15bfe7aaebd 862 }
screamer 18:a15bfe7aaebd 863
screamer 18:a15bfe7aaebd 864 /**
screamer 18:a15bfe7aaebd 865 * @brief Set Push-pull/open drain configuration for the interrupt pin DRDY.
screamer 18:a15bfe7aaebd 866 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 867 * @param value is the output type configuration.
screamer 18:a15bfe7aaebd 868 * This parameter is a @ref HTS221_OutputType_et.
screamer 18:a15bfe7aaebd 869 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 870 */
screamer 18:a15bfe7aaebd 871 HTS221_Error_et HTS221_Set_IrqOutputType(void *handle, HTS221_OutputType_et value)
screamer 18:a15bfe7aaebd 872 {
screamer 18:a15bfe7aaebd 873 uint8_t tmp;
screamer 18:a15bfe7aaebd 874
screamer 18:a15bfe7aaebd 875 HTS221_assert_param(IS_HTS221_OutputType(value));
screamer 18:a15bfe7aaebd 876
screamer 18:a15bfe7aaebd 877 if(HTS221_read_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 878 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 879
screamer 18:a15bfe7aaebd 880 tmp &= ~HTS221_PP_OD_MASK;
screamer 18:a15bfe7aaebd 881 tmp |= (uint8_t)value;
screamer 18:a15bfe7aaebd 882
screamer 18:a15bfe7aaebd 883 if(HTS221_write_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 884 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 885
screamer 18:a15bfe7aaebd 886 return HTS221_OK;
screamer 18:a15bfe7aaebd 887 }
screamer 18:a15bfe7aaebd 888
screamer 18:a15bfe7aaebd 889 /**
screamer 18:a15bfe7aaebd 890 * @brief Get the configuration for the interrupt pin DRDY.
screamer 18:a15bfe7aaebd 891 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 892 * @param Pointer to the returned value with output type configuration.
screamer 18:a15bfe7aaebd 893 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 894 */
screamer 18:a15bfe7aaebd 895 HTS221_Error_et HTS221_Get_IrqOutputType(void *handle, HTS221_OutputType_et* value)
screamer 18:a15bfe7aaebd 896 {
screamer 18:a15bfe7aaebd 897 uint8_t tmp;
screamer 18:a15bfe7aaebd 898
screamer 18:a15bfe7aaebd 899 if(HTS221_read_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 900 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 901
screamer 18:a15bfe7aaebd 902 *value = (HTS221_OutputType_et)(tmp & HTS221_PP_OD_MASK);
screamer 18:a15bfe7aaebd 903
screamer 18:a15bfe7aaebd 904 return HTS221_OK;
screamer 18:a15bfe7aaebd 905 }
screamer 18:a15bfe7aaebd 906
screamer 18:a15bfe7aaebd 907 /**
screamer 18:a15bfe7aaebd 908 * @brief Enable/disable the interrupt mode.
screamer 18:a15bfe7aaebd 909 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 910 * @param status is the enable/disable for the interrupt mode.
screamer 18:a15bfe7aaebd 911 * This parameter is a @ref HTS221_State_et.
screamer 18:a15bfe7aaebd 912 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 913 */
screamer 18:a15bfe7aaebd 914 HTS221_Error_et HTS221_Set_IrqEnable(void *handle, HTS221_State_et status)
screamer 18:a15bfe7aaebd 915 {
screamer 18:a15bfe7aaebd 916 uint8_t tmp;
screamer 18:a15bfe7aaebd 917
screamer 18:a15bfe7aaebd 918 HTS221_assert_param(IS_HTS221_State(status));
screamer 18:a15bfe7aaebd 919
screamer 18:a15bfe7aaebd 920 if(HTS221_read_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 921 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 922
screamer 18:a15bfe7aaebd 923 tmp &= ~HTS221_DRDY_MASK;
screamer 18:a15bfe7aaebd 924 tmp |= ((uint8_t)status) << HTS221_DRDY_BIT;
screamer 18:a15bfe7aaebd 925
screamer 18:a15bfe7aaebd 926 if(HTS221_write_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 927 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 928
screamer 18:a15bfe7aaebd 929 return HTS221_OK;
screamer 18:a15bfe7aaebd 930 }
screamer 18:a15bfe7aaebd 931
screamer 18:a15bfe7aaebd 932 /**
screamer 18:a15bfe7aaebd 933 * @brief Get the interrupt mode.
screamer 18:a15bfe7aaebd 934 * @param *handle Device handle.
screamer 18:a15bfe7aaebd 935 * @param Pointer to the returned status of the interrupt mode configuration [HTS221_ENABLE/HTS221_DISABLE].
screamer 18:a15bfe7aaebd 936 * @retval Error code [HTS221_OK, HTS221_ERROR].
screamer 18:a15bfe7aaebd 937 */
screamer 18:a15bfe7aaebd 938 HTS221_Error_et HTS221_Get_IrqEnable(void *handle, HTS221_State_et* status)
screamer 18:a15bfe7aaebd 939 {
screamer 18:a15bfe7aaebd 940 uint8_t tmp;
screamer 18:a15bfe7aaebd 941
screamer 18:a15bfe7aaebd 942 if(HTS221_read_reg(handle, HTS221_CTRL_REG3, 1, &tmp))
screamer 18:a15bfe7aaebd 943 return HTS221_ERROR;
screamer 18:a15bfe7aaebd 944
screamer 18:a15bfe7aaebd 945 *status = (HTS221_State_et)((tmp & HTS221_DRDY_MASK) >> HTS221_DRDY_BIT);
screamer 18:a15bfe7aaebd 946
screamer 18:a15bfe7aaebd 947 return HTS221_OK;
screamer 18:a15bfe7aaebd 948 }
screamer 18:a15bfe7aaebd 949
screamer 18:a15bfe7aaebd 950
screamer 18:a15bfe7aaebd 951 #ifdef USE_FULL_ASSERT_HTS221
screamer 18:a15bfe7aaebd 952 /**
screamer 18:a15bfe7aaebd 953 * @brief Reports the name of the source file and the source line number
screamer 18:a15bfe7aaebd 954 * where the assert_param error has occurred.
screamer 18:a15bfe7aaebd 955 * @param file: pointer to the source file name
screamer 18:a15bfe7aaebd 956 * @param line: assert_param error line source number
screamer 18:a15bfe7aaebd 957 * @retval : None
screamer 18:a15bfe7aaebd 958 */
screamer 18:a15bfe7aaebd 959 void HTS221_assert_failed(uint8_t* file, uint32_t line)
screamer 18:a15bfe7aaebd 960 {
screamer 18:a15bfe7aaebd 961 /* User can add his own implementation to report the file name and line number */
screamer 18:a15bfe7aaebd 962 printf("Wrong parameters value: file %s on line %d\r\n", file, (int)line);
screamer 18:a15bfe7aaebd 963
screamer 18:a15bfe7aaebd 964 /* Infinite loop */
screamer 18:a15bfe7aaebd 965 while (1)
screamer 18:a15bfe7aaebd 966 {
screamer 18:a15bfe7aaebd 967 }
screamer 18:a15bfe7aaebd 968 }
screamer 18:a15bfe7aaebd 969 #endif
screamer 18:a15bfe7aaebd 970
screamer 18:a15bfe7aaebd 971 #ifdef __cplusplus
screamer 18:a15bfe7aaebd 972 }
screamer 18:a15bfe7aaebd 973 #endif
screamer 18:a15bfe7aaebd 974
screamer 18:a15bfe7aaebd 975 /**
screamer 18:a15bfe7aaebd 976 * @}
screamer 18:a15bfe7aaebd 977 */
screamer 18:a15bfe7aaebd 978
screamer 18:a15bfe7aaebd 979 /**
screamer 18:a15bfe7aaebd 980 * @}
screamer 18:a15bfe7aaebd 981 */
screamer 18:a15bfe7aaebd 982
screamer 18:a15bfe7aaebd 983 /**
screamer 18:a15bfe7aaebd 984 * @}
screamer 18:a15bfe7aaebd 985 */
screamer 18:a15bfe7aaebd 986
screamer 18:a15bfe7aaebd 987 /******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/