From a43bcfe8d2ed57c93f7ec302b82effd065ba2f92 Mon Sep 17 00:00:00 2001 From: Noel Eck Date: Mon, 26 Feb 2018 14:25:25 -0800 Subject: [PATCH] kx122: Add Java/Javascript/Python examples Implemented a swig interface file for the kx122 and added corresponding swig language examples. Also added an STL vector flavor for getting acceleration values from the kx122. Signed-off-by: Noel Eck --- examples/java/CMakeLists.txt | 2 ++ examples/java/KX122Example.java | 50 ++++++++++++++++++++++++++ examples/javascript/kx122.js | 52 +++++++++++++++++++++++++++ examples/python/kx122.py | 64 +++++++++++++++++++++++++++++++++ src/kx122/kx122.cxx | 8 +++++ src/kx122/kx122.hpp | 9 +++++ src/kx122/kx122.i | 20 +++++++++++ 7 files changed, 205 insertions(+) create mode 100644 examples/java/KX122Example.java create mode 100644 examples/javascript/kx122.js create mode 100755 examples/python/kx122.py create mode 100644 src/kx122/kx122.i diff --git a/examples/java/CMakeLists.txt b/examples/java/CMakeLists.txt index 30b08295..a4fcdddf 100644 --- a/examples/java/CMakeLists.txt +++ b/examples/java/CMakeLists.txt @@ -221,3 +221,5 @@ add_example_with_path(LE910_Example uartat uartat) add_example_with_path(SpeakerPWMSample speaker speaker) add_example_with_path(RN2903_P2P_RX_Example rn2903 rn2903) add_example_with_path(RN2903_P2P_TX_Example rn2903 rn2903) + +add_example(KX122Example kx122) diff --git a/examples/java/KX122Example.java b/examples/java/KX122Example.java new file mode 100644 index 00000000..a4f1c98a --- /dev/null +++ b/examples/java/KX122Example.java @@ -0,0 +1,50 @@ +/* + * Author: Noel Eck + * Copyright (c) 2015 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. + */ + +public class KX122Example { + public static void main(String[] args) throws InterruptedException { + //! [Interesting] + // Instantiate a KX122 + upm_kx122.KX122 kx122 = new upm_kx122.KX122(0, -1, 24); + + // Reset the device + kx122.softwareReset(); + + // Initialize the device + kx122.deviceInit(upm_kx122.KX122_ODR_T.KX122_ODR_50, + upm_kx122.KX122_RES_T.HIGH_RES, + upm_kx122.KX122_RANGE_T.KX122_RANGE_2G); + + // Print the acceleration + while(true){ + upm_kx122.floatVector xyz = kx122.getAccelerationDataVector(); + System.out.println("Acceleration: x = " + xyz.get(0) + + " y = " + xyz.get(1) + + " z = " + xyz.get(2)); + + Thread.sleep(1000); + } + //! [Interesting] + } +} diff --git a/examples/javascript/kx122.js b/examples/javascript/kx122.js new file mode 100644 index 00000000..b61c17ed --- /dev/null +++ b/examples/javascript/kx122.js @@ -0,0 +1,52 @@ +/* +* Author: Noel Eck +* Copyright (c) 2017 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. +*/ + +var kx122 = require("jsupm_kx122"); + +// Instantiate a KX122 +var kx122_sensor = new kx122.KX122(0, -1, 24); + +// Reset the device +kx122_sensor.softwareReset(); + +// Reset the device +kx122_sensor.deviceInit(kx122.KX122_ODR_50, + kx122.HIGH_RES, + kx122.KX122_RANGE_2G); + +var myInterval = setInterval(function() +{ + data = kx122_sensor.getAccelerationDataVector(); + console.log("Acceleration x: " + data.get(0) + + " y: " + data.get(1) + + " z: " + data.get(2)); +}, 1000); + +// When exiting: clear interval and print message +process.on('SIGINT', function() +{ + clearInterval(myInterval); + console.log("Exiting..."); + process.exit(0); +}); diff --git a/examples/python/kx122.py b/examples/python/kx122.py new file mode 100755 index 00000000..b64ef4dc --- /dev/null +++ b/examples/python/kx122.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# Author: Noel Eck +# Copyright (c) 2017 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. + +from __future__ import print_function +import time, sys, signal, atexit +from upm import pyupm_kx122 + + +def main(): + # Instantiate a KX122 + kx122_sensor = pyupm_kx122.KX122(0, -1, 24) + + # Reset the device + kx122_sensor.softwareReset() + + # Initialize the device + kx122_sensor.deviceInit(pyupm_kx122.KX122_ODR_50, + pyupm_kx122.HIGH_RES, + pyupm_kx122.KX122_RANGE_2G) + + # This function stops python from printing a stacktrace when you hit ctrl-C + def SIGINTHandler(signum, frame): + raise SystemExit + + # Exit handler + def exitHandler(): + print("Exiting") + sys.exit(0) + + # Register exit handlers + atexit.register(exitHandler) + signal.signal(signal.SIGINT, SIGINTHandler) + + # Print the acceleration + while True: + [x, y, z] = kx122_sensor.getAccelerationData() + + print ("x: %0.02f, y: %0.02f, z: %0.02f" % (x, y, z)) + + time.sleep(1) + + +if __name__ == '__main__': + main() diff --git a/src/kx122/kx122.cxx b/src/kx122/kx122.cxx index 9cf87f21..f80e68cb 100644 --- a/src/kx122/kx122.cxx +++ b/src/kx122/kx122.cxx @@ -76,6 +76,14 @@ void KX122::getAccelerationData(float *x, float *y, float *z) } } +std::vector KX122::getAccelerationDataVector() +{ + std::vector xyz(3); + getAccelerationData(&xyz[0], &xyz[1], &xyz[2]); + + return xyz; +} + void KX122::softwareReset() { if(kx122_sensor_software_reset(m_kx122)){ diff --git a/src/kx122/kx122.hpp b/src/kx122/kx122.hpp index c3586e13..a4274f67 100644 --- a/src/kx122/kx122.hpp +++ b/src/kx122/kx122.hpp @@ -22,6 +22,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include #include #include "kx122.h" @@ -105,6 +106,14 @@ namespace upm{ */ void getAccelerationData(float *x, float *y, float *z); + /** + Gets converted (m/s^2) accelerometer data from the sensor. + + @return Acceleration vector [X, Y, Z] + @throws std::runtime_error on failure. + */ + std::vector getAccelerationDataVector(); + /** Performs a sensor software reset. The software reset clears the RAM of the sensor and resets all registers to pre-defined values. diff --git a/src/kx122/kx122.i b/src/kx122/kx122.i new file mode 100644 index 00000000..0c1d6712 --- /dev/null +++ b/src/kx122/kx122.i @@ -0,0 +1,20 @@ +%include "../common_top.i" + +/* BEGIN Java syntax ------------------------------------------------------- */ +#ifdef SWIGJAVA +JAVA_JNI_LOADLIBRARY(javaupm_kx122) +#endif +/* END Java syntax */ + +/* BEGIN Common SWIG syntax ------------------------------------------------- */ +%include "std_vector.i" +%template(floatVector) std::vector; + +%apply float *OUTPUT {float *x, float *y, float *z}; + +%{ +#include "kx122.hpp" +%} +%include "kx122.h" +%include "kx122.hpp" +/* END Common SWIG syntax */