upm  1.5.0
Sensor/Actuator repository for libmraa (v1.8.0)
lsm303agr.hpp
1 /*
2  * Author: Jon Trulson <jtrulson@ics.com>
3  * Copyright (c) 2017 Intel Corporation.
4  *
5  * The MIT License
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining
8  * a copy of this software and associated documentation files (the
9  * "Software"), to deal in the Software without restriction, including
10  * without limitation the rights to use, copy, modify, merge, publish,
11  * distribute, sublicense, and/or sell copies of the Software, and to
12  * permit persons to whom the Software is furnished to do so, subject to
13  * the following conditions:
14  *
15  * The above copyright notice and this permission notice shall be
16  * included in all copies or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25  */
26 #pragma once
27 
28 #include <string>
29 #include <vector>
30 
31 #include <mraa/gpio.hpp>
32 #include "lsm303agr.h"
33 
34 namespace upm {
35 
69  class LSM303AGR {
70  public:
89  LSM303AGR(int bus=LSM303AGR_DEFAULT_I2C_BUS,
90  int acc_addr=LSM303AGR_DEFAULT_ACC_ADDR,
91  int mag_addr=LSM303AGR_DEFAULT_MAG_ADDR);
92 
96  ~LSM303AGR();
97 
105  void update();
106 
118  void getMagnetometer(float *x, float *y, float *z);
119 
128  std::vector<float> getMagnetometer();
129 
141  void getAccelerometer(float *x, float *y, float *z);
142 
151  std::vector<float> getAccelerometer();
152 
160  float getTemperature();
161 
182  void init(LSM303AGR_POWER_MODE_T usage=LSM303AGR_POWER_HIGH_RESOLUTION);
183 
191  void setFullScale(LSM303AGR_A_FS_T fs);
192 
202  void setPowerMode(LSM303AGR_POWER_MODE_T mode);
203 
211  void setAccelerometerODR(LSM303AGR_A_ODR_T odr);
212 
221  void setMagnetometerODR(LSM303AGR_CFG_A_M_ODR_T odr);
222 
230  uint8_t getAccelerometerInt1Config();
231 
239  uint8_t getAccelerometerInt2Config();
240 
249  void setAccelerometerInt1Config(uint8_t bits);
250 
259  void setAccelerometerInt2Config(uint8_t bits);
260 
267  uint8_t getMagnetometerIntConfig();
268 
276  void setMagnetometerIntConfig(uint8_t bits);
277 
285  uint8_t getAccelerometerInt1Src();
286 
294  uint8_t getAccelerometerInt2Src();
295 
304  uint8_t getMagnetometerIntSrc();
305 
306 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
307  void installISR(LSM303AGR_INTERRUPT_PINS_T intr, int gpio,
308  mraa::Edge level,
309  jobject runnable)
310  {
311  installISR(intr, gpio, level, mraa_java_isr_callback, runnable);
312  }
313 #else
314 
327  void installISR(LSM303AGR_INTERRUPT_PINS_T intr, int gpio,
328  mraa::Edge level,
329  void (*isr)(void *), void *arg);
330 #endif
331 
338  void uninstallISR(LSM303AGR_INTERRUPT_PINS_T intr);
339 
340  protected:
341  // our underlying device context
342  lsm303agr_context m_lsm303agr;
343 
350  uint8_t readReg(uint8_t reg);
351 
360  int readRegs(uint8_t reg, uint8_t *buffer, int len);
361 
369  void writeReg(uint8_t reg, uint8_t val);
370 
371  private:
372  /* Disable implicit copy and assignment operators */
373  LSM303AGR(const LSM303AGR&) = delete;
374  LSM303AGR &operator=(const LSM303AGR&) = delete;
375 
376  // Adding a private function definition for java bindings
377 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
378  void installISR(LSM303AGR_INTERRUPT_PINS_T intr, int gpio,
379  mraa::Edge level,
380  void (*isr)(void *), void *arg);
381 #endif
382  };
383 }
std::vector< float > getAccelerometer()
Definition: lsm303agr.cxx:104
uint8_t readReg(uint8_t reg)
Definition: lsm303agr.cxx:64
void setAccelerometerInt2Config(uint8_t bits)
Definition: lsm303agr.cxx:162
float getTemperature()
Definition: lsm303agr.cxx:112
uint8_t getMagnetometerIntConfig()
Definition: lsm303agr.cxx:169
void writeReg(uint8_t reg, uint8_t val)
Definition: lsm303agr.cxx:79
std::vector< float > getMagnetometer()
Definition: lsm303agr.cxx:91
LSM303AGR(int bus=LSM303AGR_DEFAULT_I2C_BUS, int acc_addr=LSM303AGR_DEFAULT_ACC_ADDR, int mag_addr=LSM303AGR_DEFAULT_MAG_ADDR)
Definition: lsm303agr.cxx:37
void setFullScale(LSM303AGR_A_FS_T fs)
Definition: lsm303agr.cxx:117
uint8_t getMagnetometerIntSrc()
Definition: lsm303agr.cxx:191
API for the LSM303AGR 3-Axis Geomagnetic Sensor.
Definition: lsm303agr.hpp:69
C API for the lsm303agr driver.
~LSM303AGR()
Definition: lsm303agr.cxx:45
void setAccelerometerInt1Config(uint8_t bits)
Definition: lsm303agr.cxx:155
Definition: lsm303agr.h:53
Definition: a110x.hpp:29
void setMagnetometerODR(LSM303AGR_CFG_A_M_ODR_T odr)
Definition: lsm303agr.cxx:138
void setAccelerometerODR(LSM303AGR_A_ODR_T odr)
Definition: lsm303agr.cxx:131
uint8_t getAccelerometerInt1Src()
Definition: lsm303agr.cxx:181
void uninstallISR(LSM303AGR_INTERRUPT_PINS_T intr)
Definition: lsm303agr.cxx:207
void init(LSM303AGR_POWER_MODE_T usage=LSM303AGR_POWER_HIGH_RESOLUTION)
Definition: lsm303agr.cxx:50
void update()
Definition: lsm303agr.cxx:57
int readRegs(uint8_t reg, uint8_t *buffer, int len)
Definition: lsm303agr.cxx:69
void installISR(LSM303AGR_INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
Definition: lsm303agr.cxx:197
void setMagnetometerIntConfig(uint8_t bits)
Definition: lsm303agr.cxx:174
uint8_t getAccelerometerInt2Config()
Definition: lsm303agr.cxx:150
void setPowerMode(LSM303AGR_POWER_MODE_T mode)
Definition: lsm303agr.cxx:124
uint8_t getAccelerometerInt2Src()
Definition: lsm303agr.cxx:186
uint8_t getAccelerometerInt1Config()
Definition: lsm303agr.cxx:145