Class module for MPL3115A2 I2C Barometric Sensor

Dependents:   mDotEVBM2X MTDOT-EVBDemo-DRH MTDOT-BOX-EVB-Factory-Firmware-LIB-108 MTDOT-UDKDemo_Senet ... more

Committer:
Evan Hosseini
Date:
Wed Jan 31 10:09:42 2018 -0600
Revision:
5:8be678fd9e55
Parent:
0:3f52908a334d
Make driver thread safe by making i2c read transactions atomic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
falingtrea 0:3f52908a334d 1 /**
falingtrea 0:3f52908a334d 2 * @file MPL3115A2.h
falingtrea 0:3f52908a334d 3 * @brief Device driver - MPL3115A2 barometric pressure sensor IC w/RTOS support
falingtrea 0:3f52908a334d 4 * @author Tim Barr
falingtrea 0:3f52908a334d 5 * @version 1.0
falingtrea 0:3f52908a334d 6 * @see http://cache.freescale.com/files/sensors/doc/data_sheet/MPL3115A2.pdf
falingtrea 0:3f52908a334d 7 *
falingtrea 0:3f52908a334d 8 * Copyright (c) 2015
falingtrea 0:3f52908a334d 9 *
falingtrea 0:3f52908a334d 10 * Licensed under the Apache License, Version 2.0 (the "License");
falingtrea 0:3f52908a334d 11 * you may not use this file except in compliance with the License.
falingtrea 0:3f52908a334d 12 * You may obtain a copy of the License at
falingtrea 0:3f52908a334d 13 *
falingtrea 0:3f52908a334d 14 * http://www.apache.org/licenses/LICENSE-2.0
falingtrea 0:3f52908a334d 15 *
falingtrea 0:3f52908a334d 16 * Unless required by applicable law or agreed to in writing, software
falingtrea 0:3f52908a334d 17 * distributed under the License is distributed on an "AS IS" BASIS,
falingtrea 0:3f52908a334d 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
falingtrea 0:3f52908a334d 19 * See the License for the specific language governing permissions and
falingtrea 0:3f52908a334d 20 * limitations under the License.
falingtrea 0:3f52908a334d 21 */
falingtrea 0:3f52908a334d 22
falingtrea 0:3f52908a334d 23 #ifndef MPL3115A2_H
falingtrea 0:3f52908a334d 24 #define MPL3115A2_H
falingtrea 0:3f52908a334d 25
falingtrea 0:3f52908a334d 26 #include "mbed.h"
falingtrea 0:3f52908a334d 27
falingtrea 0:3f52908a334d 28 /** Using the MultiTech Systems MTDOT-EVB
falingtrea 0:3f52908a334d 29 *
falingtrea 0:3f52908a334d 30 * Example:
falingtrea 0:3f52908a334d 31 * @code
falingtrea 0:3f52908a334d 32 * #include "mbed.h"
falingtrea 0:3f52908a334d 33 * #include "MPL3115A2.h"
falingtrea 0:3f52908a334d 34 *
falingtrea 0:3f52908a334d 35
falingtrea 0:3f52908a334d 36 *
falingtrea 0:3f52908a334d 37 * int main()
falingtrea 0:3f52908a334d 38 * {
falingtrea 0:3f52908a334d 39
falingtrea 0:3f52908a334d 40 * }
falingtrea 0:3f52908a334d 41 * @endcode
falingtrea 0:3f52908a334d 42 */
falingtrea 0:3f52908a334d 43
falingtrea 0:3f52908a334d 44
falingtrea 0:3f52908a334d 45 /**
falingtrea 0:3f52908a334d 46 * @class MPL3115A2_DATA
falingtrea 0:3f52908a334d 47 * @brief API abstraction for the MPL3115A2 barometric pressure IC data
falingtrea 0:3f52908a334d 48 */
falingtrea 0:3f52908a334d 49 class MPL3115A2_DATA
falingtrea 0:3f52908a334d 50 {
falingtrea 0:3f52908a334d 51 public:
falingtrea 0:3f52908a334d 52 /*!< volatile data variables */
falingtrea 0:3f52908a334d 53 volatile int32_t _baro;
falingtrea 0:3f52908a334d 54 volatile int16_t _temp;
falingtrea 0:3f52908a334d 55 volatile int32_t _minbaro;
falingtrea 0:3f52908a334d 56 volatile int32_t _maxbaro;
falingtrea 0:3f52908a334d 57 volatile int16_t _mintemp;
falingtrea 0:3f52908a334d 58 volatile int16_t _maxtemp;
falingtrea 0:3f52908a334d 59
falingtrea 0:3f52908a334d 60 /** Create the MPL3115A2_DATA object initialized to the parameter (or 0 if none)
falingtrea 0:3f52908a334d 61 * @param baro - the init value of _baro
falingtrea 0:3f52908a334d 62 * @param temp - the init value of _temperature
falingtrea 0:3f52908a334d 63 * @param minbaro - the init value of _minbaro
falingtrea 0:3f52908a334d 64 * @param maxbaro - the init value of _maxbaro
falingtrea 0:3f52908a334d 65 * @param mintemp - the init value of _mintemp
falingtrea 0:3f52908a334d 66 * @param maxtemp - the init value of _maxtemp
falingtrea 0:3f52908a334d 67 */
falingtrea 0:3f52908a334d 68 MPL3115A2_DATA(int32_t baro = 0, int16_t temp = 0, int32_t minbaro = 0, int32_t maxbaro = 0,
falingtrea 0:3f52908a334d 69 int16_t mintemp = 0, int16_t maxtemp = 0) : _baro(baro), _temp(temp), _minbaro(minbaro),
falingtrea 0:3f52908a334d 70 _maxbaro(maxbaro), _mintemp(mintemp), _maxtemp(maxtemp){}
falingtrea 0:3f52908a334d 71
falingtrea 0:3f52908a334d 72 /** Overloaded '=' operator to allow shorthand coding, assigning objects to one another
falingtrea 0:3f52908a334d 73 * @param rhs - an object of the same type to assign ourself the same values of
falingtrea 0:3f52908a334d 74 * @return this
falingtrea 0:3f52908a334d 75 */
falingtrea 0:3f52908a334d 76 MPL3115A2_DATA &operator= (MPL3115A2_DATA const &rhs)
falingtrea 0:3f52908a334d 77 {
falingtrea 0:3f52908a334d 78 _baro = rhs._baro;
falingtrea 0:3f52908a334d 79 _temp = rhs._temp;
falingtrea 0:3f52908a334d 80 _minbaro = rhs._minbaro;
falingtrea 0:3f52908a334d 81 _maxbaro = rhs._maxbaro;
falingtrea 0:3f52908a334d 82 _mintemp = rhs._mintemp;
falingtrea 0:3f52908a334d 83 _maxtemp = rhs._maxtemp;
falingtrea 0:3f52908a334d 84
falingtrea 0:3f52908a334d 85 return *this;
falingtrea 0:3f52908a334d 86 }
falingtrea 0:3f52908a334d 87
falingtrea 0:3f52908a334d 88 /** Overloaded '=' operator to allow shorthand coding, assigning objects to one another
falingtrea 0:3f52908a334d 89 * @param val - Assign each data member (_pressure, _temperature) this value
falingtrea 0:3f52908a334d 90 * @return this
falingtrea 0:3f52908a334d 91
falingtrea 0:3f52908a334d 92 MPL3115A2_DATA &operator= (uint16_t val)
falingtrea 0:3f52908a334d 93 {
falingtrea 0:3f52908a334d 94 _baro = _temp = val;
falingtrea 0:3f52908a334d 95
falingtrea 0:3f52908a334d 96 return *this;
falingtrea 0:3f52908a334d 97 }
falingtrea 0:3f52908a334d 98 */
falingtrea 0:3f52908a334d 99
falingtrea 0:3f52908a334d 100 /** Overloaded '==' operator to allow shorthand coding, test objects to one another
falingtrea 0:3f52908a334d 101 * @param rhs - the object to compare against
falingtrea 0:3f52908a334d 102 * @return 1 if the data members are the same and 0 otherwise
falingtrea 0:3f52908a334d 103 */
falingtrea 0:3f52908a334d 104 bool operator== (MPL3115A2_DATA &rhs)
falingtrea 0:3f52908a334d 105 {
falingtrea 0:3f52908a334d 106 return ((_baro == rhs._baro)&&(_temp == rhs._temp)&&
falingtrea 0:3f52908a334d 107 (_minbaro == rhs._minbaro) && (_maxbaro == rhs._maxbaro)&&
falingtrea 0:3f52908a334d 108 (_mintemp == rhs._mintemp) && (_maxtemp == rhs._maxtemp)) ? 1 : 0;
falingtrea 0:3f52908a334d 109 }
falingtrea 0:3f52908a334d 110 };
falingtrea 0:3f52908a334d 111
falingtrea 0:3f52908a334d 112 /**
falingtrea 0:3f52908a334d 113 * @class MPL3115A2
falingtrea 0:3f52908a334d 114 * @brief API abstraction for the MPL3115A2 3-axis barometric sensor IC
falingtrea 0:3f52908a334d 115 * initial version will be polling only. Interrupt service and rtos support will
falingtrea 0:3f52908a334d 116 * be added at a later point
falingtrea 0:3f52908a334d 117 */
falingtrea 0:3f52908a334d 118 class MPL3115A2
falingtrea 0:3f52908a334d 119 {
falingtrea 0:3f52908a334d 120 public:
falingtrea 0:3f52908a334d 121
falingtrea 0:3f52908a334d 122 /**
falingtrea 0:3f52908a334d 123 * @enum WHO_AM_I_VAL
falingtrea 0:3f52908a334d 124 * @brief Device ID's that this class is compatible with
falingtrea 0:3f52908a334d 125 */
falingtrea 0:3f52908a334d 126 enum WHO_AM_I_VAL
falingtrea 0:3f52908a334d 127 {
falingtrea 0:3f52908a334d 128 I_AM_MPL3115A2 = 0xc4, /*!< MPL3115A2 WHO_AM_I register content */
falingtrea 0:3f52908a334d 129 };
falingtrea 0:3f52908a334d 130
falingtrea 0:3f52908a334d 131 /**
falingtrea 0:3f52908a334d 132 * @enum SYS_MODE
falingtrea 0:3f52908a334d 133 * @brief operating mode of MPL3115A2
falingtrea 0:3f52908a334d 134 */
falingtrea 0:3f52908a334d 135 enum SYS_MODE
falingtrea 0:3f52908a334d 136 {
falingtrea 0:3f52908a334d 137 STANDBY = 0,
falingtrea 0:3f52908a334d 138 ACTIVE
falingtrea 0:3f52908a334d 139 };
falingtrea 0:3f52908a334d 140
falingtrea 0:3f52908a334d 141 /**
falingtrea 0:3f52908a334d 142 * @enum DR_STATUS_VALS
falingtrea 0:3f52908a334d 143 * @brief flags for data overwrite and data ready
falingtrea 0:3f52908a334d 144 */
falingtrea 0:3f52908a334d 145 enum DR_STATUS_VALS
falingtrea 0:3f52908a334d 146 {
falingtrea 0:3f52908a334d 147 TDR = 0x02,
falingtrea 0:3f52908a334d 148 PDR = 0x04,
falingtrea 0:3f52908a334d 149 PTDR = 0x08,
falingtrea 0:3f52908a334d 150 TOW = 0x20,
falingtrea 0:3f52908a334d 151 POW = 0x40,
falingtrea 0:3f52908a334d 152 PTOW = 0x80
falingtrea 0:3f52908a334d 153 };
falingtrea 0:3f52908a334d 154
falingtrea 0:3f52908a334d 155 /**
falingtrea 0:3f52908a334d 156 * @enum OUTPUT_MODE
falingtrea 0:3f52908a334d 157 * @brief Select whether data is raw or post-processed
falingtrea 0:3f52908a334d 158 */
falingtrea 0:3f52908a334d 159 enum OUTPUT_MODE
falingtrea 0:3f52908a334d 160 {
falingtrea 0:3f52908a334d 161 DATA_NORMAL = 0x00,
falingtrea 0:3f52908a334d 162 DATA_RAW = 0x40
falingtrea 0:3f52908a334d 163 };
falingtrea 0:3f52908a334d 164
falingtrea 0:3f52908a334d 165 /**
falingtrea 0:3f52908a334d 166 * @enum DATA_MODE
falingtrea 0:3f52908a334d 167 * @brief Sets the pressure measurement post- processing mode for the sensor
falingtrea 0:3f52908a334d 168 */
falingtrea 0:3f52908a334d 169 enum DATA_MODE
falingtrea 0:3f52908a334d 170 {
falingtrea 0:3f52908a334d 171 DM_BAROMETER = 0x00,
falingtrea 0:3f52908a334d 172 DM_ALTIMETER = 0x80
falingtrea 0:3f52908a334d 173 };
falingtrea 0:3f52908a334d 174
falingtrea 0:3f52908a334d 175 /**
falingtrea 0:3f52908a334d 176 * @enum OVERSAMPLE_RATIO
falingtrea 0:3f52908a334d 177 * @brief values for oversample ratio
falingtrea 0:3f52908a334d 178 * Note: sample time is 2.5 msec * ratio# i.e. OR_8 -> 2.5 * 8 = 20 msec
falingtrea 0:3f52908a334d 179 */
falingtrea 0:3f52908a334d 180 enum OVERSAMPLE_RATIO
falingtrea 0:3f52908a334d 181 {
falingtrea 0:3f52908a334d 182 OR_1 = 0x00,
falingtrea 0:3f52908a334d 183 OR_2 = 0x08,
falingtrea 0:3f52908a334d 184 OR_4 = 0x10,
falingtrea 0:3f52908a334d 185 OR_8 = 0x18,
falingtrea 0:3f52908a334d 186 OR_16 = 0x20,
falingtrea 0:3f52908a334d 187 OR_32 = 0x28,
falingtrea 0:3f52908a334d 188 OR_64 = 0x30,
falingtrea 0:3f52908a334d 189 OR_128 = 0x38
falingtrea 0:3f52908a334d 190 };
falingtrea 0:3f52908a334d 191
falingtrea 0:3f52908a334d 192 /**
falingtrea 0:3f52908a334d 193 * @enum ACQUISITION_TIMER
falingtrea 0:3f52908a334d 194 * @brief in active mode this sets time between samples in seconds
falingtrea 0:3f52908a334d 195 */
falingtrea 0:3f52908a334d 196 enum ACQUISITION_TIMER
falingtrea 0:3f52908a334d 197 {
falingtrea 0:3f52908a334d 198 AT_1 = 0x00,
falingtrea 0:3f52908a334d 199 AT_2, AT_4, AT_8, AT_16, AT_32, AT_64, AT_128, AT_256,
falingtrea 0:3f52908a334d 200 AT_512, AT_1024, AT_2048, AT_4096, AT_8192, AT_16384, AT_32768
falingtrea 0:3f52908a334d 201 };
falingtrea 0:3f52908a334d 202
falingtrea 0:3f52908a334d 203 /**
falingtrea 0:3f52908a334d 204 * @enum REGISTER
falingtrea 0:3f52908a334d 205 * @brief The device register map
falingtrea 0:3f52908a334d 206 */
falingtrea 0:3f52908a334d 207 enum REGISTER
falingtrea 0:3f52908a334d 208 {
falingtrea 0:3f52908a334d 209 STATUS = 0x0,
falingtrea 0:3f52908a334d 210 OUT_P_MSB, OUT_P_CSB, OUT_P_LSB, OUT_T_MSB, OUT_T_LSB, DR_STATUS,
falingtrea 0:3f52908a334d 211 OUT_P_DELTA_MSB, OUT_P_DELTA_CSB, OUT_P_DELTA_LSB, OUT_T_DELTA_MSB, OUT_T_DELTA_LSB,
falingtrea 0:3f52908a334d 212 WHO_AM_I, F_STATUS, F_DATA, F_SETUP, TIME_DLY, SYSMOD, INT_SOURCE,
falingtrea 0:3f52908a334d 213 PT_DATA_CFG, BAR_IN_MSB, BAR_IN_LSB, P_ARM_MSB, P_ARM_LSB, T_ARM,
falingtrea 0:3f52908a334d 214 P_ARM_WND_MSB, P_ARM_WND_LSB, T_ARM_WND,
falingtrea 0:3f52908a334d 215 P_MIN_MSB, P_MIN_CSB, P_MIN_LSB, T_MIN_MSB, T_MIN_LSB,
falingtrea 0:3f52908a334d 216 P_MAX_MSB, P_MAX_CSB, P_MAX_LSB, T_MAX_MSB, T_MAX_LSB,
falingtrea 0:3f52908a334d 217 CTRL_REG1, CTRL_REG2, CTRL_REG3, CTRL_REG4, CTRL_REG5,
falingtrea 0:3f52908a334d 218 OFF_P, OFF_T, OFF_H
falingtrea 0:3f52908a334d 219 };
falingtrea 0:3f52908a334d 220
falingtrea 0:3f52908a334d 221 /** Create the MPL3115A2 object
falingtrea 0:3f52908a334d 222 * @param i2c - A defined I2C object
falingtrea 0:3f52908a334d 223 * @param int1 - A defined InterruptIn object pointer. Default NULL for polling mode
falingtrea 0:3f52908a334d 224 * @param int2 - A defined InterruptIn object pointer. Default NULL for polling mode
falingtrea 0:3f52908a334d 225 * TODO - Need to add interrupt support
falingtrea 0:3f52908a334d 226 */
falingtrea 0:3f52908a334d 227 MPL3115A2(I2C &i2c, InterruptIn* int1 = NULL, InterruptIn* int2 = NULL);
falingtrea 0:3f52908a334d 228
falingtrea 0:3f52908a334d 229 /** Test the Who am I register for valid ID
falingtrea 0:3f52908a334d 230 * @return Boolean true if valid device
falingtrea 0:3f52908a334d 231 */
falingtrea 0:3f52908a334d 232 bool testWhoAmI(void) ;
falingtrea 0:3f52908a334d 233
falingtrea 0:3f52908a334d 234 /** Setup the MPL3115A2 for standard barometric sensor read mode
falingtrea 0:3f52908a334d 235 * @out_mode - Turns Data post processing ON/OFF using the OUTPUT_MODE enum
falingtrea 0:3f52908a334d 236 * @data_mode - Sets Pressure or Altitude mode using the DATA_MODE enum
falingtrea 0:3f52908a334d 237 * @os_ratio - Sets the Oversample ration using the OVERSAMPLE_RATIO enum
falingtrea 0:3f52908a334d 238 * @measure_time - Sets the Aquisition time for Active mode using the ACQUISITION_TIMER enum
falingtrea 0:3f52908a334d 239 * @return status of command
falingtrea 0:3f52908a334d 240 *
falingtrea 0:3f52908a334d 241 * This sets the resolution, range, data rate, oversample
falingtrea 0:3f52908a334d 242 * mode, hi and lo pass filter.
falingtrea 0:3f52908a334d 243 */
falingtrea 0:3f52908a334d 244 uint8_t setParameters(OUTPUT_MODE out_mode, DATA_MODE data_mode, OVERSAMPLE_RATIO os_ratio,
falingtrea 0:3f52908a334d 245 ACQUISITION_TIMER measure_time) ;
falingtrea 0:3f52908a334d 246
falingtrea 0:3f52908a334d 247 uint8_t enableFIFO(void) ;
falingtrea 0:3f52908a334d 248
falingtrea 0:3f52908a334d 249 /** Put the MPL3115A2 in the Standby mode
falingtrea 0:3f52908a334d 250 * @return status of command
falingtrea 0:3f52908a334d 251 * TODO - need to implement function
falingtrea 0:3f52908a334d 252 */
falingtrea 0:3f52908a334d 253 uint8_t standbyMode(void) ;
falingtrea 0:3f52908a334d 254
falingtrea 0:3f52908a334d 255 /** Put the MPL3115A2 in the active mode
falingtrea 0:3f52908a334d 256 * @return status of command
falingtrea 0:3f52908a334d 257 */
falingtrea 0:3f52908a334d 258 uint8_t activeMode(void) ;
falingtrea 0:3f52908a334d 259
falingtrea 0:3f52908a334d 260 /** Triggers the MPL3115A2 to take one measurement in Active or Standby mode
falingtrea 0:3f52908a334d 261 * @return status of command
falingtrea 0:3f52908a334d 262 */
falingtrea 0:3f52908a334d 263 uint8_t triggerOneShot(void) ;
falingtrea 0:3f52908a334d 264
falingtrea 0:3f52908a334d 265 /** Set the sea level equivalent pressure for Altitude mode
falingtrea 0:3f52908a334d 266 * @alti_calib - Value is Equivalent sea level pressure for measurement location (2 Pa resolution)
falingtrea 0:3f52908a334d 267 * @return status byte
falingtrea 0:3f52908a334d 268 */
falingtrea 0:3f52908a334d 269 uint8_t setAltitudeCalib(int16_t alti_calib) ;
falingtrea 0:3f52908a334d 270
falingtrea 0:3f52908a334d 271 /** Clears all minimum and maximum data registers
falingtrea 0:3f52908a334d 272 * @return status of command
falingtrea 0:3f52908a334d 273 */
falingtrea 0:3f52908a334d 274 uint8_t clearMinMaxRegs(void) ;
falingtrea 0:3f52908a334d 275
falingtrea 0:3f52908a334d 276 /** Check the MPL3115A2 status register
falingtrea 0:3f52908a334d 277 * @return status byte
falingtrea 0:3f52908a334d 278 */
falingtrea 0:3f52908a334d 279 uint8_t getStatus(void) ;
falingtrea 0:3f52908a334d 280
falingtrea 0:3f52908a334d 281 /** Get the Pressure or Altitude data
falingtrea 0:3f52908a334d 282 * @return The last valid pressure based reading from the barometric sensor
falingtrea 0:3f52908a334d 283 */
falingtrea 0:3f52908a334d 284 int32_t getBaroData(void);
falingtrea 0:3f52908a334d 285
falingtrea 0:3f52908a334d 286 /** Get the Temperature data
falingtrea 0:3f52908a334d 287 * @return The last valid temperature reading from the barometric sensor
falingtrea 0:3f52908a334d 288 */
falingtrea 0:3f52908a334d 289 int16_t getTempData(void);
falingtrea 0:3f52908a334d 290
falingtrea 0:3f52908a334d 291 /** Get the Minimum Pressure or Altitude data
falingtrea 0:3f52908a334d 292 * @param Boolean TRUE clears the register after reading
falingtrea 0:3f52908a334d 293 * @return The Minimum Pressure or Altitude read since last cleared
falingtrea 0:3f52908a334d 294 */
falingtrea 0:3f52908a334d 295 int32_t getMinBaro(bool clear_data);
falingtrea 0:3f52908a334d 296
falingtrea 0:3f52908a334d 297 /** Get the Maximum Pressure or Altitude data
falingtrea 0:3f52908a334d 298 * @param Boolean true clears the register after reading
falingtrea 0:3f52908a334d 299 * @return The Maximum Pressure or Altitude read since last cleared
falingtrea 0:3f52908a334d 300 */
falingtrea 0:3f52908a334d 301 int32_t getMaxBaro(bool clear_data);
falingtrea 0:3f52908a334d 302
falingtrea 0:3f52908a334d 303 /** Get the Minimum Temperature data
falingtrea 0:3f52908a334d 304 * @param Boolean true clears the register after reading
falingtrea 0:3f52908a334d 305 * @return The Minimum temperature read since last cleared
falingtrea 0:3f52908a334d 306 */
falingtrea 0:3f52908a334d 307 int16_t getMinTemp(bool clear_data);
falingtrea 0:3f52908a334d 308
falingtrea 0:3f52908a334d 309 /** Get the Maximum Temperature data
falingtrea 0:3f52908a334d 310 * @param Boolean true clears the register after reading
falingtrea 0:3f52908a334d 311 * @return The Maximum temperature read since last cleared
falingtrea 0:3f52908a334d 312 */
falingtrea 0:3f52908a334d 313 int16_t getMaxTemp(bool clear_data);
falingtrea 0:3f52908a334d 314
falingtrea 0:3f52908a334d 315 /** Get the MP3115A2 data structure
falingtrea 0:3f52908a334d 316 * @param Boolean true clears all MIN/MAX registers after reading
falingtrea 0:3f52908a334d 317 * @return MPL3115A2_DATA structure
falingtrea 0:3f52908a334d 318 */
falingtrea 0:3f52908a334d 319 MPL3115A2_DATA getAllData(bool clear_data);
falingtrea 0:3f52908a334d 320
falingtrea 0:3f52908a334d 321 /*
falingtrea 0:3f52908a334d 322 * Need to add interrupt support code here when I get the chance
falingtrea 0:3f52908a334d 323 */
falingtrea 0:3f52908a334d 324
falingtrea 0:3f52908a334d 325
falingtrea 0:3f52908a334d 326 private:
falingtrea 0:3f52908a334d 327
falingtrea 0:3f52908a334d 328 I2C *_i2c;
falingtrea 0:3f52908a334d 329 InterruptIn *_int1;
falingtrea 0:3f52908a334d 330 InterruptIn *_int2;
falingtrea 0:3f52908a334d 331 MPL3115A2_DATA _data;
falingtrea 0:3f52908a334d 332 bool _polling_mode;
falingtrea 0:3f52908a334d 333 uint8_t static const _i2c_addr = (0x60 <<1);
falingtrea 0:3f52908a334d 334
falingtrea 0:3f52908a334d 335 uint8_t init(void);
falingtrea 0:3f52908a334d 336
falingtrea 0:3f52908a334d 337 /** Write to a register
falingtrea 0:3f52908a334d 338 * Note: most writes are only valid in stop mode
falingtrea 0:3f52908a334d 339 * @param reg - The register to be written
falingtrea 0:3f52908a334d 340 * @param data - The data to be written
falingtrea 0:3f52908a334d 341 * @param count - number of bytes to send, assumes 1 byte if not specified
falingtrea 0:3f52908a334d 342 * @return - status of command
falingtrea 0:3f52908a334d 343 */
falingtrea 0:3f52908a334d 344 uint8_t writeRegister(uint8_t reg, char* data, uint8_t count = 1);
falingtrea 0:3f52908a334d 345
falingtrea 0:3f52908a334d 346 /** Read from a register
falingtrea 0:3f52908a334d 347 * @param reg - The register to read from
falingtrea 0:3f52908a334d 348 * @param data - buffer of data to be read
falingtrea 0:3f52908a334d 349 * @param count - number of bytes to send, assumes 1 byte if not specified
falingtrea 0:3f52908a334d 350 * @return - status of command
falingtrea 0:3f52908a334d 351 */
falingtrea 0:3f52908a334d 352 uint8_t readRegister(uint8_t reg, char* data, uint8_t count = 1);
falingtrea 0:3f52908a334d 353
falingtrea 0:3f52908a334d 354 };
falingtrea 0:3f52908a334d 355
falingtrea 0:3f52908a334d 356 #endif