mirror of
				https://github.com/eclipse/upm.git
				synced 2025-10-31 15:15:07 +03:00 
			
		
		
		
	Added iGyroscope interface
Signed-off-by: Serban Waltter <serban.waltter@rinftech.com>
This commit is contained in:
		| @@ -23,6 +23,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import upm_bmg160.BMG160; | import upm_bmg160.BMG160; | ||||||
|  | import upm_interfaces.*; | ||||||
| import java.util.AbstractList; | import java.util.AbstractList; | ||||||
| import java.lang.Float; | import java.lang.Float; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,6 +22,9 @@ | |||||||
|  * 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 java.util.AbstractList; | ||||||
|  | import upm_interfaces.*; | ||||||
|  |  | ||||||
| import upm_bmi160.BMI160; | import upm_bmi160.BMI160; | ||||||
|  |  | ||||||
| public class BMI160_Example | public class BMI160_Example | ||||||
| @@ -39,25 +42,25 @@ public class BMI160_Example | |||||||
|                 // update our values from the sensor |                 // update our values from the sensor | ||||||
|                 sensor.update(); |                 sensor.update(); | ||||||
|  |  | ||||||
|                 float dataA[] = sensor.getAccelerometer(); |                 AbstractList<Float> dataA = sensor.getAcceleration(); | ||||||
|  |  | ||||||
|                 System.out.println("Accelerometer: " |                 System.out.println("Accelerometer: " | ||||||
|                                    + "AX: " |                                    + "AX: " | ||||||
|                                    + dataA[0] |                                    + dataA.get(0) | ||||||
|                                    + " AY: " |                                    + " AY: " | ||||||
|                                    + dataA[1] |                                    + dataA.get(1) | ||||||
|                                    + " AZ: " |                                    + " AZ: " | ||||||
|                                    + dataA[2]); |                                    + dataA.get(2)); | ||||||
|  |  | ||||||
|                 float dataG[] = sensor.getGyroscope(); |                 AbstractList<Float> dataG = sensor.getGyroscope(); | ||||||
|  |  | ||||||
|                 System.out.println("Gryoscope:     " |                 System.out.println("Gryoscope:     " | ||||||
|                                    + "GX: " |                                    + "GX: " | ||||||
|                                    + dataG[0] |                                    + dataG.get(0) | ||||||
|                                    + " GY: " |                                    + " GY: " | ||||||
|                                    + dataG[1] |                                    + dataG.get(1) | ||||||
|                                    + " GZ: " |                                    + " GZ: " | ||||||
|                                    + dataG[2]); |                                    + dataG.get(2)); | ||||||
|  |  | ||||||
|                 float dataM[] = sensor.getMagnetometer(); |                 float dataM[] = sensor.getMagnetometer(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -79,7 +79,7 @@ add_example(BISS0001_Example "biss0001;interfaces") | |||||||
| add_example(BMA250E_Example "bma250e;interfaces") | add_example(BMA250E_Example "bma250e;interfaces") | ||||||
| add_example(BMC150_Example "bmx055;interfaces") | add_example(BMC150_Example "bmx055;interfaces") | ||||||
| add_example(BME280_Example "bmp280;interfaces") | add_example(BME280_Example "bmp280;interfaces") | ||||||
| add_example(BMG160_Example bmg160) | 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) | ||||||
| @@ -139,7 +139,7 @@ add_example(Hmc5883l_Example hmc5883l) | |||||||
| add_example(HMTRP_Example hmtrp) | add_example(HMTRP_Example hmtrp) | ||||||
| add_example(HP20x_Example "hp20x;interfaces") | add_example(HP20x_Example "hp20x;interfaces") | ||||||
| add_example(HTU21D_Example "htu21d;interfaces") | add_example(HTU21D_Example "htu21d;interfaces") | ||||||
| add_example(Itg3200_Example itg3200) | add_example(Itg3200_Example "itg3200;interfaces") | ||||||
| add_example(Jhd1313m1_Example jhd1313m1) | add_example(Jhd1313m1_Example jhd1313m1) | ||||||
| add_example(Jhd1313m1_lcd_Example jhd1313m1) | add_example(Jhd1313m1_lcd_Example jhd1313m1) | ||||||
| add_example(Joystick12_Example joystick12) | add_example(Joystick12_Example joystick12) | ||||||
|   | |||||||
							
								
								
									
										48
									
								
								include/interfaces/iGyroscope.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								include/interfaces/iGyroscope.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 iGyroscope | ||||||
