Industry's Lowest-Power Ambient Light Sensor with ADC
Dependents: FYPhh FYPhh5 FYPhh5ultrafinal FYPhh5ultrafinal
MAX44009.cpp@3:13e5af215b11, 2018-09-17 (annotated)
- Committer:
- mcm
- Date:
- Mon Sep 17 11:41:33 2018 +0000
- Revision:
- 3:13e5af215b11
- Parent:
- 2:08d850dd1cb8
This driver was completed and tested ( NUCLEO-L152RE ), it works as expected.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcm | 2:08d850dd1cb8 | 1 | /** |
mcm | 2:08d850dd1cb8 | 2 | * @brief MAX44009.cpp |
mcm | 2:08d850dd1cb8 | 3 | * @details Industry's Lowest-Power Ambient Light Sensor with ADC. |
mcm | 2:08d850dd1cb8 | 4 | * Functions file. |
mcm | 2:08d850dd1cb8 | 5 | * |
mcm | 2:08d850dd1cb8 | 6 | * |
mcm | 2:08d850dd1cb8 | 7 | * @return N/A |
mcm | 2:08d850dd1cb8 | 8 | * |
mcm | 2:08d850dd1cb8 | 9 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 10 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 11 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 12 | * @pre N/A |
mcm | 2:08d850dd1cb8 | 13 | * @warning N/A |
mcm | 2:08d850dd1cb8 | 14 | * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). |
mcm | 2:08d850dd1cb8 | 15 | */ |
mcm | 2:08d850dd1cb8 | 16 | |
mcm | 2:08d850dd1cb8 | 17 | #include "MAX44009.h" |
mcm | 2:08d850dd1cb8 | 18 | |
mcm | 2:08d850dd1cb8 | 19 | |
mcm | 2:08d850dd1cb8 | 20 | MAX44009::MAX44009 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ) |
mcm | 2:08d850dd1cb8 | 21 | : _i2c ( sda, scl ) |
mcm | 2:08d850dd1cb8 | 22 | , _MAX44009_Addr ( addr ) |
mcm | 2:08d850dd1cb8 | 23 | { |
mcm | 2:08d850dd1cb8 | 24 | _i2c.frequency( freq ); |
mcm | 2:08d850dd1cb8 | 25 | } |
mcm | 2:08d850dd1cb8 | 26 | |
mcm | 2:08d850dd1cb8 | 27 | |
mcm | 2:08d850dd1cb8 | 28 | MAX44009::~MAX44009() |
mcm | 2:08d850dd1cb8 | 29 | { |
mcm | 2:08d850dd1cb8 | 30 | } |
mcm | 2:08d850dd1cb8 | 31 | |
mcm | 2:08d850dd1cb8 | 32 | |
mcm | 2:08d850dd1cb8 | 33 | |
mcm | 2:08d850dd1cb8 | 34 | /** |
mcm | 2:08d850dd1cb8 | 35 | * @brief MAX44009_ReadInterruptStatus ( MAX44009_vector_data_t* ) |
mcm | 2:08d850dd1cb8 | 36 | * |
mcm | 2:08d850dd1cb8 | 37 | * @details It gets the interrupt status value. |
mcm | 2:08d850dd1cb8 | 38 | * |
mcm | 2:08d850dd1cb8 | 39 | * @param[in] N/A. |
mcm | 2:08d850dd1cb8 | 40 | * |
mcm | 2:08d850dd1cb8 | 41 | * @param[out] myInterruptStatus: Interrupt status register. |
mcm | 2:08d850dd1cb8 | 42 | * |
mcm | 2:08d850dd1cb8 | 43 | * |
mcm | 2:08d850dd1cb8 | 44 | * @return Status of MAX44009_ReadInterruptStatus. |
mcm | 2:08d850dd1cb8 | 45 | * |
mcm | 2:08d850dd1cb8 | 46 | * |
mcm | 2:08d850dd1cb8 | 47 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 48 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 49 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 50 | * @pre N/A. |
mcm | 2:08d850dd1cb8 | 51 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 52 | */ |
mcm | 2:08d850dd1cb8 | 53 | MAX44009::MAX44009_status_t MAX44009::MAX44009_ReadInterruptStatus ( MAX44009_vector_data_t* myInterruptStatus ) |
mcm | 2:08d850dd1cb8 | 54 | { |
mcm | 2:08d850dd1cb8 | 55 | char cmd = 0U; |
mcm | 2:08d850dd1cb8 | 56 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 57 | |
mcm | 2:08d850dd1cb8 | 58 | |
mcm | 2:08d850dd1cb8 | 59 | /* Read INTERRUPT STATUS register */ |
mcm | 2:08d850dd1cb8 | 60 | cmd = MAX44009_INTERRUPT_STATUS; |
mcm | 2:08d850dd1cb8 | 61 | aux = _i2c.write ( _MAX44009_Addr, &cmd, 1U, true ); |
mcm | 2:08d850dd1cb8 | 62 | aux = _i2c.read ( _MAX44009_Addr, &cmd, 1U ); |
mcm | 2:08d850dd1cb8 | 63 | |
mcm | 2:08d850dd1cb8 | 64 | |
mcm | 2:08d850dd1cb8 | 65 | /* Parse data */ |
mcm | 2:08d850dd1cb8 | 66 | myInterruptStatus->interruptStatus = (MAX44009_interrupt_status_ints_t)( cmd & INTERRUPT_STATUS_INTS_MASK ); |
mcm | 2:08d850dd1cb8 | 67 | |
mcm | 2:08d850dd1cb8 | 68 | |
mcm | 2:08d850dd1cb8 | 69 | |
mcm | 2:08d850dd1cb8 | 70 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 71 | { |
mcm | 2:08d850dd1cb8 | 72 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 73 | } |
mcm | 2:08d850dd1cb8 | 74 | else |
mcm | 2:08d850dd1cb8 | 75 | { |
mcm | 2:08d850dd1cb8 | 76 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 77 | } |
mcm | 2:08d850dd1cb8 | 78 | } |
mcm | 2:08d850dd1cb8 | 79 | |
mcm | 2:08d850dd1cb8 | 80 | |
mcm | 2:08d850dd1cb8 | 81 | |
mcm | 2:08d850dd1cb8 | 82 | /** |
mcm | 2:08d850dd1cb8 | 83 | * @brief MAX44009_InterrupEnable ( MAX44009_interrupt_enable_ints_t ) |
mcm | 2:08d850dd1cb8 | 84 | * |
mcm | 2:08d850dd1cb8 | 85 | * @details It enables/disables the interrupt. |
mcm | 2:08d850dd1cb8 | 86 | * |
mcm | 2:08d850dd1cb8 | 87 | * @param[in] myInterruptEnable Enable/Disable the interrupt. |
mcm | 2:08d850dd1cb8 | 88 | * |
mcm | 2:08d850dd1cb8 | 89 | * @param[out] N/A. |
mcm | 2:08d850dd1cb8 | 90 | * |
mcm | 2:08d850dd1cb8 | 91 | * |
mcm | 2:08d850dd1cb8 | 92 | * @return Status of MAX44009_InterrupEnable. |
mcm | 2:08d850dd1cb8 | 93 | * |
mcm | 2:08d850dd1cb8 | 94 | * |
mcm | 2:08d850dd1cb8 | 95 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 96 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 97 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 98 | * @pre N/A. |
mcm | 2:08d850dd1cb8 | 99 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 100 | */ |
mcm | 2:08d850dd1cb8 | 101 | MAX44009::MAX44009_status_t MAX44009::MAX44009_InterrupEnable ( MAX44009_interrupt_enable_ints_t myInterruptEnable ) |
mcm | 2:08d850dd1cb8 | 102 | { |
mcm | 2:08d850dd1cb8 | 103 | char cmd[] = { 0U, 0U }; |
mcm | 2:08d850dd1cb8 | 104 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 105 | |
mcm | 2:08d850dd1cb8 | 106 | |
mcm | 2:08d850dd1cb8 | 107 | /* Update the register */ |
mcm | 2:08d850dd1cb8 | 108 | cmd[0] = MAX44009_INTERRUPT_ENABLE; |
mcm | 2:08d850dd1cb8 | 109 | cmd[1] = myInterruptEnable; |
mcm | 2:08d850dd1cb8 | 110 | aux = _i2c.write ( _MAX44009_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:08d850dd1cb8 | 111 | |
mcm | 2:08d850dd1cb8 | 112 | |
mcm | 2:08d850dd1cb8 | 113 | |
mcm | 2:08d850dd1cb8 | 114 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 115 | { |
mcm | 2:08d850dd1cb8 | 116 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 117 | } |
mcm | 2:08d850dd1cb8 | 118 | else |
mcm | 2:08d850dd1cb8 | 119 | { |
mcm | 2:08d850dd1cb8 | 120 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 121 | } |
mcm | 2:08d850dd1cb8 | 122 | } |
mcm | 2:08d850dd1cb8 | 123 | |
mcm | 2:08d850dd1cb8 | 124 | |
mcm | 2:08d850dd1cb8 | 125 | |
mcm | 2:08d850dd1cb8 | 126 | /** |
mcm | 2:08d850dd1cb8 | 127 | * @brief MAX44009_Configuration ( MAX44009_configuration_cont_t , MAX44009_configuration_manual_t , MAX44009_configuration_cdr_t , MAX44009_configuration_tim_t ) |
mcm | 2:08d850dd1cb8 | 128 | * |
mcm | 2:08d850dd1cb8 | 129 | * @details It configures the device. |
mcm | 2:08d850dd1cb8 | 130 | * |
mcm | 2:08d850dd1cb8 | 131 | * @param[in] myContinuousMode: Default/Continuous mode. |
mcm | 2:08d850dd1cb8 | 132 | * @param[in] myManualMode: Default/Manual mode. |
mcm | 2:08d850dd1cb8 | 133 | * @param[in] myCurrentRatio: Current division ratio. |
mcm | 2:08d850dd1cb8 | 134 | * @param[in] myIntegrationTime: Integration time. |
mcm | 2:08d850dd1cb8 | 135 | * |
mcm | 2:08d850dd1cb8 | 136 | * @param[out] N/A. |
mcm | 2:08d850dd1cb8 | 137 | * |
mcm | 2:08d850dd1cb8 | 138 | * |
mcm | 2:08d850dd1cb8 | 139 | * @return Status of MAX44009_Configuration. |
mcm | 2:08d850dd1cb8 | 140 | * |
mcm | 2:08d850dd1cb8 | 141 | * |
mcm | 2:08d850dd1cb8 | 142 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 143 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 144 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 145 | * @pre In automatic mode ( MANUAL = 0 ), reading the contents of TIM<2:0> and CDR bits reflects the automatically generated values from an internal timing register and are read-only. |
mcm | 2:08d850dd1cb8 | 146 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 147 | */ |
mcm | 2:08d850dd1cb8 | 148 | MAX44009::MAX44009_status_t MAX44009::MAX44009_Configuration ( MAX44009_configuration_cont_t myContinuousMode, MAX44009_configuration_manual_t myManualMode, |
mcm | 2:08d850dd1cb8 | 149 | MAX44009_configuration_cdr_t myCurrentRatio, MAX44009_configuration_tim_t myIntegrationTime ) |
mcm | 2:08d850dd1cb8 | 150 | { |
mcm | 2:08d850dd1cb8 | 151 | char cmd[] = { 0U, 0U }; |
mcm | 2:08d850dd1cb8 | 152 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 153 | |
mcm | 2:08d850dd1cb8 | 154 | |
mcm | 2:08d850dd1cb8 | 155 | /* Update the register */ |
mcm | 2:08d850dd1cb8 | 156 | cmd[0] = MAX44009_CONFIGURATION; |
mcm | 2:08d850dd1cb8 | 157 | |
mcm | 2:08d850dd1cb8 | 158 | /* In automatic mode ( MANUAL = 0 ), reading the contents of TIM<2:0> and CDR bits reflects the automatically generated values from an internal timing register and are read-only */ |
mcm | 2:08d850dd1cb8 | 159 | if ( myManualMode == CONFIGURATION_MANUAL_MANUAL_MODE ) |
mcm | 2:08d850dd1cb8 | 160 | { |
mcm | 2:08d850dd1cb8 | 161 | cmd[1] = ( myContinuousMode | myManualMode | myCurrentRatio | myIntegrationTime ); |
mcm | 2:08d850dd1cb8 | 162 | } |
mcm | 2:08d850dd1cb8 | 163 | else |
mcm | 2:08d850dd1cb8 | 164 | { |
mcm | 2:08d850dd1cb8 | 165 | cmd[1] = ( myContinuousMode | myManualMode ); |
mcm | 2:08d850dd1cb8 | 166 | } |
mcm | 2:08d850dd1cb8 | 167 | |
mcm | 2:08d850dd1cb8 | 168 | /* Update the register */ |
mcm | 2:08d850dd1cb8 | 169 | aux = _i2c.write ( _MAX44009_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:08d850dd1cb8 | 170 | |
mcm | 2:08d850dd1cb8 | 171 | |
mcm | 2:08d850dd1cb8 | 172 | |
mcm | 2:08d850dd1cb8 | 173 | |
mcm | 2:08d850dd1cb8 | 174 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 175 | { |
mcm | 2:08d850dd1cb8 | 176 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 177 | } |
mcm | 2:08d850dd1cb8 | 178 | else |
mcm | 2:08d850dd1cb8 | 179 | { |
mcm | 2:08d850dd1cb8 | 180 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 181 | } |
mcm | 2:08d850dd1cb8 | 182 | } |
mcm | 2:08d850dd1cb8 | 183 | |
mcm | 2:08d850dd1cb8 | 184 | |
mcm | 2:08d850dd1cb8 | 185 | |
mcm | 2:08d850dd1cb8 | 186 | /** |
mcm | 2:08d850dd1cb8 | 187 | * @brief MAX44009_GetCurrentDivisionRatio ( MAX44009_vector_data_t* ) |
mcm | 2:08d850dd1cb8 | 188 | * |
mcm | 2:08d850dd1cb8 | 189 | * @details It gets the current division ratio. |
mcm | 2:08d850dd1cb8 | 190 | * |
mcm | 2:08d850dd1cb8 | 191 | * @param[in] N/A. |
mcm | 2:08d850dd1cb8 | 192 | * |
mcm | 2:08d850dd1cb8 | 193 | * @param[out] myCDR: Current Division Ratio value |
mcm | 2:08d850dd1cb8 | 194 | * |
mcm | 2:08d850dd1cb8 | 195 | * |
mcm | 2:08d850dd1cb8 | 196 | * @return Status of MAX44009_GetCurrentDivisionRatio. |
mcm | 2:08d850dd1cb8 | 197 | * |
mcm | 2:08d850dd1cb8 | 198 | * |
mcm | 2:08d850dd1cb8 | 199 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 200 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 201 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 202 | * @pre N/A. |
mcm | 2:08d850dd1cb8 | 203 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 204 | */ |
mcm | 2:08d850dd1cb8 | 205 | MAX44009::MAX44009_status_t MAX44009::MAX44009_GetCurrentDivisionRatio ( MAX44009_vector_data_t* myCDR ) |
mcm | 2:08d850dd1cb8 | 206 | { |
mcm | 2:08d850dd1cb8 | 207 | char cmd = 0U; |
mcm | 2:08d850dd1cb8 | 208 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 209 | |
mcm | 2:08d850dd1cb8 | 210 | |
mcm | 2:08d850dd1cb8 | 211 | /* Read the CONFIGURATION register */ |
mcm | 2:08d850dd1cb8 | 212 | cmd = MAX44009_CONFIGURATION; |
mcm | 2:08d850dd1cb8 | 213 | aux = _i2c.write ( _MAX44009_Addr, &cmd, 1U, true ); |
mcm | 2:08d850dd1cb8 | 214 | aux = _i2c.read ( _MAX44009_Addr, &cmd, 1U ); |
mcm | 2:08d850dd1cb8 | 215 | |
mcm | 2:08d850dd1cb8 | 216 | /* Parse the data */ |
mcm | 2:08d850dd1cb8 | 217 | myCDR->cdr = (MAX44009_configuration_cdr_t)( cmd & CONFIGURATION_CDR_MASK ); |
mcm | 2:08d850dd1cb8 | 218 | |
mcm | 2:08d850dd1cb8 | 219 | |
mcm | 2:08d850dd1cb8 | 220 | |
mcm | 2:08d850dd1cb8 | 221 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 222 | { |
mcm | 2:08d850dd1cb8 | 223 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 224 | } |
mcm | 2:08d850dd1cb8 | 225 | else |
mcm | 2:08d850dd1cb8 | 226 | { |
mcm | 2:08d850dd1cb8 | 227 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 228 | } |
mcm | 2:08d850dd1cb8 | 229 | } |
mcm | 2:08d850dd1cb8 | 230 | |
mcm | 2:08d850dd1cb8 | 231 | |
mcm | 2:08d850dd1cb8 | 232 | |
mcm | 2:08d850dd1cb8 | 233 | /** |
mcm | 2:08d850dd1cb8 | 234 | * @brief MAX44009_GetIntegrationTime ( MAX44009_vector_data_t* ) |
mcm | 2:08d850dd1cb8 | 235 | * |
mcm | 2:08d850dd1cb8 | 236 | * @details It gets the integration time. |
mcm | 2:08d850dd1cb8 | 237 | * |
mcm | 2:08d850dd1cb8 | 238 | * @param[in] N/A. |
mcm | 2:08d850dd1cb8 | 239 | * |
mcm | 2:08d850dd1cb8 | 240 | * @param[out] myTIM: Integration Time value |
mcm | 2:08d850dd1cb8 | 241 | * |
mcm | 2:08d850dd1cb8 | 242 | * |
mcm | 2:08d850dd1cb8 | 243 | * @return Status of MAX44009_GetIntegrationTime. |
mcm | 2:08d850dd1cb8 | 244 | * |
mcm | 2:08d850dd1cb8 | 245 | * |
mcm | 2:08d850dd1cb8 | 246 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 247 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 248 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 249 | * @pre N/A. |
mcm | 2:08d850dd1cb8 | 250 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 251 | */ |
mcm | 2:08d850dd1cb8 | 252 | MAX44009::MAX44009_status_t MAX44009::MAX44009_GetIntegrationTime ( MAX44009_vector_data_t* myTIM ) |
mcm | 2:08d850dd1cb8 | 253 | { |
mcm | 2:08d850dd1cb8 | 254 | char cmd = 0U; |
mcm | 2:08d850dd1cb8 | 255 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 256 | |
mcm | 2:08d850dd1cb8 | 257 | |
mcm | 2:08d850dd1cb8 | 258 | /* Read the CONFIGURATION register */ |
mcm | 2:08d850dd1cb8 | 259 | cmd = MAX44009_CONFIGURATION; |
mcm | 2:08d850dd1cb8 | 260 | aux = _i2c.write ( _MAX44009_Addr, &cmd, 1U, true ); |
mcm | 2:08d850dd1cb8 | 261 | aux = _i2c.read ( _MAX44009_Addr, &cmd, 1U ); |
mcm | 2:08d850dd1cb8 | 262 | |
mcm | 2:08d850dd1cb8 | 263 | /* Parse the data */ |
mcm | 2:08d850dd1cb8 | 264 | myTIM->tim = (MAX44009_configuration_tim_t)( cmd & CONFIGURATION_TIM_MASK ); |
mcm | 2:08d850dd1cb8 | 265 | |
mcm | 2:08d850dd1cb8 | 266 | |
mcm | 2:08d850dd1cb8 | 267 | |
mcm | 2:08d850dd1cb8 | 268 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 269 | { |
mcm | 2:08d850dd1cb8 | 270 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 271 | } |
mcm | 2:08d850dd1cb8 | 272 | else |
mcm | 2:08d850dd1cb8 | 273 | { |
mcm | 2:08d850dd1cb8 | 274 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 275 | } |
mcm | 2:08d850dd1cb8 | 276 | } |
mcm | 2:08d850dd1cb8 | 277 | |
mcm | 2:08d850dd1cb8 | 278 | |
mcm | 2:08d850dd1cb8 | 279 | |
mcm | 2:08d850dd1cb8 | 280 | /** |
mcm | 2:08d850dd1cb8 | 281 | * @brief MAX44009_GetLux ( MAX44009_device_resolution_t , MAX44009_vector_data_t* ) |
mcm | 2:08d850dd1cb8 | 282 | * |
mcm | 2:08d850dd1cb8 | 283 | * @details It gets the Lux value regarding of the resolution. |
mcm | 2:08d850dd1cb8 | 284 | * |
mcm | 2:08d850dd1cb8 | 285 | * @param[in] myResolution: Resolution. |
mcm | 2:08d850dd1cb8 | 286 | * |
mcm | 2:08d850dd1cb8 | 287 | * @param[out] myLux: Lux value |
mcm | 2:08d850dd1cb8 | 288 | * |
mcm | 2:08d850dd1cb8 | 289 | * |
mcm | 2:08d850dd1cb8 | 290 | * @return Status of MAX44009_GetLux. |
mcm | 2:08d850dd1cb8 | 291 | * |
mcm | 2:08d850dd1cb8 | 292 | * |
mcm | 2:08d850dd1cb8 | 293 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 294 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 295 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 296 | * @pre N/A. |
mcm | 2:08d850dd1cb8 | 297 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 298 | */ |
mcm | 2:08d850dd1cb8 | 299 | MAX44009::MAX44009_status_t MAX44009::MAX44009_GetLux ( MAX44009_device_resolution_t myResolution, MAX44009_vector_data_t* myLux ) |
mcm | 2:08d850dd1cb8 | 300 | { |
mcm | 2:08d850dd1cb8 | 301 | char cmd = 0U; |
mcm | 2:08d850dd1cb8 | 302 | uint8_t exponent = 0U; |
mcm | 2:08d850dd1cb8 | 303 | uint8_t mantissa = 0U; |
mcm | 2:08d850dd1cb8 | 304 | float mulFactor = 0.0f; |
mcm | 2:08d850dd1cb8 | 305 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 306 | |
mcm | 2:08d850dd1cb8 | 307 | |
mcm | 2:08d850dd1cb8 | 308 | /* Read the LUX HIGH BYTE register */ |
mcm | 2:08d850dd1cb8 | 309 | cmd = MAX44009_LUX_HIGH_BYTE; |
mcm | 2:08d850dd1cb8 | 310 | aux = _i2c.write ( _MAX44009_Addr, &cmd, 1U, true ); |
mcm | 2:08d850dd1cb8 | 311 | aux = _i2c.read ( _MAX44009_Addr, &cmd, 1U ); |
mcm | 2:08d850dd1cb8 | 312 | |
mcm | 2:08d850dd1cb8 | 313 | |
mcm | 2:08d850dd1cb8 | 314 | /* Check the resolution */ |
mcm | 2:08d850dd1cb8 | 315 | exponent = ( cmd & LUX_HIGH_BYTE_EXPONENT_MASK ); |
mcm | 2:08d850dd1cb8 | 316 | exponent >>= 4U; |
mcm | 2:08d850dd1cb8 | 317 | mantissa = ( cmd & LUX_HIGH_BYTE_MANTISSA_MASK ); |
mcm | 2:08d850dd1cb8 | 318 | if ( myResolution == RESOLUTION_NORMAL_RESOLUTION ) |
mcm | 2:08d850dd1cb8 | 319 | { |
mcm | 2:08d850dd1cb8 | 320 | mulFactor = 0.72f; |
mcm | 2:08d850dd1cb8 | 321 | } |
mcm | 2:08d850dd1cb8 | 322 | else |
mcm | 2:08d850dd1cb8 | 323 | { |
mcm | 2:08d850dd1cb8 | 324 | cmd = MAX44009_LUX_LOW_BYTE; |
mcm | 2:08d850dd1cb8 | 325 | aux = _i2c.write ( _MAX44009_Addr, &cmd, 1U, true ); |
mcm | 2:08d850dd1cb8 | 326 | aux = _i2c.read ( _MAX44009_Addr, &cmd, 1U ); |
mcm | 2:08d850dd1cb8 | 327 | |
mcm | 2:08d850dd1cb8 | 328 | mantissa <<= 4U; |
mcm | 2:08d850dd1cb8 | 329 | mantissa |= ( cmd & LUX_LOW_BYTE_MANTISSA_MASK ); |
mcm | 2:08d850dd1cb8 | 330 | |
mcm | 2:08d850dd1cb8 | 331 | mulFactor = 0.045f; |
mcm | 2:08d850dd1cb8 | 332 | } |
mcm | 2:08d850dd1cb8 | 333 | |
mcm | 2:08d850dd1cb8 | 334 | |
mcm | 2:08d850dd1cb8 | 335 | /* Calculate the Lux value */ |
mcm | 2:08d850dd1cb8 | 336 | myLux->lux = (float)( pow( 2.0, exponent ) * mantissa * mulFactor ); |
mcm | 2:08d850dd1cb8 | 337 | |
mcm | 2:08d850dd1cb8 | 338 | |
mcm | 2:08d850dd1cb8 | 339 | |
mcm | 2:08d850dd1cb8 | 340 | |
mcm | 2:08d850dd1cb8 | 341 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 342 | { |
mcm | 2:08d850dd1cb8 | 343 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 344 | } |
mcm | 2:08d850dd1cb8 | 345 | else |
mcm | 2:08d850dd1cb8 | 346 | { |
mcm | 2:08d850dd1cb8 | 347 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 348 | } |
mcm | 2:08d850dd1cb8 | 349 | } |
mcm | 2:08d850dd1cb8 | 350 | |
mcm | 2:08d850dd1cb8 | 351 | |
mcm | 2:08d850dd1cb8 | 352 | |
mcm | 2:08d850dd1cb8 | 353 | /** |
mcm | 2:08d850dd1cb8 | 354 | * @brief MAX44009_SetUpperThreshold ( MAX44009_vector_data_t ) |
mcm | 2:08d850dd1cb8 | 355 | * |
mcm | 2:08d850dd1cb8 | 356 | * @details It sets the upper threshold high-byte. |
mcm | 2:08d850dd1cb8 | 357 | * |
mcm | 2:08d850dd1cb8 | 358 | * @param[in] myUpperThreshold: Upper threshold Lux value. |
mcm | 2:08d850dd1cb8 | 359 | * |
mcm | 2:08d850dd1cb8 | 360 | * @param[out] N/A |
mcm | 2:08d850dd1cb8 | 361 | * |
mcm | 2:08d850dd1cb8 | 362 | * |
mcm | 2:08d850dd1cb8 | 363 | * @return Status of MAX44009_SetUpperThreshold. |
mcm | 2:08d850dd1cb8 | 364 | * |
mcm | 2:08d850dd1cb8 | 365 | * |
mcm | 2:08d850dd1cb8 | 366 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 367 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 368 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 369 | * @pre The Upper Threshold High-Byte register exponent with the four most significant bits of the mantissa sets the upper trip |
mcm | 2:08d850dd1cb8 | 370 | * level for interrupt functionality. |
mcm | 2:08d850dd1cb8 | 371 | * |
mcm | 2:08d850dd1cb8 | 372 | * Upper lux threshold = 2^( exponent ) x mantissa x 0.045 |
mcm | 2:08d850dd1cb8 | 373 | * |
mcm | 2:08d850dd1cb8 | 374 | * exponent: BITS<7:4>, mantissa: BITS<3:0> |
mcm | 2:08d850dd1cb8 | 375 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 376 | */ |
mcm | 2:08d850dd1cb8 | 377 | MAX44009::MAX44009_status_t MAX44009::MAX44009_SetUpperThreshold ( MAX44009_vector_data_t myUpperThreshold ) |
mcm | 2:08d850dd1cb8 | 378 | { |
mcm | 2:08d850dd1cb8 | 379 | char cmd[] = { 0U, 0U }; |
mcm | 2:08d850dd1cb8 | 380 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 381 | |
mcm | 2:08d850dd1cb8 | 382 | |
mcm | 2:08d850dd1cb8 | 383 | /* Update the register value */ |
mcm | 2:08d850dd1cb8 | 384 | cmd[0] = MAX44009_UPPER_THRESHOLD_HIGH_BYTE; |
mcm | 2:08d850dd1cb8 | 385 | cmd[1] = myUpperThreshold.lux_upper_threshold; |
mcm | 2:08d850dd1cb8 | 386 | aux = _i2c.write ( _MAX44009_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:08d850dd1cb8 | 387 | |
mcm | 2:08d850dd1cb8 | 388 | |
mcm | 2:08d850dd1cb8 | 389 | |
mcm | 2:08d850dd1cb8 | 390 | |
mcm | 2:08d850dd1cb8 | 391 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 392 | { |
mcm | 2:08d850dd1cb8 | 393 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 394 | } |
mcm | 2:08d850dd1cb8 | 395 | else |
mcm | 2:08d850dd1cb8 | 396 | { |
mcm | 2:08d850dd1cb8 | 397 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 398 | } |
mcm | 2:08d850dd1cb8 | 399 | } |
mcm | 2:08d850dd1cb8 | 400 | |
mcm | 2:08d850dd1cb8 | 401 | |
mcm | 2:08d850dd1cb8 | 402 | |
mcm | 2:08d850dd1cb8 | 403 | /** |
mcm | 2:08d850dd1cb8 | 404 | * @brief MAX44009_SetLowerThreshold ( MAX44009_vector_data_t ) |
mcm | 2:08d850dd1cb8 | 405 | * |
mcm | 2:08d850dd1cb8 | 406 | * @details It sets the lower threshold high-byte. |
mcm | 2:08d850dd1cb8 | 407 | * |
mcm | 2:08d850dd1cb8 | 408 | * @param[in] myLowerThreshold: Lower threshold Lux value. |
mcm | 2:08d850dd1cb8 | 409 | * |
mcm | 2:08d850dd1cb8 | 410 | * @param[out] N/A |
mcm | 2:08d850dd1cb8 | 411 | * |
mcm | 2:08d850dd1cb8 | 412 | * |
mcm | 2:08d850dd1cb8 | 413 | * @return Status of MAX44009_SetLowerThreshold. |
mcm | 2:08d850dd1cb8 | 414 | * |
mcm | 2:08d850dd1cb8 | 415 | * |
mcm | 2:08d850dd1cb8 | 416 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 417 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 418 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 419 | * @pre The Lower Threshold High-Byte register exponent with the four most significant bits of the mantissa sets the lower trip |
mcm | 2:08d850dd1cb8 | 420 | * level for interrupt functionality. |
mcm | 2:08d850dd1cb8 | 421 | * |
mcm | 2:08d850dd1cb8 | 422 | * Lower lux threshold = 2^( exponent ) x mantissa x 0.045 |
mcm | 2:08d850dd1cb8 | 423 | * |
mcm | 2:08d850dd1cb8 | 424 | * exponent: BITS<7:4>, mantissa: BITS<3:0> |
mcm | 2:08d850dd1cb8 | 425 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 426 | */ |
mcm | 2:08d850dd1cb8 | 427 | MAX44009::MAX44009_status_t MAX44009::MAX44009_SetLowerThreshold ( MAX44009_vector_data_t myLowerThreshold ) |
mcm | 2:08d850dd1cb8 | 428 | { |
mcm | 2:08d850dd1cb8 | 429 | char cmd[] = { 0U, 0U }; |
mcm | 2:08d850dd1cb8 | 430 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 431 | |
mcm | 2:08d850dd1cb8 | 432 | |
mcm | 2:08d850dd1cb8 | 433 | /* Update the register value */ |
mcm | 2:08d850dd1cb8 | 434 | cmd[0] = MAX44009_LOWER_THRESHOLD_HIGH_BYTE; |
mcm | 2:08d850dd1cb8 | 435 | cmd[1] = myLowerThreshold.lux_lower_threshold; |
mcm | 2:08d850dd1cb8 | 436 | aux = _i2c.write ( _MAX44009_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:08d850dd1cb8 | 437 | |
mcm | 2:08d850dd1cb8 | 438 | |
mcm | 2:08d850dd1cb8 | 439 | |
mcm | 2:08d850dd1cb8 | 440 | |
mcm | 2:08d850dd1cb8 | 441 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 442 | { |
mcm | 2:08d850dd1cb8 | 443 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 444 | } |
mcm | 2:08d850dd1cb8 | 445 | else |
mcm | 2:08d850dd1cb8 | 446 | { |
mcm | 2:08d850dd1cb8 | 447 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 448 | } |
mcm | 2:08d850dd1cb8 | 449 | } |
mcm | 2:08d850dd1cb8 | 450 | |
mcm | 2:08d850dd1cb8 | 451 | |
mcm | 2:08d850dd1cb8 | 452 | |
mcm | 2:08d850dd1cb8 | 453 | /** |
mcm | 2:08d850dd1cb8 | 454 | * @brief MAX44009_GetUpperThreshold ( MAX44009_vector_data_t* ) |
mcm | 2:08d850dd1cb8 | 455 | * |
mcm | 2:08d850dd1cb8 | 456 | * @details It gets the upper threshold high-byte. |
mcm | 2:08d850dd1cb8 | 457 | * |
mcm | 2:08d850dd1cb8 | 458 | * @param[in] N/A. |
mcm | 2:08d850dd1cb8 | 459 | * |
mcm | 2:08d850dd1cb8 | 460 | * @param[out] myUpperThreshold: Upper threshold raw data |
mcm | 2:08d850dd1cb8 | 461 | * |
mcm | 2:08d850dd1cb8 | 462 | * |
mcm | 2:08d850dd1cb8 | 463 | * @return Status of MAX44009_GetUpperThreshold. |
mcm | 2:08d850dd1cb8 | 464 | * |
mcm | 2:08d850dd1cb8 | 465 | * |
mcm | 2:08d850dd1cb8 | 466 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 467 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 468 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 469 | * @pre The Upper Threshold High-Byte register exponent with the four most significant bits of the mantissa sets the upper trip |
mcm | 2:08d850dd1cb8 | 470 | * level for interrupt functionality. |
mcm | 2:08d850dd1cb8 | 471 | * |
mcm | 2:08d850dd1cb8 | 472 | * Upper lux threshold = 2^( exponent ) x mantissa x 0.045 |
mcm | 2:08d850dd1cb8 | 473 | * |
mcm | 2:08d850dd1cb8 | 474 | * exponent: BITS<7:4>, mantissa: BITS<3:0> |
mcm | 2:08d850dd1cb8 | 475 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 476 | */ |
mcm | 2:08d850dd1cb8 | 477 | MAX44009::MAX44009_status_t MAX44009::MAX44009_GetUpperThreshold ( MAX44009_vector_data_t* myUpperThreshold ) |
mcm | 2:08d850dd1cb8 | 478 | { |
mcm | 2:08d850dd1cb8 | 479 | char cmd = 0U; |
mcm | 2:08d850dd1cb8 | 480 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 481 | |
mcm | 2:08d850dd1cb8 | 482 | |
mcm | 2:08d850dd1cb8 | 483 | /* Get the register value */ |
mcm | 2:08d850dd1cb8 | 484 | cmd = MAX44009_UPPER_THRESHOLD_HIGH_BYTE; |
mcm | 2:08d850dd1cb8 | 485 | aux = _i2c.write ( _MAX44009_Addr, &cmd, 1U, true ); |
mcm | 2:08d850dd1cb8 | 486 | aux = _i2c.read ( _MAX44009_Addr, (char*)&myUpperThreshold->lux_upper_threshold, 1U ); |
mcm | 2:08d850dd1cb8 | 487 | |
mcm | 2:08d850dd1cb8 | 488 | |
mcm | 2:08d850dd1cb8 | 489 | |
mcm | 2:08d850dd1cb8 | 490 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 491 | { |
mcm | 2:08d850dd1cb8 | 492 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 493 | } |
mcm | 2:08d850dd1cb8 | 494 | else |
mcm | 2:08d850dd1cb8 | 495 | { |
mcm | 2:08d850dd1cb8 | 496 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 497 | } |
mcm | 2:08d850dd1cb8 | 498 | } |
mcm | 2:08d850dd1cb8 | 499 | |
mcm | 2:08d850dd1cb8 | 500 | |
mcm | 2:08d850dd1cb8 | 501 | |
mcm | 2:08d850dd1cb8 | 502 | /** |
mcm | 2:08d850dd1cb8 | 503 | * @brief MAX44009_GetLowerThreshold ( MAX44009_vector_data_t* ) |
mcm | 2:08d850dd1cb8 | 504 | * |
mcm | 2:08d850dd1cb8 | 505 | * @details It gets the lower threshold high-byte. |
mcm | 2:08d850dd1cb8 | 506 | * |
mcm | 2:08d850dd1cb8 | 507 | * @param[in] N/A. |
mcm | 2:08d850dd1cb8 | 508 | * |
mcm | 2:08d850dd1cb8 | 509 | * @param[out] myLowerThreshold: Lower threshold raw data |
mcm | 2:08d850dd1cb8 | 510 | * |
mcm | 2:08d850dd1cb8 | 511 | * |
mcm | 2:08d850dd1cb8 | 512 | * @return Status of MAX44009_GetLowerThreshold. |
mcm | 2:08d850dd1cb8 | 513 | * |
mcm | 2:08d850dd1cb8 | 514 | * |
mcm | 2:08d850dd1cb8 | 515 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 516 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 517 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 518 | * @pre The Lower Threshold High-Byte register exponent with the four most significant bits of the mantissa sets the lower trip |
mcm | 2:08d850dd1cb8 | 519 | * level for interrupt functionality. |
mcm | 2:08d850dd1cb8 | 520 | * |
mcm | 2:08d850dd1cb8 | 521 | * Lower lux threshold = 2^( exponent ) x mantissa x 0.045 |
mcm | 2:08d850dd1cb8 | 522 | * |
mcm | 2:08d850dd1cb8 | 523 | * exponent: BITS<7:4>, mantissa: BITS<3:0> |
mcm | 2:08d850dd1cb8 | 524 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 525 | */ |
mcm | 2:08d850dd1cb8 | 526 | MAX44009::MAX44009_status_t MAX44009::MAX44009_GetLowerThreshold ( MAX44009_vector_data_t* myLowerThreshold ) |
mcm | 2:08d850dd1cb8 | 527 | { |
mcm | 2:08d850dd1cb8 | 528 | char cmd = 0U; |
mcm | 2:08d850dd1cb8 | 529 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 530 | |
mcm | 2:08d850dd1cb8 | 531 | |
mcm | 2:08d850dd1cb8 | 532 | /* Get the register value */ |
mcm | 2:08d850dd1cb8 | 533 | cmd = MAX44009_LOWER_THRESHOLD_HIGH_BYTE; |
mcm | 2:08d850dd1cb8 | 534 | aux = _i2c.write ( _MAX44009_Addr, &cmd, 1U, true ); |
mcm | 2:08d850dd1cb8 | 535 | aux = _i2c.read ( _MAX44009_Addr, (char*)&myLowerThreshold->lux_lower_threshold, 1U ); |
mcm | 2:08d850dd1cb8 | 536 | |
mcm | 2:08d850dd1cb8 | 537 | |
mcm | 2:08d850dd1cb8 | 538 | |
mcm | 2:08d850dd1cb8 | 539 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 540 | { |
mcm | 2:08d850dd1cb8 | 541 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 542 | } |
mcm | 2:08d850dd1cb8 | 543 | else |
mcm | 2:08d850dd1cb8 | 544 | { |
mcm | 2:08d850dd1cb8 | 545 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 546 | } |
mcm | 2:08d850dd1cb8 | 547 | } |
mcm | 2:08d850dd1cb8 | 548 | |
mcm | 2:08d850dd1cb8 | 549 | |
mcm | 2:08d850dd1cb8 | 550 | |
mcm | 2:08d850dd1cb8 | 551 | /** |
mcm | 2:08d850dd1cb8 | 552 | * @brief MAX44009_SetThresholdTimer ( MAX44009_vector_data_t ) |
mcm | 2:08d850dd1cb8 | 553 | * |
mcm | 2:08d850dd1cb8 | 554 | * @details It sets the threshold timer register. |
mcm | 2:08d850dd1cb8 | 555 | * |
mcm | 2:08d850dd1cb8 | 556 | * @param[in] myThresholdTimer_us: Time delay in us. |
mcm | 2:08d850dd1cb8 | 557 | * |
mcm | 2:08d850dd1cb8 | 558 | * @param[out] N/A |
mcm | 2:08d850dd1cb8 | 559 | * |
mcm | 2:08d850dd1cb8 | 560 | * |
mcm | 2:08d850dd1cb8 | 561 | * @return Status of MAX44009_SetThresholdTimer. |
mcm | 2:08d850dd1cb8 | 562 | * |
mcm | 2:08d850dd1cb8 | 563 | * |
mcm | 2:08d850dd1cb8 | 564 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 565 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 566 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 567 | * @pre The value in this register sets the time used to control this delay |
mcm | 2:08d850dd1cb8 | 568 | * |
mcm | 2:08d850dd1cb8 | 569 | * Time delay = ( 128xT7 + 64xT6 + 32xT5 + 16xT4 + 8xT3 + 4xT2 + 2xT1 + T0 ) x 100ms |
mcm | 2:08d850dd1cb8 | 570 | * |
mcm | 2:08d850dd1cb8 | 571 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 572 | */ |
mcm | 2:08d850dd1cb8 | 573 | MAX44009::MAX44009_status_t MAX44009::MAX44009_SetThresholdTimer ( MAX44009_vector_data_t myThresholdTimer_us ) |
mcm | 2:08d850dd1cb8 | 574 | { |
mcm | 2:08d850dd1cb8 | 575 | char cmd[] = { 0U, 0U }; |
mcm | 2:08d850dd1cb8 | 576 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 577 | |
mcm | 2:08d850dd1cb8 | 578 | |
mcm | 2:08d850dd1cb8 | 579 | /* Maximum delay is 25.5ms */ |
mcm | 2:08d850dd1cb8 | 580 | if ( myThresholdTimer_us.threshold_timer_us > 25500U ) |
mcm | 2:08d850dd1cb8 | 581 | { |
mcm | 2:08d850dd1cb8 | 582 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 583 | } |
mcm | 2:08d850dd1cb8 | 584 | |
mcm | 2:08d850dd1cb8 | 585 | |
mcm | 2:08d850dd1cb8 | 586 | /* Update the register value */ |
mcm | 2:08d850dd1cb8 | 587 | cmd[0] = MAX44009_THRESHOLD_TIMER; |
mcm | 2:08d850dd1cb8 | 588 | cmd[1] = ( myThresholdTimer_us.threshold_timer_us / 100U ); |
mcm | 2:08d850dd1cb8 | 589 | aux = _i2c.write ( _MAX44009_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:08d850dd1cb8 | 590 | |
mcm | 2:08d850dd1cb8 | 591 | |
mcm | 2:08d850dd1cb8 | 592 | |
mcm | 2:08d850dd1cb8 | 593 | |
mcm | 2:08d850dd1cb8 | 594 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 595 | { |
mcm | 2:08d850dd1cb8 | 596 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 597 | } |
mcm | 2:08d850dd1cb8 | 598 | else |
mcm | 2:08d850dd1cb8 | 599 | { |
mcm | 2:08d850dd1cb8 | 600 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 601 | } |
mcm | 2:08d850dd1cb8 | 602 | } |
mcm | 2:08d850dd1cb8 | 603 | |
mcm | 2:08d850dd1cb8 | 604 | |
mcm | 2:08d850dd1cb8 | 605 | |
mcm | 2:08d850dd1cb8 | 606 | /** |
mcm | 2:08d850dd1cb8 | 607 | * @brief MAX44009_GetThresholdTimer ( MAX44009_vector_data_t* ) |
mcm | 2:08d850dd1cb8 | 608 | * |
mcm | 2:08d850dd1cb8 | 609 | * @details It gets the threshold timer register. |
mcm | 2:08d850dd1cb8 | 610 | * |
mcm | 2:08d850dd1cb8 | 611 | * @param[in] N/A. |
mcm | 2:08d850dd1cb8 | 612 | * |
mcm | 2:08d850dd1cb8 | 613 | * @param[out] myThresholdTimer_us: Time delay in us. |
mcm | 2:08d850dd1cb8 | 614 | * |
mcm | 2:08d850dd1cb8 | 615 | * |
mcm | 2:08d850dd1cb8 | 616 | * @return Status of MAX44009_GetThresholdTimer. |
mcm | 2:08d850dd1cb8 | 617 | * |
mcm | 2:08d850dd1cb8 | 618 | * |
mcm | 2:08d850dd1cb8 | 619 | * @author Manuel Caballero |
mcm | 2:08d850dd1cb8 | 620 | * @date 17/September/2018 |
mcm | 2:08d850dd1cb8 | 621 | * @version 17/September/2018 The ORIGIN |
mcm | 2:08d850dd1cb8 | 622 | * @pre The value in this register gets the time used to control this delay |
mcm | 2:08d850dd1cb8 | 623 | * |
mcm | 2:08d850dd1cb8 | 624 | * Time delay = ( 128xT7 + 64xT6 + 32xT5 + 16xT4 + 8xT3 + 4xT2 + 2xT1 + T0 ) x 100ms |
mcm | 2:08d850dd1cb8 | 625 | * |
mcm | 2:08d850dd1cb8 | 626 | * @warning N/A. |
mcm | 2:08d850dd1cb8 | 627 | */ |
mcm | 2:08d850dd1cb8 | 628 | MAX44009::MAX44009_status_t MAX44009::MAX44009_GetThresholdTimer ( MAX44009_vector_data_t* myThresholdTimer_us ) |
mcm | 2:08d850dd1cb8 | 629 | { |
mcm | 2:08d850dd1cb8 | 630 | char cmd = 0U; |
mcm | 2:08d850dd1cb8 | 631 | uint32_t aux; |
mcm | 2:08d850dd1cb8 | 632 | |
mcm | 2:08d850dd1cb8 | 633 | |
mcm | 2:08d850dd1cb8 | 634 | /* Get the register value */ |
mcm | 2:08d850dd1cb8 | 635 | cmd = MAX44009_THRESHOLD_TIMER; |
mcm | 2:08d850dd1cb8 | 636 | aux = _i2c.write ( _MAX44009_Addr, &cmd, 1U, true ); |
mcm | 2:08d850dd1cb8 | 637 | aux = _i2c.read ( _MAX44009_Addr, &cmd, 1U ); |
mcm | 2:08d850dd1cb8 | 638 | |
mcm | 2:08d850dd1cb8 | 639 | |
mcm | 2:08d850dd1cb8 | 640 | /* Parse the data */ |
mcm | 2:08d850dd1cb8 | 641 | myThresholdTimer_us->threshold_timer_us = ( (uint16_t)cmd * 100U ); |
mcm | 2:08d850dd1cb8 | 642 | |
mcm | 2:08d850dd1cb8 | 643 | |
mcm | 2:08d850dd1cb8 | 644 | |
mcm | 2:08d850dd1cb8 | 645 | |
mcm | 2:08d850dd1cb8 | 646 | if ( aux == I2C_SUCCESS ) |
mcm | 2:08d850dd1cb8 | 647 | { |
mcm | 2:08d850dd1cb8 | 648 | return MAX44009_SUCCESS; |
mcm | 2:08d850dd1cb8 | 649 | } |
mcm | 2:08d850dd1cb8 | 650 | else |
mcm | 2:08d850dd1cb8 | 651 | { |
mcm | 2:08d850dd1cb8 | 652 | return MAX44009_FAILURE; |
mcm | 2:08d850dd1cb8 | 653 | } |
mcm | 2:08d850dd1cb8 | 654 | } |