upm  1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
lsm303dlh.hpp
1 /*
2  * Author: Brendan Le Foll<brendan.le.foll@intel.com>
3  * Copyright (c) 2014 Intel Corporation.
4  *
5  * Code based on LSM303DLH sample by Jim Lindblom SparkFun Electronics
6  * and the CompensatedCompass.ino by Frankie Chu from SeedStudio
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining
9  * a copy of this software and associated documentation files (the
10  * "Software"), to deal in the Software without restriction, including
11  * without limitation the rights to use, copy, modify, merge, publish,
12  * distribute, sublicense, and/or sell copies of the Software, and to
13  * permit persons to whom the Software is furnished to do so, subject to
14  * the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be
17  * included in all copies or substantial portions of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26  */
27 #pragma once
28 
29 #include <string.h>
30 #include <mraa/i2c.hpp>
31 #include <math.h>
32 
33 namespace upm {
34 
35 /* LSM303DLH Address definitions */
36 #define LSM303DLH_MAG 0x1E
37 #define LSM303DLH_ACC 0x19
38 
39 /* LSM303DLH Register definitions */
40 #define CTRL_REG1_A 0x20
41 #define CTRL_REG2_A 0x21
42 #define CTRL_REG3_A 0x22
43 #define CTRL_REG4_A 0x23
44 #define CTRL_REG5_A 0x24
45 
46 #define CRA_REG_M 0x00
47 #define CRB_REG_M 0x01
48 
49 #define MR_REG_M 0x02
50 #define OUT_X_H_M 0x03
51 
52 #define OUT_X_L_A 0x28
53 #define OUT_X_H_A 0x29
54 #define OUT_Y_L_A 0x2A
55 #define OUT_Y_H_A 0x2B
56 #define OUT_Z_L_A 0x2C
57 #define OUT_Z_H_A 0x2D
58 
59 #define X 0
60 #define Y 1
61 #define Z 2
62 
89  class LSM303DLH {
90  public:
91  typedef enum {
92  LSM303DLH_MAG_T = 0,
93  LSM303DLH_ACC_T } LSM303DLH_SLAVE_T;
102  LSM303DLH (int bus,
103  int addrMag=LSM303DLH_MAG,
104  int addrAcc=LSM303DLH_ACC,
105  int accScale=8);
106 
119  float getHeading();
120 
124  mraa::Result getCoordinates();
125 
130  mraa::Result getAcceleration();
131 
135  int16_t* getRawCoorData();
136 
140  int16_t getCoorX();
141 
145  int16_t getCoorY();
146 
150  int16_t getCoorZ();
151 
155  int16_t* getRawAccelData();
156 
160  int16_t getAccelX();
161 
165  int16_t getAccelY();
166 
170  int16_t getAccelZ();
171 
172  private:
173  int readThenWrite(uint8_t reg);
174  mraa::Result setRegisterSafe(LSM303DLH_SLAVE_T slave, uint8_t sregister, uint8_t data);
175 
176  mraa::I2c m_i2cMag;
177  mraa::I2c m_i2cAcc;
178  int m_addrMag;
179  int m_addrAcc;
180  uint8_t buf[6];
181  int16_t coor[3];
182  int16_t accel[3];
183  };
184 
185 }
int16_t getAccelX()
Definition: lsm303dlh.cxx:107
int16_t getCoorZ()
Definition: lsm303dlh.cxx:160
API for the LSM303DLH Accelerometer & Compass.
Definition: lsm303dlh.hpp:89
mraa::Result getCoordinates()
Definition: lsm303dlh.cxx:125
int16_t * getRawAccelData()
Definition: lsm303dlh.cxx:95
C++ API wrapper for the bh1749 driver.
Definition: a110x.hpp:29
mraa::Result getAcceleration()
Definition: lsm303dlh.cxx:174
float getHeading()
Definition: lsm303dlh.cxx:80
int16_t getCoorY()
Definition: lsm303dlh.cxx:155
int16_t getAccelY()
Definition: lsm303dlh.cxx:113
int16_t getAccelZ()
Definition: lsm303dlh.cxx:119
int16_t * getRawCoorData()
Definition: lsm303dlh.cxx:101
LSM303DLH(int bus, int addrMag=LSM303DLH_MAG, int addrAcc=LSM303DLH_ACC, int accScale=8)
Definition: lsm303dlh.cxx:38
int16_t getCoorX()
Definition: lsm303dlh.cxx:150