|  |     { | ||||||
|  |         public: | ||||||
|  |             virtual ~iGyroscope() {} | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              * Return gyroscope data in degrees per second in the form of | ||||||
|  |              * a floating point vector. | ||||||
|  |              * | ||||||
|  |              * @return A floating point vector containing x, y, and z in | ||||||
|  |              * that order in degrees/second. | ||||||
|  |              */ | ||||||
|  |             virtual std::vector<float> getGyroscope() = 0; | ||||||
|  |     }; | ||||||
|  | } // upm | ||||||
| @@ -9,6 +9,7 @@ | |||||||
| #include "iElectromagnet.hpp" | #include "iElectromagnet.hpp" | ||||||
| #include "iEmg.hpp" | #include "iEmg.hpp" | ||||||
| #include "iGps.hpp" | #include "iGps.hpp" | ||||||
|  | #include "iGyroscope.hpp" | ||||||
| #include "iHallEffect.hpp" | #include "iHallEffect.hpp" | ||||||
| #include "iHeartRate.hpp" | #include "iHeartRate.hpp" | ||||||
| #include "iHumidity.hpp" | #include "iHumidity.hpp" | ||||||
|   | |||||||
| @@ -50,6 +50,7 @@ import java.lang.Float; | |||||||
|     %interface_impl (upm::iElectromagnet); |     %interface_impl (upm::iElectromagnet); | ||||||
|     %interface_impl (upm::iEmg); |     %interface_impl (upm::iEmg); | ||||||
|     %interface_impl (upm::iGps); |     %interface_impl (upm::iGps); | ||||||
|  |     %interface_impl (upm::iGyroscope); | ||||||
|     %interface_impl (upm::iHallEffect); |     %interface_impl (upm::iHallEffect); | ||||||
|     %interface_impl (upm::iHeartRate); |     %interface_impl (upm::iHeartRate); | ||||||
|     %interface_impl (upm::iHumidity); |     %interface_impl (upm::iHumidity); | ||||||
| @@ -78,6 +79,7 @@ import java.lang.Float; | |||||||
|     #include "iElectromagnet.hpp" |     #include "iElectromagnet.hpp" | ||||||
|     #include "iEmg.hpp" |     #include "iEmg.hpp" | ||||||
|     #include "iGps.hpp" |     #include "iGps.hpp" | ||||||
|  |     #include "iGyroscope.hpp" | ||||||
|     #include "iHallEffect.hpp" |     #include "iHallEffect.hpp" | ||||||
|     #include "iHeartRate.hpp" |     #include "iHeartRate.hpp" | ||||||
|     #include "iHumidity.hpp" |     #include "iHumidity.hpp" | ||||||
| @@ -105,6 +107,7 @@ import java.lang.Float; | |||||||
| %include "iElectromagnet.hpp" | %include "iElectromagnet.hpp" | ||||||
| %include "iEmg.hpp" | %include "iEmg.hpp" | ||||||
| %include "iGps.hpp" | %include "iGps.hpp" | ||||||
|  | %include "iGyroscope.hpp" | ||||||
| %include "iHallEffect.hpp" | %include "iHallEffect.hpp" | ||||||
| %include "iHeartRate.hpp" | %include "iHeartRate.hpp" | ||||||
| %include "iHumidity.hpp" | %include "iHumidity.hpp" | ||||||
|   | |||||||
| @@ -267,10 +267,13 @@ 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") | ||||||
|  |             list (FIND module_iface "iGyroscope.hpp" _index) | ||||||
|  |           elseif(${_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() | ||||||
|         else() |         else() | ||||||
|           cmake_policy(SET CMP0057 NEW) |           cmake_policy(SET CMP0057 NEW) | ||||||
|           if ("iAcceleration.hpp" IN_LIST module_iface) |           if (("iAcceleration.hpp" IN_LIST module_iface) OR ("iGyroscope.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() | ||||||
|   | |||||||
| @@ -2,4 +2,5 @@ set (libname "adxrs610") | |||||||
| set (libdescription "Gyro Breakout Board (300 Degrees/second)") | set (libdescription "Gyro Breakout Board (300 Degrees/second)") | ||||||
| set (module_src ${libname}.cxx) | set (module_src ${libname}.cxx) | ||||||
| set (module_hpp ${libname}.hpp) | set (module_hpp ${libname}.hpp) | ||||||
|  | set (module_iface iGyroscope.hpp iTemperature.hpp) | ||||||
| upm_module_init(mraa) | upm_module_init(mraa) | ||||||
|   | |||||||
| @@ -97,3 +97,24 @@ float ADXRS610::getAngularVelocity() | |||||||
|   else |   else | ||||||
|     return -((m_zeroPoint - dataV) / m_degreeCoeff); |     return -((m_zeroPoint - dataV) / m_degreeCoeff); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | std::vector<float> ADXRS610::getGyroscope() | ||||||
|  | { | ||||||
|  |   float dataV = getDataVolts(); | ||||||
|  |  | ||||||
|  |   // check the deadband | ||||||
|  |   if (dataV < (m_zeroPoint + m_deadband) && | ||||||
|  |       dataV > (m_zeroPoint - m_deadband)) | ||||||
|  |     return std::vector<float>{0 ,0 ,0}; | ||||||
|  |    | ||||||
|  |   if (dataV > m_zeroPoint) | ||||||
|  |   { | ||||||
|  |     float v = ((dataV - m_zeroPoint) / m_degreeCoeff); | ||||||
|  |     return std::vector<float>{0 ,0 , v}; | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     float v = -((m_zeroPoint - dataV) / m_degreeCoeff); | ||||||
|  |     return std::vector<float>{0 ,0 , v}; | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -27,6 +27,9 @@ | |||||||
| #include <string> | #include <string> | ||||||
| #include <mraa/aio.hpp> | #include <mraa/aio.hpp> | ||||||
|  |  | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  | #include <interfaces/iTemperature.hpp> | ||||||
|  |  | ||||||
| // volts per degree / second (typ) | // volts per degree / second (typ) | ||||||
| #define m_degreeCoeff 0.006 | #define m_degreeCoeff 0.006 | ||||||
|  |  | ||||||
| @@ -69,7 +72,7 @@ namespace upm { | |||||||
|    * @snippet adxrs610.cxx Interesting |    * @snippet adxrs610.cxx Interesting | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
|   class ADXRS610 { |   class ADXRS610: virtual public iGyroscope, virtual public iTemperature { | ||||||
|   public: |   public: | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -84,7 +87,7 @@ namespace upm { | |||||||
|     /** |     /** | ||||||
|      * ADXRS610 destructor |      * ADXRS610 destructor | ||||||
|      */ |      */ | ||||||
|     ~ADXRS610(); |     virtual ~ADXRS610(); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Returns the voltage detected on the DATA analog pin |      * Returns the voltage detected on the DATA analog pin | ||||||
| @@ -153,6 +156,16 @@ namespace upm { | |||||||
|      */ |      */ | ||||||
|     float getAngularVelocity(); |     float getAngularVelocity(); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Return gyroscope data in degrees per second 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> getGyroscope(); | ||||||
|  |  | ||||||
|   protected: |   protected: | ||||||
|     mraa::Aio m_aioData; |     mraa::Aio m_aioData; | ||||||
|     mraa::Aio m_aioTemp; |     mraa::Aio m_aioTemp; | ||||||
|   | |||||||
| @@ -5,5 +5,6 @@ upm_mixed_module_init (NAME bmg160 | |||||||
|     CPP_HDR bmg160.hpp |     CPP_HDR bmg160.hpp | ||||||
|     CPP_SRC bmg160.cxx |     CPP_SRC bmg160.cxx | ||||||
|     FTI_SRC bmg160_fti.c |     FTI_SRC bmg160_fti.c | ||||||
|  |     IFACE_HDR iGyroscope.hpp | ||||||
|     CPP_WRAPS_C |     CPP_WRAPS_C | ||||||
|     REQUIRES mraa utilities-c) |     REQUIRES mraa utilities-c) | ||||||
|   | |||||||
| @@ -108,6 +108,7 @@ void BMG160::getGyroscope(float *x, float *y, float *z) | |||||||
|  |  | ||||||
| std::vector<float> BMG160::getGyroscope() | std::vector<float> BMG160::getGyroscope() | ||||||
| { | { | ||||||
|  |     update(); | ||||||
|     float v[3]; |     float v[3]; | ||||||
|  |  | ||||||
|     getGyroscope(&v[0], &v[1], &v[2]); |     getGyroscope(&v[0], &v[1], &v[2]); | ||||||
|   | |||||||
| @@ -31,6 +31,8 @@ | |||||||
| #include <mraa/gpio.hpp> | #include <mraa/gpio.hpp> | ||||||
| #include "bmg160.h" | #include "bmg160.h" | ||||||
|  |  | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| namespace upm { | namespace upm { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -71,7 +73,7 @@ namespace upm { | |||||||
|      * @snippet bmg160.cxx Interesting |      * @snippet bmg160.cxx Interesting | ||||||
|      */ |      */ | ||||||
|  |  | ||||||
|     class BMG160 { |     class BMG160: virtual public iGyroscope { | ||||||
|     public: |     public: | ||||||
|         /** |         /** | ||||||
|          * BMG160 constructor. |          * BMG160 constructor. | ||||||
|   | |||||||
| @@ -1,26 +1,22 @@ | |||||||
|  | #ifdef SWIGPYTHON | ||||||
|  | %module (package="upm") a110x | ||||||
|  | #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 installISR (BMG160_INTERRUPT_PINS_T , int   mraa::Edge ,  void *, void *); |  | ||||||
| %ignore getGyroscope(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; | ||||||
| %} | %} | ||||||
|  |  | ||||||
| %typemap(javaout) SWIGTYPE { | %ignore installISR (BMG160_INTERRUPT_PINS_T , int   mraa::Edge ,  void *, void *); | ||||||
|     return new $&javaclassname($jnicall, true); | %ignore getGyroscope(float *, float *, float *); | ||||||
| } |  | ||||||
| %typemap(javaout) std::vector<float> { |  | ||||||
|     return (AbstractList<Float>)(new $&javaclassname($jnicall, true)); |  | ||||||
| } |  | ||||||
| %typemap(jstype) std::vector<float> "AbstractList<Float>" |  | ||||||
|  |  | ||||||
| %template(floatVector) std::vector<float>; |  | ||||||
|  |  | ||||||
| %define INTERRUPT BMG160_INTERRUPT_PINS_T | %define INTERRUPT BMG160_INTERRUPT_PINS_T | ||||||
| %enddef | %enddef | ||||||
|   | |||||||
| @@ -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 |     IFACE_HDR iAcceleration.hpp iGyroscope.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) | ||||||
|   | |||||||
| @@ -92,13 +92,13 @@ std::vector<float> BMI160::getAcceleration() | |||||||
|     return v; |     return v; | ||||||
| } | } | ||||||
|  |  | ||||||
| float *BMI160::getGyroscope() | std::vector<float> BMI160::getGyroscope() | ||||||
| { | { | ||||||
|   static float values[3]; // x, y, and then z |   static float values[3]; // x, y, and then z | ||||||
|  |  | ||||||
|   getGyroscope(&values[0], &values[1], &values[2]); |   getGyroscope(&values[0], &values[1], &values[2]); | ||||||
|  |  | ||||||
|   return values; |   return std::vector<float>(values, values + 3); | ||||||
| } | } | ||||||
|  |  | ||||||
| float *BMI160::getMagnetometer() | float *BMI160::getMagnetometer() | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ | |||||||
| #include "bmi160.h" | #include "bmi160.h" | ||||||
|  |  | ||||||
| #include <interfaces/iAcceleration.hpp> | #include <interfaces/iAcceleration.hpp> | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| #define BMI160_I2C_BUS 0 | #define BMI160_I2C_BUS 0 | ||||||
| #define BMI160_DEFAULT_I2C_ADDR 0x69 | #define BMI160_DEFAULT_I2C_ADDR 0x69 | ||||||
| @@ -74,7 +75,7 @@ namespace upm { | |||||||
|      * |      * | ||||||
|      * @snippet bmi160.cxx Interesting |      * @snippet bmi160.cxx Interesting | ||||||
|      */ |      */ | ||||||
|     class BMI160: virtual public iAcceleration { |     class BMI160: virtual public iAcceleration, virtual public iGyroscope { | ||||||
|     public: |     public: | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
| @@ -162,7 +163,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 | ||||||
|          * degrees per second. |          * degrees per second. | ||||||
|          */ |          */ | ||||||
|         float *getGyroscope(); |         virtual std::vector<float> getGyroscope(); | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * Get the Gyroscope values.  The values returned are in degrees |          * Get the Gyroscope values.  The values returned are in degrees | ||||||
|   | |||||||
| @@ -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 |     IFACE_HDR iAcceleration.hpp iGyroscope.hpp | ||||||
|     REQUIRES mraa bmg160 bma250e bmm150) |     REQUIRES mraa bmg160 bma250e bmm150) | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ | |||||||
| #include "bmg160.hpp" | #include "bmg160.hpp" | ||||||
|  |  | ||||||
| #include <interfaces/iAcceleration.hpp> | #include <interfaces/iAcceleration.hpp> | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| namespace upm { | namespace upm { | ||||||
|  |  | ||||||
| @@ -66,7 +67,7 @@ namespace upm { | |||||||
|      * @snippet bmx055-bmi055.cxx Interesting |      * @snippet bmx055-bmi055.cxx Interesting | ||||||
|      */ |      */ | ||||||
|  |  | ||||||
|     class BMI055: virtual public iAcceleration { |     class BMI055: virtual public iAcceleration, virtual public iGyroscope { | ||||||
|     public: |     public: | ||||||
|         /** |         /** | ||||||
|          * BMI055 constructor. |          * BMI055 constructor. | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ | |||||||
| #include "bmm150.hpp" | #include "bmm150.hpp" | ||||||
|  |  | ||||||
| #include <interfaces/iAcceleration.hpp> | #include <interfaces/iAcceleration.hpp> | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| #define BMX055_DEFAULT_MAG_I2C_ADDR 0x12 | #define BMX055_DEFAULT_MAG_I2C_ADDR 0x12 | ||||||
|  |  | ||||||
| @@ -78,7 +79,7 @@ namespace upm { | |||||||
|    * @snippet bmx055.cxx Interesting |    * @snippet bmx055.cxx Interesting | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
|     class BMX055: virtual public iAcceleration { |     class BMX055: virtual public iAcceleration, virtual public iGyroscope { | ||||||
|     public: |     public: | ||||||
|         /** |         /** | ||||||
|          * BMX055 constructor. |          * BMX055 constructor. | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ | |||||||
| #include "bno055.h" | #include "bno055.h" | ||||||
|  |  | ||||||
| #include <interfaces/iAcceleration.hpp> | #include <interfaces/iAcceleration.hpp> | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| namespace upm { | namespace upm { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,4 +2,5 @@ set (libname "itg3200") | |||||||
| set (libdescription "3-axis Digital Gyroscope") | set (libdescription "3-axis Digital Gyroscope") | ||||||
| set (module_src ${libname}.cxx) | set (module_src ${libname}.cxx) | ||||||
| set (module_hpp ${libname}.hpp) | set (module_hpp ${libname}.hpp) | ||||||
|  | set (module_iface iGyroscope.hpp) | ||||||
| upm_module_init(mraa) | upm_module_init(mraa) | ||||||
|   | |||||||
| @@ -114,6 +114,14 @@ Itg3200::getRotation() | |||||||
|     return &m_angle[0]; |     return &m_angle[0]; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | std::vector<float> Itg3200::getGyroscope() | ||||||
|  | { | ||||||
|  |     for(int i = 0; i < 3; i++){ | ||||||
|  |         m_angle[i] = m_rotation[i]/14.375; | ||||||
|  |     } | ||||||
|  |     return std::vector<float>(m_angle, m_angle + 3); | ||||||
|  | } | ||||||
|  |  | ||||||
| int16_t* | int16_t* | ||||||
| Itg3200::getRawValues() | Itg3200::getRawValues() | ||||||
| { | { | ||||||
|   | |||||||
| @@ -25,6 +25,8 @@ | |||||||
|  |  | ||||||
| #include <mraa/i2c.hpp> | #include <mraa/i2c.hpp> | ||||||
|  |  | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| #define READ_BUFFER_LENGTH 8 | #define READ_BUFFER_LENGTH 8 | ||||||
|  |  | ||||||
| namespace upm { | namespace upm { | ||||||
| @@ -56,7 +58,7 @@ namespace upm { | |||||||
|  * @image html itg3200.jpeg |  * @image html itg3200.jpeg | ||||||
|  * @snippet itg3200.cxx Interesting |  * @snippet itg3200.cxx Interesting | ||||||
|  */ |  */ | ||||||
| class Itg3200 { | class Itg3200: virtual public iGyroscope { | ||||||
| public: | public: | ||||||
|     /** |     /** | ||||||
|      * Creates an Itg3200 object |      * Creates an Itg3200 object | ||||||
| @@ -86,6 +88,16 @@ public: | |||||||
|      */ |      */ | ||||||
|     float* getRotation(); |     float* getRotation(); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Return gyroscope data in degrees per second 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> getGyroscope(); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Returns a pointer to an int[3] that contains raw register values for X, Y, and Z |      * Returns a pointer to an int[3] that contains raw register values for X, Y, and Z | ||||||
|      * |      * | ||||||
|   | |||||||
| @@ -1,7 +1,20 @@ | |||||||
|  | #ifdef SWIGPYTHON | ||||||
|  | %module (package="upm") a110x | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | %import "interfaces/interfaces.i" | ||||||
|  |  | ||||||
| %include "../common_top.i" | %include "../common_top.i" | ||||||
|  |  | ||||||
| /* BEGIN Java syntax  ------------------------------------------------------- */ | /* BEGIN Java syntax  ------------------------------------------------------- */ | ||||||
| #ifdef SWIGJAVA | #ifdef SWIGJAVA | ||||||
|  | %typemap(javaimports) SWIGTYPE %{ | ||||||
|  | import upm_interfaces.*; | ||||||
|  |  | ||||||
|  | import java.util.AbstractList; | ||||||
|  | import java.lang.Float; | ||||||
|  | %} | ||||||
|  |  | ||||||
| %typemap(jni) float* "jfloatArray" | %typemap(jni) float* "jfloatArray" | ||||||
| %typemap(jstype) float* "float[]" | %typemap(jstype) float* "float[]" | ||||||
| %typemap(jtype) float* "float[]" | %typemap(jtype) float* "float[]" | ||||||
|   | |||||||
| @@ -3,5 +3,6 @@ if (MRAA_IIO_FOUND) | |||||||
|     set (libdescription "Tri-axis Digital Gyroscope") |     set (libdescription "Tri-axis Digital Gyroscope") | ||||||
|     set (module_src ${libname}.cxx) |     set (module_src ${libname}.cxx) | ||||||
|     set (module_hpp ${libname}.hpp) |     set (module_hpp ${libname}.hpp) | ||||||
|  |     set (module_iface iGyroscope.hpp) | ||||||
|     upm_module_init(mraa) |     upm_module_init(mraa) | ||||||
| endif (MRAA_IIO_FOUND) | endif (MRAA_IIO_FOUND) | ||||||
|   | |||||||
| @@ -273,6 +273,16 @@ void L3GD20::getGyroscope(float *x, float *y, float *z) | |||||||
|     *z = m_gyrZ; |     *z = m_gyrZ; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | std::vector<float> L3GD20::getGyroscope() | ||||||
|  | { | ||||||
|  |     update(); | ||||||
|  |     std::vector<float> values(3); | ||||||
|  |     values[0] = m_gyrX; | ||||||
|  |     values[1] = m_gyrY; | ||||||
|  |     values[2] = m_gyrZ; | ||||||
|  |     return values; | ||||||
|  | } | ||||||
|  |  | ||||||
| void L3GD20::update() | void L3GD20::update() | ||||||
| { | { | ||||||
|   int bufLen = 6; |   int bufLen = 6; | ||||||
|   | |||||||
| @@ -31,6 +31,8 @@ | |||||||
| #include <mraa/iio.h> | #include <mraa/iio.h> | ||||||
| #include <mraa/i2c.hpp> | #include <mraa/i2c.hpp> | ||||||
|  |  | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| #define L3GD20_DEFAULT_I2C_BUS                      0 | #define L3GD20_DEFAULT_I2C_BUS                      0 | ||||||
| // if SDO tied to GND | // if SDO tied to GND | ||||||
| #define L3GD20_DEFAULT_I2C_ADDR                     0x6a | #define L3GD20_DEFAULT_I2C_ADDR                     0x6a | ||||||
| @@ -74,7 +76,7 @@ namespace upm | |||||||
|  * @snippet l3gd20-i2c.cxx Interesting |  * @snippet l3gd20-i2c.cxx Interesting | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| class L3GD20 | class L3GD20: virtual public iGyroscope | ||||||
| { | { | ||||||
|   public: |   public: | ||||||
|     typedef struct { |     typedef struct { | ||||||
| @@ -479,6 +481,16 @@ class L3GD20 | |||||||
|      */ |      */ | ||||||
|     void getGyroscope(float *x, float *y, float *z); |     void getGyroscope(float *x, float *y, float *z); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Return gyroscope data in degrees per second 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> getGyroscope(); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Set the power mode of the device.  I2C only. |      * Set the power mode of the device.  I2C only. | ||||||
|      * |      * | ||||||
|   | |||||||
| @@ -5,6 +5,6 @@ upm_mixed_module_init (NAME lsm6ds3h | |||||||
|     CPP_HDR lsm6ds3h.hpp |     CPP_HDR lsm6ds3h.hpp | ||||||
|     CPP_SRC lsm6ds3h.cxx |     CPP_SRC lsm6ds3h.cxx | ||||||
|     FTI_SRC lsm6ds3h_fti.c |     FTI_SRC lsm6ds3h_fti.c | ||||||
|     IFACE_HDR iAcceleration.hpp |     IFACE_HDR iAcceleration.hpp iGyroscope.hpp | ||||||
|     CPP_WRAPS_C |     CPP_WRAPS_C | ||||||
|     REQUIRES mraa utilities-c) |     REQUIRES mraa utilities-c) | ||||||
|   | |||||||
| @@ -124,6 +124,7 @@ void LSM6DS3H::getGyroscope(float *x, float *y, float *z) | |||||||
|  |  | ||||||
| std::vector<float> LSM6DS3H::getGyroscope() | std::vector<float> LSM6DS3H::getGyroscope() | ||||||
| { | { | ||||||
|  |     update(); | ||||||
|     float v[3]; |     float v[3]; | ||||||
|  |  | ||||||
|     getGyroscope(&v[0], &v[1], &v[2]); |     getGyroscope(&v[0], &v[1], &v[2]); | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ | |||||||
| #include "lsm6ds3h.h" | #include "lsm6ds3h.h" | ||||||
|  |  | ||||||
| #include <interfaces/iAcceleration.hpp> | #include <interfaces/iAcceleration.hpp> | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| namespace upm { | namespace upm { | ||||||
|  |  | ||||||
| @@ -66,7 +67,7 @@ namespace upm { | |||||||
|      * @snippet lsm6ds3h.cxx Interesting |      * @snippet lsm6ds3h.cxx Interesting | ||||||
|      */ |      */ | ||||||
|  |  | ||||||
|     class LSM6DS3H: virtual public iAcceleration { |     class LSM6DS3H: virtual public iAcceleration, virtual public iGyroscope { | ||||||
|     public: |     public: | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ upm_mixed_module_init (NAME lsm6dsl | |||||||
|     C_SRC lsm6dsl.c |     C_SRC lsm6dsl.c | ||||||
|     CPP_HDR lsm6dsl.hpp |     CPP_HDR lsm6dsl.hpp | ||||||
|     CPP_SRC lsm6dsl.cxx |     CPP_SRC lsm6dsl.cxx | ||||||
|     IFACE_HDR iAcceleration.hpp |     IFACE_HDR iAcceleration.hpp iGyroscope.hpp | ||||||
|     FTI_SRC lsm6dsl_fti.c |     FTI_SRC lsm6dsl_fti.c | ||||||
|     CPP_WRAPS_C |     CPP_WRAPS_C | ||||||
|     REQUIRES mraa utilities-c) |     REQUIRES mraa utilities-c) | ||||||
|   | |||||||
| @@ -125,6 +125,7 @@ void LSM6DSL::getGyroscope(float *x, float *y, float *z) | |||||||
|  |  | ||||||
| std::vector<float> LSM6DSL::getGyroscope() | std::vector<float> LSM6DSL::getGyroscope() | ||||||
| { | { | ||||||
|  |     update(); | ||||||
|     float v[3]; |     float v[3]; | ||||||
|  |  | ||||||
|     getGyroscope(&v[0], &v[1], &v[2]); |     getGyroscope(&v[0], &v[1], &v[2]); | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ | |||||||
| #include "lsm6dsl.h" | #include "lsm6dsl.h" | ||||||
|  |  | ||||||
| #include <interfaces/iAcceleration.hpp> | #include <interfaces/iAcceleration.hpp> | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| namespace upm { | namespace upm { | ||||||
|  |  | ||||||
| @@ -65,7 +66,7 @@ namespace upm { | |||||||
|      * @snippet lsm6dsl.cxx Interesting |      * @snippet lsm6dsl.cxx Interesting | ||||||
|      */ |      */ | ||||||
|  |  | ||||||
|     class LSM6DSL: virtual public iAcceleration { |     class LSM6DSL: virtual public iAcceleration, virtual public iGyroscope { | ||||||
|     public: |     public: | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|   | |||||||
| @@ -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) | set (module_iface iAcceleration.hpp iGyroscope.hpp) | ||||||
| upm_module_init(mraa) | upm_module_init(mraa) | ||||||
|   | |||||||
| @@ -31,6 +31,7 @@ | |||||||
| #include <mraa/gpio.hpp> | #include <mraa/gpio.hpp> | ||||||
|  |  | ||||||
| #include <interfaces/iAcceleration.hpp> | #include <interfaces/iAcceleration.hpp> | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| #define LSM9DS0_I2C_BUS 1 | #define LSM9DS0_I2C_BUS 1 | ||||||
| #define LSM9DS0_DEFAULT_XM_ADDR 0x1d | #define LSM9DS0_DEFAULT_XM_ADDR 0x1d | ||||||
| @@ -79,7 +80,7 @@ namespace upm { | |||||||
|    * @snippet lsm9ds0.cxx Interesting |    * @snippet lsm9ds0.cxx Interesting | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
|   class LSM9DS0: virtual public iAcceleration { |   class LSM9DS0: virtual public iAcceleration, virtual public iGyroscope { | ||||||
|   public: |   public: | ||||||
|  |  | ||||||
|     // NOTE: reserved registers must not be written into or permanent |     // NOTE: reserved registers must not be written into or permanent | ||||||
| @@ -1074,7 +1075,7 @@ namespace upm { | |||||||
|     /** |     /** | ||||||
|      * LSM9DS0 Destructor |      * LSM9DS0 Destructor | ||||||
|      */ |      */ | ||||||
|     ~LSM9DS0(); |     virtual ~LSM9DS0(); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * set up initial values and start operation |      * set up initial values and start operation | ||||||
|   | |||||||
| @@ -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) | set (module_iface iAcceleration.hpp iGyroscope.hpp) | ||||||
| upm_module_init(mraa) | upm_module_init(mraa) | ||||||
|   | |||||||
| @@ -325,6 +325,13 @@ void MPU60X0::getGyroscope(float *x, float *y, float *z) | |||||||
|     *z = m_gyroZ / m_gyroScale; |     *z = m_gyroZ / m_gyroScale; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | std::vector<float> MPU60X0::getGyroscope() | ||||||
|  | { | ||||||
|  |   update(); | ||||||
|  |   return std::vector<float> {m_gyroX / m_gyroScale, m_gyroY / m_gyroScale, m_gyroZ / m_gyroScale}; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| float MPU60X0::getTemperature() | float MPU60X0::getTemperature() | ||||||
| { | { | ||||||
|   // this equation is taken from the datasheet |   // this equation is taken from the datasheet | ||||||
|   | |||||||
| @@ -31,6 +31,7 @@ | |||||||
| #include <mraa/gpio.hpp> | #include <mraa/gpio.hpp> | ||||||
|  |  | ||||||
| #include <interfaces/iAcceleration.hpp> | #include <interfaces/iAcceleration.hpp> | ||||||
|  | #include <interfaces/iGyroscope.hpp> | ||||||
|  |  | ||||||
| #define MPU60X0_I2C_BUS 0 | #define MPU60X0_I2C_BUS 0 | ||||||
| #define MPU60X0_DEFAULT_I2C_ADDR 0x68 | #define MPU60X0_DEFAULT_I2C_ADDR 0x68 | ||||||
| @@ -62,7 +63,7 @@ namespace upm { | |||||||
|    * @image html mpu60x0.jpg |    * @image html mpu60x0.jpg | ||||||
|    * @snippet mpu9150-mpu60x0.cxx Interesting |    * @snippet mpu9150-mpu60x0.cxx Interesting | ||||||
|    */ |    */ | ||||||
|   class MPU60X0: virtual public iAcceleration { |   class MPU60X0: virtual public iAcceleration, virtual public iGyroscope { | ||||||
|   public: |   public: | ||||||
|  |  | ||||||
|     // NOTE: These enums were composed from both the mpu6050 and |     // NOTE: These enums were composed from both the mpu6050 and | ||||||
| @@ -811,6 +812,13 @@ namespace upm { | |||||||
|      */ |      */ | ||||||
|     void getGyroscope(float *x, float *y, float *z); |     void getGyroscope(float *x, float *y, float *z); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * get the gyroscope values in degrees per second | ||||||
|  |      * | ||||||
|  |      * @return std::vector containing X, Y, Z gyroscope values | ||||||
|  |      */ | ||||||
|  |     std::vector<float> getGyroscope(); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * get the temperature value |      * get the temperature value | ||||||
|      * |      * | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Serban Waltter
					Serban Waltter