Example of single tap and double tap detection for LSM6DSL in X-NUCLEO-IKS01A2

Dependencies:   X_NUCLEO_IKS01A2 mbed

Fork of SingleDoubleTap_IKS01A2 by ST Expansion SW Team

Single and Double Tap Demo Application based on sensor expansion board X-NUCLEO-IKS01A2

Main function is to show how to detect the single and double tap events using the sensor expansion board and send a notification using UART to a connected PC or Desktop and display it on terminal applications like TeraTerm.
After connection has been established:
- the user can try to tap the board and then view the notification using an hyper terminal. When the single tap is detected, the LED is switched on for a while.
- the user can press the user button to pass from the single tap detection to the double tap detection feature. The user can try to double tap the board and then view the notification using an hyper terminal. When the double tap is detected, the LED is switched on twice for a while.
- the user can press again the user button to disable the single and double tap detection feature.
- the user can press the user button to enable again the single tap detection feature and so on.

Committer:
cparata
Date:
Fri Aug 12 13:42:02 2016 +0000
Revision:
0:e4f89df7a7a5
First release of Single/Double Tap for LSM6DSL in IKS01A2

Who changed what in which revision?

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