Capacitive digital sensor for relative humidity and temperature

Dependents:   Arduino_Nano33BLESense_examples

Committer:
mcm
Date:
Fri May 31 14:26:29 2019 +0000
Revision:
3:1fc3a35d731a
Parent:
2:a975c212f502
The driver was completed and tested ( NUCLEO-L152RE ), it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 2:a975c212f502 1 /**
mcm 2:a975c212f502 2 * @brief HTS221.cpp
mcm 2:a975c212f502 3 * @details Capacitive digital sensor for relative humidity and temperature.
mcm 2:a975c212f502 4 * Function file.
mcm 2:a975c212f502 5 *
mcm 2:a975c212f502 6 *
mcm 2:a975c212f502 7 * @return N/A
mcm 2:a975c212f502 8 *
mcm 2:a975c212f502 9 * @author Manuel Caballero
mcm 2:a975c212f502 10 * @date 31/May/2019
mcm 2:a975c212f502 11 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 12 * @pre N/A.
mcm 2:a975c212f502 13 * @warning N/A
mcm 2:a975c212f502 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). All rights reserved.
mcm 2:a975c212f502 15 */
mcm 2:a975c212f502 16
mcm 2:a975c212f502 17 #include "HTS221.h"
mcm 2:a975c212f502 18
mcm 2:a975c212f502 19
mcm 2:a975c212f502 20 HTS221::HTS221 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq )
mcm 2:a975c212f502 21 : _i2c ( sda, scl )
mcm 2:a975c212f502 22 , _HTS221_Addr ( addr )
mcm 2:a975c212f502 23 {
mcm 2:a975c212f502 24 _i2c.frequency( freq );
mcm 2:a975c212f502 25 }
mcm 2:a975c212f502 26
mcm 2:a975c212f502 27
mcm 2:a975c212f502 28 HTS221::~HTS221()
mcm 2:a975c212f502 29 {
mcm 2:a975c212f502 30 }
mcm 2:a975c212f502 31
mcm 2:a975c212f502 32
mcm 2:a975c212f502 33
mcm 2:a975c212f502 34 /**
mcm 2:a975c212f502 35 * @brief HTS221_GetDeviceID ( HTS221_data_t* )
mcm 2:a975c212f502 36 *
mcm 2:a975c212f502 37 * @details It gets the device identification.
mcm 2:a975c212f502 38 *
mcm 2:a975c212f502 39 * @param[in] N/A.
mcm 2:a975c212f502 40 *
mcm 2:a975c212f502 41 * @param[out] myDeviceID: Device ID.
mcm 2:a975c212f502 42 *
mcm 2:a975c212f502 43 *
mcm 2:a975c212f502 44 * @return Status of HTS221_GetDeviceID.
mcm 2:a975c212f502 45 *
mcm 2:a975c212f502 46 *
mcm 2:a975c212f502 47 * @author Manuel Caballero
mcm 2:a975c212f502 48 * @date 31/May/2019
mcm 2:a975c212f502 49 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 50 * @pre N/A
mcm 2:a975c212f502 51 * @warning N/A.
mcm 2:a975c212f502 52 */
mcm 2:a975c212f502 53 HTS221::HTS221_status_t HTS221::HTS221_GetDeviceID ( HTS221_data_t* myDeviceID )
mcm 2:a975c212f502 54 {
mcm 2:a975c212f502 55 char cmd = 0U;
mcm 2:a975c212f502 56 uint32_t aux;
mcm 2:a975c212f502 57
mcm 2:a975c212f502 58 /* Read the register */
mcm 2:a975c212f502 59 cmd = HTS221_WHO_AM_I;
mcm 2:a975c212f502 60 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 61 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 62
mcm 2:a975c212f502 63 /* Mask it and update it with the new value */
mcm 2:a975c212f502 64 myDeviceID->deviceID = cmd;
mcm 2:a975c212f502 65
mcm 2:a975c212f502 66
mcm 2:a975c212f502 67
mcm 2:a975c212f502 68 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 69 return HTS221_SUCCESS;
mcm 2:a975c212f502 70 } else {
mcm 2:a975c212f502 71 return HTS221_FAILURE;
mcm 2:a975c212f502 72 }
mcm 2:a975c212f502 73 }
mcm 2:a975c212f502 74
mcm 2:a975c212f502 75
mcm 2:a975c212f502 76
mcm 2:a975c212f502 77 /**
mcm 2:a975c212f502 78 * @brief HTS221_SetResolution ( HTS221_data_t )
mcm 2:a975c212f502 79 *
mcm 2:a975c212f502 80 * @details It set humidity and temperature resolution mode.
mcm 2:a975c212f502 81 *
mcm 2:a975c212f502 82 * @param[in] myTempHumResolution: Humidity and Temperature resolution mode.
mcm 2:a975c212f502 83 *
mcm 2:a975c212f502 84 * @param[out] N/A.
mcm 2:a975c212f502 85 *
mcm 2:a975c212f502 86 *
mcm 2:a975c212f502 87 * @return Status of HTS221_SetResolution.
mcm 2:a975c212f502 88 *
mcm 2:a975c212f502 89 *
mcm 2:a975c212f502 90 * @author Manuel Caballero
mcm 2:a975c212f502 91 * @date 31/May/2019
mcm 2:a975c212f502 92 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 93 * @pre N/A
mcm 2:a975c212f502 94 * @warning N/A.
mcm 2:a975c212f502 95 */
mcm 2:a975c212f502 96 HTS221::HTS221_status_t HTS221::HTS221_SetResolution ( HTS221_data_t myTempHumResolution )
mcm 2:a975c212f502 97 {
mcm 2:a975c212f502 98 char cmd[2] = { 0U };
mcm 2:a975c212f502 99 uint32_t aux;
mcm 2:a975c212f502 100
mcm 2:a975c212f502 101 /* Read the register */
mcm 2:a975c212f502 102 cmd[0] = HTS221_AV_CONF;
mcm 2:a975c212f502 103 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 104 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 105
mcm 2:a975c212f502 106 /* Mask it and update it with the new value */
mcm 2:a975c212f502 107 cmd[1] &= ~( AV_CONF_AVGT_MASK | AV_CONF_AVGH_MASK );
mcm 2:a975c212f502 108 cmd[1] |= ( myTempHumResolution.temperatureResolution | myTempHumResolution.humidityResolution );
mcm 2:a975c212f502 109 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 110
mcm 2:a975c212f502 111
mcm 2:a975c212f502 112
mcm 2:a975c212f502 113
mcm 2:a975c212f502 114 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 115 return HTS221_SUCCESS;
mcm 2:a975c212f502 116 } else {
mcm 2:a975c212f502 117 return HTS221_FAILURE;
mcm 2:a975c212f502 118 }
mcm 2:a975c212f502 119 }
mcm 2:a975c212f502 120
mcm 2:a975c212f502 121
mcm 2:a975c212f502 122
mcm 2:a975c212f502 123 /**
mcm 2:a975c212f502 124 * @brief HTS221_GetResolution ( HTS221_data_t* )
mcm 2:a975c212f502 125 *
mcm 2:a975c212f502 126 * @details It get humidity and temperature resolution mode.
mcm 2:a975c212f502 127 *
mcm 2:a975c212f502 128 * @param[in] N/A
mcm 2:a975c212f502 129 *
mcm 2:a975c212f502 130 * @param[out] myTempHumResolution: Humidity and Temperature resolution mode
mcm 2:a975c212f502 131 *
mcm 2:a975c212f502 132 *
mcm 2:a975c212f502 133 * @return Status of HTS221_GetResolution.
mcm 2:a975c212f502 134 *
mcm 2:a975c212f502 135 *
mcm 2:a975c212f502 136 * @author Manuel Caballero
mcm 2:a975c212f502 137 * @date 31/May/2019
mcm 2:a975c212f502 138 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 139 * @pre N/A
mcm 2:a975c212f502 140 * @warning N/A.
mcm 2:a975c212f502 141 */
mcm 2:a975c212f502 142 HTS221::HTS221_status_t HTS221::HTS221_GetResolution ( HTS221_data_t* myTempHumResolution )
mcm 2:a975c212f502 143 {
mcm 2:a975c212f502 144 char cmd = 0U;
mcm 2:a975c212f502 145 uint32_t aux;
mcm 2:a975c212f502 146
mcm 2:a975c212f502 147 /* Read the register */
mcm 2:a975c212f502 148 cmd = HTS221_AV_CONF;
mcm 2:a975c212f502 149 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 150 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 151
mcm 2:a975c212f502 152 /* Parse the data */
mcm 2:a975c212f502 153 myTempHumResolution->temperatureResolution = (HTS221_av_config_avgt_t)( cmd & AV_CONF_AVGT_MASK );
mcm 2:a975c212f502 154 myTempHumResolution->humidityResolution = (HTS221_av_config_avgh_t)( cmd & AV_CONF_AVGH_MASK );
mcm 2:a975c212f502 155
mcm 2:a975c212f502 156
mcm 2:a975c212f502 157
mcm 2:a975c212f502 158
mcm 2:a975c212f502 159 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 160 return HTS221_SUCCESS;
mcm 2:a975c212f502 161 } else {
mcm 2:a975c212f502 162 return HTS221_FAILURE;
mcm 2:a975c212f502 163 }
mcm 2:a975c212f502 164 }
mcm 2:a975c212f502 165
mcm 2:a975c212f502 166
mcm 2:a975c212f502 167
mcm 2:a975c212f502 168 /**
mcm 2:a975c212f502 169 * @brief HTS221_SetPowerDown ( HTS221_ctrl_reg1_pd_t )
mcm 2:a975c212f502 170 *
mcm 2:a975c212f502 171 * @details It sets the device into power-down ( low-power mode ) or active mode.
mcm 2:a975c212f502 172 *
mcm 2:a975c212f502 173 * @param[in] myPowerMode: Power-Down/Active mode.
mcm 2:a975c212f502 174 *
mcm 2:a975c212f502 175 * @param[out] N/A
mcm 2:a975c212f502 176 *
mcm 2:a975c212f502 177 *
mcm 2:a975c212f502 178 * @return Status of HTS221_SetPowerDown.
mcm 2:a975c212f502 179 *
mcm 2:a975c212f502 180 *
mcm 2:a975c212f502 181 * @author Manuel Caballero
mcm 2:a975c212f502 182 * @date 31/May/2019
mcm 2:a975c212f502 183 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 184 * @pre N/A
mcm 2:a975c212f502 185 * @warning N/A.
mcm 2:a975c212f502 186 */
mcm 2:a975c212f502 187 HTS221::HTS221_status_t HTS221::HTS221_SetPowerDown ( HTS221_ctrl_reg1_pd_t myPowerMode )
mcm 2:a975c212f502 188 {
mcm 2:a975c212f502 189 char cmd[2] = { 0U };
mcm 2:a975c212f502 190 uint32_t aux;
mcm 2:a975c212f502 191
mcm 2:a975c212f502 192 /* Read the register */
mcm 2:a975c212f502 193 cmd[0] = HTS221_CTRL_REG1;
mcm 2:a975c212f502 194 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 195 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 196
mcm 2:a975c212f502 197 /* Update the register */
mcm 2:a975c212f502 198 cmd[1] = ( ( cmd[1] & ~CTRL_REG1_PD_MASK ) | myPowerMode );
mcm 2:a975c212f502 199 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 200
mcm 2:a975c212f502 201
mcm 2:a975c212f502 202
mcm 2:a975c212f502 203
mcm 2:a975c212f502 204 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 205 return HTS221_SUCCESS;
mcm 2:a975c212f502 206 } else {
mcm 2:a975c212f502 207 return HTS221_FAILURE;
mcm 2:a975c212f502 208 }
mcm 2:a975c212f502 209 }
mcm 2:a975c212f502 210
mcm 2:a975c212f502 211
mcm 2:a975c212f502 212
mcm 2:a975c212f502 213 /**
mcm 2:a975c212f502 214 * @brief HTS221_SetBlockDataUpdate ( HTS221_data_t )
mcm 2:a975c212f502 215 *
mcm 2:a975c212f502 216 * @details It sets the block data update.
mcm 2:a975c212f502 217 *
mcm 2:a975c212f502 218 * @param[in] myBDU: Block data update mode.
mcm 2:a975c212f502 219 *
mcm 2:a975c212f502 220 * @param[out] N/A
mcm 2:a975c212f502 221 *
mcm 2:a975c212f502 222 *
mcm 2:a975c212f502 223 * @return Status of HTS221_SetBlockDataUpdate.
mcm 2:a975c212f502 224 *
mcm 2:a975c212f502 225 *
mcm 2:a975c212f502 226 * @author Manuel Caballero
mcm 2:a975c212f502 227 * @date 31/May/2019
mcm 2:a975c212f502 228 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 229 * @pre N/A
mcm 2:a975c212f502 230 * @warning N/A.
mcm 2:a975c212f502 231 */
mcm 2:a975c212f502 232 HTS221::HTS221_status_t HTS221::HTS221_SetBlockDataUpdate ( HTS221_data_t myBDU )
mcm 2:a975c212f502 233 {
mcm 2:a975c212f502 234 char cmd[2] = { 0U };
mcm 2:a975c212f502 235 uint32_t aux;
mcm 2:a975c212f502 236
mcm 2:a975c212f502 237 /* Read the register */
mcm 2:a975c212f502 238 cmd[0] = HTS221_CTRL_REG1;
mcm 2:a975c212f502 239 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 240 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 241
mcm 2:a975c212f502 242 /* Update the register */
mcm 2:a975c212f502 243 cmd[1] = ( ( cmd[1] & ~CTRL_REG1_BDU_MASK ) | myBDU.bdu );
mcm 2:a975c212f502 244 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 245
mcm 2:a975c212f502 246
mcm 2:a975c212f502 247
mcm 2:a975c212f502 248
mcm 2:a975c212f502 249 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 250 return HTS221_SUCCESS;
mcm 2:a975c212f502 251 } else {
mcm 2:a975c212f502 252 return HTS221_FAILURE;
mcm 2:a975c212f502 253 }
mcm 2:a975c212f502 254 }
mcm 2:a975c212f502 255
mcm 2:a975c212f502 256
mcm 2:a975c212f502 257
mcm 2:a975c212f502 258 /**
mcm 2:a975c212f502 259 * @brief HTS221_GetBlockDataUpdate ( HTS221_data_t* )
mcm 2:a975c212f502 260 *
mcm 2:a975c212f502 261 * @details It gets the block data update.
mcm 2:a975c212f502 262 *
mcm 2:a975c212f502 263 * @param[in] N/A.
mcm 2:a975c212f502 264 *
mcm 2:a975c212f502 265 * @param[out] myBDU: Block data update mode
mcm 2:a975c212f502 266 *
mcm 2:a975c212f502 267 *
mcm 2:a975c212f502 268 * @return Status of HTS221_GetBlockDataUpdate.
mcm 2:a975c212f502 269 *
mcm 2:a975c212f502 270 *
mcm 2:a975c212f502 271 * @author Manuel Caballero
mcm 2:a975c212f502 272 * @date 31/May/2019
mcm 2:a975c212f502 273 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 274 * @pre N/A
mcm 2:a975c212f502 275 * @warning N/A.
mcm 2:a975c212f502 276 */
mcm 2:a975c212f502 277 HTS221::HTS221_status_t HTS221::HTS221_GetBlockDataUpdate ( HTS221_data_t* myBDU )
mcm 2:a975c212f502 278 {
mcm 2:a975c212f502 279 char cmd = 0U;
mcm 2:a975c212f502 280 uint32_t aux;
mcm 2:a975c212f502 281
mcm 2:a975c212f502 282 /* Read the register */
mcm 2:a975c212f502 283 cmd = HTS221_CTRL_REG1;
mcm 2:a975c212f502 284 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 285 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 286
mcm 2:a975c212f502 287 /* Parse the data */
mcm 2:a975c212f502 288 myBDU->bdu = (HTS221_ctrl_reg1_bdu_t)( cmd & CTRL_REG1_BDU_MASK );
mcm 2:a975c212f502 289
mcm 2:a975c212f502 290
mcm 2:a975c212f502 291
mcm 2:a975c212f502 292
mcm 2:a975c212f502 293 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 294 return HTS221_SUCCESS;
mcm 2:a975c212f502 295 } else {
mcm 2:a975c212f502 296 return HTS221_FAILURE;
mcm 2:a975c212f502 297 }
mcm 2:a975c212f502 298 }
mcm 2:a975c212f502 299
mcm 2:a975c212f502 300
mcm 2:a975c212f502 301
mcm 2:a975c212f502 302 /**
mcm 2:a975c212f502 303 * @brief HTS221_SetOutputDataRate ( HTS221_data_t )
mcm 2:a975c212f502 304 *
mcm 2:a975c212f502 305 * @details It sets the output data rate ( ODR ).
mcm 2:a975c212f502 306 *
mcm 2:a975c212f502 307 * @param[in] N/A.
mcm 2:a975c212f502 308 * @param[in] myODR: Output data rate.
mcm 2:a975c212f502 309 *
mcm 2:a975c212f502 310 * @param[out] N/A
mcm 2:a975c212f502 311 *
mcm 2:a975c212f502 312 *
mcm 2:a975c212f502 313 * @return Status of HTS221_SetOutputDataRate.
mcm 2:a975c212f502 314 *
mcm 2:a975c212f502 315 *
mcm 2:a975c212f502 316 * @author Manuel Caballero
mcm 2:a975c212f502 317 * @date 31/May/2019
mcm 2:a975c212f502 318 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 319 * @pre N/A
mcm 2:a975c212f502 320 * @warning N/A.
mcm 2:a975c212f502 321 */
mcm 2:a975c212f502 322 HTS221::HTS221_status_t HTS221::HTS221_SetOutputDataRate ( HTS221_data_t myODR )
mcm 2:a975c212f502 323 {
mcm 2:a975c212f502 324 char cmd[2] = { 0U };
mcm 2:a975c212f502 325 uint32_t aux;
mcm 2:a975c212f502 326
mcm 2:a975c212f502 327 /* Read the register */
mcm 2:a975c212f502 328 cmd[0] = HTS221_CTRL_REG1;
mcm 2:a975c212f502 329 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 330 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 331
mcm 2:a975c212f502 332 /* Update the register */
mcm 2:a975c212f502 333 cmd[1] = ( ( cmd[1] & ~CTRL_REG1_ODR_MASK ) | myODR.odr );
mcm 2:a975c212f502 334 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 335
mcm 2:a975c212f502 336
mcm 2:a975c212f502 337
mcm 2:a975c212f502 338
mcm 2:a975c212f502 339 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 340 return HTS221_SUCCESS;
mcm 2:a975c212f502 341 } else {
mcm 2:a975c212f502 342 return HTS221_FAILURE;
mcm 2:a975c212f502 343 }
mcm 2:a975c212f502 344 }
mcm 2:a975c212f502 345
mcm 2:a975c212f502 346
mcm 2:a975c212f502 347
mcm 2:a975c212f502 348 /**
mcm 2:a975c212f502 349 * @brief HTS221_GetOutputDataRate ( HTS221_data_t* )
mcm 2:a975c212f502 350 *
mcm 2:a975c212f502 351 * @details It gets the output data rate ( ODR ).
mcm 2:a975c212f502 352 *
mcm 2:a975c212f502 353 * @param[in] N/A.
mcm 2:a975c212f502 354 *
mcm 2:a975c212f502 355 * @param[out] myODR: Output data rate
mcm 2:a975c212f502 356 *
mcm 2:a975c212f502 357 *
mcm 2:a975c212f502 358 * @return Status of HTS221_GetOutputDataRate.
mcm 2:a975c212f502 359 *
mcm 2:a975c212f502 360 *
mcm 2:a975c212f502 361 * @author Manuel Caballero
mcm 2:a975c212f502 362 * @date 31/May/2019
mcm 2:a975c212f502 363 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 364 * @pre N/A
mcm 2:a975c212f502 365 * @warning N/A.
mcm 2:a975c212f502 366 */
mcm 2:a975c212f502 367 HTS221::HTS221_status_t HTS221::HTS221_GetOutputDataRate ( HTS221_data_t* myODR )
mcm 2:a975c212f502 368 {
mcm 2:a975c212f502 369 char cmd = 0U;
mcm 2:a975c212f502 370 uint32_t aux;
mcm 2:a975c212f502 371
mcm 2:a975c212f502 372 /* Read the register */
mcm 2:a975c212f502 373 cmd = HTS221_CTRL_REG1;
mcm 2:a975c212f502 374 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 375 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 376
mcm 2:a975c212f502 377 /* Parse the data */
mcm 2:a975c212f502 378 myODR->odr = (HTS221_ctrl_reg1_odr_t)( cmd & CTRL_REG1_ODR_MASK );
mcm 2:a975c212f502 379
mcm 2:a975c212f502 380
mcm 2:a975c212f502 381
mcm 2:a975c212f502 382
mcm 2:a975c212f502 383 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 384 return HTS221_SUCCESS;
mcm 2:a975c212f502 385 } else {
mcm 2:a975c212f502 386 return HTS221_FAILURE;
mcm 2:a975c212f502 387 }
mcm 2:a975c212f502 388 }
mcm 2:a975c212f502 389
mcm 2:a975c212f502 390
mcm 2:a975c212f502 391
mcm 2:a975c212f502 392 /**
mcm 2:a975c212f502 393 * @brief HTS221_SetBoot ( void )
mcm 2:a975c212f502 394 *
mcm 2:a975c212f502 395 * @details It sets reboot memory content.
mcm 2:a975c212f502 396 *
mcm 2:a975c212f502 397 * @param[in] N/A.
mcm 2:a975c212f502 398 *
mcm 2:a975c212f502 399 * @param[out] N/A
mcm 2:a975c212f502 400 *
mcm 2:a975c212f502 401 *
mcm 2:a975c212f502 402 * @return Status of HTS221_SetBoot.
mcm 2:a975c212f502 403 *
mcm 2:a975c212f502 404 *
mcm 2:a975c212f502 405 * @author Manuel Caballero
mcm 2:a975c212f502 406 * @date 31/May/2019
mcm 2:a975c212f502 407 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 408 * @pre At the end of the boot process, the BOOT bit is set again to '0'.
mcm 2:a975c212f502 409 * @warning N/A.
mcm 2:a975c212f502 410 */
mcm 2:a975c212f502 411 HTS221::HTS221_status_t HTS221::HTS221_SetBoot ( void )
mcm 2:a975c212f502 412 {
mcm 2:a975c212f502 413 char cmd[2] = { 0U };
mcm 2:a975c212f502 414 uint32_t aux;
mcm 2:a975c212f502 415
mcm 2:a975c212f502 416 /* Read the register */
mcm 2:a975c212f502 417 cmd[0] = HTS221_CTRL_REG2;
mcm 2:a975c212f502 418 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 419 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 420
mcm 2:a975c212f502 421 /* Update the register */
mcm 2:a975c212f502 422 cmd[1] = ( ( cmd[1] & ~CTRL_REG2_BOOT_MASK ) | CTRL_REG2_BOOT_REBOOT_MEMORY_CONTENT );
mcm 2:a975c212f502 423 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 424
mcm 2:a975c212f502 425
mcm 2:a975c212f502 426
mcm 2:a975c212f502 427
mcm 2:a975c212f502 428 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 429 return HTS221_SUCCESS;
mcm 2:a975c212f502 430 } else {
mcm 2:a975c212f502 431 return HTS221_FAILURE;
mcm 2:a975c212f502 432 }
mcm 2:a975c212f502 433 }
mcm 2:a975c212f502 434
mcm 2:a975c212f502 435
mcm 2:a975c212f502 436
mcm 2:a975c212f502 437 /**
mcm 2:a975c212f502 438 * @brief HTS221_GetBoot ( HTS221_data_t* )
mcm 2:a975c212f502 439 *
mcm 2:a975c212f502 440 * @details It gets reboot memory content.
mcm 2:a975c212f502 441 *
mcm 2:a975c212f502 442 * @param[in] N/A.
mcm 2:a975c212f502 443 *
mcm 2:a975c212f502 444 * @param[out] myBOOT: Reboot memory content flag
mcm 2:a975c212f502 445 *
mcm 2:a975c212f502 446 *
mcm 2:a975c212f502 447 * @return Status of HTS221_GetBoot.
mcm 2:a975c212f502 448 *
mcm 2:a975c212f502 449 *
mcm 2:a975c212f502 450 * @author Manuel Caballero
mcm 2:a975c212f502 451 * @date 31/May/2019
mcm 2:a975c212f502 452 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 453 * @pre N/A
mcm 2:a975c212f502 454 * @warning N/A.
mcm 2:a975c212f502 455 */
mcm 2:a975c212f502 456 HTS221::HTS221_status_t HTS221::HTS221_GetBoot ( HTS221_data_t* myBOOT )
mcm 2:a975c212f502 457 {
mcm 2:a975c212f502 458 char cmd = 0U;
mcm 2:a975c212f502 459 uint32_t aux;
mcm 2:a975c212f502 460
mcm 2:a975c212f502 461 /* Read the register */
mcm 2:a975c212f502 462 cmd = HTS221_CTRL_REG2;
mcm 2:a975c212f502 463 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 464 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 465
mcm 2:a975c212f502 466 /* Parse the data */
mcm 2:a975c212f502 467 myBOOT->boot = (HTS221_ctrl_reg2_boot_t)( cmd & CTRL_REG2_BOOT_MASK );
mcm 2:a975c212f502 468
mcm 2:a975c212f502 469
mcm 2:a975c212f502 470
mcm 2:a975c212f502 471
mcm 2:a975c212f502 472 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 473 return HTS221_SUCCESS;
mcm 2:a975c212f502 474 } else {
mcm 2:a975c212f502 475 return HTS221_FAILURE;
mcm 2:a975c212f502 476 }
mcm 2:a975c212f502 477 }
mcm 2:a975c212f502 478
mcm 2:a975c212f502 479
mcm 2:a975c212f502 480
mcm 2:a975c212f502 481 /**
mcm 2:a975c212f502 482 * @brief HTS221_SetHeater ( HTS221_data_t* )
mcm 2:a975c212f502 483 *
mcm 2:a975c212f502 484 * @details It sets heater mode: Enabled/Disabled.
mcm 2:a975c212f502 485 *
mcm 2:a975c212f502 486 * @param[in] N/A.
mcm 2:a975c212f502 487 * @param[in] myHeater: Heater mode.
mcm 2:a975c212f502 488 *
mcm 2:a975c212f502 489 * @param[out] N/A
mcm 2:a975c212f502 490 *
mcm 2:a975c212f502 491 *
mcm 2:a975c212f502 492 * @return Status of HTS221_SetHeater.
mcm 2:a975c212f502 493 *
mcm 2:a975c212f502 494 *
mcm 2:a975c212f502 495 * @author Manuel Caballero
mcm 2:a975c212f502 496 * @date 31/May/2019
mcm 2:a975c212f502 497 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 498 * @pre N/A
mcm 2:a975c212f502 499 * @warning N/A.
mcm 2:a975c212f502 500 */
mcm 2:a975c212f502 501 HTS221::HTS221_status_t HTS221::HTS221_SetHeater ( HTS221_data_t myHeater )
mcm 2:a975c212f502 502 {
mcm 2:a975c212f502 503 char cmd[2] = { 0U };
mcm 2:a975c212f502 504 uint32_t aux;
mcm 2:a975c212f502 505
mcm 2:a975c212f502 506 /* Read the register */
mcm 2:a975c212f502 507 cmd[0] = HTS221_CTRL_REG2;
mcm 2:a975c212f502 508 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 509 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 510
mcm 2:a975c212f502 511 /* Update the register */
mcm 2:a975c212f502 512 cmd[1] = ( ( cmd[1] & ~CTRL_REG2_HEATER_MASK ) | myHeater.heater );
mcm 2:a975c212f502 513 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 514
mcm 2:a975c212f502 515
mcm 2:a975c212f502 516
mcm 2:a975c212f502 517
mcm 2:a975c212f502 518 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 519 return HTS221_SUCCESS;
mcm 2:a975c212f502 520 } else {
mcm 2:a975c212f502 521 return HTS221_FAILURE;
mcm 2:a975c212f502 522 }
mcm 2:a975c212f502 523 }
mcm 2:a975c212f502 524
mcm 2:a975c212f502 525
mcm 2:a975c212f502 526
mcm 2:a975c212f502 527 /**
mcm 2:a975c212f502 528 * @brief HTS221_GetHeater ( HTS221_data_t* )
mcm 2:a975c212f502 529 *
mcm 2:a975c212f502 530 * @details It gets heater mode.
mcm 2:a975c212f502 531 *
mcm 2:a975c212f502 532 * @param[in] N/A.
mcm 2:a975c212f502 533 *
mcm 2:a975c212f502 534 * @param[out] myHeater Heater mode
mcm 2:a975c212f502 535 *
mcm 2:a975c212f502 536 *
mcm 2:a975c212f502 537 * @return Status of HTS221_GetHeater.
mcm 2:a975c212f502 538 *
mcm 2:a975c212f502 539 *
mcm 2:a975c212f502 540 * @author Manuel Caballero
mcm 2:a975c212f502 541 * @date 31/May/2019
mcm 2:a975c212f502 542 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 543 * @pre N/A
mcm 2:a975c212f502 544 * @warning N/A.
mcm 2:a975c212f502 545 */
mcm 2:a975c212f502 546 HTS221::HTS221_status_t HTS221::HTS221_GetHeater ( HTS221_data_t* myHeater )
mcm 2:a975c212f502 547 {
mcm 2:a975c212f502 548 char cmd = 0U;
mcm 2:a975c212f502 549 uint32_t aux;
mcm 2:a975c212f502 550
mcm 2:a975c212f502 551 /* Read the register */
mcm 2:a975c212f502 552 cmd = HTS221_CTRL_REG2;
mcm 2:a975c212f502 553 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 554 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 555
mcm 2:a975c212f502 556 /* Parse the data */
mcm 2:a975c212f502 557 myHeater->heater = (HTS221_ctrl_reg2_heater_t)( cmd & CTRL_REG2_HEATER_MASK );
mcm 2:a975c212f502 558
mcm 2:a975c212f502 559
mcm 2:a975c212f502 560
mcm 2:a975c212f502 561
mcm 2:a975c212f502 562 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 563 return HTS221_SUCCESS;
mcm 2:a975c212f502 564 } else {
mcm 2:a975c212f502 565 return HTS221_FAILURE;
mcm 2:a975c212f502 566 }
mcm 2:a975c212f502 567 }
mcm 2:a975c212f502 568
mcm 2:a975c212f502 569
mcm 2:a975c212f502 570
mcm 2:a975c212f502 571 /**
mcm 2:a975c212f502 572 * @brief HTS221_SetOneShot ( void )
mcm 2:a975c212f502 573 *
mcm 2:a975c212f502 574 * @details It sets one-shot, new data set.
mcm 2:a975c212f502 575 *
mcm 2:a975c212f502 576 * @param[in] N/A.
mcm 2:a975c212f502 577 *
mcm 2:a975c212f502 578 * @param[out] N/A
mcm 2:a975c212f502 579 *
mcm 2:a975c212f502 580 *
mcm 2:a975c212f502 581 * @return Status of HTS221_SetOneShot.
mcm 2:a975c212f502 582 *
mcm 2:a975c212f502 583 *
mcm 2:a975c212f502 584 * @author Manuel Caballero
mcm 2:a975c212f502 585 * @date 31/May/2019
mcm 2:a975c212f502 586 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 587 * @pre ONE_SHOT bit comes back to '0' by hardware
mcm 2:a975c212f502 588 * @warning N/A.
mcm 2:a975c212f502 589 */
mcm 2:a975c212f502 590 HTS221::HTS221_status_t HTS221::HTS221_SetOneShot ( void )
mcm 2:a975c212f502 591 {
mcm 2:a975c212f502 592 char cmd[2] = { 0U };
mcm 2:a975c212f502 593 uint32_t aux;
mcm 2:a975c212f502 594
mcm 2:a975c212f502 595 /* Read the register */
mcm 2:a975c212f502 596 cmd[0] = HTS221_CTRL_REG2;
mcm 2:a975c212f502 597 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 598 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 599
mcm 2:a975c212f502 600 /* Update the register */
mcm 2:a975c212f502 601 cmd[1] = ( ( cmd[1] & ~CTRL_REG2_ONE_SHOT_MASK ) | CTRL_REG2_ONE_SHOT_START );
mcm 2:a975c212f502 602 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 603
mcm 2:a975c212f502 604
mcm 2:a975c212f502 605
mcm 2:a975c212f502 606
mcm 2:a975c212f502 607 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 608 return HTS221_SUCCESS;
mcm 2:a975c212f502 609 } else {
mcm 2:a975c212f502 610 return HTS221_FAILURE;
mcm 2:a975c212f502 611 }
mcm 2:a975c212f502 612 }
mcm 2:a975c212f502 613
mcm 2:a975c212f502 614
mcm 2:a975c212f502 615
mcm 2:a975c212f502 616 /**
mcm 2:a975c212f502 617 * @brief HTS221_GetOneShot ( HTS221_data_t* )
mcm 2:a975c212f502 618 *
mcm 2:a975c212f502 619 * @details It gets one-shot flag.
mcm 2:a975c212f502 620 *
mcm 2:a975c212f502 621 * @param[in] N/A.
mcm 2:a975c212f502 622 *
mcm 2:a975c212f502 623 * @param[out] myOneShot: One-shot flag
mcm 2:a975c212f502 624 *
mcm 2:a975c212f502 625 *
mcm 2:a975c212f502 626 * @return Status of HTS221_GetOneShot.
mcm 2:a975c212f502 627 *
mcm 2:a975c212f502 628 *
mcm 2:a975c212f502 629 * @author Manuel Caballero
mcm 2:a975c212f502 630 * @date 31/May/2019
mcm 2:a975c212f502 631 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 632 * @pre N/A
mcm 2:a975c212f502 633 * @warning N/A.
mcm 2:a975c212f502 634 */
mcm 2:a975c212f502 635 HTS221::HTS221_status_t HTS221::HTS221_GetOneShot ( HTS221_data_t* myOneShot )
mcm 2:a975c212f502 636 {
mcm 2:a975c212f502 637 char cmd = 0U;
mcm 2:a975c212f502 638 uint32_t aux;
mcm 2:a975c212f502 639
mcm 2:a975c212f502 640 /* Read the register */
mcm 2:a975c212f502 641 cmd = HTS221_CTRL_REG2;
mcm 2:a975c212f502 642 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 643 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 644
mcm 2:a975c212f502 645 /* Parse the data */
mcm 2:a975c212f502 646 myOneShot->one_shot = (HTS221_ctrl_reg2_one_shot_t)( cmd & CTRL_REG2_ONE_SHOT_MASK );
mcm 2:a975c212f502 647
mcm 2:a975c212f502 648
mcm 2:a975c212f502 649
mcm 2:a975c212f502 650
mcm 2:a975c212f502 651 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 652 return HTS221_SUCCESS;
mcm 2:a975c212f502 653 } else {
mcm 2:a975c212f502 654 return HTS221_FAILURE;
mcm 2:a975c212f502 655 }
mcm 2:a975c212f502 656 }
mcm 2:a975c212f502 657
mcm 2:a975c212f502 658
mcm 2:a975c212f502 659
mcm 2:a975c212f502 660 /**
mcm 2:a975c212f502 661 * @brief HTS221_SetDataReadyOuput ( HTS221_ctrl_reg3_drdy_h_l_t )
mcm 2:a975c212f502 662 *
mcm 2:a975c212f502 663 * @details It sets data ready output signal active high/low.
mcm 2:a975c212f502 664 *
mcm 2:a975c212f502 665 * @param[in] N/A.
mcm 2:a975c212f502 666 * @param[in] myDRDY_H_L: Data ready output signal high/low.
mcm 2:a975c212f502 667 *
mcm 2:a975c212f502 668 * @param[out] N/A
mcm 2:a975c212f502 669 *
mcm 2:a975c212f502 670 *
mcm 2:a975c212f502 671 * @return Status of HTS221_SetDataReadyOuput.
mcm 2:a975c212f502 672 *
mcm 2:a975c212f502 673 *
mcm 2:a975c212f502 674 * @author Manuel Caballero
mcm 2:a975c212f502 675 * @date 31/May/2019
mcm 2:a975c212f502 676 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 677 * @pre N/A.
mcm 2:a975c212f502 678 * @warning N/A.
mcm 2:a975c212f502 679 */
mcm 2:a975c212f502 680 HTS221::HTS221_status_t HTS221::HTS221_SetDataReadyOuput ( HTS221_ctrl_reg3_drdy_h_l_t myDRDY_H_L )
mcm 2:a975c212f502 681 {
mcm 2:a975c212f502 682 char cmd[2] = { 0U };
mcm 2:a975c212f502 683 uint32_t aux;
mcm 2:a975c212f502 684
mcm 2:a975c212f502 685 /* Read the register */
mcm 2:a975c212f502 686 cmd[0] = HTS221_CTRL_REG3;
mcm 2:a975c212f502 687 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 688 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 689
mcm 2:a975c212f502 690 /* Update the register */
mcm 2:a975c212f502 691 cmd[1] = ( ( cmd[1] & ~CTRL_REG3_DRDY_H_L_MASK ) | myDRDY_H_L );
mcm 2:a975c212f502 692 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 693
mcm 2:a975c212f502 694
mcm 2:a975c212f502 695
mcm 2:a975c212f502 696
mcm 2:a975c212f502 697 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 698 return HTS221_SUCCESS;
mcm 2:a975c212f502 699 } else {
mcm 2:a975c212f502 700 return HTS221_FAILURE;
mcm 2:a975c212f502 701 }
mcm 2:a975c212f502 702 }
mcm 2:a975c212f502 703
mcm 2:a975c212f502 704
mcm 2:a975c212f502 705
mcm 2:a975c212f502 706 /**
mcm 2:a975c212f502 707 * @brief HTS221_SetSelectionOnPin3 ( HTS221_ctrl_reg3_pp_od_t )
mcm 2:a975c212f502 708 *
mcm 2:a975c212f502 709 * @details It sets Push-pull/Open Drain selection on pin 3 ( DRDY ).
mcm 2:a975c212f502 710 *
mcm 2:a975c212f502 711 * @param[in] N/A.
mcm 2:a975c212f502 712 * @param[in] myDRDY: Push-pull/Open Drain selection on pin 3 (DRDY).
mcm 2:a975c212f502 713 *
mcm 2:a975c212f502 714 * @param[out] N/A
mcm 2:a975c212f502 715 *
mcm 2:a975c212f502 716 *
mcm 2:a975c212f502 717 * @return Status of HTS221_SetDataReadyOuput.
mcm 2:a975c212f502 718 *
mcm 2:a975c212f502 719 *
mcm 2:a975c212f502 720 * @author Manuel Caballero
mcm 2:a975c212f502 721 * @date 31/May/2019
mcm 2:a975c212f502 722 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 723 * @pre N/A.
mcm 2:a975c212f502 724 * @warning N/A.
mcm 2:a975c212f502 725 */
mcm 2:a975c212f502 726 HTS221::HTS221_status_t HTS221::HTS221_SetSelectionOnPin3 ( HTS221_ctrl_reg3_pp_od_t myDRDY )
mcm 2:a975c212f502 727 {
mcm 2:a975c212f502 728 char cmd[2] = { 0U };
mcm 2:a975c212f502 729 uint32_t aux;
mcm 2:a975c212f502 730
mcm 2:a975c212f502 731 /* Read the register */
mcm 2:a975c212f502 732 cmd[0] = HTS221_CTRL_REG3;
mcm 2:a975c212f502 733 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 734 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 735
mcm 2:a975c212f502 736 /* Update the register */
mcm 2:a975c212f502 737 cmd[1] = ( ( cmd[1] & ~CTRL_REG3_PP_OD_MASK ) | myDRDY );
mcm 2:a975c212f502 738 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 739
mcm 2:a975c212f502 740
mcm 2:a975c212f502 741
mcm 2:a975c212f502 742
mcm 2:a975c212f502 743 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 744 return HTS221_SUCCESS;
mcm 2:a975c212f502 745 } else {
mcm 2:a975c212f502 746 return HTS221_FAILURE;
mcm 2:a975c212f502 747 }
mcm 2:a975c212f502 748 }
mcm 2:a975c212f502 749
mcm 2:a975c212f502 750
mcm 2:a975c212f502 751
mcm 2:a975c212f502 752 /**
mcm 2:a975c212f502 753 * @brief HTS221_SetDataReadyEnable ( HTS221_ctrl_reg3_drdy_en_t )
mcm 2:a975c212f502 754 *
mcm 2:a975c212f502 755 * @details It sets data ready enable.
mcm 2:a975c212f502 756 *
mcm 2:a975c212f502 757 * @param[in] N/A.
mcm 2:a975c212f502 758 * @param[in] myDRDY_EN: Data Ready enable.
mcm 2:a975c212f502 759 *
mcm 2:a975c212f502 760 * @param[out] N/A
mcm 2:a975c212f502 761 *
mcm 2:a975c212f502 762 *
mcm 2:a975c212f502 763 * @return Status of HTS221_SetDataReadyEnable.
mcm 2:a975c212f502 764 *
mcm 2:a975c212f502 765 *
mcm 2:a975c212f502 766 * @author Manuel Caballero
mcm 2:a975c212f502 767 * @date 31/May/2019
mcm 2:a975c212f502 768 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 769 * @pre N/A.
mcm 2:a975c212f502 770 * @warning N/A.
mcm 2:a975c212f502 771 */
mcm 2:a975c212f502 772 HTS221::HTS221_status_t HTS221::HTS221_SetDataReadyEnable ( HTS221_ctrl_reg3_drdy_en_t myDRDY_EN )
mcm 2:a975c212f502 773 {
mcm 2:a975c212f502 774 char cmd[2] = { 0U };
mcm 2:a975c212f502 775 uint32_t aux;
mcm 2:a975c212f502 776
mcm 2:a975c212f502 777 /* Read the register */
mcm 2:a975c212f502 778 cmd[0] = HTS221_CTRL_REG3;
mcm 2:a975c212f502 779 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 780 aux = _i2c.read ( _HTS221_Addr, &cmd[1], 1U );
mcm 2:a975c212f502 781
mcm 2:a975c212f502 782 /* Update the register */
mcm 2:a975c212f502 783 cmd[1] = ( ( cmd[1] & ~CTRL_REG3_DRDY_EN_MASK ) | myDRDY_EN );
mcm 2:a975c212f502 784 aux = _i2c.write ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:a975c212f502 785
mcm 2:a975c212f502 786
mcm 2:a975c212f502 787
mcm 2:a975c212f502 788
mcm 2:a975c212f502 789 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 790 return HTS221_SUCCESS;
mcm 2:a975c212f502 791 } else {
mcm 2:a975c212f502 792 return HTS221_FAILURE;
mcm 2:a975c212f502 793 }
mcm 2:a975c212f502 794 }
mcm 2:a975c212f502 795
mcm 2:a975c212f502 796
mcm 2:a975c212f502 797 /**
mcm 2:a975c212f502 798 * @brief HTS221_GetHumidityDataAvailable ( HTS221_data_t* )
mcm 2:a975c212f502 799 *
mcm 2:a975c212f502 800 * @details It gets humidity data available flag.
mcm 2:a975c212f502 801 *
mcm 2:a975c212f502 802 * @param[in] N/A.
mcm 2:a975c212f502 803 *
mcm 2:a975c212f502 804 * @param[out] myHumidityFlag: Humidity data available flag
mcm 2:a975c212f502 805 *
mcm 2:a975c212f502 806 *
mcm 2:a975c212f502 807 * @return Status of HTS221_GetHumidityDataAvailable.
mcm 2:a975c212f502 808 *
mcm 2:a975c212f502 809 *
mcm 2:a975c212f502 810 * @author Manuel Caballero
mcm 2:a975c212f502 811 * @date 31/May/2019
mcm 2:a975c212f502 812 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 813 * @pre N/A
mcm 2:a975c212f502 814 * @warning N/A.
mcm 2:a975c212f502 815 */
mcm 2:a975c212f502 816 HTS221::HTS221_status_t HTS221::HTS221_GetHumidityDataAvailable ( HTS221_data_t* myHumidityFlag )
mcm 2:a975c212f502 817 {
mcm 2:a975c212f502 818 char cmd = 0U;
mcm 2:a975c212f502 819 uint32_t aux;
mcm 2:a975c212f502 820
mcm 2:a975c212f502 821 /* Read the register */
mcm 2:a975c212f502 822 cmd = HTS221_STATUS_REG;
mcm 2:a975c212f502 823 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 824 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 825
mcm 2:a975c212f502 826 /* Parse the data */
mcm 2:a975c212f502 827 myHumidityFlag->h_da = (HTS221_status_reg_h_da_t)( cmd & STATUS_REGISTER_H_DA_MASK );
mcm 2:a975c212f502 828
mcm 2:a975c212f502 829
mcm 2:a975c212f502 830
mcm 2:a975c212f502 831
mcm 2:a975c212f502 832 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 833 return HTS221_SUCCESS;
mcm 2:a975c212f502 834 } else {
mcm 2:a975c212f502 835 return HTS221_FAILURE;
mcm 2:a975c212f502 836 }
mcm 2:a975c212f502 837 }
mcm 2:a975c212f502 838
mcm 2:a975c212f502 839
mcm 2:a975c212f502 840 /**
mcm 2:a975c212f502 841 * @brief HTS221_GetTemperatureDataAvailable ( HTS221_data_t* )
mcm 2:a975c212f502 842 *
mcm 2:a975c212f502 843 * @details It gets temperature data available flag.
mcm 2:a975c212f502 844 *
mcm 2:a975c212f502 845 * @param[in] N/A.
mcm 2:a975c212f502 846 *
mcm 2:a975c212f502 847 * @param[out] myTemperatureFlag: Temperature data available flag
mcm 2:a975c212f502 848 *
mcm 2:a975c212f502 849 *
mcm 2:a975c212f502 850 * @return Status of HTS221_GetTemperatureDataAvailable.
mcm 2:a975c212f502 851 *
mcm 2:a975c212f502 852 *
mcm 2:a975c212f502 853 * @author Manuel Caballero
mcm 2:a975c212f502 854 * @date 24/May/2019
mcm 2:a975c212f502 855 * @version 24/May/2019 The ORIGIN
mcm 2:a975c212f502 856 * @pre N/A
mcm 2:a975c212f502 857 * @warning N/A.
mcm 2:a975c212f502 858 */
mcm 2:a975c212f502 859 HTS221::HTS221_status_t HTS221::HTS221_GetTemperatureDataAvailable ( HTS221_data_t* myTemperatureFlag )
mcm 2:a975c212f502 860 {
mcm 2:a975c212f502 861 char cmd = 0U;
mcm 2:a975c212f502 862 uint32_t aux;
mcm 2:a975c212f502 863
mcm 2:a975c212f502 864 /* Read the register */
mcm 2:a975c212f502 865 cmd = HTS221_STATUS_REG;
mcm 2:a975c212f502 866 aux = _i2c.write ( _HTS221_Addr, &cmd, 1U, true );
mcm 2:a975c212f502 867 aux = _i2c.read ( _HTS221_Addr, &cmd, 1U );
mcm 2:a975c212f502 868
mcm 2:a975c212f502 869 /* Parse the data */
mcm 2:a975c212f502 870 myTemperatureFlag->t_da = (HTS221_status_reg_t_da_t)( cmd & STATUS_REGISTER_T_DA_MASK );
mcm 2:a975c212f502 871
mcm 2:a975c212f502 872
mcm 2:a975c212f502 873
mcm 2:a975c212f502 874
mcm 2:a975c212f502 875 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 876 return HTS221_SUCCESS;
mcm 2:a975c212f502 877 } else {
mcm 2:a975c212f502 878 return HTS221_FAILURE;
mcm 2:a975c212f502 879 }
mcm 2:a975c212f502 880 }
mcm 2:a975c212f502 881
mcm 2:a975c212f502 882
mcm 2:a975c212f502 883 /**
mcm 2:a975c212f502 884 * @brief HTS221_GetRawHumidity ( HTS221_data_t* )
mcm 2:a975c212f502 885 *
mcm 2:a975c212f502 886 * @details It gets raw humidity.
mcm 2:a975c212f502 887 *
mcm 2:a975c212f502 888 * @param[in] N/A
mcm 2:a975c212f502 889 *
mcm 2:a975c212f502 890 * @param[out] myRawHumidity: Raw humidity
mcm 2:a975c212f502 891 *
mcm 2:a975c212f502 892 *
mcm 2:a975c212f502 893 * @return Status of HTS221_GetRawHumidity.
mcm 2:a975c212f502 894 *
mcm 2:a975c212f502 895 *
mcm 2:a975c212f502 896 * @author Manuel Caballero
mcm 2:a975c212f502 897 * @date 31/May/2019
mcm 2:a975c212f502 898 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 899 * @pre This function uses autoincrementing for reading the registers.
mcm 2:a975c212f502 900 * @warning N/A.
mcm 2:a975c212f502 901 */
mcm 2:a975c212f502 902 HTS221::HTS221_status_t HTS221::HTS221_GetRawHumidity ( HTS221_data_t* myRawHumidity )
mcm 2:a975c212f502 903 {
mcm 2:a975c212f502 904 char cmd[2] = { 0U };
mcm 2:a975c212f502 905 uint32_t aux;
mcm 2:a975c212f502 906
mcm 2:a975c212f502 907 /* Read the register */
mcm 2:a975c212f502 908 cmd[0] = ( HTS221_HUMIDITY_OUT_L | 0x80 ); // Autoincrementing
mcm 2:a975c212f502 909 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 910 aux = _i2c.read ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 2:a975c212f502 911
mcm 2:a975c212f502 912 /* Parse the data */
mcm 2:a975c212f502 913 myRawHumidity->rawHumidity = cmd[1];
mcm 2:a975c212f502 914 myRawHumidity->rawHumidity <<= 8U;
mcm 2:a975c212f502 915 myRawHumidity->rawHumidity |= cmd[0];
mcm 2:a975c212f502 916
mcm 2:a975c212f502 917
mcm 2:a975c212f502 918
mcm 2:a975c212f502 919
mcm 2:a975c212f502 920 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 921 return HTS221_SUCCESS;
mcm 2:a975c212f502 922 } else {
mcm 2:a975c212f502 923 return HTS221_FAILURE;
mcm 2:a975c212f502 924 }
mcm 2:a975c212f502 925 }
mcm 2:a975c212f502 926
mcm 2:a975c212f502 927
mcm 2:a975c212f502 928 /**
mcm 2:a975c212f502 929 * @brief HTS221_GetRawTemperature ( HTS221_data_t* )
mcm 2:a975c212f502 930 *
mcm 2:a975c212f502 931 * @details It gets raw temperature.
mcm 2:a975c212f502 932 *
mcm 2:a975c212f502 933 * @param[in] N/A.
mcm 2:a975c212f502 934 *
mcm 2:a975c212f502 935 * @param[out] myRawTemperature: Raw temperature
mcm 2:a975c212f502 936 *
mcm 2:a975c212f502 937 *
mcm 2:a975c212f502 938 * @return Status of HTS221_GetRawTemperature.
mcm 2:a975c212f502 939 *
mcm 2:a975c212f502 940 *
mcm 2:a975c212f502 941 * @author Manuel Caballero
mcm 2:a975c212f502 942 * @date 31/May/2019
mcm 2:a975c212f502 943 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 944 * @pre This function uses autoincrementing for reading the registers.
mcm 2:a975c212f502 945 * @warning N/A.
mcm 2:a975c212f502 946 */
mcm 2:a975c212f502 947 HTS221::HTS221_status_t HTS221::HTS221_GetRawTemperature ( HTS221_data_t* myRawTemperature )
mcm 2:a975c212f502 948 {
mcm 2:a975c212f502 949 char cmd[2] = { 0U };
mcm 2:a975c212f502 950 uint32_t aux;
mcm 2:a975c212f502 951
mcm 2:a975c212f502 952 /* Read the register */
mcm 2:a975c212f502 953 cmd[0] = ( HTS221_TEMP_OUT_L | 0x80 ); // Autoincrementing
mcm 2:a975c212f502 954 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 955 aux = _i2c.read ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 2:a975c212f502 956
mcm 2:a975c212f502 957
mcm 2:a975c212f502 958 /* Parse the data */
mcm 2:a975c212f502 959 myRawTemperature->rawTemperature = cmd[1];
mcm 2:a975c212f502 960 myRawTemperature->rawTemperature <<= 8U;
mcm 2:a975c212f502 961 myRawTemperature->rawTemperature |= cmd[0];
mcm 2:a975c212f502 962
mcm 2:a975c212f502 963
mcm 2:a975c212f502 964
mcm 2:a975c212f502 965
mcm 2:a975c212f502 966 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 967 return HTS221_SUCCESS;
mcm 2:a975c212f502 968 } else {
mcm 2:a975c212f502 969 return HTS221_FAILURE;
mcm 2:a975c212f502 970 }
mcm 2:a975c212f502 971 }
mcm 2:a975c212f502 972
mcm 2:a975c212f502 973
mcm 2:a975c212f502 974 /**
mcm 2:a975c212f502 975 * @brief HTS221_GetCalibrationCoefficients ( HTS221_data_t* )
mcm 2:a975c212f502 976 *
mcm 2:a975c212f502 977 * @details It gets calibration coefficients.
mcm 2:a975c212f502 978 *
mcm 2:a975c212f502 979 * @param[in] N/A.
mcm 2:a975c212f502 980 *
mcm 2:a975c212f502 981 * @param[out] myCoeff: Calibration coefficients
mcm 2:a975c212f502 982 *
mcm 2:a975c212f502 983 *
mcm 2:a975c212f502 984 * @return Status of HTS221_GetCalibrationCoefficients.
mcm 2:a975c212f502 985 *
mcm 2:a975c212f502 986 *
mcm 2:a975c212f502 987 * @author Manuel Caballero
mcm 2:a975c212f502 988 * @date 31/May/2019
mcm 2:a975c212f502 989 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 990 * @pre This function uses autoincrementing for reading the registers.
mcm 2:a975c212f502 991 * @warning N/A.
mcm 2:a975c212f502 992 */
mcm 2:a975c212f502 993 HTS221::HTS221_status_t HTS221::HTS221_GetCalibrationCoefficients ( HTS221_data_t* myCoeff )
mcm 2:a975c212f502 994 {
mcm 2:a975c212f502 995 char cmd[16] = { 0U };
mcm 2:a975c212f502 996 uint32_t aux;
mcm 2:a975c212f502 997
mcm 2:a975c212f502 998 /* Read the register */
mcm 2:a975c212f502 999 cmd[0] = ( HTS221_CALIB_0 | 0x80 ); // Autoincrementing
mcm 2:a975c212f502 1000 aux = _i2c.write ( _HTS221_Addr, &cmd[0], 1U, true );
mcm 2:a975c212f502 1001 aux = _i2c.read ( _HTS221_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 2:a975c212f502 1002
mcm 2:a975c212f502 1003 /* Parse the data */
mcm 2:a975c212f502 1004 myCoeff->h0_rH_x2 = cmd[0];
mcm 2:a975c212f502 1005 myCoeff->h1_rH_x2 = cmd[1];
mcm 2:a975c212f502 1006 myCoeff->t0_degC_x8 = cmd[2];
mcm 2:a975c212f502 1007 myCoeff->t1_degC_x8 = cmd[3];
mcm 2:a975c212f502 1008 myCoeff->t1_T0_msb = ( cmd[5] & 0x0F );
mcm 2:a975c212f502 1009 myCoeff->h0_T0_OUT = cmd[7];
mcm 2:a975c212f502 1010 myCoeff->h0_T0_OUT <<= 8U;
mcm 2:a975c212f502 1011 myCoeff->h0_T0_OUT |= cmd[6];
mcm 2:a975c212f502 1012 myCoeff->h1_T0_OUT = cmd[11];
mcm 2:a975c212f502 1013 myCoeff->h1_T0_OUT <<= 8U;
mcm 2:a975c212f502 1014 myCoeff->h1_T0_OUT |= cmd[10];
mcm 2:a975c212f502 1015 myCoeff->t0_OUT = cmd[13];
mcm 2:a975c212f502 1016 myCoeff->t0_OUT <<= 8U;
mcm 2:a975c212f502 1017 myCoeff->t0_OUT |= cmd[12];
mcm 2:a975c212f502 1018 myCoeff->t1_OUT = cmd[15];
mcm 2:a975c212f502 1019 myCoeff->t1_OUT <<= 8U;
mcm 2:a975c212f502 1020 myCoeff->t1_OUT |= cmd[14];
mcm 2:a975c212f502 1021
mcm 2:a975c212f502 1022 /* Coefficient result for temperature & humidity */
mcm 2:a975c212f502 1023 myCoeff->t0_degC = ( myCoeff->t1_T0_msb & 0x03 );
mcm 2:a975c212f502 1024 myCoeff->t0_degC <<= 8U;
mcm 2:a975c212f502 1025 myCoeff->t0_degC |= myCoeff->t0_degC_x8;
mcm 2:a975c212f502 1026 myCoeff->t0_degC >>= 3U;
mcm 2:a975c212f502 1027
mcm 2:a975c212f502 1028 myCoeff->t1_degC = ( myCoeff->t1_T0_msb & 0x0C );
mcm 2:a975c212f502 1029 myCoeff->t1_degC <<= 6U;
mcm 2:a975c212f502 1030 myCoeff->t1_degC |= myCoeff->t1_degC_x8;
mcm 2:a975c212f502 1031 myCoeff->t1_degC >>= 3U;
mcm 2:a975c212f502 1032
mcm 2:a975c212f502 1033 myCoeff->h0_RH = myCoeff->h0_rH_x2;
mcm 2:a975c212f502 1034 myCoeff->h0_RH >>= 1U;
mcm 2:a975c212f502 1035
mcm 2:a975c212f502 1036 myCoeff->h1_RH = myCoeff->h1_rH_x2;
mcm 2:a975c212f502 1037 myCoeff->h1_RH >>= 1U;
mcm 2:a975c212f502 1038
mcm 2:a975c212f502 1039
mcm 2:a975c212f502 1040
mcm 2:a975c212f502 1041
mcm 2:a975c212f502 1042 if ( aux == I2C_SUCCESS ) {
mcm 2:a975c212f502 1043 return HTS221_SUCCESS;
mcm 2:a975c212f502 1044 } else {
mcm 2:a975c212f502 1045 return HTS221_FAILURE;
mcm 2:a975c212f502 1046 }
mcm 2:a975c212f502 1047 }
mcm 2:a975c212f502 1048
mcm 2:a975c212f502 1049
mcm 2:a975c212f502 1050 /**
mcm 2:a975c212f502 1051 * @brief HTS221_GetTemperature ( HTS221_data_t* )
mcm 2:a975c212f502 1052 *
mcm 2:a975c212f502 1053 * @details It gets the current temperature in Celsius degrees.
mcm 2:a975c212f502 1054 *
mcm 2:a975c212f502 1055 * @param[in] N/A.
mcm 2:a975c212f502 1056 *
mcm 2:a975c212f502 1057 * @param[out] myTemperature: Current temperature in Celsius degress
mcm 2:a975c212f502 1058 *
mcm 2:a975c212f502 1059 *
mcm 2:a975c212f502 1060 * @return Status of HTS221_GetTemperature.
mcm 2:a975c212f502 1061 *
mcm 2:a975c212f502 1062 *
mcm 2:a975c212f502 1063 * @author Manuel Caballero
mcm 2:a975c212f502 1064 * @date 31/May/2019
mcm 2:a975c212f502 1065 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 1066 * @pre N/A.
mcm 2:a975c212f502 1067 * @warning N/A.
mcm 2:a975c212f502 1068 */
mcm 2:a975c212f502 1069 HTS221::HTS221_status_t HTS221::HTS221_GetTemperature ( HTS221_data_t* myTemperature )
mcm 2:a975c212f502 1070 {
mcm 2:a975c212f502 1071 HTS221::HTS221_status_t aux;
mcm 2:a975c212f502 1072
mcm 2:a975c212f502 1073 /* Get temperature */
mcm 2:a975c212f502 1074 aux = HTS221::HTS221_GetRawTemperature ( &(*myTemperature) );
mcm 2:a975c212f502 1075
mcm 2:a975c212f502 1076 /* Parse the data */
mcm 2:a975c212f502 1077 myTemperature->temperature = (int32_t)( 10.0*( myTemperature->rawTemperature - myTemperature->t0_OUT )*( myTemperature->t1_degC - myTemperature->t0_degC )/( myTemperature->t1_OUT - myTemperature->t0_OUT ) );
mcm 2:a975c212f502 1078 myTemperature->temperature += 10.0*myTemperature->t0_degC;
mcm 2:a975c212f502 1079 myTemperature->temperature /= 10.0;
mcm 2:a975c212f502 1080
mcm 2:a975c212f502 1081
mcm 2:a975c212f502 1082
mcm 2:a975c212f502 1083 if ( aux == HTS221_SUCCESS ) {
mcm 2:a975c212f502 1084 return HTS221_SUCCESS;
mcm 2:a975c212f502 1085 } else {
mcm 2:a975c212f502 1086 return HTS221_FAILURE;
mcm 2:a975c212f502 1087 }
mcm 2:a975c212f502 1088 }
mcm 2:a975c212f502 1089
mcm 2:a975c212f502 1090
mcm 2:a975c212f502 1091 /**
mcm 2:a975c212f502 1092 * @brief HTS221_GetHumidity ( HTS221_data_t* )
mcm 2:a975c212f502 1093 *
mcm 2:a975c212f502 1094 * @details It gets the current humidity value.
mcm 2:a975c212f502 1095 *
mcm 2:a975c212f502 1096 * @param[in] N/A.
mcm 2:a975c212f502 1097 *
mcm 2:a975c212f502 1098 * @param[out] myHumidity: Current humidity value
mcm 2:a975c212f502 1099 *
mcm 2:a975c212f502 1100 *
mcm 2:a975c212f502 1101 * @return Status of HTS221_GetHumidity.
mcm 2:a975c212f502 1102 *
mcm 2:a975c212f502 1103 *
mcm 2:a975c212f502 1104 * @author Manuel Caballero
mcm 2:a975c212f502 1105 * @date 31/May/2019
mcm 2:a975c212f502 1106 * @version 31/May/2019 The ORIGIN
mcm 2:a975c212f502 1107 * @pre N/A.
mcm 2:a975c212f502 1108 * @warning N/A.
mcm 2:a975c212f502 1109 */
mcm 2:a975c212f502 1110 HTS221::HTS221_status_t HTS221::HTS221_GetHumidity ( HTS221_data_t* myHumidity )
mcm 2:a975c212f502 1111 {
mcm 2:a975c212f502 1112 HTS221::HTS221_status_t aux;
mcm 2:a975c212f502 1113
mcm 2:a975c212f502 1114 /* Get humidity */
mcm 2:a975c212f502 1115 aux = HTS221::HTS221_GetRawHumidity ( &(*myHumidity) );
mcm 2:a975c212f502 1116
mcm 2:a975c212f502 1117 /* Parse the data */
mcm 2:a975c212f502 1118 myHumidity->humidity = (int32_t)( 10.0*( myHumidity->rawHumidity - myHumidity->h0_T0_OUT )*( myHumidity->h1_RH - myHumidity->h0_RH )/( myHumidity->h1_T0_OUT - myHumidity->h0_T0_OUT ) );
mcm 2:a975c212f502 1119 myHumidity->humidity += 10.0*myHumidity->h0_RH;
mcm 2:a975c212f502 1120 myHumidity->humidity /= 10.0;
mcm 2:a975c212f502 1121
mcm 2:a975c212f502 1122 /* Check if it is saturated */
mcm 2:a975c212f502 1123 if ( myHumidity->humidity > 100 ) {
mcm 2:a975c212f502 1124 myHumidity->humidity = 100;
mcm 2:a975c212f502 1125 }
mcm 2:a975c212f502 1126
mcm 2:a975c212f502 1127
mcm 2:a975c212f502 1128
mcm 2:a975c212f502 1129 if ( aux == HTS221_SUCCESS ) {
mcm 2:a975c212f502 1130 return HTS221_SUCCESS;
mcm 2:a975c212f502 1131 } else {
mcm 2:a975c212f502 1132 return HTS221_FAILURE;
mcm 2:a975c212f502 1133 }
mcm 2:a975c212f502 1134 }