1

Committer:
ashleymills
Date:
Tue Mar 04 16:23:40 2014 +0000
Revision:
11:dfd1e0afcb7b
Parent:
10:ca9ba7ad4e94
Child:
12:172540ff6b8b
Started a major rewrite of this library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 10:ca9ba7ad4e94 1 // Author: Nicholas Herriot, Ashley Mills
nherriot 0:bcf2aa85d7f9 2 /* Copyright (c) 2013 Vodafone, MIT License
nherriot 0:bcf2aa85d7f9 3 *
nherriot 0:bcf2aa85d7f9 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
nherriot 0:bcf2aa85d7f9 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
nherriot 0:bcf2aa85d7f9 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
nherriot 0:bcf2aa85d7f9 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
nherriot 0:bcf2aa85d7f9 8 * furnished to do so, subject to the following conditions:
nherriot 0:bcf2aa85d7f9 9 *
nherriot 0:bcf2aa85d7f9 10 * The above copyright notice and this permission notice shall be included in all copies or
nherriot 0:bcf2aa85d7f9 11 * substantial portions of the Software.
nherriot 0:bcf2aa85d7f9 12 *
nherriot 0:bcf2aa85d7f9 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
nherriot 0:bcf2aa85d7f9 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
nherriot 0:bcf2aa85d7f9 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
nherriot 0:bcf2aa85d7f9 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
nherriot 0:bcf2aa85d7f9 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
nherriot 0:bcf2aa85d7f9 18 */
nherriot 0:bcf2aa85d7f9 19
nherriot 0:bcf2aa85d7f9 20 // the SparkFun breakout board defaults to 1, set to 0 if SA0 jumper on the bottom of the board is set
nherriot 0:bcf2aa85d7f9 21 // see the Table 10. I2C Device Address Sequence in Freescale MMA8452Q pdf
nherriot 0:bcf2aa85d7f9 22
ashleymills 11:dfd1e0afcb7b 23
ashleymills 11:dfd1e0afcb7b 24 #define DBG(...) pc.printf(__VA_ARGS__); pc.printf("\r\n");
ashleymills 11:dfd1e0afcb7b 25 #define DBGX(...) pc.print(__VA_ARGS__);
ashleymills 11:dfd1e0afcb7b 26
nherriot 0:bcf2aa85d7f9 27 //#define SA0 1
nherriot 0:bcf2aa85d7f9 28 //#if SA0
nherriot 0:bcf2aa85d7f9 29 //#define MMA8452_ADDRESS 0x3A // SA0 is high, 0x1C if low - it should be 0x1D, but we shift now to save shifting in the code
nherriot 0:bcf2aa85d7f9 30 //#else
nherriot 0:bcf2aa85d7f9 31 //#define MMA8452_ADDRESS 0x1C
nherriot 0:bcf2aa85d7f9 32 //#endif
nherriot 0:bcf2aa85d7f9 33
nherriot 0:bcf2aa85d7f9 34 //#ifndef MBED_MMA8452
nherriot 0:bcf2aa85d7f9 35
nherriot 0:bcf2aa85d7f9 36 //#define MBED_MMA8452
nherriot 0:bcf2aa85d7f9 37
nherriot 0:bcf2aa85d7f9 38 #include "mbed.h"
nherriot 0:bcf2aa85d7f9 39
nherriot 0:bcf2aa85d7f9 40 /** Accelerometer MMA8452 class
nherriot 0:bcf2aa85d7f9 41 *
nherriot 0:bcf2aa85d7f9 42 * Example:
nherriot 0:bcf2aa85d7f9 43 * @code
nherriot 0:bcf2aa85d7f9 44 *
nherriot 0:bcf2aa85d7f9 45 * #include "mbed.h"
nherriot 0:bcf2aa85d7f9 46 * #include "MMA8452.h"
nherriot 0:bcf2aa85d7f9 47 *
nherriot 0:bcf2aa85d7f9 48 *
nherriot 0:bcf2aa85d7f9 49 * Accelerometer_MMA8452 Acc(p28, p27);
nherriot 0:bcf2aa85d7f9 50 * serial pc(USBTX, USBRX);
nherriot 0:bcf2aa85d7f9 51 *
nherriot 0:bcf2aa85d7f9 52 * int main()
nherriot 0:bcf2aa85d7f9 53 * {
nherriot 0:bcf2aa85d7f9 54 * Acc.init();
nherriot 0:bcf2aa85d7f9 55 * while(1)
nherriot 0:bcf2aa85d7f9 56 * {
nherriot 0:bcf2aa85d7f9 57 * int x=0, y=0, z=0;
nherriot 0:bcf2aa85d7f9 58 * Acc.read_Tilt(&x, &y, &z);
nherriot 0:bcf2aa85d7f9 59 * pc.printf("Tilt x: %2.2f degree \n", x); // Print the tilt orientation of the X axis
nherriot 0:bcf2aa85d7f9 60 * pc.printf("Tilt y: %2.2f degree \n", y); // Print the tilt orientation of the Y axis
nherriot 0:bcf2aa85d7f9 61 * pc.printf("Tilt z: %2.2f degree \n", z); // Print the tilt orientation of the Z axis
nherriot 0:bcf2aa85d7f9 62 * wait(1);
nherriot 0:bcf2aa85d7f9 63 * }
nherriot 0:bcf2aa85d7f9 64 * }
nherriot 0:bcf2aa85d7f9 65 * @endcode
nherriot 0:bcf2aa85d7f9 66 */
nherriot 0:bcf2aa85d7f9 67
nherriot 0:bcf2aa85d7f9 68 // More info on MCU Master address can be found on section 5.10.1 of http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MMA8452Q
nherriot 0:bcf2aa85d7f9 69 #define SA0 1
nherriot 0:bcf2aa85d7f9 70 #if SA0
ashleymills 11:dfd1e0afcb7b 71 #define MMA8452_ADDRESS 0x3A // 0x1D<<1 // SA0 is high, 0x1C if low -
nherriot 0:bcf2aa85d7f9 72 #else
ashleymills 11:dfd1e0afcb7b 73 #define MMA8452_ADDRESS 0x38 // 0x1C<<1
nherriot 0:bcf2aa85d7f9 74 #endif
nherriot 0:bcf2aa85d7f9 75
nherriot 0:bcf2aa85d7f9 76 // Register descriptions found in section 6 of pdf
nherriot 0:bcf2aa85d7f9 77 #define STATUS 0x00 // Type 'read' : Real time status, should return 0x00
nherriot 0:bcf2aa85d7f9 78 #define OUT_X_MSB 0x01 // Type 'read' : x axis - 8 most significatn bit of a 12 bit sample
nherriot 0:bcf2aa85d7f9 79 #define OUT_X_LSB 0x02 // Type 'read' : x axis - 4 least significatn bit of a 12 bit sample
nherriot 0:bcf2aa85d7f9 80 #define OUT_Y_MSB 0x03 // Type 'read' : y axis - 8 most significatn bit of a 12 bit sample
nherriot 0:bcf2aa85d7f9 81 #define OUT_Y_LSB 0x04 // Type 'read' : y axis - 4 least significatn bit of a 12 bit sample
nherriot 0:bcf2aa85d7f9 82 #define OUT_Z_MSB 0x05 // Type 'read' : z axis - 8 most significatn bit of a 12 bit sample
nherriot 0:bcf2aa85d7f9 83 #define OUT_Z_LSB 0x06 // Type 'read' : z axis - 4 least significatn bit of a 12 bit sample
nherriot 0:bcf2aa85d7f9 84
nherriot 0:bcf2aa85d7f9 85 #define SYSMOD 0x0B // Type 'read' : This tells you if device is active, sleep or standy 0x00=STANDBY 0x01=WAKE 0x02=SLEEP
nherriot 0:bcf2aa85d7f9 86 #define WHO_AM_I 0x0D // Type 'read' : This should return the device id of 0x2A
nherriot 0:bcf2aa85d7f9 87
nherriot 0:bcf2aa85d7f9 88 #define PL_STATUS 0x10 // Type 'read' : This shows portrait landscape mode orientation
nherriot 0:bcf2aa85d7f9 89 #define PL_CFG 0x11 // Type 'read/write' : This allows portrait landscape configuration
nherriot 0:bcf2aa85d7f9 90 #define PL_COUNT 0x12 // Type 'read' : This is the portraint landscape debounce counter
nherriot 0:bcf2aa85d7f9 91 #define PL_BF_ZCOMP 0x13 // Type 'read' :
nherriot 0:bcf2aa85d7f9 92 #define PL_THS_REG 0x14 // Type 'read' :
nherriot 0:bcf2aa85d7f9 93
nherriot 0:bcf2aa85d7f9 94 #define FF_MT_CFG 0X15 // Type 'read/write' : Freefaul motion functional block configuration
nherriot 0:bcf2aa85d7f9 95 #define FF_MT_SRC 0X16 // Type 'read' : Freefaul motion event source register
nherriot 1:ef026bf28798 96 #define FF_MT_THS 0X17 // Type 'read' : Freefaul motion threshold register
nherriot 0:bcf2aa85d7f9 97 #define FF_COUNT 0X18 // Type 'read' : Freefaul motion debouce counter
nherriot 0:bcf2aa85d7f9 98
nherriot 3:ffb0b1650ca2 99 #define ASLP_COUNT 0x29 // Type 'read/write' : Counter settings for auto sleep
nherriot 0:bcf2aa85d7f9 100 #define CTRL_REG_1 0x2A // Type 'read/write' :
nherriot 0:bcf2aa85d7f9 101 #define CTRL_REG_2 0x2B // Type 'read/write' :
nherriot 0:bcf2aa85d7f9 102 #define CTRL_REG_3 0x2C // Type 'read/write' :
nherriot 0:bcf2aa85d7f9 103 #define CTRL_REG_4 0x2D // Type 'read/write' :
nherriot 0:bcf2aa85d7f9 104 #define CTRL_REG_5 0x2E // Type 'read/write' :
nherriot 0:bcf2aa85d7f9 105
nherriot 3:ffb0b1650ca2 106 // Defined in table 13 of the Freescale PDF
nherriot 3:ffb0b1650ca2 107 #define STANDBY 0x00 // State value returned after a SYSMOD request, it can be in state STANDBY, WAKE or SLEEP
nherriot 3:ffb0b1650ca2 108 #define WAKE 0x01 // State value returned after a SYSMOD request, it can be in state STANDBY, WAKE or SLEEP
nherriot 3:ffb0b1650ca2 109 #define SLEEP 0x02 // State value returned after a SYSMOD request, it can be in state STANDBY, WAKE or SLEEP
nherriot 3:ffb0b1650ca2 110 #define ACTIVE 0x01 // Stage value returned and set in Control Register 1, it can be STANDBY=00, or ACTIVE=01
nherriot 3:ffb0b1650ca2 111
nherriot 0:bcf2aa85d7f9 112
nherriot 0:bcf2aa85d7f9 113
nherriot 0:bcf2aa85d7f9 114 #define TILT_STATUS 0x03 // Tilt Status (Read only)
nherriot 0:bcf2aa85d7f9 115 #define SRST_STATUS 0x04 // Sample Rate Status Register (Read only)
nherriot 0:bcf2aa85d7f9 116 #define SPCNT_STATUS 0x05 // Sleep Count Register (Read/Write)
nherriot 0:bcf2aa85d7f9 117 #define INTSU_STATUS 0x06 // Interrupt Setup Register
nherriot 0:bcf2aa85d7f9 118 #define MODE_STATUS 0x07 // Mode Register (Read/Write)
nherriot 0:bcf2aa85d7f9 119 #define SR_STATUS 0x08 // Auto-Wake and Active Mode Portrait/Landscape Samples per Seconds Register (Read/Write)
nherriot 0:bcf2aa85d7f9 120 #define PDET_STATUS 0x09 // Tap/Pulse Detection Register (Read/Write)
nherriot 0:bcf2aa85d7f9 121 #define PD_STATUS 0xA // Tap/Pulse Debounce Count Register (Read/Write)
nherriot 0:bcf2aa85d7f9 122
ashleymills 11:dfd1e0afcb7b 123 #define MMA8452_ACTIVE_MASK 0x01
ashleymills 11:dfd1e0afcb7b 124 #define MMA8452_STANDBY_MASK 0xFE
ashleymills 11:dfd1e0afcb7b 125
ashleymills 11:dfd1e0afcb7b 126 #define MMA8452_XYZ_DATA_CFG 0x0E
ashleymills 11:dfd1e0afcb7b 127 #define MMA8452_CTRL_REG_1 0x2A
ashleymills 11:dfd1e0afcb7b 128
ashleymills 11:dfd1e0afcb7b 129 #define MMA8452_DYNAMIC_RANGE_MASK 0xFC
ashleymills 11:dfd1e0afcb7b 130
ashleymills 11:dfd1e0afcb7b 131
ashleymills 11:dfd1e0afcb7b 132 #define MMA8452_DATA_RATE_MASK 0xC7
ashleymills 11:dfd1e0afcb7b 133 #define MMA8452_DATA_RATE_MASK_SHIFT 0x03
ashleymills 11:dfd1e0afcb7b 134
ashleymills 11:dfd1e0afcb7b 135 #define MMA8452_WRITE_MASK 0xFE
ashleymills 11:dfd1e0afcb7b 136 #define MMA8452_READ_MASK 0x01
ashleymills 11:dfd1e0afcb7b 137
ashleymills 11:dfd1e0afcb7b 138 #define MMA8452_BIT_DEPTH_MASK 0xFD
ashleymills 11:dfd1e0afcb7b 139 #define MMA8452_BIT_DEPTH_MASK_SHIFT 0x01
ashleymills 11:dfd1e0afcb7b 140
ashleymills 10:ca9ba7ad4e94 141 class MMA8452
nherriot 0:bcf2aa85d7f9 142 {
nherriot 0:bcf2aa85d7f9 143 public:
ashleymills 10:ca9ba7ad4e94 144
ashleymills 11:dfd1e0afcb7b 145 enum DynamicRange {
ashleymills 11:dfd1e0afcb7b 146 DYNAMIC_RANGE_2G=0x00,
ashleymills 11:dfd1e0afcb7b 147 DYNAMIC_RANGE_4G,
ashleymills 11:dfd1e0afcb7b 148 DYNAMIC_RANGE_8G,
ashleymills 11:dfd1e0afcb7b 149 DYNAMIC_RANGE_UNKNOWN
ashleymills 10:ca9ba7ad4e94 150 };
nherriot 0:bcf2aa85d7f9 151
ashleymills 10:ca9ba7ad4e94 152 enum BitDepth {
ashleymills 11:dfd1e0afcb7b 153 BIT_DEPTH_12=0x00,
ashleymills 11:dfd1e0afcb7b 154 BIT_DEPTH_8 // 1 sets fast read mode, hence the inversion
ashleymills 10:ca9ba7ad4e94 155 };
ashleymills 11:dfd1e0afcb7b 156
ashleymills 11:dfd1e0afcb7b 157 enum DataRateHz {
ashleymills 11:dfd1e0afcb7b 158 RATE_800=0x00,
ashleymills 11:dfd1e0afcb7b 159 RATE_400,
ashleymills 11:dfd1e0afcb7b 160 RATE_200,
ashleymills 11:dfd1e0afcb7b 161 RATE_100,
ashleymills 11:dfd1e0afcb7b 162 RATE_50,
ashleymills 11:dfd1e0afcb7b 163 RATE_12_5,
ashleymills 11:dfd1e0afcb7b 164 RATE_6_25,
ashleymills 11:dfd1e0afcb7b 165 RATE_1_563,
ashleymills 11:dfd1e0afcb7b 166 RATE_UNKNOWN
ashleymills 11:dfd1e0afcb7b 167 };
ashleymills 11:dfd1e0afcb7b 168
ashleymills 11:dfd1e0afcb7b 169 //void setDynamicRange(
nherriot 0:bcf2aa85d7f9 170
nherriot 0:bcf2aa85d7f9 171 /** Create an accelerometer object connected to the specified I2C object
nherriot 0:bcf2aa85d7f9 172 *
nherriot 0:bcf2aa85d7f9 173 * @param sda I2C data port
nherriot 0:bcf2aa85d7f9 174 * @param scl I2C8452 clock port
nherriot 0:bcf2aa85d7f9 175 *
nherriot 0:bcf2aa85d7f9 176 */
ashleymills 10:ca9ba7ad4e94 177 MMA8452(PinName sda, PinName scl, int frequency);
nherriot 1:ef026bf28798 178 //Accelerometer_MMA8452(PinName sda, PinName scl);
nherriot 0:bcf2aa85d7f9 179
nherriot 0:bcf2aa85d7f9 180 /** Destroys an MMA8452 object
nherriot 0:bcf2aa85d7f9 181 *
nherriot 0:bcf2aa85d7f9 182 */
ashleymills 10:ca9ba7ad4e94 183 ~MMA8452();
nherriot 3:ffb0b1650ca2 184
ashleymills 11:dfd1e0afcb7b 185 //int setOperationMode(OperationMode m);
nherriot 3:ffb0b1650ca2 186
nherriot 3:ffb0b1650ca2 187
nherriot 0:bcf2aa85d7f9 188 /** Activate the MMA8452 (required)
nherriot 1:ef026bf28798 189 * returns 0 for success in activating the chip
nherriot 1:ef026bf28798 190 * returns 1 for failure in activating the chip
nherriot 1:ef026bf28798 191 * -currrently no retries or waiting is done, this method tries 1 time the exits.
nherriot 3:ffb0b1650ca2 192 *
nherriot 3:ffb0b1650ca2 193 * This will set the device 'active' even if it's already active. It's just a way to force that state.
nherriot 1:ef026bf28798 194 */
nherriot 0:bcf2aa85d7f9 195 int activate();
nherriot 3:ffb0b1650ca2 196
nherriot 3:ffb0b1650ca2 197
nherriot 3:ffb0b1650ca2 198 /** Standby the MMA8452 (not required)
nherriot 3:ffb0b1650ca2 199 * returns 0 for success in activating the chip
nherriot 3:ffb0b1650ca2 200 * returns 1 for failure in activating the chip
nherriot 3:ffb0b1650ca2 201 * -currrently no retries or waiting is done, this method tries 1 time the exits.
nherriot 3:ffb0b1650ca2 202 *
nherriot 3:ffb0b1650ca2 203 * This will set the device 'standby' even if it's already in standby. It's just a way to force that state.
nherriot 3:ffb0b1650ca2 204 */
nherriot 3:ffb0b1650ca2 205 int standby();
nherriot 3:ffb0b1650ca2 206
nherriot 3:ffb0b1650ca2 207
nherriot 5:b3d0abd97e55 208 /** get_CTRL_Reg1 the MMA8452 (not required)
nherriot 5:b3d0abd97e55 209 * returns 0 for success in activating the chip
nherriot 5:b3d0abd97e55 210 * returns 1 for failure in activating the chip
nherriot 5:b3d0abd97e55 211 * -currrently no retries or waiting is done, this method tries 1 time the exits.
nherriot 5:b3d0abd97e55 212 *
nherriot 5:b3d0abd97e55 213 * This will return the state of the control register 1. This holds and sets values for auto wake, sleep mode
nherriot 5:b3d0abd97e55 214 * output data rate, fast read mode and active/standby. More info on 6.7 of pdf for MMA8452 Freescale doc.
nherriot 5:b3d0abd97e55 215 */
ashleymills 11:dfd1e0afcb7b 216 int get_CTRL_Reg1(char* dst);
nherriot 5:b3d0abd97e55 217
nherriot 0:bcf2aa85d7f9 218
nherriot 0:bcf2aa85d7f9 219 /** Initialization of device MMA8452 (required)
nherriot 0:bcf2aa85d7f9 220 */
nherriot 0:bcf2aa85d7f9 221 void init();
nherriot 0:bcf2aa85d7f9 222
nherriot 1:ef026bf28798 223 /** Read the device ID from the accelerometer
nherriot 1:ef026bf28798 224 *
nherriot 1:ef026bf28798 225 * @param *deviceID Value of device - is should be 0x2A
nherriot 1:ef026bf28798 226 * return 0 for success or
nherriot 1:ef026bf28798 227 * return 1 for failure.
nherriot 1:ef026bf28798 228 */
ashleymills 11:dfd1e0afcb7b 229 int getDeviceID(char* dst);
nherriot 0:bcf2aa85d7f9 230
nherriot 3:ffb0b1650ca2 231 int read_y();
nherriot 3:ffb0b1650ca2 232
nherriot 3:ffb0b1650ca2 233 int read_z();
nherriot 3:ffb0b1650ca2 234
nherriot 0:bcf2aa85d7f9 235 /** Read the x register of the MMA8452
nherriot 0:bcf2aa85d7f9 236 *
nherriot 0:bcf2aa85d7f9 237 * @returns The value of x acceleration
nherriot 0:bcf2aa85d7f9 238 */
ashleymills 10:ca9ba7ad4e94 239 int readRawX(char *xaxis);
nherriot 3:ffb0b1650ca2 240 //int read_x(int& xaxisLSB);
nherriot 0:bcf2aa85d7f9 241 /** Read the y register of the MMA8452
nherriot 0:bcf2aa85d7f9 242 *
nherriot 0:bcf2aa85d7f9 243 * @returns The value of y acceleration
nherriot 0:bcf2aa85d7f9 244 */
ashleymills 10:ca9ba7ad4e94 245 int readRawY(char *yaxis);
nherriot 0:bcf2aa85d7f9 246
nherriot 0:bcf2aa85d7f9 247 /** Read the z register of the MMA8452
nherriot 0:bcf2aa85d7f9 248 *
nherriot 0:bcf2aa85d7f9 249 * @returns The value of z acceleration
nherriot 0:bcf2aa85d7f9 250 */
ashleymills 10:ca9ba7ad4e94 251 int readRawZ(char * zaxis);
nherriot 1:ef026bf28798 252
nherriot 1:ef026bf28798 253 /** Read the x,y and z registers of the MMA8452
nherriot 1:ef026bf28798 254 *
nherriot 1:ef026bf28798 255 * takes a 2 byte char buffer to store the value
nherriot 1:ef026bf28798 256 * for each axis.
nherriot 1:ef026bf28798 257 * returns 0 for success, and 1 for failure
nherriot 1:ef026bf28798 258 *
nherriot 1:ef026bf28798 259 */
ashleymills 10:ca9ba7ad4e94 260 int readRawXYZ(char *x, char *y, char *z);
nherriot 0:bcf2aa85d7f9 261
nherriot 0:bcf2aa85d7f9 262 /** Read from specified MMA8452 register
nherriot 0:bcf2aa85d7f9 263 *
nherriot 0:bcf2aa85d7f9 264 * @param addr The internal registeraddress of the MMA8452
nherriot 0:bcf2aa85d7f9 265 * @returns The value of the register
nherriot 0:bcf2aa85d7f9 266 */
ashleymills 11:dfd1e0afcb7b 267 int readRegister(char addr, char *dst);
ashleymills 11:dfd1e0afcb7b 268
ashleymills 11:dfd1e0afcb7b 269 int readRegister(char addr, char *dst, int nbytes);
nherriot 0:bcf2aa85d7f9 270
nherriot 0:bcf2aa85d7f9 271 /** Write to specified MMA8452 register
nherriot 0:bcf2aa85d7f9 272 *
nherriot 0:bcf2aa85d7f9 273 * @param addr The internal registeraddress of the MMA8452
nherriot 0:bcf2aa85d7f9 274 * @param data New value of the register
nherriot 0:bcf2aa85d7f9 275 */
ashleymills 11:dfd1e0afcb7b 276 int writeRegister(char addr, char data);
ashleymills 11:dfd1e0afcb7b 277 int writeRegister(char addr, char *data, int nbytes);
ashleymills 11:dfd1e0afcb7b 278
ashleymills 11:dfd1e0afcb7b 279 int logicalANDRegister(char addr, char mask);
ashleymills 11:dfd1e0afcb7b 280 int logicalORRegister(char addr, char mask);
ashleymills 11:dfd1e0afcb7b 281 int logicalXORRegister(char addr, char mask);
nherriot 0:bcf2aa85d7f9 282
ashleymills 11:dfd1e0afcb7b 283 int setDynamicRange(DynamicRange range, int toggleActivation=1);
ashleymills 11:dfd1e0afcb7b 284 int setBitDepth(BitDepth depth, int toggleActivation=1);
ashleymills 11:dfd1e0afcb7b 285 int setDataRate(DataRateHz dataRate, int toggleActivation=1);
ashleymills 11:dfd1e0afcb7b 286 DynamicRange getDynamicRange();
ashleymills 11:dfd1e0afcb7b 287 DataRateHz getDataRate();
ashleymills 11:dfd1e0afcb7b 288
ashleymills 11:dfd1e0afcb7b 289 void debugRegister(char reg);
nherriot 0:bcf2aa85d7f9 290
nherriot 0:bcf2aa85d7f9 291 private:
ashleymills 10:ca9ba7ad4e94 292 int readRaw(char src, char *dst, int len);
ashleymills 11:dfd1e0afcb7b 293 int maskAndApplyRegister(char reg, char mask, char value, int toggleActivation);
ashleymills 8:89272163f395 294
ashleymills 11:dfd1e0afcb7b 295 I2C _i2c;
ashleymills 11:dfd1e0afcb7b 296 int _frequency;
ashleymills 6:f6bde04bf8be 297 int _readAddress;
ashleymills 6:f6bde04bf8be 298 int _writeAddress;
nherriot 0:bcf2aa85d7f9 299
nherriot 0:bcf2aa85d7f9 300 };
nherriot 0:bcf2aa85d7f9 301
nherriot 0:bcf2aa85d7f9 302 //#endif