Capacitive digital sensor for relative humidity and temperature
Dependents: Arduino_Nano33BLESense_examples
HTS221.cpp@2:a975c212f502, 2019-05-31 (annotated)
- Committer:
- mcm
- Date:
- Fri May 31 11:28:03 2019 +0000
- Revision:
- 2:a975c212f502
- Parent:
- 0:21b3c0c7b5f7
Function file was completed and it is ready to be tested
Who changed what in which revision?
User | Revision | Line number | New 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 | } |