upm  0.3.2
Sensor/Actuator repository for libmraa (v0.7.2)
mpu60x0.h
1 /*
2  * Author: Jon Trulson <jtrulson@ics.com>
3  * Copyright (c) 2015 Intel Corporation.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining
6  * a copy of this software and associated documentation files (the
7  * "Software"), to deal in the Software without restriction, including
8  * without limitation the rights to use, copy, modify, merge, publish,
9  * distribute, sublicense, and/or sell copies of the Software, and to
10  * permit persons to whom the Software is furnished to do so, subject to
11  * the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 #pragma once
25 
26 #include <string>
27 #include <mraa/i2c.hpp>
28 #include <mraa/gpio.hpp>
29 
30 #define MPU60X0_I2C_BUS 0
31 #define MPU60X0_DEFAULT_I2C_ADDR 0x68
32 
33 namespace upm {
34 
58  class MPU60X0 {
59  public:
60 
61  // NOTE: These enums were composed from both the mpu6050 and
62  // mpu9150 register maps, since this driver was written using an
63  // mpu9150, but we'd like this module to be usable with a
64  // standalone mpu60x0.
65  //
66  // Registers and bitfields marked with an '*' in their
67  // comment indicate registers or bit fields present in the mpu9150
68  // register map, but not in the original mpu6050 register map. If
69  // using this module on a standalone mpu6050, you should avoid
70  // using those registers or bitfields marked with an *.
71 
75  typedef enum {
76  REG_SELF_TEST_X = 0x0d,
77  REG_SELF_TEST_Y = 0x0e,
78  REG_SELF_TEST_Z = 0x0f,
79  REG_SELF_TEST_A = 0x10,
80 
81  REG_SMPLRT_DIV = 0x19, // sample rate divider
82 
83  REG_CONFIG = 0x1a,
84  REG_GYRO_CONFIG = 0x1b,
85  REG_ACCEL_CONFIG = 0x1c,
86 
87  REG_FF_THR = 0x1d, // *freefall threshold
88  REG_FF_DUR = 0x1e, // *freefall duration
89 
90  REG_MOT_THR = 0x1f, // motion threshold
91  REG_MOT_DUR = 0x20, // *motion duration
92 
93  REG_ZRMOT_THR = 0x21, // *zero motion threshhold
94  REG_ZRMOT_DUR = 0x22, // *zero motion duration
95 
96  REG_FIFO_EN = 0x23,
97 
98  REG_I2C_MST_CTRL = 0x24, // I2C master control
99 
100  REG_I2C_SLV0_ADDR = 0x25, // I2C slave 0
101  REG_I2C_SLV0_REG = 0x26,
102  REG_I2C_SLV0_CTRL = 0x27,
103 
104  REG_I2C_SLV1_ADDR = 0x28, // I2C slave 1
105  REG_I2C_SLV1_REG = 0x29,
106  REG_I2C_SLV1_CTRL = 0x2a,
107 
108  REG_I2C_SLV2_ADDR = 0x2b, // I2C slave 2
109  REG_I2C_SLV2_REG = 0x2c,
110  REG_I2C_SLV2_CTRL = 0x2d,
111 
112  REG_I2C_SLV3_ADDR = 0x2e, // I2C slave 3
113  REG_I2C_SLV3_REG = 0x2f,
114  REG_I2C_SLV3_CTRL = 0x30,
115 
116  REG_I2C_SLV4_ADDR = 0x31, // I2C slave 4
117  REG_I2C_SLV4_REG = 0x32,
118  REG_I2C_SLV4_DO = 0x33,
119  REG_I2C_SLV4_CTRL = 0x34,
120  REG_I2C_SLV4_DI = 0x35,
121 
122  REG_I2C_MST_STATUS = 0x36, // I2C master status
123 
124  REG_INT_PIN_CFG = 0x37, // interrupt pin config/i2c bypass
125  REG_INT_ENABLE = 0x38,
126 
127  // 0x39 reserved
128 
129  REG_INT_STATUS = 0x3a, // interrupt status
130 
131  REG_ACCEL_XOUT_H = 0x3b, // accelerometer outputs
132  REG_ACCEL_XOUT_L = 0x3c,
133 
134  REG_ACCEL_YOUT_H = 0x3d,
135  REG_ACCEL_YOUT_L = 0x3e,
136 
137  REG_ACCEL_ZOUT_H = 0x3f,
138  REG_ACCEL_ZOUT_L = 0x40,
139 
140  REG_TEMP_OUT_H = 0x41, // temperature output
141  REG_TEMP_OUT_L = 0x42,
142 
143  REG_GYRO_XOUT_H = 0x43, // gyro outputs
144  REG_GYRO_XOUT_L = 0x44,
145 
146  REG_GYRO_YOUT_H = 0x45,
147  REG_GYRO_YOUT_L = 0x46,
148 
149  REG_GYRO_ZOUT_H = 0x47,
150  REG_GYRO_ZOUT_L = 0x48,
151 
152  REG_EXT_SENS_DATA_00 = 0x49, // external sensor data
153  REG_EXT_SENS_DATA_01 = 0x4a,
154  REG_EXT_SENS_DATA_02 = 0x4b,
155  REG_EXT_SENS_DATA_03 = 0x4c,
156  REG_EXT_SENS_DATA_04 = 0x4d,
157  REG_EXT_SENS_DATA_05 = 0x4e,
158  REG_EXT_SENS_DATA_06 = 0x4f,
159  REG_EXT_SENS_DATA_07 = 0x50,
160  REG_EXT_SENS_DATA_08 = 0x51,
161  REG_EXT_SENS_DATA_09 = 0x52,
162  REG_EXT_SENS_DATA_10 = 0x53,
163  REG_EXT_SENS_DATA_11 = 0x54,
164  REG_EXT_SENS_DATA_12 = 0x55,
165  REG_EXT_SENS_DATA_13 = 0x56,
166  REG_EXT_SENS_DATA_14 = 0x57,
167  REG_EXT_SENS_DATA_15 = 0x58,
168  REG_EXT_SENS_DATA_16 = 0x59,
169  REG_EXT_SENS_DATA_17 = 0x5a,
170  REG_EXT_SENS_DATA_18 = 0x5b,
171  REG_EXT_SENS_DATA_19 = 0x5c,
172  REG_EXT_SENS_DATA_20 = 0x5d,
173  REG_EXT_SENS_DATA_21 = 0x5e,
174  REG_EXT_SENS_DATA_22 = 0x5f,
175  REG_EXT_SENS_DATA_23 = 0x60,
176 
177  REG_MOT_DETECT_STATUS = 0x61, // *
178 
179  // 0x62 reserved
180 
181  REG_I2C_SLV0_DO = 0x63, // I2C slave data outs
182  REG_I2C_SLV1_DO = 0x64,
183  REG_I2C_SLV2_DO = 0x65,
184  REG_I2C_SLV3_DO = 0x66,
185 
186  REG_I2C_MST_DELAY_CTRL = 0x67,
187 
188  REG_SIGNAL_PATH_RESET = 0x68, // signal path resets
189 
190  REG_MOT_DETECT_CTRL = 0x69,
191 
192  REG_USER_CTRL = 0x6a,
193 
194  REG_PWR_MGMT_1 = 0x6b, // power management
195  REG_PWR_MGMT_2 = 0x6c,
196 
197  // 0x6d-0x71 reserved
198 
199  REG_FIFO_COUNTH = 0x72,
200  REG_FIFO_COUNTL = 0x73,
201 
202  REG_FIFO_R_W = 0x74,
203 
204  REG_WHO_AM_I = 0x75
205  } MPU60X0_REG_T;
206 
210  typedef enum {
211  CONFIG_DLPF_CFG0 = 0x01, // digital low-pass filter config
212  CONFIG_DLPF_CFG1 = 0x02,
213  CONFIG_DLPF_CFG2 = 0x04,
214  _CONFIG_DLPF_SHIFT = 0,
215  _CONFIG_DLPF_MASK = 7,
216 
217  CONFIG_EXT_SYNC_SET0 = 0x08, // FSYNC pin config
218  CONFIG_EXT_SYNC_SET1 = 0x10,
219  CONFIG_EXT_SYNC_SET2 = 0x20,
220  _CONFIG_EXT_SYNC_SET_SHIFT = 3,
221  _CONFIG_EXT_SYNC_SET_MASK = 7
222  } CONFIG_BITS_T;
223 
227  typedef enum {
228  DLPF_260_256 = 0, // accel/gyro bandwidth (Hz)
229  DLPF_184_188 = 1,
230  DLPF_94_98 = 2,
231  DLPF_44_42 = 3,
232  DLPF_21_20 = 4,
233  DLPF_10_10 = 5,
234  DLPF_5_5 = 6,
235  DLPF_RESERVED = 7
236  } DLPF_CFG_T;
237 
241  typedef enum {
242  EXT_SYNC_DISABLED = 0,
243  EXT_SYNC_TEMP_OUT = 1,
244  EXT_SYNC_GYRO_XOUT = 2,
245  EXT_SYNC_GYRO_YOUT = 3,
246  EXT_SYNC_GYRO_ZOUT = 4,
247  EXT_SYNC_ACCEL_XOUT = 5,
248  EXT_SYNC_ACCEL_YOUT = 6,
249  EXT_SYNC_ACCEL_ZOUT = 7
250  } EXT_SYNC_SET_T;
251 
255  typedef enum {
256  // 0x01-0x04 reserved
257  FS_SEL0 = 0x08, // gyro full scale range
258  FS_SEL1 = 0x10,
259  _FS_SEL_SHIFT = 3,
260  _FS_SEL_MASK = 3,
261 
262  ZG_ST = 0x20, // gyro self test bits
263  YG_ST = 0x40,
264  XG_ST = 0x80
266 
270  typedef enum {
271  FS_250 = 0, // 250 deg/s, 131 LSB deg/s
272  FS_500 = 1, // 500 deg/s, 65.5 LSB deg/s
273  FS_1000 = 2, // 1000 deg/s, 32.8 LSB deg/s
274  FS_2000 = 3 // 2000 deg/s, 16.4 LSB deg/s
275  } FS_SEL_T;
276 
280  typedef enum {
281  // 0x01-0x04 reserved
282  AFS_SEL0 = 0x08, // accel full scale range
283  AFS_SEL1 = 0x10,
284  _AFS_SEL_SHIFT = 3,
285  _AFS_SEL_MASK = 3,
286 
287  ZA_ST = 0x20, // gyro self test bits
288  YA_ST = 0x40,
289  XA_ST = 0x80
291 
295  typedef enum {
296  AFS_2 = 0, // 2g, 16384 LSB/g
297  AFS_4 = 1, // 4g, 8192 LSB/g
298  AFS_8 = 2, // 8g, 4096 LSB/g
299  AFS_16 = 3 // 16g, 2048 LSB/g
300  } AFS_SEL_T;
301 
305  typedef enum {
306  SLV0_FIFO_EN = 0x01,
307  SLV1_FIFO_EN = 0x02,
308  SLV2_FIFO_EN = 0x04,
309 
310  ACCEL_FIFO_EN = 0x08,
311 
312  ZG_FIFO_EN = 0x10,
313  YG_FIFO_EN = 0x20,
314  XG_FIFO_EN = 0x40,
315 
316  TEMP_FIFO_EN = 0x80
317  } FIFO_EN_BITS_T;
318 
322  typedef enum {
323  I2C_MST_CLK0 = 0x01,
324  I2C_MST_CLK1 = 0x02,
325  I2C_MST_CLK2 = 0x04,
326  I2C_MST_CLK3 = 0x08,
327  _I2C_MST_CLK_SHIFT = 0,
328  _I2C_MST_CLK_MASK = 15,
329 
330  I2C_MST_P_NSR = 0x10,
331 
332  SLV_3_FIFO_EN = 0x20,
333 
334  WAIT_FOR_ES = 0x40,
335 
336  MULT_MST_EN = 0x80
338 
342  typedef enum {
343  MST_CLK_348 = 0, // 348Khz
344  MST_CLK_333 = 1,
345  MST_CLK_320 = 2,
346  MST_CLK_308 = 3,
347  MST_CLK_296 = 4,
348  MST_CLK_286 = 5,
349  MST_CLK_276 = 6,
350  MST_CLK_267 = 7,
351  MST_CLK_258 = 8,
352  MST_CLK_500 = 9,
353  MST_CLK_471 = 10,
354  MST_CLK_444 = 11,
355  MST_CLK_421 = 12,
356  MST_CLK_400 = 13,
357  MST_CLK_381 = 14,
358  MST_CLK_364 = 15
359  } I2C_MST_CLK_T;
360 
364  typedef enum {
365  I2C_SLV_ADDR0 = 0x01,
366  I2C_SLV_ADDR1 = 0x02,
367  I2C_SLV_ADDR2 = 0x04,
368  I2C_SLV_ADDR3 = 0x08,
369  I2C_SLV_ADDR4 = 0x10,
370  I2C_SLV_ADDR5 = 0x20,
371  I2C_SLV_ADDR6 = 0x40,
372  _I2C_SLV_ADDR_SHIFT = 0,
373  _I2C_SLV_ADDR_MASK = 127,
374 
375  I2C_SLV_RW = 0x80
377 
381  typedef enum {
382  I2C_SLV_LEN0 = 0x01,
383  I2C_SLV_LEN1 = 0x02,
384  I2C_SLV_LEN2 = 0x04,
385  I2C_SLV_LEN3 = 0x08,
386  _I2C_SLV_LEN_SHIFT = 0,
387  _I2C_SLV_LEN_MASK = 15,
388 
389  I2C_SLV_GRP = 0x10,
390  I2C_SLV_REG_DIS = 0x20,
391  I2C_SLV_BYTE_SW = 0x40,
392  I2C_SLV_EN = 0x80
394 
405  typedef enum {
406  I2C_MST_DLY0 = 0x01,
407  I2C_MST_DLY1 = 0x02,
408  I2C_MST_DLY2 = 0x04,
409  I2C_MST_DLY3 = 0x08,
410  I2C_MST_DLY4 = 0x10,
411  _I2C_MST_DLY_SHIFT = 0,
412  _I2C_MST_DLY_MASK = 31,
413 
414  I2C_SLV4_REG_DIS = 0x20,
415  I2C_SLV4_INT_EN = 0x40,
416  I2C_SLV4_EN = 0x80
418 
422  typedef enum {
423  I2C_SLV0_NACK = 0x01,
424  I2C_SLV1_NACK = 0x02,
425  I2C_SLV2_NACK = 0x04,
426  I2C_SLV3_NACK = 0x08,
427  I2C_SLV4_NACK = 0x10,
428 
429  I2C_LOST_ARB = 0x20,
430  I2C_SLV4_DONE = 0x40,
431  PASS_THROUGH = 0x80
433 
437  typedef enum {
438  CLKOUT_EN = 0x01, // *
439 
440  I2C_BYPASS_ENABLE = 0x02,
441 
442  FSYNC_INT_EN = 0x04,
443  FSYNC_INT_LEVEL = 0x08,
444 
445  INT_RD_CLEAR = 0x10,
446 
447  LATCH_INT_EN = 0x20,
448 
449  INT_OPEN = 0x40,
450  INT_LEVEL = 0x80
452 
456  typedef enum {
457  DATA_RDY_EN = 0x01, // *
458 
459  // 0x02, 0x04 reserved
460 
461  I2C_MST_INT_EN = 0x08,
462 
463  FIFO_OFLOW_EN = 0x10,
464 
465  ZMOT_EN = 0x20, // *zero motion
466  MOT_EN = 0x40,
467  FF_EN = 0x80 // *freefall
469 
473  typedef enum {
474  DATA_RDY_INT = 0x01,
475 
476  // 0x02, 0x04 reserved
477 
478  I2C_MST_INT = 0x08,
479 
480  FIFO_OFLOW_INT = 0x10,
481 
482  ZMOT_INT = 0x20, // *zero motion
483  MOT_INT = 0x40,
484  FF_INT = 0x80 // *freefall
486 
490  typedef enum {
491  MOT_ZRMOT = 0x01, // *
492 
493  // 0x02 reserved
494 
495  MOT_ZPOS = 0x04, // *
496  MOT_ZNEG = 0x08, // *
497 
498  MOT_YPOS = 0x10, // *
499  MOT_YNEG = 0x20, // *
500 
501  MOT_XPOS = 0x40, // *
502  MOT_XNEG = 0x80, // *
504 
508  typedef enum {
509  I2C_SLV0_DLY_EN = 0x01,
510  I2C_SLV1_DLY_EN = 0x02,
511  I2C_SLV2_DLY_EN = 0x04,
512  I2C_SLV3_DLY_EN = 0x08,
513  I2C_SLV4_DLY_EN = 0x10,
514 
515  // 0x20, 0x40, reserved
516 
517  DELAY_ES_SHADOW = 0x80
519 
523  typedef enum {
524  TEMP_RESET = 0x01,
525  ACCEL_RESET = 0x02,
526  GYRO_RESET = 0x04
527 
528  // 0x08-0x80 reserved
530 
534  typedef enum {
535  MOT_COUNT0 = 0x01, // *
536  MOT_COUNT1 = 0x02, // *
537  _MOT_COUNT_SHIFT = 0,
538  _MOT_COUNT_MASK = 3,
539 
540  FF_COUNT0 = 0x04, // *
541  FF_COUNT1 = 0x08, // *
542  _FF_COUNT_SHIFT = 2,
543  _FF_COUNT_MASK = 3,
544 
545  ACCEL_ON_DELAY0 = 0x10,
546  ACCEL_ON_DELAY1 = 0x20,
547  _ACCEL_ON_DELAY_SHIFT = 4,
548  _ACCEL_ON_DELAY_MASK = 3
549  // 0x40,0x80 reserved
551 
555  typedef enum {
556  COUNT_0 = 0, // Reset
557  COUNT_1 = 1, // counter decrement 1
558  COUNT_2 = 2, // counter decrement 2
559  COUNT_4 = 3 // counter decrement 4
560  } MOT_FF_COUNT_T;
561 
565  typedef enum {
566  ON_DELAY_0 = 0, // no delay
567  ON_DELAY_1 = 1, // add 1ms
568  ON_DELAY_2 = 2, // add 2ms
569  ON_DELAY_3 = 3 // add 3ms
571 
575  typedef enum {
576  SIG_COND_RESET = 0x01,
577  I2C_MST_RESET = 0x02,
578  FIFO_RESET = 0x04,
579 
580  // 0x08 reserved
581 
582  I2C_IF_DIS = 0x10,
583  I2C_MST_EN = 0x20,
584  FIFO_EN = 0x40
585 
588 
592  typedef enum {
593  CLKSEL0 = 0x01,
594  CLKSEL1 = 0x02,
595  CLKSEL2 = 0x04,
596  _CLKSEL_SHIFT = 0,
597  _CLKSEL_MASK = 7,
598 
599  TEMP_DIS = 0x08,
600 
601  // 0x10 reserved
602 
603  PWR_CYCLE = 0x20,
604  PWR_SLEEP = 0x40,
605  DEVICE_RESET = 0x80
607 
611  typedef enum {
612  INT_8MHZ = 0, // internal 8Mhz osc
613  PLL_XG = 1, // PLL X axis gyro
614  PLL_YG = 2, // PLL Y axis gyro
615  PLL_ZG = 3, // PLL Z axis gyro
616  PLL_EXT_32KHZ = 4, // PLL with external 32.768Khz ref
617  PLL_EXT_19MHZ = 5, // PLL with external 19.2Mhz ref
618  // 6 - reserved
619  CLK_STOP = 7 // stops clk
620  } CLKSEL_T;
621 
625  typedef enum {
626  STBY_ZG = 0x01,
627  STBY_YG = 0x02,
628  STBY_XG = 0x04,
629  STBY_ZA = 0x08,
630  STBY_YA = 0x10,
631  STBY_XA = 0x20,
632 
633  LP_WAKE_CTRL0 = 0x40,
634  LP_WAKE_CTRL1 = 0x80,
635  _LP_WAKE_CTRL_SHIFT = 6,
636  _LP_WAKE_CTRL_MASK = 3
638 
642  typedef enum {
643  LP_WAKE_1_25 = 0, // wakeup feq: 1.25hz
644  LP_WAKE_5 = 1, // 5hz
645  LP_WAKE_20 = 2, // 20hz
646  LP_WAKE_40 = 3, // 40hz
647  } LP_WAKE_CRTL_T;
648 
649 
656  MPU60X0(int bus=MPU60X0_I2C_BUS, uint8_t address=MPU60X0_DEFAULT_I2C_ADDR);
657 
661  ~MPU60X0();
662 
668  bool init();
669 
683  void update();
684 
691  uint8_t readReg(uint8_t reg);
692 
701  void readRegs(uint8_t reg, uint8_t *buf, int len);
702 
710  bool writeReg(uint8_t reg, uint8_t val);
711 
718  bool setSleep(bool enable);
719 
726  bool setClockSource(CLKSEL_T clk);
727 
734  bool setGyroscopeScale(FS_SEL_T scale);
735 
742  bool setAccelerometerScale(AFS_SEL_T scale);
743 
752 
771  bool setSampleRateDivider(uint8_t div);
772 
778  uint8_t getSampleRateDivider();
779 
788  void getAccelerometer(float *x, float *y, float *z);
789 
798  void getGyroscope(float *x, float *y, float *z);
799 
805  float getTemperature();
806 
813  bool enableTemperatureSensor(bool enable);
814 
831 
839  bool enableI2CBypass(bool enable);
840 
850  bool setMotionDetectionThreshold(uint8_t thr);
851 
857  uint8_t getInterruptStatus();
858 
865  bool setInterruptEnables(uint8_t enables);
866 
872  uint8_t getInterruptEnables();
873 
880  bool setInterruptPinConfig(uint8_t cfg);
881 
887  uint8_t getInterruptPinConfig();
888 
900  void installISR(int gpio, mraa::Edge level, void (*isr)(void *), void *arg);
901 
906  void uninstallISR();
907 
908  protected:
909  // uncompensated accelerometer and gyroscope values
910  float m_accelX;
911  float m_accelY;
912  float m_accelZ;
913 
914  float m_gyroX;
915  float m_gyroY;
916  float m_gyroZ;
917 
918  // uncompensated temperature value
919  float m_temp;
920 
921  // accelerometer and gyro scaling factors, depending on their Full
922  // Scale settings.
923  float m_accelScale;
924  float m_gyroScale;
925 
926  private:
927  mraa::I2c m_i2c;
928  uint8_t m_addr;
929 
930  mraa::Gpio *m_gpioIRQ;
931  };
932 }
933 
934 
bool setSampleRateDivider(uint8_t div)
Definition: mpu60x0.cxx:278
ACCEL_ON_DELAY_T
Definition: mpu60x0.h:565
bool setMotionDetectionThreshold(uint8_t thr)
Definition: mpu60x0.cxx:353
PWR_MGMT_1_BITS_T
Definition: mpu60x0.h:592
bool setExternalSync(EXT_SYNC_SET_T val)
Definition: mpu60x0.cxx:330
PWR_MGMT_2_BITS_T
Definition: mpu60x0.h:625
bool enableTemperatureSensor(bool enable)
Definition: mpu60x0.cxx:318
ACCEL_CONFIG_BITS_T
Definition: mpu60x0.h:280
void getGyroscope(float *x, float *y, float *z)
Definition: mpu60x0.cxx:300
bool setAccelerometerScale(AFS_SEL_T scale)
Definition: mpu60x0.cxx:225
uint8_t readReg(uint8_t reg)
Definition: mpu60x0.cxx:137
SIGNAL_PATH_RESET_BITS_T
Definition: mpu60x0.h:523
CONFIG_BITS_T
Definition: mpu60x0.h:210
FS_SEL_T
Definition: mpu60x0.h:270
INT_PIN_CFG_BITS_T
Definition: mpu60x0.h:437
MOT_FF_COUNT_T
Definition: mpu60x0.h:555
bool writeReg(uint8_t reg, uint8_t val)
Definition: mpu60x0.cxx:147
CLKSEL_T
Definition: mpu60x0.h:611
bool setClockSource(CLKSEL_T clk)
Definition: mpu60x0.cxx:172
I2C_SLV4_CTRL_BITS_T
Definition: mpu60x0.h:405
uint8_t getSampleRateDivider()
Definition: mpu60x0.cxx:283
I2C_SLV_CTRL_BITS_T
Definition: mpu60x0.h:381
void update()
Definition: mpu60x0.cxx:103
INT_ENABLE_BITS_T
Definition: mpu60x0.h:456
USER_CTRL_BITS_T
Definition: mpu60x0.h:575
MPU60X0(int bus=MPU60X0_I2C_BUS, uint8_t address=MPU60X0_DEFAULT_I2C_ADDR)
Definition: mpu60x0.cxx:35
GRYO_CONFIG_BITS_T
Definition: mpu60x0.h:255
LP_WAKE_CRTL_T
Definition: mpu60x0.h:642
Definition: a110x.h:29
void uninstallISR()
Definition: mpu60x0.cxx:396
MPU60X0_REG_T
Definition: mpu60x0.h:75
uint8_t getInterruptEnables()
Definition: mpu60x0.cxx:368
bool setDigitalLowPassFilter(DLPF_CFG_T dlp)
Definition: mpu60x0.cxx:267
I2C_MST_CLK_T
Definition: mpu60x0.h:342
void installISR(int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
Definition: mpu60x0.cxx:383
float getTemperature()
Definition: mpu60x0.cxx:312
EXT_SYNC_SET_T
Definition: mpu60x0.h:241
MST_DELAY_CTRL_BITS_T
Definition: mpu60x0.h:508
bool setInterruptPinConfig(uint8_t cfg)
Definition: mpu60x0.cxx:373
bool setGyroscopeScale(FS_SEL_T scale)
Definition: mpu60x0.cxx:183
I2C_SLV_ADDR_BITS_T
Definition: mpu60x0.h:364
I2C_MST_STATUS_BITS_T
Definition: mpu60x0.h:422
uint8_t getInterruptStatus()
Definition: mpu60x0.cxx:358
INT_STATUS_BITS_T
Definition: mpu60x0.h:473
MOT_DETECT_CTRL_BITS_T
Definition: mpu60x0.h:534
bool init()
Definition: mpu60x0.cxx:67
I2C_MST_CTRL_BITS_T
Definition: mpu60x0.h:322
void readRegs(uint8_t reg, uint8_t *buf, int len)
Definition: mpu60x0.cxx:142
bool setSleep(bool enable)
Definition: mpu60x0.cxx:160
DLPF_CFG_T
Definition: mpu60x0.h:227
bool enableI2CBypass(bool enable)
Definition: mpu60x0.cxx:341
void getAccelerometer(float *x, float *y, float *z)
Definition: mpu60x0.cxx:288
uint8_t getInterruptPinConfig()
Definition: mpu60x0.cxx:378
bool setInterruptEnables(uint8_t enables)
Definition: mpu60x0.cxx:363
MOT_DETECT_STATUS_BITS_T
Definition: mpu60x0.h:490
API for the MPU60X0 3-axis Gyroscope and 3-axis Accelerometer.
Definition: mpu60x0.h:58
FIFO_EN_BITS_T
Definition: mpu60x0.h:305
AFS_SEL_T
Definition: mpu60x0.h:295
~MPU60X0()
Definition: mpu60x0.cxx:62