mirror of
https://github.com/eclipse/upm.git
synced 2025-03-15 04:57:30 +03:00
Added iMagnetometer interface
Signed-off-by: Serban Waltter <serban.waltter@rinftech.com>
This commit is contained in:
parent
050634bbaf
commit
5ad91e219f
@ -62,15 +62,15 @@ public class BMI160_Example
|
|||||||
+ " GZ: "
|
+ " GZ: "
|
||||||
+ dataG.get(2));
|
+ dataG.get(2));
|
||||||
|
|
||||||
float dataM[] = sensor.getMagnetometer();
|
AbstractList<Float> dataM = sensor.getMagnetometer();
|
||||||
|
|
||||||
System.out.println("Magnetometer: "
|
System.out.println("Magnetometer: "
|
||||||
+ "MX: "
|
+ "MX: "
|
||||||
+ dataM[0]
|
+ dataM.get(0)
|
||||||
+ " MY: "
|
+ " MY: "
|
||||||
+ dataM[1]
|
+ dataM.get(1)
|
||||||
+ " MZ: "
|
+ " MZ: "
|
||||||
+ dataM[2]);
|
+ dataM.get(2));
|
||||||
|
|
||||||
System.out.println();
|
System.out.println();
|
||||||
Thread.sleep(500);
|
Thread.sleep(500);
|
||||||
|
@ -24,10 +24,12 @@
|
|||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import upm_interfaces.*;
|
||||||
import upm_bmm150.BMM150;
|
import upm_bmm150.BMM150;
|
||||||
import java.util.AbstractList;
|
import java.util.AbstractList;
|
||||||
import java.lang.Float;
|
import java.lang.Float;
|
||||||
|
|
||||||
|
|
||||||
public class BMM150_Example
|
public class BMM150_Example
|
||||||
{
|
{
|
||||||
public static void main(String[] args) throws InterruptedException
|
public static void main(String[] args) throws InterruptedException
|
||||||
|
@ -82,7 +82,7 @@ add_example(BME280_Example "bmp280;interfaces")
|
|||||||
add_example(BMG160_Example "bmg160;interfaces")
|
add_example(BMG160_Example "bmg160;interfaces")
|
||||||
add_example(BMI055_Example "bmx055;interfaces")
|
add_example(BMI055_Example "bmx055;interfaces")
|
||||||
add_example(BMI160_Example "bmi160;interfaces")
|
add_example(BMI160_Example "bmi160;interfaces")
|
||||||
add_example(BMM150_Example bmm150)
|
add_example(BMM150_Example "bmm150;interfaces")
|
||||||
add_example(BMP280_Example "bmp280;interfaces")
|
add_example(BMP280_Example "bmp280;interfaces")
|
||||||
add_example(BMPX8X_Example "bmpx8x;interfaces")
|
add_example(BMPX8X_Example "bmpx8x;interfaces")
|
||||||
add_example(BMX055_Example "bmx055;interfaces")
|
add_example(BMX055_Example "bmx055;interfaces")
|
||||||
|
@ -18,8 +18,10 @@ set (module_hpp iClock.hpp
|
|||||||
iHallEffect.hpp
|
iHallEffect.hpp
|
||||||
iHeartRate.hpp
|
iHeartRate.hpp
|
||||||
iHumidity.hpp
|
iHumidity.hpp
|
||||||
|
iGyroscope.hpp
|
||||||
iLight.hpp
|
iLight.hpp
|
||||||
iLineFinder.hpp
|
iLineFinder.hpp
|
||||||
|
iMagnetometer.hpp
|
||||||
iMoisture.hpp
|
iMoisture.hpp
|
||||||
iMotion.hpp
|
iMotion.hpp
|
||||||
iPressure.hpp
|
iPressure.hpp
|
||||||
|
48
include/interfaces/iMagnetometer.hpp
Normal file
48
include/interfaces/iMagnetometer.hpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Author: Serban Waltter <serban.waltter@rinftech.com>
|
||||||
|
* Copyright (c) 2018 Intel Corporation.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
* a copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
* permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
* the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace upm
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @brief Interface for acceleration sensors
|
||||||
|
*/
|
||||||
|
class iMagnetometer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~iMagnetometer() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return gyroscope data in degrees per second in the form of
|
||||||
|
* a floating point vector in micro Tesla.
|
||||||
|
*
|
||||||
|
* @return A floating point vector containing x, y, and z in
|
||||||
|
* that order in micro Tesla.
|
||||||
|
*/
|
||||||
|
virtual std::vector<float> getMagnetometer() = 0;
|
||||||
|
};
|
||||||
|
} // upm
|
@ -15,6 +15,7 @@
|
|||||||
#include "iHumidity.hpp"
|
#include "iHumidity.hpp"
|
||||||
#include "iLight.hpp"
|
#include "iLight.hpp"
|
||||||
#include "iLineFinder.hpp"
|
#include "iLineFinder.hpp"
|
||||||
|
#include "iMagnetometer.hpp"
|
||||||
#include "iMoisture.hpp"
|
#include "iMoisture.hpp"
|
||||||
#include "iMotion.hpp"
|
#include "iMotion.hpp"
|
||||||
#include "iOrp.hpp"
|
#include "iOrp.hpp"
|
||||||
|
@ -56,6 +56,7 @@ import java.lang.Float;
|
|||||||
%interface_impl (upm::iHumidity);
|
%interface_impl (upm::iHumidity);
|
||||||
%interface_impl (upm::iLight);
|
%interface_impl (upm::iLight);
|
||||||
%interface_impl (upm::iLineFinder);
|
%interface_impl (upm::iLineFinder);
|
||||||
|
%interface_impl (upm::iMagnetometer);
|
||||||
%interface_impl (upm::iMoisture);
|
%interface_impl (upm::iMoisture);
|
||||||
%interface_impl (upm::iMotion);
|
%interface_impl (upm::iMotion);
|
||||||
%interface_impl (upm::iOrp);
|
%interface_impl (upm::iOrp);
|
||||||
@ -85,6 +86,7 @@ import java.lang.Float;
|
|||||||
#include "iHumidity.hpp"
|
#include "iHumidity.hpp"
|
||||||
#include "iLight.hpp"
|
#include "iLight.hpp"
|
||||||
#include "iLineFinder.hpp"
|
#include "iLineFinder.hpp"
|
||||||
|
#include "iMagnetometer.hpp"
|
||||||
#include "iMoisture.hpp"
|
#include "iMoisture.hpp"
|
||||||
#include "iMotion.hpp"
|
#include "iMotion.hpp"
|
||||||
#include "iOrp.hpp"
|
#include "iOrp.hpp"
|
||||||
@ -113,6 +115,7 @@ import java.lang.Float;
|
|||||||
%include "iHumidity.hpp"
|
%include "iHumidity.hpp"
|
||||||
%include "iLight.hpp"
|
%include "iLight.hpp"
|
||||||
%include "iLineFinder.hpp"
|
%include "iLineFinder.hpp"
|
||||||
|
%include "iMagnetometer.hpp"
|
||||||
%include "iMoisture.hpp"
|
%include "iMoisture.hpp"
|
||||||
%include "iMotion.hpp"
|
%include "iMotion.hpp"
|
||||||
%include "iOrp.hpp"
|
%include "iOrp.hpp"
|
||||||
|
@ -267,13 +267,20 @@ function (_get_current_dot_i_file filePrefix varDotIFile)
|
|||||||
list (FIND module_iface "iAcceleration.hpp" _index)
|
list (FIND module_iface "iAcceleration.hpp" _index)
|
||||||
if (${_index} GREATER -1)
|
if (${_index} GREATER -1)
|
||||||
set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
|
set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
|
||||||
|
else()
|
||||||
list (FIND module_iface "iGyroscope.hpp" _index)
|
list (FIND module_iface "iGyroscope.hpp" _index)
|
||||||
elseif(${_index} GREATER -1)
|
if(${_index} GREATER -1)
|
||||||
set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
|
set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
|
||||||
|
else()
|
||||||
|
list (FIND module_iface "iMagnetometer.hpp" _index)
|
||||||
|
if(${_index} GREATER -1)
|
||||||
|
set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
cmake_policy(SET CMP0057 NEW)
|
cmake_policy(SET CMP0057 NEW)
|
||||||
if (("iAcceleration.hpp" IN_LIST module_iface) OR ("iGyroscope.hpp" IN_LIST module_iface))
|
if (("iAcceleration.hpp" IN_LIST module_iface) OR ("iGyroscope.hpp" IN_LIST module_iface) OR ("iMagnetometer.hpp" IN_LIST module_iface))
|
||||||
set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
|
set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -4,7 +4,7 @@ upm_mixed_module_init (NAME bmi160
|
|||||||
C_SRC bmi160.c bosch_bmi160.c
|
C_SRC bmi160.c bosch_bmi160.c
|
||||||
CPP_HDR bmi160.hpp
|
CPP_HDR bmi160.hpp
|
||||||
CPP_SRC bmi160.cxx
|
CPP_SRC bmi160.cxx
|
||||||
IFACE_HDR iAcceleration.hpp iGyroscope.hpp
|
IFACE_HDR iAcceleration.hpp iGyroscope.hpp iMagnetometer.hpp
|
||||||
# FTI_SRC bmi160_fti.c
|
# FTI_SRC bmi160_fti.c
|
||||||
CPP_WRAPS_C
|
CPP_WRAPS_C
|
||||||
REQUIRES mraa utilities-c)
|
REQUIRES mraa utilities-c)
|
||||||
|
@ -101,13 +101,13 @@ std::vector<float> BMI160::getGyroscope()
|
|||||||
return std::vector<float>(values, values + 3);
|
return std::vector<float>(values, values + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
float *BMI160::getMagnetometer()
|
std::vector<float> BMI160::getMagnetometer()
|
||||||
{
|
{
|
||||||
static float values[3]; // x, y, and then z
|
static float values[3]; // x, y, and then z
|
||||||
|
|
||||||
getMagnetometer(&values[0], &values[1], &values[2]);
|
getMagnetometer(&values[0], &values[1], &values[2]);
|
||||||
|
|
||||||
return values;
|
return std::vector<float>(values, values + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BMI160::enableMagnetometer(bool enable)
|
void BMI160::enableMagnetometer(bool enable)
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
#include <interfaces/iAcceleration.hpp>
|
#include <interfaces/iAcceleration.hpp>
|
||||||
#include <interfaces/iGyroscope.hpp>
|
#include <interfaces/iGyroscope.hpp>
|
||||||
|
#include <interfaces/iMagnetometer.hpp>
|
||||||
|
|
||||||
#define BMI160_I2C_BUS 0
|
#define BMI160_I2C_BUS 0
|
||||||
#define BMI160_DEFAULT_I2C_ADDR 0x69
|
#define BMI160_DEFAULT_I2C_ADDR 0x69
|
||||||
@ -75,7 +76,7 @@ namespace upm {
|
|||||||
*
|
*
|
||||||
* @snippet bmi160.cxx Interesting
|
* @snippet bmi160.cxx Interesting
|
||||||
*/
|
*/
|
||||||
class BMI160: virtual public iAcceleration, virtual public iGyroscope {
|
class BMI160: virtual public iAcceleration, virtual public iGyroscope, public virtual iMagnetometer {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -189,7 +190,7 @@ namespace upm {
|
|||||||
* @return Pointer to 3 floating point values: X, Y, and Z in
|
* @return Pointer to 3 floating point values: X, Y, and Z in
|
||||||
* micro Teslas.
|
* micro Teslas.
|
||||||
*/
|
*/
|
||||||
float *getMagnetometer();
|
std::vector<float> getMagnetometer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Magnetometer values. The values returned are in micro
|
* Get the Magnetometer values. The values returned are in micro
|
||||||
|
@ -4,6 +4,7 @@ upm_mixed_module_init (NAME bmm150
|
|||||||
C_SRC bmm150.c
|
C_SRC bmm150.c
|
||||||
CPP_HDR bmm150.hpp
|
CPP_HDR bmm150.hpp
|
||||||
CPP_SRC bmm150.cxx
|
CPP_SRC bmm150.cxx
|
||||||
|
IFACE_HDR iMagnetometer.hpp
|
||||||
FTI_SRC bmm150_fti.c
|
FTI_SRC bmm150_fti.c
|
||||||
CPP_WRAPS_C
|
CPP_WRAPS_C
|
||||||
REQUIRES mraa utilities-c)
|
REQUIRES mraa utilities-c)
|
||||||
|
@ -96,9 +96,10 @@ void BMM150::getMagnetometer(float *x, float *y, float *z)
|
|||||||
|
|
||||||
std::vector<float> BMM150::getMagnetometer()
|
std::vector<float> BMM150::getMagnetometer()
|
||||||
{
|
{
|
||||||
|
update();
|
||||||
float v[3];
|
float v[3];
|
||||||
|
|
||||||
getMagnetometer(&v[0], &v[1], &v[2]);
|
bmm150_get_magnetometer(m_bmm150, &v[0], &v[1], &v[2]);
|
||||||
return std::vector<float>(v, v+3);
|
return std::vector<float>(v, v+3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#include <mraa/gpio.hpp>
|
#include <mraa/gpio.hpp>
|
||||||
#include "bmm150.h"
|
#include "bmm150.h"
|
||||||
|
|
||||||
|
#include <interfaces/iMagnetometer.hpp>
|
||||||
|
|
||||||
namespace upm {
|
namespace upm {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -73,7 +75,7 @@ namespace upm {
|
|||||||
* @snippet bmm150.cxx Interesting
|
* @snippet bmm150.cxx Interesting
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class BMM150 {
|
class BMM150: virtual public iMagnetometer {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* BMM150 constructor.
|
* BMM150 constructor.
|
||||||
|
@ -1,25 +1,25 @@
|
|||||||
|
#ifdef SWIGPYTHON
|
||||||
|
%module (package="upm") bmi160
|
||||||
|
#endif
|
||||||
|
|
||||||
|
%import "interfaces/interfaces.i"
|
||||||
|
|
||||||
%include "../common_top.i"
|
%include "../common_top.i"
|
||||||
|
|
||||||
/* BEGIN Java syntax ------------------------------------------------------- */
|
/* BEGIN Java syntax ------------------------------------------------------- */
|
||||||
#ifdef SWIGJAVA
|
#ifdef SWIGJAVA
|
||||||
%include "../upm_javastdvector.i"
|
|
||||||
|
|
||||||
%ignore getMagnetometer(float *, float *, float *);
|
|
||||||
|
|
||||||
%typemap(javaimports) SWIGTYPE %{
|
%typemap(javaimports) SWIGTYPE %{
|
||||||
|
import upm_interfaces.*;
|
||||||
|
|
||||||
import java.util.AbstractList;
|
import java.util.AbstractList;
|
||||||
import java.lang.Float;
|
import java.lang.Float;
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
%ignore getMagnetometer(float *, float *, float *);
|
||||||
|
|
||||||
%typemap(javaout) SWIGTYPE {
|
%typemap(javaout) SWIGTYPE {
|
||||||
return new $&javaclassname($jnicall, true);
|
return new $&javaclassname($jnicall, true);
|
||||||
}
|
}
|
||||||
%typemap(javaout) std::vector<float> {
|
|
||||||
return (AbstractList<Float>)(new $&javaclassname($jnicall, true));
|
|
||||||
}
|
|
||||||
%typemap(jstype) std::vector<float> "AbstractList<Float>"
|
|
||||||
|
|
||||||
%template(floatVector) std::vector<float>;
|
|
||||||
|
|
||||||
%ignore installISR (BMM150_INTERRUPT_PINS_T , int , mraa::Edge , void *, void *);
|
%ignore installISR (BMM150_INTERRUPT_PINS_T , int , mraa::Edge , void *, void *);
|
||||||
|
|
||||||
|
@ -2,5 +2,5 @@ upm_mixed_module_init (NAME bmx055
|
|||||||
DESCRIPTION "Bosch IMU Sensor Library"
|
DESCRIPTION "Bosch IMU Sensor Library"
|
||||||
CPP_HDR bmx055.hpp bmc150.hpp bmi055.hpp
|
CPP_HDR bmx055.hpp bmc150.hpp bmi055.hpp
|
||||||
CPP_SRC bmx055.cxx bmc150.cxx bmi055.cxx
|
CPP_SRC bmx055.cxx bmc150.cxx bmi055.cxx
|
||||||
IFACE_HDR iAcceleration.hpp iGyroscope.hpp
|
IFACE_HDR iAcceleration.hpp iGyroscope.hpp iMagnetometer.hpp
|
||||||
REQUIRES mraa bmg160 bma250e bmm150)
|
REQUIRES mraa bmg160 bma250e bmm150)
|
||||||
|
@ -117,6 +117,7 @@ void BMC150::getMagnetometer(float *x, float *y, float *z)
|
|||||||
|
|
||||||
std::vector<float> BMC150::getMagnetometer()
|
std::vector<float> BMC150::getMagnetometer()
|
||||||
{
|
{
|
||||||
|
update();
|
||||||
if (m_mag)
|
if (m_mag)
|
||||||
return m_mag->getMagnetometer();
|
return m_mag->getMagnetometer();
|
||||||
else
|
else
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "bmm150.hpp"
|
#include "bmm150.hpp"
|
||||||
|
|
||||||
#include <interfaces/iAcceleration.hpp>
|
#include <interfaces/iAcceleration.hpp>
|
||||||
|
#include <interfaces/iMagnetometer.hpp>
|
||||||
|
|
||||||
#define BMC150_DEFAULT_BUS 0
|
#define BMC150_DEFAULT_BUS 0
|
||||||
#define BMC150_DEFAULT_ACC_ADDR 0x10
|
#define BMC150_DEFAULT_ACC_ADDR 0x10
|
||||||
@ -72,7 +73,7 @@ namespace upm {
|
|||||||
* @snippet bmx055-bmc150.cxx Interesting
|
* @snippet bmx055-bmc150.cxx Interesting
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class BMC150: virtual public iAcceleration {
|
class BMC150: virtual public iAcceleration, virtual public iMagnetometer {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* BMC150 constructor.
|
* BMC150 constructor.
|
||||||
|
@ -169,6 +169,7 @@ void BMX055::getMagnetometer(float *x, float *y, float *z)
|
|||||||
|
|
||||||
std::vector<float> BMX055::getMagnetometer()
|
std::vector<float> BMX055::getMagnetometer()
|
||||||
{
|
{
|
||||||
|
update();
|
||||||
if (m_mag)
|
if (m_mag)
|
||||||
return m_mag->getMagnetometer();
|
return m_mag->getMagnetometer();
|
||||||
else
|
else
|
||||||
|
@ -79,7 +79,7 @@ namespace upm {
|
|||||||
* @snippet bmx055.cxx Interesting
|
* @snippet bmx055.cxx Interesting
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class BMX055: virtual public iAcceleration, virtual public iGyroscope {
|
class BMX055: virtual public iAcceleration, virtual public iGyroscope, public virtual iMagnetometer {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* BMX055 constructor.
|
* BMX055 constructor.
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include <interfaces/iAcceleration.hpp>
|
#include <interfaces/iAcceleration.hpp>
|
||||||
#include <interfaces/iGyroscope.hpp>
|
#include <interfaces/iGyroscope.hpp>
|
||||||
|
#include <interfaces/iMagnetometer.hpp>
|
||||||
|
|
||||||
namespace upm {
|
namespace upm {
|
||||||
|
|
||||||
|
@ -5,6 +5,6 @@ upm_mixed_module_init (NAME lsm303agr
|
|||||||
CPP_HDR lsm303agr.hpp
|
CPP_HDR lsm303agr.hpp
|
||||||
CPP_SRC lsm303agr.cxx
|
CPP_SRC lsm303agr.cxx
|
||||||
FTI_SRC lsm303agr_fti.c
|
FTI_SRC lsm303agr_fti.c
|
||||||
IFACE_HDR iAcceleration.hpp
|
IFACE_HDR iAcceleration.hpp iMagnetometer.hpp
|
||||||
CPP_WRAPS_C
|
CPP_WRAPS_C
|
||||||
REQUIRES mraa utilities-c)
|
REQUIRES mraa utilities-c)
|
||||||
|
@ -90,9 +90,10 @@ void LSM303AGR::getMagnetometer(float *x, float *y, float *z)
|
|||||||
|
|
||||||
std::vector<float> LSM303AGR::getMagnetometer()
|
std::vector<float> LSM303AGR::getMagnetometer()
|
||||||
{
|
{
|
||||||
|
update();
|
||||||
float v[3];
|
float v[3];
|
||||||
|
|
||||||
getMagnetometer(&v[0], &v[1], &v[2]);
|
lsm303agr_get_magnetometer(m_lsm303agr, &v[0], &v[1], &v[2]);
|
||||||
return std::vector<float>(v, v+3);
|
return std::vector<float>(v, v+3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "lsm303agr.h"
|
#include "lsm303agr.h"
|
||||||
|
|
||||||
#include <interfaces/iAcceleration.hpp>
|
#include <interfaces/iAcceleration.hpp>
|
||||||
|
#include <interfaces/iMagnetometer.hpp>
|
||||||
|
|
||||||
namespace upm {
|
namespace upm {
|
||||||
|
|
||||||
@ -67,7 +68,7 @@ namespace upm {
|
|||||||
* @snippet lsm303agr.cxx Interesting
|
* @snippet lsm303agr.cxx Interesting
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class LSM303AGR: virtual public iAcceleration {
|
class LSM303AGR: virtual public iAcceleration, virtual public iMagnetometer {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* LSM303AGR constructor
|
* LSM303AGR constructor
|
||||||
|
@ -2,5 +2,5 @@ set (libname "lsm9ds0")
|
|||||||
set (libdescription "Triaxial Gyroscope/accelerometer/magnetometer Sensor")
|
set (libdescription "Triaxial Gyroscope/accelerometer/magnetometer Sensor")
|
||||||
set (module_src ${libname}.cxx)
|
set (module_src ${libname}.cxx)
|
||||||
set (module_hpp ${libname}.hpp)
|
set (module_hpp ${libname}.hpp)
|
||||||
set (module_iface iAcceleration.hpp iGyroscope.hpp)
|
set (module_iface iAcceleration.hpp iGyroscope.hpp iMagnetometer.hpp)
|
||||||
upm_module_init(mraa)
|
upm_module_init(mraa)
|
||||||
|
@ -645,8 +645,11 @@ std::vector<float> LSM9DS0::getGyroscope()
|
|||||||
|
|
||||||
std::vector<float> LSM9DS0::getMagnetometer()
|
std::vector<float> LSM9DS0::getMagnetometer()
|
||||||
{
|
{
|
||||||
|
update();
|
||||||
std::vector<float> v(3);
|
std::vector<float> v(3);
|
||||||
getMagnetometer(&v[0], &v[1], &v[2]);
|
v[0] = (m_magX * m_magScale) / 1000.0;
|
||||||
|
v[1] = (m_magY * m_magScale) / 1000.0;
|
||||||
|
v[2] = (m_magZ * m_magScale) / 1000.0;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include <interfaces/iAcceleration.hpp>
|
#include <interfaces/iAcceleration.hpp>
|
||||||
#include <interfaces/iGyroscope.hpp>
|
#include <interfaces/iGyroscope.hpp>
|
||||||
|
#include <interfaces/iMagnetometer.hpp>
|
||||||
|
|
||||||
#define LSM9DS0_I2C_BUS 1
|
#define LSM9DS0_I2C_BUS 1
|
||||||
#define LSM9DS0_DEFAULT_XM_ADDR 0x1d
|
#define LSM9DS0_DEFAULT_XM_ADDR 0x1d
|
||||||
@ -80,7 +81,7 @@ namespace upm {
|
|||||||
* @snippet lsm9ds0.cxx Interesting
|
* @snippet lsm9ds0.cxx Interesting
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class LSM9DS0: virtual public iAcceleration, virtual public iGyroscope {
|
class LSM9DS0: virtual public iAcceleration, virtual public iGyroscope, virtual public iMagnetometer {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// NOTE: reserved registers must not be written into or permanent
|
// NOTE: reserved registers must not be written into or permanent
|
||||||
|
@ -2,4 +2,5 @@ set (libname "mag3110")
|
|||||||
set (libdescription "Three-Axis Digital Magnetometer")
|
set (libdescription "Three-Axis Digital Magnetometer")
|
||||||
set (module_src ${libname}.cpp)
|
set (module_src ${libname}.cpp)
|
||||||
set (module_hpp ${libname}.hpp)
|
set (module_hpp ${libname}.hpp)
|
||||||
|
set (module_iface iMagnetometer.hpp)
|
||||||
upm_module_init(mraa)
|
upm_module_init(mraa)
|
||||||
|
@ -198,6 +198,28 @@ MAG3110::sampleData(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<float> MAG3110::getMagnetometer()
|
||||||
|
{
|
||||||
|
uint8_t buf[7];
|
||||||
|
int re = 0;
|
||||||
|
|
||||||
|
re = m_i2ControlCtx.readBytesReg(MAG3110_DR_STATUS, buf, 7);
|
||||||
|
if (re != 7) {
|
||||||
|
/* did not read enough bytes */
|
||||||
|
return {-1, -1, -1};
|
||||||
|
}
|
||||||
|
|
||||||
|
s_data->status = buf[0];
|
||||||
|
s_data->x = ((int16_t)buf[1] << 8) | buf[2];
|
||||||
|
s_data->y = ((int16_t)buf[3] << 8) | buf[4];
|
||||||
|
s_data->z = ((int16_t)buf[5] << 8) | buf[6];
|
||||||
|
|
||||||
|
s_data->dtemp = m_i2ControlCtx.readReg(MAG3110_DIE_TEMP);
|
||||||
|
|
||||||
|
return {(float)s_data->x, (float)s_data->y, (float)s_data->z};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int16_t
|
int16_t
|
||||||
MAG3110::getX(int bSampleData)
|
MAG3110::getX(int bSampleData)
|
||||||
{
|
{
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <interfaces/iMagnetometer.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <mraa/i2c.hpp>
|
#include <mraa/i2c.hpp>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@ -162,7 +164,7 @@ typedef struct {
|
|||||||
*
|
*
|
||||||
* @snippet mag3110.cxx Interesting
|
* @snippet mag3110.cxx Interesting
|
||||||
*/
|
*/
|
||||||
class MAG3110 {
|
class MAG3110: virtual public iMagnetometer {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -183,6 +185,16 @@ class MAG3110 {
|
|||||||
*/
|
*/
|
||||||
int checkID(void);
|
int checkID(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return magnetometer data in micro-Teslas (uT) in the form
|
||||||
|
* of a floating point vector. update() must have been called
|
||||||
|
* prior to calling this method.
|
||||||
|
*
|
||||||
|
* @return A floating point vector containing x, y, and z in
|
||||||
|
* that order.
|
||||||
|
*/
|
||||||
|
std::vector<float> getMagnetometer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set user offset correction
|
* Set user offset correction
|
||||||
* Offset correction register will be erased after accelerometer reset
|
* Offset correction register will be erased after accelerometer reset
|
||||||
|
@ -2,5 +2,5 @@ set (libname "mpu9150")
|
|||||||
set (libdescription "IMU Sensor Library Based On the Mpu9150")
|
set (libdescription "IMU Sensor Library Based On the Mpu9150")
|
||||||
set (module_src ${libname}.cxx ak8975.cxx mpu60x0.cxx mpu9250.cxx)
|
set (module_src ${libname}.cxx ak8975.cxx mpu60x0.cxx mpu9250.cxx)
|
||||||
set (module_hpp ${libname}.hpp ak8975.hpp mpu60x0.hpp mpu9250.hpp)
|
set (module_hpp ${libname}.hpp ak8975.hpp mpu60x0.hpp mpu9250.hpp)
|
||||||
set (module_iface iAcceleration.hpp iGyroscope.hpp)
|
set (module_iface iAcceleration.hpp iGyroscope.hpp iMagnetometer.hpp iTemperature.hpp)
|
||||||
upm_module_init(mraa)
|
upm_module_init(mraa)
|
||||||
|
@ -237,3 +237,11 @@ void AK8975::getMagnetometer(float *x, float *y, float *z)
|
|||||||
*z = adjustValue(m_zData, m_zCoeff);
|
*z = adjustValue(m_zData, m_zCoeff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<float> AK8975::getMagnetometer()
|
||||||
|
{
|
||||||
|
std::vector<float> v(3);
|
||||||
|
v[0] = adjustValue(m_xData, m_xCoeff);
|
||||||
|
v[0] = adjustValue(m_yData, m_yCoeff);
|
||||||
|
v[0] = adjustValue(m_zData, m_zCoeff);
|
||||||
|
return v;
|
||||||
|
}
|
@ -27,6 +27,8 @@
|
|||||||
#include <mraa/common.hpp>
|
#include <mraa/common.hpp>
|
||||||
#include <mraa/i2c.hpp>
|
#include <mraa/i2c.hpp>
|
||||||
|
|
||||||
|
#include <interfaces/iMagnetometer.hpp>
|
||||||
|
|
||||||
#define AK8975_I2C_BUS 0
|
#define AK8975_I2C_BUS 0
|
||||||
#define AK8975_DEFAULT_I2C_ADDR 0x0c
|
#define AK8975_DEFAULT_I2C_ADDR 0x0c
|
||||||
|
|
||||||
@ -50,7 +52,7 @@ namespace upm {
|
|||||||
*
|
*
|
||||||
* @snippet mpu9150-ak8975.cxx Interesting
|
* @snippet mpu9150-ak8975.cxx Interesting
|
||||||
*/
|
*/
|
||||||
class AK8975 {
|
class AK8975: virtual public iMagnetometer {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -202,6 +204,16 @@ namespace upm {
|
|||||||
*/
|
*/
|
||||||
void getMagnetometer(float *x, float *y, float *z);
|
void getMagnetometer(float *x, float *y, float *z);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return magnetometer data in micro-Teslas (uT) in the form
|
||||||
|
* of a floating point vector. update() must have been called
|
||||||
|
* prior to calling this method.
|
||||||
|
*
|
||||||
|
* @return A floating point vector containing x, y, and z in
|
||||||
|
* that order.
|
||||||
|
*/
|
||||||
|
std::vector<float> getMagnetometer();
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include <interfaces/iAcceleration.hpp>
|
#include <interfaces/iAcceleration.hpp>
|
||||||
#include <interfaces/iGyroscope.hpp>
|
#include <interfaces/iGyroscope.hpp>
|
||||||
|
#include <interfaces/iTemperature.hpp>
|
||||||
|
|
||||||
#define MPU60X0_I2C_BUS 0
|
#define MPU60X0_I2C_BUS 0
|
||||||
#define MPU60X0_DEFAULT_I2C_ADDR 0x68
|
#define MPU60X0_DEFAULT_I2C_ADDR 0x68
|
||||||
|
@ -112,6 +112,6 @@ void MPU9150::getMagnetometer(float *x, float *y, float *z)
|
|||||||
std::vector<float> MPU9150::getMagnetometer()
|
std::vector<float> MPU9150::getMagnetometer()
|
||||||
{
|
{
|
||||||
std::vector<float> v(3);
|
std::vector<float> v(3);
|
||||||
getMagnetometer(&v[0], &v[1], &v[2]);
|
m_mag->getMagnetometer(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ namespace upm {
|
|||||||
* @snippet mpu9150.cxx Interesting
|
* @snippet mpu9150.cxx Interesting
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class MPU9150: public MPU60X0
|
class MPU9150: public MPU60X0, virtual public iMagnetometer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user