upm  0.5.0
Sensor/Actuator repository for libmraa (v0.9.1)
 All Data Structures Files Functions Variables Enumerations Enumerator Macros Groups Pages
lsm9ds0.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/common.hpp>
28 #include <mraa/i2c.hpp>
29 
30 #include <mraa/gpio.hpp>
31 
32 #define LSM9DS0_I2C_BUS 1
33 #define LSM9DS0_DEFAULT_XM_ADDR 0x1d
34 #define LSM9DS0_DEFAULT_GYRO_ADDR 0x6b
35 
36 namespace upm {
37 
74  class LSM9DS0 {
75  public:
76 
77  // NOTE: reserved registers must not be written into or permanent
78  // damage to the device can result. Reserved bitfields must
79  // always be 0.
80 
81  // There are two sub-devices within this device - the
82  // Accelerometer and Magnetometer (XM) and the Gyroscope (G), each
83  // with their own I2C address.
84 
88  typedef enum {
89  // 0x00-0x0e reserved
90 
91  REG_WHO_AM_I_G = 0x0f, // should be 0xd4
92 
93  // 0x10-0x1f reserved
94 
95  REG_CTRL_REG1_G = 0x20,
96  REG_CTRL_REG2_G = 0x21,
97  REG_CTRL_REG3_G = 0x22,
98  REG_CTRL_REG4_G = 0x23,
99  REG_CTRL_REG5_G = 0x24,
100 
101  REG_REFERENCE_G = 0x25,
102 
103  // 0x26 reserved
104 
105  REG_STATUS_REG_G = 0x27,
106 
107  REG_OUT_X_L_G = 0x28, // gyro output, X axis, LSB
108  REG_OUT_X_H_G = 0x29, // gyro output, X axis, MSB
109  REG_OUT_Y_L_G = 0x2a,
110  REG_OUT_Y_H_G = 0x2b,
111  REG_OUT_Z_L_G = 0x2c,
112  REG_OUT_Z_H_G = 0x2d,
113 
114  REG_FIFO_CTRL_REG_G = 0x2e,
115  REG_FIFO_SRC_REG_G = 0x2f,
116 
117  REG_INT1_CFG_G = 0x30,
118  REG_INT1_SRC_G = 0x31,
119 
120  REG_INT1_TSH_XH_G = 0x32, // interrupt threshold registers
121  REG_INT1_TSH_XL_G = 0x33,
122  REG_INT1_TSH_YH_G = 0x34,
123  REG_INT1_TSH_YL_G = 0x35,
124  REG_INT1_TSH_ZH_G = 0x36,
125  REG_INT1_TSH_ZL_G = 0x37,
126 
127  // See fig 19 & 20 and preceeding description in the datasheet
128  // on how to use this register
129  REG_INT1_DURATION_G = 0x38
130  } REG_G_T;
131 
135  typedef enum {
136  CTRL_REG1_G_YEN = 0x01, // Y enable, odd ordering...
137  CTRL_REG1_G_XEN = 0x02,
138  CTRL_REG1_G_ZEN = 0x04,
139  CTRL_REG1_G_PD = 0x08, // power down (0)
140 
141  CTRL_REG1_G_BW0 = 0x10, // bandwidth
142  CTRL_REG1_G_BW1 = 0x20,
143  _CTRL_REG1_G_BW_MASK = 3,
144  _CTRL_REG1_G_BW_SHIFT = 4,
145 
146  CTRL_REG1_G_DR0 = 0x40, // data rate
147  CTRL_REG1_G_DR1 = 0x80,
148  _CTRL_REG1_G_DR_MASK = 3,
149  _CTRL_REG1_G_DR_SHIFT = 6,
150 
151  // The following are synthetic register and shift/mask
152  // definitions. Together both BW and DR setup the device for a
153  // specific output data rate (ODR) and cutoff frequency. These
154  // definitions allow us to use a more informative configuration
155  // for these 4 bits, rather than having the user go to the
156  // datasheet to figure out what to put for those values in order
157  // to get the desired ODR/cutoff. These are the values we will
158  // use in this driver.
159 
160  CTRL_REG1_G_ODR0 = 0x10, // BW0
161  CTRL_REG1_G_ODR1 = 0x20, // BW1
162  CTRL_REG1_G_ODR2 = 0x40, // DR0
163  CTRL_REG1_G_ODR3 = 0x80, // DR1
164  _CTRL_REG1_G_ODR_MASK = 15,
165  _CTRL_REG1_G_ODR_SHIFT = 4
167 
171  typedef enum {
172  G_ODR_95_12_5 = 0, // ODR = 95Hz, cutoff = 12.5
173  G_ODR_95_25 = 1, // ODR = 95Hz, cutoff = 25
174  // Other two (2 and 3) are the same (95_25)
175 
176  G_ODR_190_12_5 = 4,
177  G_ODR_190_25 = 5,
178  G_ODR_190_50 = 6,
179  G_ODR_190_70 = 7,
180 
181  G_ODR_380_20 = 8,
182  G_ODR_380_25 = 9,
183  G_ODR_380_50 = 10,
184  G_ODR_380_100 = 11,
185 
186  G_ODR_760_30 = 12,
187  G_ODR_760_35 = 13,
188  G_ODR_760_50 = 14,
189  G_ODR_760_100 = 15
190  } G_ODR_T;
191 
195  typedef enum {
196  CTRL_REG2_G_HPCF0 = 0x01, // high-pass cutoff freq
197  CTRL_REG2_G_HPCF1 = 0x02,
198  CTRL_REG2_G_HPCF2 = 0x04,
199  CTRL_REG2_G_HPCF3 = 0x08,
200  _CTRL_REG2_G_HPCF_MASK = 15,
201  _CTRL_REG2_G_HPCF_SHIFT = 0,
202 
203  CTRL_REG2_G_HPM0 = 0x10, // high-pass filter mode
204  CTRL_REG2_G_HPM1 = 0x20,
205  _CTRL_REG2_G_HPM_MASK = 3,
206  _CTRL_REG2_G_HPM_SHIFT = 4,
207 
208  // 0x40, 0x80 reserved
210 
218  typedef enum {
219  G_HPCF_7_2 = 0, // 7.2 Hz (if ODR is 95Hz)
220  G_HPCF_3_5 = 1,
221  G_HPCF_1_8 = 2,
222  G_HPCF_0_9 = 3, // 0.9Hz
223  G_HPCF_0_45 = 4,
224  G_HPCF_0_18 = 5,
225  G_HPCF_0_09 = 6,
226  G_HPCF_0_045 = 7,
227  G_HPCF_0_018 = 8,
228  G_HPCF_0_009 = 9
229 
230  // 10-15 unused
231  } G_HPCF_T;
232 
237  typedef enum {
238  G_HPM_NORMAL_RESET_HPF = 0, // reset reading (HP_RESET_FILTER)
239  G_HPM_REFERENCE = 1, // REF signal for filtering
240  G_HPM_NORMAL = 2, // normal mode
241  G_HPM_AUTORESET_ON_INTR = 3 // autoreset in interrupt event
242  } G_HPM_T;
243 
247  typedef enum {
248  CTRL_REG3_G_I2_EMPTY = 0x01, // FIFO empty on DRDY_G
249  CTRL_REG3_G_I2_ORUN = 0x02, // FIFO Overrun intr
250  CTRL_REG3_G_I2_WTM = 0x04, // FIFO watermark intr
251  CTRL_REG3_G_I2_DRDY = 0x08, // data ready on DRDY_G
252  CTRL_REG3_G_PP_OD = 0x10, // push-pull/open drain
253  CTRL_REG3_G_H_LACTIVE = 0x20,
254  CTRL_REG3_G_I1_BOOT = 0x40,
255  CTRL_REG3_G_I1_INT1 = 0x80, // intr enable on INT_G pin
257 
261  typedef enum {
262  CTRL_REG4_G_SIM = 0x01, // SPI mode selection
263 
264  CTRL_REG4_G_ST0 = 0x02, // self test enables
265  CTRL_REG4_G_ST1 = 0x04,
266  _CTRL_REG4_G_ST_MASK = 3,
267  _CTRL_REG4_G_ST_SHIFT = 1,
268 
269  // 0x08 reserved
270 
271  CTRL_REG4_G_FS0 = 0x10, // full scale selection
272  CTRL_REG4_G_FS1 = 0x20,
273  _CTRL_REG4_G_FS_MASK = 3,
274  _CTRL_REG4_G_FS_SHIFT = 4,
275 
276  CTRL_REG4_G_BLE = 0x40, // big/little endian data selection
277  CTRL_REG4_G_BDU = 0x80 // block data updates
279 
284  typedef enum {
285  G_ST_NORMAL = 0, // normal mode
286  G_ST_SELFTEST0 = 1, // x+, y-, z-
287 
288  // 2, reserved
289 
290  G_ST_SELFTEST1 = 3 // x-, y+, z+
291  } G_ST_T;
292 
297  typedef enum {
298  G_FS_245 = 0, // 245 deg/sec
299  G_FS_500 = 1,
300  G_FS_2000 = 2
301  // 3 is also 2000
302  } G_FS_T;
303 
307  typedef enum {
308  CTRL_REG5_G_OUTSEL0 = 0x01, // see fig. 18 in the datasheet
309  CTRL_REG5_G_OUTSEL1 = 0x02,
310  _CTRL_REG5_G_OUTSEL_MASK = 3,
311  _CTRL_REG5_G_OUTSEL_SHIFT = 0,
312 
313  CTRL_REG5_G_INT1SEL0 = 0x04, // see fig. 18 in the datasheet
314  CTRL_REG5_G_INT1SEL1 = 0x08,
315  _CTRL_REG5_G_INT1SEL_MASK = 3,
316  _CTRL_REG5_G_INT1SEL_SHIFT = 2,
317 
318  CTRL_REG5_G_HPEN = 0x10, // HPF enable
319 
320  // 0x20 reserved
321 
322  CTRL_REG5_G_FIFO_EN = 0x40,
323  CTRL_REG5_G_BOOT = 0x80 // reboot memory content
325 
326 
331  typedef enum {
332  G_INT1OUTSEL_0 = 0,
333  G_INT1OUTSEL_1 = 1,
334  G_INT1OUTSEL_2 = 2,
335  G_INT1OUTSEL_3 = 3
336  } G_INT1OUTSEL_T;
337 
341  typedef enum {
342  STATUS_REG_G_XDA = 0x01, // X axis data available
343  STATUS_REG_G_YDA = 0x02,
344  STATUS_REG_G_ZDA = 0x04,
345  STATUS_REG_G_ZYXDA = 0x08, // X, Y, and Z data available
346 
347  STATUS_REG_G_XOR = 0x10, // X data overrun
348  STATUS_REG_G_YOR = 0x20,
349  STATUS_REG_G_ZOR = 0x40,
350  STATUS_REG_G_ZYXOR = 0x80
352 
356  typedef enum {
357  FIFO_CTRL_REG_G_WTM0 = 0x01, // FIFO watermark
358  FIFO_CTRL_REG_G_WTM1 = 0x02,
359  FIFO_CTRL_REG_G_WTM2 = 0x04,
360  FIFO_CTRL_REG_G_WTM3 = 0x08,
361  FIFO_CTRL_REG_G_WTM4 = 0x10,
362  _FIFO_CTRL_REG_G_WTM_MASK = 31,
363  _FIFO_CTRL_REG_G_WTM_SHIFT = 0,
364 
365  FIFO_CTRL_REG_G_FM0 = 0x20, // FIFO mode config
366  FIFO_CTRL_REG_G_FM1 = 0x40,
367  FIFO_CTRL_REG_G_FM2 = 0x80,
368  _FIFO_CTRL_REG_G_FM_MASK = 7,
369  _FIFO_CTRL_REG_G_FM_SHIFT = 5,
371 
372  // FIFO_CTRL_REG_G_WTM (FIFO watermark) is just a numeric value
373  // between 0-31, so we won't enumerate those values.
374 
379  typedef enum {
380  G_FM_BYPASS = 0,
381  G_FM_FIFO = 1,
382  G_FM_STREAM = 2,
383  G_FM_STREAM2FIFO = 3,
384  G_FM_BYPASS2STREAM = 4
385 
386  // 5-7 unused
387  } G_FM_T;
388 
393  typedef enum {
394  FIFO_CTRL_REG_G_FSS0 = 0x01, // FIFO stored data level
395  FIFO_CTRL_REG_G_FSS1 = 0x02,
396  FIFO_CTRL_REG_G_FSS2 = 0x04,
397  FIFO_CTRL_REG_G_FSS3 = 0x08,
398  FIFO_CTRL_REG_G_FSS4 = 0x10,
399  _FIFO_CTRL_REG_G_FSS_MASK = 31,
400  _FIFO_CTRL_REG_G_FSS_SHIFT = 0,
401 
402  FIFO_CTRL_REG_G_EMPTY = 0x20, // FIFO empty
403  FIFO_CTRL_REG_G_OVRN = 0x40, // FIFO overrun
404  FIFO_CTRL_REG_G_WTM = 0x80 // watermark status
406 
411  typedef enum {
412  INT1_CFG_G_XLIE = 0x01, // X Low event interrupt enable
413  INT1_CFG_G_XHIE = 0x02, // X High event interrupt enable
414  INT1_CFG_G_YLIE = 0x04,
415  INT1_CFG_G_YHIE = 0x08,
416  INT1_CFG_G_ZLIE = 0x10,
417  INT1_CFG_G_ZHIE = 0x20,
418 
419  INT1_CFG_G_LIR = 0x40, // latch interrupt request
420  INT1_CFG_G_ANDOR = 0x80 // OR or AND interrupt events
422 
427  typedef enum {
428  INT1_SRC_G_XL = 0x01, // X low interrupt
429  INT1_SRC_G_XH = 0x02, // X high interrupt
430  INT1_SRC_G_YL = 0x04,
431  INT1_SRC_G_YH = 0x08,
432  INT1_SRC_G_ZL = 0x10,
433  INT1_SRC_G_ZH = 0x20,
434 
435  INT1_SRC_G_IA = 0x40 // interrupt active
436 
437  // 0x80 reserved
439 
440  // The following registers are for the Accelerometer (A/X),
441  // Magnetometer (M), and Temperature device.
442 
446  typedef enum {
447  // 0x00-0x04 reserved
448 
449  REG_OUT_TEMP_L_XM = 0x05, // temperature
450  REG_OUT_TEMP_H_XM = 0x06,
451 
452  REG_STATUS_REG_M = 0x07,
453 
454  REG_OUT_X_L_M = 0x08, // magnetometer outputs
455  REG_OUT_X_H_M = 0x09,
456  REG_OUT_Y_L_M = 0x0a,
457  REG_OUT_Y_H_M = 0x0b,
458  REG_OUT_Z_L_M = 0x0c,
459  REG_OUT_Z_H_M = 0x0d,
460 
461  // 0x0e reserved
462 
463  REG_WHO_AM_I_XM = 0x0f,
464 
465  // 0x10, 0x11 reserved
466 
467  REG_INT_CTRL_REG_M = 0x12,
468  REG_INT_SRC_REG_M = 0x13,
469 
470  REG_INT_THS_L_M = 0x14, // magnetometer threshold
471  REG_INT_THS_H_M = 0x15,
472 
473  REG_OFFSET_X_L_M = 0x16,
474  REG_OFFSET_X_H_M = 0x17,
475  REG_OFFSET_Y_L_M = 0x18,
476  REG_OFFSET_Y_H_M = 0x19,
477  REG_OFFSET_Z_L_M = 0x1a,
478  REG_OFFSET_Z_H_M = 0x1b,
479 
480  REG_REFERENCE_X = 0x1c,
481  REG_REFERENCE_Y = 0x1d,
482  REG_REFERENCE_Z = 0x1e,
483 
484  REG_CTRL_REG0_XM = 0x1f,
485  REG_CTRL_REG1_XM = 0x20,
486  REG_CTRL_REG2_XM = 0x21,
487  REG_CTRL_REG3_XM = 0x22,
488  REG_CTRL_REG4_XM = 0x23,
489  REG_CTRL_REG5_XM = 0x24,
490  REG_CTRL_REG6_XM = 0x25,
491  REG_CTRL_REG7_XM = 0x26,
492 
493  REG_STATUS_REG_A = 0x27,
494 
495  REG_OUT_X_L_A = 0x28, // accelerometer outputs
496  REG_OUT_X_H_A = 0x29,
497  REG_OUT_Y_L_A = 0x2a,
498  REG_OUT_Y_H_A = 0x2b,
499  REG_OUT_Z_L_A = 0x2c,
500  REG_OUT_Z_H_A = 0x2d,
501 
502  REG_FIFO_CTRL_REG = 0x2e,
503  REG_FIFO_SRC_REG = 0x2f,
504 
505  REG_INT_GEN_1_REG = 0x30,
506  REG_INT_GEN_1_SRC = 0x31,
507  REG_INT_GEN_1_THS = 0x32,
508  REG_INT_GEN_1_DURATION = 0x33,
509 
510  REG_INT_GEN_2_REG = 0x34,
511  REG_INT_GEN_2_SRC = 0x35,
512  REG_INT_GEN_2_THS = 0x36,
513  REG_INT_GEN_2_DURATION = 0x37,
514 
515  REG_CLICK_CFG = 0x38,
516  REG_CLICK_SRC = 0x39,
517  REG_CLICK_THS = 0x3a,
518 
519  REG_TIME_LIMIT = 0x3b,
520  REG_TIME_LATENCY = 0x3c,
521  REG_TIME_WINDOW = 0x3d,
522 
523  REG_ACT_THS = 0x3e,
524  REG_ACT_DUR = 0x3f
525  } REG_XM_T;
526 
530  typedef enum {
531  STATUS_REG_M_XMDA = 0x01, // X mag axis data available
532  STATUS_REG_M_YMDA = 0x02,
533  STATUS_REG_M_ZMDA = 0x04,
534  STATUS_REG_M_ZYXMDA = 0x08, // X, Y, and Z mag data available
535 
536  STATUS_REG_M_XMOR = 0x10, // X mag data overrun
537  STATUS_REG_M_YMOR = 0x20,
538  STATUS_REG_M_ZMOR = 0x40,
539  STATUS_REG_M_ZYXMOR = 0x80
541 
545  typedef enum {
546  INT_CTRL_REG_M_MIEN = 0x01, // mag interrupt enable
547  INT_CTRL_REG_M_4D = 0x02,
548  INT_CTRL_REG_M_IEL = 0x04, // latch intr request
549  INT_CTRL_REG_M_IEA = 0x08,
550  INT_CTRL_REG_M_PP_OD = 0x10, // push-pull/open drian
551  INT_CTRL_REG_M_ZMIEN = 0x20, // Z mag axis interrupt recognition
552  INT_CTRL_REG_M_YMIEN = 0x40,
553  INT_CTRL_REG_M_XMIEN = 0x80
555 
559  typedef enum {
560  INT_SRC_REG_M_MINT = 0x01,
561  INT_SRC_REG_M_MROI = 0x02,
562  INT_SRC_REG_M_NTH_Z = 0x04,
563  INT_SRC_REG_M_NTH_Y = 0x08,
564  INT_SRC_REG_M_NTH_X = 0x10,
565  INT_SRC_REG_M_PTH_Z = 0x20,
566  INT_SRC_REG_M_PTH_Y = 0x40,
567  INT_SRC_REG_M_PTH_X = 0x80
569 
570 
574  typedef enum {
575  CTRL_REG0_XM_HPIS2 = 0x01, // HPF enable for int generator 2
576  CTRL_REG0_XM_HPIS1 = 0x02,
577 
578  CTRL_REG0_XM_HP_CLICK = 0x04, // HPF enable for click
579 
580  // 0x08,0x10 reserved
581 
582  CTRL_REG0_XM_WTM_LEN = 0x20, // watermark enable
583  CTRL_REG0_XM_FIFO_EN = 0x40, // FIFO enable
584  CTRL_REG0_XM_BOOT = 0x80 // reboot memory content
586 
590  typedef enum {
591  CTRL_REG1_XM_AXEN = 0x01, // accelerometer x axis enable
592  CTRL_REG1_XM_AYEN = 0x02,
593  CTRL_REG1_XM_AZEN = 0x03,
594 
595  CTRL_REG1_XM_BDU = 0x04, // block data update
596 
597  CTRL_REG1_XM_AODR0 = 0x10, // accelerometer output data rate
598  CTRL_REG1_XM_AODR1 = 0x20,
599  CTRL_REG1_XM_AODR2 = 0x40,
600  CTRL_REG1_XM_AODR3 = 0x80,
601  _CTRL_REG1_XM_AODR_MASK = 15,
602  _CTRL_REG1_XM_AODR_SHIFT = 4
604 
608  typedef enum {
609  XM_AODR_PWRDWN = 0, // power down mode
610  XM_AODR_3_125 = 1, // 3.125 Hz
611  XM_AODR_6_25 = 2,
612  XM_AODR_12_5 = 3,
613  XM_AODR_25 = 4, // 25Hz
614  XM_AODR_50 = 5,
615  XM_AODR_100 = 6,
616  XM_AODR_200 = 7,
617  XM_AODR_400 = 8,
618  XM_AODR_800 = 9,
619  XM_AODR_1000 = 10
620  // 11-15 unused
621  } XM_AODR_T;
622 
626  typedef enum {
627  CTRL_REG2_XM_SIM = 0x01,
628 
629  CTRL_REG2_XM_AST0 = 0x02, // accel self-test enable
630  CTRL_REG2_XM_AST1 = 0x04,
631  _CTRL_REG2_XM_AST_MASK = 3,
632  _CTRL_REG2_XM_AST_SHIFT = 1,
633 
634  CTRL_REG2_XM_AFS0 = 0x08, // accel full scale
635  CTRL_REG2_XM_AFS1 = 0x10,
636  CTRL_REG2_XM_AFS2 = 0x20,
637  _CTRL_REG2_XM_AFS_MASK = 7,
638  _CTRL_REG2_XM_AFS_SHIFT = 3,
639 
640  CTRL_REG2_XM_ABW0 = 0x40, // accel anti-alias filter bandwidth
641  CTRL_REG2_XM_ABW1 = 0x80,
642  _CTRL_REG2_XM_ABW_MASK = 3,
643  _CTRL_REG2_XM_ABW_SHIFT = 6
645 
649  typedef enum {
650  XM_AST_NORMAL = 0,
651  XM_AST_POS_SIGN = 1,
652  XM_AST_NEG_SIGN = 2
653  // 3 not allowed
654  } XM_AST_T;
655 
659  typedef enum {
660  XM_AFS_2 = 0, // 2g
661  XM_AFS_4 = 1,
662  XM_AFS_6 = 2,
663  XM_AFS_8 = 3,
664  XM_AFS_16 = 4
665 
666  // 5-7 not used
667  } XM_AFS_T;
668 
672  typedef enum {
673  XM_ABW_773 = 0, // 773Hz
674  XM_ABW_194 = 1, // these two might be inverted (typo in ds)
675  XM_ABW_362 = 2,
676  XM_ABW_50 = 3
677  } XM_ABW_T;
678 
682  typedef enum {
683  CTRL_REG3_XM_P1_EMPTY = 0x01, // INT1_XM pin enables
684  CTRL_REG3_XM_P1_DRDYM = 0x02,
685  CTRL_REG3_XM_P1_DRDYA = 0x04,
686  CTRL_REG3_XM_P1_INTM = 0x08,
687  CTRL_REG3_XM_P1_INT2 = 0x10,
688  CTRL_REG3_XM_P1_INT1 = 0x20,
689  CTRL_REG3_XM_P1_TAP = 0x40,
690  CTRL_REG3_XM_P1_BOOT = 0x80
692 
696  typedef enum {
697  CTRL_REG4_XM_P2_WTM = 0x01, // INT2_XM pin enables
698  CTRL_REG4_XM_P2_OVERRUN = 0x02,
699  CTRL_REG4_XM_P2_DRDYM = 0x04,
700  CTRL_REG4_XM_P2_DRDYA = 0x08,
701  CTRL_REG4_XM_P2_INTM = 0x10,
702  CTRL_REG4_XM_P2_INT2 = 0x20,
703  CTRL_REG4_XM_P2_INT1 = 0x40,
704  CTRL_REG4_XM_P2_TAP = 0x80
706 
710  typedef enum {
711  CTRL_REG5_XM_LIR1 = 0x01, // latch intr 1
712  CTRL_REG5_XM_LIR2 = 0x02, // latch intr 2
713 
714  CTRL_REG5_XM_ODR0 = 0x04, // mag output data rate
715  CTRL_REG5_XM_ODR1 = 0x08,
716  CTRL_REG5_XM_ODR2 = 0x10,
717  _CTRL_REG5_XM_ODR_MASK = 7,
718  _CTRL_REG5_XM_ODR_SHIFT = 2,
719 
720  CTRL_REG5_XM_RES0 = 0x20, // mag resolution
721  CTRL_REG5_XM_RES1 = 0x40,
722  _CTRL_REG5_XM_RES_MASK = 3,
723  _CTRL_REG5_XM_RES_SHIFT = 5,
724 
725  CTRL_REG5_XM_TEMP_EN = 0x80 // temp sensor enable
727 
731  typedef enum {
732  XM_ODR_3_125 = 0, // 3.125Hz
733  XM_ODR_6_25 = 1,
734  XM_ODR_12_5 = 2,
735  XM_ODR_25 = 3,
736  XM_ODR_50 = 4,
737  XM_ODR_100 = 5
738 
739  // 6, 7 reserved
740  } XM_ODR_T;
741 
745  typedef enum {
746  XM_RES_LOW = 0, // low resolution
747 
748  // 1, 2 reserved
749 
750  XM_RES_HIGH = 3,
751  } XM_RES_T;
752 
756  typedef enum {
757  // 0x01-0x10 reserved
758 
759  CTRL_REG6_XM_MFS0 = 0x20,
760  CTRL_REG6_XM_MFS1 = 0x40,
761  _CTRL_REG6_XM_MFS_MASK = 3,
762  _CTRL_REG6_XM_MFS_SHIFT = 5
763 
764  // 0x80 reserved
766 
770  typedef enum {
771  XM_MFS_2 = 0, // +/- 2 gauss
772  XM_MFS_4 = 1,
773  XM_MFS_8 = 2,
774  XM_MFS_12 = 3
775  } XM_MFS_T;
776 
780  typedef enum {
781  CTRL_REG7_XM_MD0 = 0x01, // mag sensor mode
782  CTRL_REG7_XM_MD1 = 0x02,
783  _CTRL_REG7_XM_MD_MASK = 3,
784  _CTRL_REG7_XM_MD_SHIFT = 0,
785 
786  CTRL_REG7_XM_MLP = 0x04, // mag low power mode
787 
788  // 0x08, 0x10 reserved
789 
790  CTRL_REG7_XM_AFDS = 0x20, // filtered acceleration data
791 
792  CTRL_REG7_XM_AHPM0 = 0x40, // accel HPF selection
793  CTRL_REG7_XM_AHPM1 = 0x80,
794  _CTRL_REG7_XM_AHPM_MASK = 3,
795  _CTRL_REG7_XM_AHPM_SHIFT = 6
797 
801  typedef enum {
802  XM_MD_CONTINUOUS = 0, // continuous conversion
803  XM_MD_SINGLE = 1, // single conversion
804  XM_MD_POWERDOWN = 2 // power down mode
805  // 3 is also power down mode, for some odd reason
806  } XM_MD_T;
807 
811  typedef enum {
812  // XM_AHPM_NORMAL_REF: Normal mode (resets x, y and z-axis
813  // reading REFERENCE_X (1Ch), REFERENCE_Y (1Dh) and REFERENCE_Y
814  // (1Dh) registers respectively)
815 
816  XM_AHPM_NORMAL_REF = 0,
817  XM_AHPM_REFERENCE = 1,
818  XM_AHPM_NORMAL = 2,
819  XM_AHPM_AUTORESET = 3 // autoreset on interrupt
820  } XM_AHPM_T;
821 
825  typedef enum {
826  STATUS_REG_A_XADA = 0x01, // X accel axis data available
827  STATUS_REG_A_YADA = 0x02,
828  STATUS_REG_A_ZADA = 0x04,
829  STATUS_REG_A_ZYXADA = 0x08, // X, Y, and Z accel data available
830 
831  STATUS_REG_A_XAOR = 0x10, // X accel data overrun
832  STATUS_REG_A_YAOR = 0x20,
833  STATUS_REG_A_ZAOR = 0x40,
834  STATUS_REG_A_ZYXAOR = 0x80
836 
840  typedef enum {
841  FIFO_CTRL_REG_FTH0 = 0x01, // FIFO watermark/threshold
842  FIFO_CTRL_REG_FTH1 = 0x02,
843  FIFO_CTRL_REG_FTH2 = 0x04,
844  FIFO_CTRL_REG_FTH3 = 0x08,
845  FIFO_CTRL_REG_FTH4 = 0x10,
846  _FIFO_CTRL_REG_FTH_MASK = 31,
847  _FIFO_CTRL_REG_FTH_SHIFT = 0,
848 
849  FIFO_CTRL_REG_FM0 = 0x20, // FIFO mode config
850  FIFO_CTRL_REG_FM1 = 0x40,
851  FIFO_CTRL_REG_FM2 = 0x80,
852  _FIFO_CTRL_REG_FM_MASK = 7,
853  _FIFO_CTRL_REG_FM_SHIFT = 5,
854  } FIFO_CTRL_REG_T;
855 
856  // FIFO_CTRL_REG_FTH (FIFO watermark/threshold) is just a numeric
857  // value between 0-31, so we won't enumerate those values.
858 
863  typedef enum {
864  FM_BYPASS = 0,
865  FM_FIFO = 1,
866  FM_STREAM = 2,
867  FM_STREAM2FIFO = 3,
868  FM_BYPASS2STREAM = 4
869 
870  // 5-7 unused
871  } FM_T;
872 
877  typedef enum {
878  FIFO_CTRL_REG_FSS0 = 0x01, // FIFO stored data level
879  FIFO_CTRL_REG_FSS1 = 0x02,
880  FIFO_CTRL_REG_FSS2 = 0x04,
881  FIFO_CTRL_REG_FSS3 = 0x08,
882  FIFO_CTRL_REG_FSS4 = 0x10,
883  _FIFO_CTRL_REG_FSS_MASK = 31,
884  _FIFO_CTRL_REG_FSS_SHIFT = 0,
885 
886  FIFO_CTRL_REG_EMPTY = 0x20, // FIFO empty
887  FIFO_CTRL_REG_OVRN = 0x40, // FIFO overrun
888  FIFO_CTRL_REG_WTM = 0x80 // watermark status
890 
895  typedef enum {
896  INT_GEN_X_REG_XLIE_XDOWNE = 0x01, // enable intr on X low or dir recog
897  INT_GEN_X_REG_XHIE_XUPE = 0x02,
898  INT_GEN_X_REG_YLIE_YDOWNE = 0x04,
899  INT_GEN_X_REG_YHIE_YUPE = 0x08,
900  INT_GEN_X_REG_ZLIE_ZDOWNE = 0x10,
901  INT_GEN_X_REG_ZHIE_ZUPE = 0x20,
902  INT_GEN_X_REG_6D = 0x40, // enable 6D direction function
903  INT_GEN_X_REG_AOI = 0x80 // AND/OR combination of intrs
905 
910  typedef enum {
911  INT_GEN_X_SRC_XL = 0x01,
912  INT_GEN_X_SRC_XH = 0x02,
913  INT_GEN_X_SRC_YL = 0x04,
914  INT_GEN_X_SRC_YH = 0x08,
915  INT_GEN_X_SRC_ZL = 0x10,
916  INT_GEN_X_SRC_ZH = 0x20,
917  INT_GEN_X_SRC_IA = 0x40
918  // 0x80 reserved
920 
925  typedef enum {
926  INT_GEN_X_THS0 = 0x01, // interrupt threshold
927  INT_GEN_X_THS1 = 0x02,
928  INT_GEN_X_THS2 = 0x04,
929  INT_GEN_X_THS3 = 0x08,
930  INT_GEN_X_THS4 = 0x10,
931  INT_GEN_X_THS5 = 0x20,
932  INT_GEN_X_THS6 = 0x40,
933  _INT_GEN_X_THS_MASK = 127,
934  _INT_GEN_X_THS_SHIFT = 0
935  // 0x80 reserved
937 
942  typedef enum {
943  INT_GEN_X_DUR0 = 0x01, // interrupt duration
944  INT_GEN_X_DUR1 = 0x02,
945  INT_GEN_X_DUR2 = 0x04,
946  INT_GEN_X_DUR3 = 0x08,
947  INT_GEN_X_DUR4 = 0x10,
948  INT_GEN_X_DUR5 = 0x20,
949  INT_GEN_X_DUR6 = 0x40,
950  _INT_GEN_X_DUR_MASK = 127,
951  _INT_GEN_X_DUR_SHIFT = 0
952  // 0x80 reserved
954 
959  typedef enum {
960  CLICK_CONFIG_XS = 0x01, // enable intr single click x
961  CLICK_CONFIG_XD = 0x02, // enable intr double click x
962  CLICK_CONFIG_YS = 0x04,
963  CLICK_CONFIG_YD = 0x08,
964  CLICK_CONFIG_ZS = 0x10,
965  CLICK_CONFIG_ZD = 0x20
966  // 0x40, 0x80 reserved
968 
973  typedef enum {
974  CLICK_SRC_X = 0x01,
975  CLICK_SRC_Y = 0x02,
976  CLICK_SRC_Z = 0x04,
977  CLICK_SRC_SIGN = 0x08,
978  CLICK_SRC_SCLICK = 0x10,
979  CLICK_SRC_DCLICK = 0x20,
980  CLICK_SRC_IA = 0x40
981  // 0x80 reserved
983 
988  typedef enum {
989  CLICK_THS_THS0 = 0x01, // click threshold
990  CLICK_THS_THS1 = 0x02,
991  CLICK_THS_THS2 = 0x04,
992  CLICK_THS_THS3 = 0x08,
993  CLICK_THS_THS4 = 0x10,
994  CLICK_THS_THS5 = 0x20,
995  CLICK_THS_THS6 = 0x40,
996  _CLICK_THS_THS_MASK = 127,
997  _CLICK_THS_THS_SHIFT = 0
998  // 0x80 reserved
1000 
1005  typedef enum {
1006  CLICK_TIME_LIMIT_TLI0 = 0x01,
1007  CLICK_TIME_LIMIT_TLI1 = 0x02,
1008  CLICK_TIME_LIMIT_TLI2 = 0x04,
1009  CLICK_TIME_LIMIT_TLI3 = 0x08,
1010  CLICK_TIME_LIMIT_TLI4 = 0x10,
1011  CLICK_TIME_LIMIT_TLI5 = 0x20,
1012  CLICK_TIME_LIMIT_TLI6 = 0x40,
1013  _CLICK_TIME_LIMIT_TLI_MASK = 127,
1014  _CLICK_TIME_LIMIT_TLI_SHIFT = 0
1015  // 0x80 reserved
1017 
1022  typedef enum {
1023  ACT_THS_ACTH0 = 0x01, // 1 LSb = 16mg (?)
1024  ACT_THS_ACTH1 = 0x02,
1025  ACT_THS_ACTH2 = 0x04,
1026  ACT_THS_ACTH3 = 0x08,
1027  ACT_THS_ACTH4 = 0x10,
1028  ACT_THS_ACTH5 = 0x20,
1029  ACT_THS_ACTH6 = 0x40,
1030  _ACT_THS_ACTH_MASK = 127,
1031  _ACT_THS_ACTH_SHIFT = 0
1032  // 0x80 reserved
1033  } ACT_THS_BITS_T;
1034 
1035  // Driver specific enumerations
1036 
1037  // device enums for read/write regs
1038  typedef enum {
1039  DEV_GYRO,
1040  DEV_XM
1041  } DEVICE_T;
1042 
1043  // interrupt selection for installISR() and uninstallISR()
1044  typedef enum {
1045  INTERRUPT_G_INT, // gyroscope interrupt
1046  INTERRUPT_G_DRDY, // gyroscope data ready interrupt
1047  INTERRUPT_XM_GEN1, // XM interrupt generator 1
1048  INTERRUPT_XM_GEN2 // XM interrupt generator 2
1049  } INTERRUPT_PINS_T;
1050 
1051 
1058  LSM9DS0(int bus=LSM9DS0_I2C_BUS,
1059  uint8_t gAddress=LSM9DS0_DEFAULT_GYRO_ADDR,
1060  uint8_t xmAddress=LSM9DS0_DEFAULT_XM_ADDR);
1061 
1065  ~LSM9DS0();
1066 
1072  bool init();
1073 
1078  void update();
1079 
1083  void updateGyroscope();
1084 
1088  void updateAccelerometer();
1089 
1093  void updateMagnetometer();
1094 
1098  void updateTemperature();
1099 
1107  uint8_t readReg(DEVICE_T dev, uint8_t reg);
1108 
1118  void readRegs(DEVICE_T dev, uint8_t reg, uint8_t *buffer, int len);
1119 
1128  bool writeReg(DEVICE_T dev, uint8_t reg, uint8_t val);
1129 
1136  bool setGyroscopePowerDown(bool enable);
1137 
1146  bool setGyroscopeEnableAxes(uint8_t axes);
1147 
1154  bool setGyroscopeODR(G_ODR_T odr);
1155 
1162  bool setGyroscopeScale(G_FS_T scale);
1163 
1170  bool setAccelerometerEnableAxes(uint8_t axes);
1171 
1178  bool setAccelerometerODR(XM_AODR_T odr);
1179 
1186  bool setAccelerometerScale(XM_AFS_T scale);
1187 
1195 
1202  bool setMagnetometerODR(XM_ODR_T odr);
1203 
1210  bool setMagnetometerMode(XM_MD_T mode);
1211 
1220  bool setMagnetometerLPM(bool enable);
1221 
1228  bool setMagnetometerScale(XM_MFS_T scale);
1229 
1238  void getAccelerometer(float *x, float *y, float *z);
1239 
1248  void getGyroscope(float *x, float *y, float *z);
1249 
1258  void getMagnetometer(float *x, float *y, float *z);
1259 
1260 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
1261 
1266  float *getAccelerometer();
1267 
1273  float *getGyroscope();
1274 
1280  float *getMagnetometer();
1281 #endif
1282 
1291  float getTemperature();
1292 
1299  bool enableTemperatureSensor(bool enable);
1300 
1306  uint8_t getGyroscopeStatus();
1307 
1313  uint8_t getMagnetometerStatus();
1314 
1320  uint8_t getAccelerometerStatus();
1321 
1327  uint8_t getGyroscopeInterruptConfig();
1328 
1335  bool setGyroscopeInterruptConfig(uint8_t enables);
1336 
1342  uint8_t getGyroscopeInterruptSrc();
1343 
1350 
1357  bool setMagnetometerInterruptControl(uint8_t enables);
1358 
1364  uint8_t getMagnetometerInterruptSrc();
1365 
1371  uint8_t getInterruptGen1();
1372 
1379  bool setInterruptGen1(uint8_t enables);
1380 
1386  uint8_t getInterruptGen1Src();
1387 
1393  uint8_t getInterruptGen2();
1394 
1401  bool setInterruptGen2(uint8_t enables);
1402 
1408  uint8_t getInterruptGen2Src();
1409 
1410 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
1411  void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level,
1412  jobject runnable);
1413 #else
1414 
1426  void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level,
1427  void (*isr)(void *), void *arg);
1428 #endif
1429 
1435  void uninstallISR(INTERRUPT_PINS_T intr);
1436 
1437  protected:
1438  // uncompensated accelerometer and gyroscope values
1439  float m_accelX;
1440  float m_accelY;
1441  float m_accelZ;
1442 
1443  float m_gyroX;
1444  float m_gyroY;
1445  float m_gyroZ;
1446 
1447  float m_magX;
1448  float m_magY;
1449  float m_magZ;
1450 
1451  // uncompensated temperature value
1452  float m_temp;
1453 
1454  // accelerometer and gyro scaling factors, depending on their Full
1455  // Scale settings.
1456  float m_accelScale;
1457  float m_gyroScale;
1458  float m_magScale;
1459 
1460  private:
1461  // OR'd with a register, this enables register autoincrement mode,
1462  // which we need.
1463  static const uint8_t m_autoIncrementMode = 0x80;
1464 
1465  mraa::I2c m_i2cG;
1466  mraa::I2c m_i2cXM;
1467  uint8_t m_gAddr;
1468  uint8_t m_xmAddr;
1469 
1470  // return a reference to a gpio pin pointer depending on intr
1471  mraa::Gpio*& getPin(INTERRUPT_PINS_T intr);
1472 
1473  // possible interrupt pins
1474  mraa::Gpio *m_gpioG_INT;
1475  mraa::Gpio *m_gpioG_DRDY;
1476  mraa::Gpio *m_gpioXM_GEN1;
1477  mraa::Gpio *m_gpioXM_GEN2;
1478  };
1479 }
1480 
1481 
XM_MD_T
Definition: lsm9ds0.h:801
bool setMagnetometerMode(XM_MD_T mode)
Definition: lsm9ds0.cxx:522
INT_CTRL_REG_M_BITS_T
Definition: lsm9ds0.h:545
float getTemperature()
Definition: lsm9ds0.cxx:647
void updateTemperature()
Definition: lsm9ds0.cxx:267
INT1_CFG_G_BITS_T
Definition: lsm9ds0.h:411
bool setInterruptGen1(uint8_t enables)
Definition: lsm9ds0.cxx:719
CTRL_REG0_XM_BITS_T
Definition: lsm9ds0.h:574
FIFO_SRC_REG_G_BITS_T
Definition: lsm9ds0.h:393
uint8_t getAccelerometerStatus()
Definition: lsm9ds0.cxx:679
bool setMagnetometerInterruptControl(uint8_t enables)
Definition: lsm9ds0.cxx:704
uint8_t readReg(DEVICE_T dev, uint8_t reg)
Definition: lsm9ds0.cxx:287
INT_SRC_REG_M_BITS_T
Definition: lsm9ds0.h:559
CLICK_THS_BITS_T
Definition: lsm9ds0.h:988
CLICK_CONFIG_BITS_T
Definition: lsm9ds0.h:959
G_HPM_T
Definition: lsm9ds0.h:237
bool setMagnetometerODR(XM_ODR_T odr)
Definition: lsm9ds0.cxx:511
ACT_THS_BITS_T
Definition: lsm9ds0.h:1022
REG_G_T
Definition: lsm9ds0.h:88
XM_AODR_T
Definition: lsm9ds0.h:608
XM_ABW_T
Definition: lsm9ds0.h:672
CTRL_REG2_G_BITS_T
Definition: lsm9ds0.h:195
CTRL_REG4_XM_BITS_T
Definition: lsm9ds0.h:696
FM_T
Definition: lsm9ds0.h:863
FIFO_SRC_REG_BITS_T
Definition: lsm9ds0.h:877
LSM9DS0(int bus=LSM9DS0_I2C_BUS, uint8_t gAddress=LSM9DS0_DEFAULT_GYRO_ADDR, uint8_t xmAddress=LSM9DS0_DEFAULT_XM_ADDR)
Definition: lsm9ds0.cxx:36
uint8_t getMagnetometerStatus()
Definition: lsm9ds0.cxx:674
void update()
Definition: lsm9ds0.cxx:205
FIFO_CTRL_REG_G_T
Definition: lsm9ds0.h:356
uint8_t getInterruptGen2Src()
Definition: lsm9ds0.cxx:739
CTRL_REG3_G_BITS_T
Definition: lsm9ds0.h:247
bool setAccelerometerScale(XM_AFS_T scale)
Definition: lsm9ds0.cxx:453
CLICK_SRC_BITS_T
Definition: lsm9ds0.h:973
void updateMagnetometer()
Definition: lsm9ds0.cxx:249
bool setGyroscopeODR(G_ODR_T odr)
Definition: lsm9ds0.cxx:376
INT_GEN_X_THS_BITS_T
Definition: lsm9ds0.h:925
uint8_t getMagnetometerInterruptControl()
Definition: lsm9ds0.cxx:699
INT_GEN_X_SRC_BITS_T
Definition: lsm9ds0.h:910
bool setGyroscopeInterruptConfig(uint8_t enables)
Definition: lsm9ds0.cxx:689
STATUS_REG_G_BITS_T
Definition: lsm9ds0.h:341
XM_MFS_T
Definition: lsm9ds0.h:770
bool setGyroscopeScale(G_FS_T scale)
Definition: lsm9ds0.cxx:387
bool setMagnetometerResolution(XM_RES_T res)
Definition: lsm9ds0.cxx:500
CLICK_TIME_LIMIT_BITS_T
Definition: lsm9ds0.h:1005
G_HPCF_T
Definition: lsm9ds0.h:218
API for the LSM9DS0 3-axis Gyroscope, Accelerometer, and Magnetometer.
Definition: lsm9ds0.h:74
uint8_t getGyroscopeInterruptConfig()
Definition: lsm9ds0.cxx:684
bool setGyroscopeEnableAxes(uint8_t axes)
Definition: lsm9ds0.cxx:360
G_ST_T
Definition: lsm9ds0.h:284
uint8_t getInterruptGen1Src()
Definition: lsm9ds0.cxx:724
void updateAccelerometer()
Definition: lsm9ds0.cxx:231
uint8_t getGyroscopeStatus()
Definition: lsm9ds0.cxx:669
CTRL_REG4_G_BITS_T
Definition: lsm9ds0.h:261
bool setMagnetometerScale(XM_MFS_T scale)
Definition: lsm9ds0.cxx:545
uint8_t getMagnetometerInterruptSrc()
Definition: lsm9ds0.cxx:709
CTRL_REG5_XM_BITS_T
Definition: lsm9ds0.h:710
void updateGyroscope()
Definition: lsm9ds0.cxx:213
uint8_t getInterruptGen1()
Definition: lsm9ds0.cxx:714
G_FM_T
Definition: lsm9ds0.h:379
CTRL_REG1_XM_BITS_T
Definition: lsm9ds0.h:590
bool setMagnetometerLPM(bool enable)
Definition: lsm9ds0.cxx:533
G_INT1OUTSEL_T
Definition: lsm9ds0.h:331
void getMagnetometer(float *x, float *y, float *z)
Definition: lsm9ds0.cxx:612
uint8_t getInterruptGen2()
Definition: lsm9ds0.cxx:729
STATUS_REG_M_BITS_T
Definition: lsm9ds0.h:530
CTRL_REG2_XM_BITS_T
Definition: lsm9ds0.h:626
INT_GEN_X_REG_BITS_T
Definition: lsm9ds0.h:895
void getGyroscope(float *x, float *y, float *z)
Definition: lsm9ds0.cxx:600
void readRegs(DEVICE_T dev, uint8_t reg, uint8_t *buffer, int len)
Definition: lsm9ds0.cxx:304
XM_ODR_T
Definition: lsm9ds0.h:731
XM_AHPM_T
Definition: lsm9ds0.h:811
bool setGyroscopePowerDown(bool enable)
Definition: lsm9ds0.cxx:348
CTRL_REG1_G_BITS_T
Definition: lsm9ds0.h:135
bool writeReg(DEVICE_T dev, uint8_t reg, uint8_t val)
Definition: lsm9ds0.cxx:323
CTRL_REG3_XM_BITS_T
Definition: lsm9ds0.h:682
INT_GEN_X_DUR_BITS_T
Definition: lsm9ds0.h:942
bool setInterruptGen2(uint8_t enables)
Definition: lsm9ds0.cxx:734
REG_XM_T
Definition: lsm9ds0.h:446
void getAccelerometer(float *x, float *y, float *z)
Definition: lsm9ds0.cxx:588
void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
Definition: lsm9ds0.cxx:759
XM_AST_T
Definition: lsm9ds0.h:649
bool setAccelerometerEnableAxes(uint8_t axes)
Definition: lsm9ds0.cxx:426
bool enableTemperatureSensor(bool enable)
Definition: lsm9ds0.cxx:657
XM_RES_T
Definition: lsm9ds0.h:745
G_FS_T
Definition: lsm9ds0.h:297
G_ODR_T
Definition: lsm9ds0.h:171
INT1_SRC_G_BITS_T
Definition: lsm9ds0.h:427
bool setAccelerometerODR(XM_AODR_T odr)
Definition: lsm9ds0.cxx:442
CTRL_REG7_XM_BITS_T
Definition: lsm9ds0.h:780
CTRL_REG5_G_BITS_T
Definition: lsm9ds0.h:307
XM_AFS_T
Definition: lsm9ds0.h:659
FIFO_CTRL_REG_T
Definition: lsm9ds0.h:840
CTRL_REG6_XM_BITS_T
Definition: lsm9ds0.h:756
bool init()
Definition: lsm9ds0.cxx:85
~LSM9DS0()
Definition: lsm9ds0.cxx:77
uint8_t getGyroscopeInterruptSrc()
Definition: lsm9ds0.cxx:694
STATUS_REG_A_BITS_T
Definition: lsm9ds0.h:825
void uninstallISR(INTERRUPT_PINS_T intr)
Definition: lsm9ds0.cxx:773