mirror of
https://github.com/eclipse/upm.git
synced 2025-03-24 09:20:39 +03:00
SWIGJAVA: Remove the last JAVA ifdefs from src
Removed all references to #ifdef SWIGJAVA and JAVACALLBACK from the library source. All java-specific source code has been moved to the corresponding library's .i file for java. * Update library source * Update examples where necessary * The function pointer methodology has been remove from libraries which provided callbacks as both a class and a function pointer implementation. Examples were updated to use the class version of callbacks. * Updated documentation for SWIGJAVA Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit is contained in:
parent
d49ab2ac95
commit
666452e873
@ -257,30 +257,19 @@ __Callbacks in the UPM Java library are implemented as follows (we use the a110x
|
|||||||
|
|
||||||
We extend the sensor class with another method, _installISR\(jobject runnable\)_, which is a wrapper over the original _installISR\(void \(\*isr\)\(void \*\), void \*arg\)_ method. This will install the _mraa\_java\_isr\_callback\(\)_ method as the interrupt service routine \(ISR\) to be called, with _jobject runnable_ as argument.
|
We extend the sensor class with another method, _installISR\(jobject runnable\)_, which is a wrapper over the original _installISR\(void \(\*isr\)\(void \*\), void \*arg\)_ method. This will install the _mraa\_java\_isr\_callback\(\)_ method as the interrupt service routine \(ISR\) to be called, with _jobject runnable_ as argument.
|
||||||
|
|
||||||
SWIGJAVA is a symbol that is always defined by SWIG when using Java. We enclose the _installISR\(jobject runnable\)_ method in a _\#if defined(SWIGJAVA)_ check, to ensure the code only exists when creating a wrapper for Java.
|
Java callbacks are added at the SWIG interface level. For ease-of-use, a collection of macros are available in src/_upm.i.
|
||||||
|
|
||||||
|
src/a110x/javaupm_a110x.i:
|
||||||
```c++
|
```c++
|
||||||
#if defined(SWIGJAVA)
|
JAVA_ADD_INSTALLISR(upm::A110X)
|
||||||
void A110X::installISR(jobject runnable)
|
|
||||||
{
|
|
||||||
installISR(mraa_java_isr_callback, runnable);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
```
|
```
|
||||||
|
|
||||||
We hide the underlying method, _installISR\(void \(\*isr\)\(void \*\), void \*arg\)_ , and expose only the _installISR\(jobject runnable\)_ to SWIG, through the use of the SWIGJAVA symbol. When SWIGJAVA is defined, we change the access modifier of the underlying method to private.
|
Will expand to the following SWIG wrapper code:
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
public:
|
SWIGINTERN void upm_A110X_installISR__SWIG_1(upm::A110X *self,jobject runnable){
|
||||||
#if defined(SWIGJAVA)
|
self->installISR(mraa_java_isr_callback, runnable);
|
||||||
void installISR(jobject runnable);
|
}
|
||||||
#else
|
|
||||||
void installISR(void (*isr)(void *), void *arg);
|
|
||||||
#endif
|
|
||||||
private:
|
|
||||||
#if defined(SWIGJAVA)
|
|
||||||
void installISR(void (*isr)(void *), void *arg);
|
|
||||||
#endif
|
|
||||||
```
|
```
|
||||||
|
|
||||||
To use callback in java, we create a ISR class, which implements the Java Runnable interface, and we override the _run\(\)_ method with the code to be executed when the interrupt is received. An example for the a110x Hall sensor that increments a counter each time an interrupt is received:
|
To use callback in java, we create a ISR class, which implements the Java Runnable interface, and we override the _run\(\)_ method with the code to be executed when the interrupt is received. An example for the a110x Hall sensor that increments a counter each time an interrupt is received:
|
||||||
@ -311,39 +300,3 @@ class A110XISR implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
#### Issues with java callbacks and workarounds
|
|
||||||
|
|
||||||
__SWIGJAVA not defined at compile time__
|
|
||||||
|
|
||||||
Consider the following files:
|
|
||||||
* example.h - Header file for our source file
|
|
||||||
* example.cxx - Source file containing the class Example, for which we build java bindings
|
|
||||||
* example.i - The SWIG interface, that includes the example.h header file
|
|
||||||
|
|
||||||
The build process of a java module using SWIG is split into two steps:
|
|
||||||
|
|
||||||
1. Generating the intermediate files, from the SWIG interface file. This will produce the java class file (Example.java), the JNI file (exampleJNI.java) and wrapper file (example_wrap.cxx). The source file (example.cxx) is not needed in the first step.
|
|
||||||
```
|
|
||||||
swig -c++ -java example.i
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Generating the shared library from the C++ sources and wrapper file
|
|
||||||
```
|
|
||||||
g++ -fPIC -c example.cxx example_wrap.cxx -I/usr/lib/jvm/java-1.8.0/include -I/usr/lib/jvm/java-1.8.0/include/linux
|
|
||||||
g++ -shared example_wrap.o sensor.o -o libexample.so
|
|
||||||
```
|
|
||||||
|
|
||||||
SWIGJAVA is always defined when SWIG parses the interface file, meaning it will be defined when it parses the header file (example.h) that is included in the interface file (example.i).
|
|
||||||
SWIG also adds the "#define SWIGJAVA" directive in the wrapper file (example_wrap.cxx).
|
|
||||||
However, in generating the shared library the SWIGJAVA symbol is only defined in the example_wrap.cxx file, because of the added "#define SWIGJAVA" directive. But we have also used the "#if defined(SWIGJAVA)" check in the source file (example.cxx), and thus need to define SWIGJAVA for it too. If we define the SWIGJAVA symbol as a compile flag, when compiling the source code to object code, the SWIGJAVA compile flag and #define SWIGJAVA" directive will clash and give a double definition warning (only a warning).
|
|
||||||
|
|
||||||
In this example it is simple to compile the two source codes separately, one with the compile flag, the other without, and then create the shared library (libexample.so).
|
|
||||||
But in a big automatic build like the java upm libraries, this may prove too hard or too complicated to do. A workaround to this would be to define a custom symbol (e.q. JAVACALLBACK in the upm library) and also test for it. In short, replace:
|
|
||||||
```c++
|
|
||||||
#if defined(SWIGJAVA)
|
|
||||||
```
|
|
||||||
by
|
|
||||||
```c++
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
```
|
|
||||||
|
|
||||||
|
@ -46,22 +46,33 @@ sig_handler(int signo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! [Interesting]
|
//! [Interesting]
|
||||||
void
|
class mycb : public virtual Callback
|
||||||
nrf_handler()
|
|
||||||
{
|
{
|
||||||
std::cout << "Reciever :: " << *((uint32_t*) &(comm.m_rxBuffer[0])) << std::endl;
|
public:
|
||||||
|
mycb(upm::NRF24L01 *com) : _com(com) {}
|
||||||
|
virtual void run()
|
||||||
|
{
|
||||||
|
if (_com != NULL)
|
||||||
|
std::cout << "Reciever :: " << *((uint32_t*) &(_com->m_rxBuffer[0])) << std::endl;
|
||||||
|
else
|
||||||
|
std::cout << "Example callback!" << std::endl;
|
||||||
}
|
}
|
||||||
|
private:
|
||||||
|
upm::NRF24L01* _com;
|
||||||
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char** argv)
|
main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
|
mycb cb(&comm);
|
||||||
|
|
||||||
comm.setSourceAddress((uint8_t*) local_address);
|
comm.setSourceAddress((uint8_t*) local_address);
|
||||||
comm.setDestinationAddress((uint8_t*) broadcast_address);
|
comm.setDestinationAddress((uint8_t*) broadcast_address);
|
||||||
comm.setPayload(MAX_BUFFER);
|
comm.setPayload(MAX_BUFFER);
|
||||||
comm.configure();
|
comm.configure();
|
||||||
comm.setSpeedRate(upm::NRF_250KBPS);
|
comm.setSpeedRate(upm::NRF_250KBPS);
|
||||||
comm.setChannel(99);
|
comm.setChannel(99);
|
||||||
comm.setDataReceivedHandler(nrf_handler);
|
comm.setDataReceivedHandler(&cb);
|
||||||
|
|
||||||
signal(SIGINT, sig_handler);
|
signal(SIGINT, sig_handler);
|
||||||
|
|
||||||
|
@ -46,10 +46,21 @@ sig_handler(int signo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
class mycb : public virtual Callback
|
||||||
nrf_handler()
|
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
mycb(upm::NRF24L01 *com) : _com(com) {}
|
||||||
|
virtual void run()
|
||||||
|
{
|
||||||
|
if (_com != NULL)
|
||||||
|
std::cout << "Reciever :: " << *((uint32_t*) &(_com->m_rxBuffer[0])) << std::endl;
|
||||||
|
else
|
||||||
|
std::cout << "Example callback!" << std::endl;
|
||||||
}
|
}
|
||||||
|
private:
|
||||||
|
upm::NRF24L01* _com;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char** argv)
|
main(int argc, char** argv)
|
||||||
@ -57,12 +68,14 @@ main(int argc, char** argv)
|
|||||||
//! [Interesting]
|
//! [Interesting]
|
||||||
uint32_t dummyData = 0;
|
uint32_t dummyData = 0;
|
||||||
upm::NRF24L01 comm(7, 8);
|
upm::NRF24L01 comm(7, 8);
|
||||||
|
mycb cb(&comm);
|
||||||
|
|
||||||
comm.setSourceAddress((uint8_t*) srcAddress);
|
comm.setSourceAddress((uint8_t*) srcAddress);
|
||||||
comm.setDestinationAddress((uint8_t*) destAddress);
|
comm.setDestinationAddress((uint8_t*) destAddress);
|
||||||
comm.setPayload(MAX_BUFFER);
|
comm.setPayload(MAX_BUFFER);
|
||||||
comm.setChannel(99);
|
comm.setChannel(99);
|
||||||
comm.configure();
|
comm.configure();
|
||||||
comm.setDataReceivedHandler(nrf_handler);
|
comm.setDataReceivedHandler(&cb);
|
||||||
|
|
||||||
signal(SIGINT, sig_handler);
|
signal(SIGINT, sig_handler);
|
||||||
|
|
||||||
|
@ -42,17 +42,24 @@ sig_handler(int signo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
handler(clbk_data data)
|
//! [Interesting]
|
||||||
|
class mycb : public virtual Callback
|
||||||
{
|
{
|
||||||
printf("callback data (%d)\n", data.is_heart_beat);
|
public:
|
||||||
|
virtual void run(clbk_data arg)
|
||||||
|
{
|
||||||
|
printf("callback data (%d)\n", arg.is_heart_beat);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char** argv)
|
main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
|
mycb cb;
|
||||||
//! [Interesting]
|
//! [Interesting]
|
||||||
Pulsensor sensor(handler);
|
Pulsensor sensor(&cb);
|
||||||
|
|
||||||
sensor.start_sampler();
|
sensor.start_sampler();
|
||||||
while (!doWork) {
|
while (!doWork) {
|
||||||
|
@ -23,12 +23,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//NOT TESTED!!!
|
//NOT TESTED!!!
|
||||||
|
|
||||||
|
import java.util.AbstractList;
|
||||||
|
import java.lang.Float;
|
||||||
|
|
||||||
public class H3LIS331DLSample {
|
public class H3LIS331DLSample {
|
||||||
|
|
||||||
public static void main(String[] args) throws InterruptedException {
|
public static void main(String[] args) throws InterruptedException {
|
||||||
//! [Interesting]
|
//! [Interesting]
|
||||||
int[] val;
|
|
||||||
float[] accel;
|
|
||||||
|
|
||||||
// Instantiate an H3LIS331DL on I2C bus 0
|
// Instantiate an H3LIS331DL on I2C bus 0
|
||||||
upm_h3lis331dl.H3LIS331DL sensor = new upm_h3lis331dl.H3LIS331DL(0);
|
upm_h3lis331dl.H3LIS331DL sensor = new upm_h3lis331dl.H3LIS331DL(0);
|
||||||
@ -39,11 +41,11 @@ public class H3LIS331DLSample {
|
|||||||
while(true){
|
while(true){
|
||||||
sensor.update();
|
sensor.update();
|
||||||
|
|
||||||
val = sensor.getRawXYZ();
|
upm_h3lis331dl.IntVector val = sensor.getRawXYZ();
|
||||||
System.out.println( "Raw: X: " + val[0] + " Y: " + val[1] + " Z: " + val[2] );
|
System.out.println( "Raw: X: " + val.get(0) + " Y: " + val.get(1) + " Z: " + val.get(2) );
|
||||||
|
|
||||||
accel = sensor.getAcceleration();
|
upm_h3lis331dl.FloatVector accel = sensor.getAcceleration();
|
||||||
System.out.println( "Acceleration: X: " + accel[0] + " Y: " + accel[1] + " Z: " + accel[2] );
|
System.out.println( "Acceleration: X: " + accel.get(0) + " Y: " + accel.get(1) + " Z: " + accel.get(2) );
|
||||||
|
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
}
|
}
|
||||||
|
@ -28,11 +28,10 @@ public class MMA7455Sample {
|
|||||||
public static void main(String[] args) throws InterruptedException {
|
public static void main(String[] args) throws InterruptedException {
|
||||||
// ! [Interesting]
|
// ! [Interesting]
|
||||||
upm_mma7455.MMA7455 sensor = new upm_mma7455.MMA7455(0);
|
upm_mma7455.MMA7455 sensor = new upm_mma7455.MMA7455(0);
|
||||||
short[] val;
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
val = sensor.readData();
|
upm_mma7455.ShortVector val = sensor.readData();
|
||||||
System.out.println("Accelerometer X: " + val[0] + ", Y: " + val[1] + ", Z: " + val[2]);
|
System.out.println("Accelerometer X: " + val.get(0) + ", Y: " + val.get(1) + ", Z: " + val.get(2));
|
||||||
|
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
}
|
}
|
||||||
|
@ -44,13 +44,13 @@ public class MMA7660Sample
|
|||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
float acceleration[] = accel.getAcceleration();
|
upm_mma7660.FloatVector acceleration = accel.getAcceleration();
|
||||||
System.out.println("Acceleration: x = "
|
System.out.println("Acceleration: x = "
|
||||||
+ acceleration[0]
|
+ acceleration.get(0)
|
||||||
+ " y = "
|
+ " y = "
|
||||||
+ acceleration[1]
|
+ acceleration.get(1)
|
||||||
+ " x = "
|
+ " x = "
|
||||||
+ acceleration[2]);
|
+ acceleration.get(2));
|
||||||
|
|
||||||
System.out.println();
|
System.out.println();
|
||||||
|
|
||||||
|
@ -43,9 +43,8 @@ public class MPU9150Sample {
|
|||||||
// System.out.println("Gryoscope: " + "GX: " + gyro[0] + " GY: " + gyro[1] + " GZ: "
|
// System.out.println("Gryoscope: " + "GX: " + gyro[0] + " GY: " + gyro[1] + " GZ: "
|
||||||
// + gyro[2]);
|
// + gyro[2]);
|
||||||
|
|
||||||
float[] magn = sensor.getMagnetometer();
|
upm_mpu9150.FloatVector magn = sensor.getMagnetometer();
|
||||||
System.out.println("Magnetometer: " + "MX: " + magn[0] + " MY: " + magn[1] + " MZ: "
|
System.out.println("Magnetometer: " + "MX: " + magn.get(0) + " MY: " + magn.get(1) + " MZ: " + magn.get(2));
|
||||||
+ magn[2]);
|
|
||||||
|
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
}
|
}
|
||||||
|
@ -461,7 +461,7 @@ function(upm_swig_java)
|
|||||||
${DEPEND_DIRS}
|
${DEPEND_DIRS}
|
||||||
)
|
)
|
||||||
set_target_properties (javaupm_${libname} PROPERTIES
|
set_target_properties (javaupm_${libname} PROPERTIES
|
||||||
COMPILE_FLAGS "-fpermissive -DJAVACALLBACK -DSWIGJAVA"
|
COMPILE_FLAGS "-fpermissive"
|
||||||
PREFIX "lib"
|
PREFIX "lib"
|
||||||
SUFFIX ".so"
|
SUFFIX ".so"
|
||||||
)
|
)
|
||||||
|
@ -77,14 +77,12 @@ void ADXL335::values(int *xVal, int *yVal, int *zVal)
|
|||||||
*zVal = mraa_aio_read(m_aioZ);
|
*zVal = mraa_aio_read(m_aioZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
std::vector<int> ADXL335::values()
|
||||||
int *ADXL335::values()
|
|
||||||
{
|
{
|
||||||
int *v = new int[3];
|
std::vector<int> v(3);
|
||||||
values(&v[0], &v[1], &v[2]);
|
values(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void ADXL335::acceleration(float *xAccel, float *yAccel, float *zAccel)
|
void ADXL335::acceleration(float *xAccel, float *yAccel, float *zAccel)
|
||||||
{
|
{
|
||||||
@ -101,14 +99,12 @@ void ADXL335::acceleration(float *xAccel, float *yAccel, float *zAccel)
|
|||||||
*zAccel = (zVolts - m_zeroZ) / ADXL335_SENSITIVITY;
|
*zAccel = (zVolts - m_zeroZ) / ADXL335_SENSITIVITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
std::vector<float> ADXL335::acceleration()
|
||||||
float *ADXL335::acceleration()
|
|
||||||
{
|
{
|
||||||
float *v = new float[3];
|
std::vector<float> v(3);
|
||||||
acceleration(&v[0], &v[1], &v[2]);
|
acceleration(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void ADXL335::calibrate()
|
void ADXL335::calibrate()
|
||||||
{
|
{
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include <mraa/aio.h>
|
#include <mraa/aio.h>
|
||||||
|
|
||||||
#define ADXL335_DEFAULT_AREF 5.0
|
#define ADXL335_DEFAULT_AREF 5.0
|
||||||
@ -106,14 +107,12 @@ namespace upm {
|
|||||||
*/
|
*/
|
||||||
void values(int *xVal, int *yVal, int *zVal);
|
void values(int *xVal, int *yVal, int *zVal);
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
|
||||||
/**
|
/**
|
||||||
* Gets the analog values for the 3 axes
|
* Gets the analog values for the 3 axes
|
||||||
*
|
*
|
||||||
* @return Array containing value of X, Y, Z axes
|
* @return std::vector of x, y, z analog acceleration values
|
||||||
*/
|
*/
|
||||||
int *values();
|
std::vector<int> values();
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the acceleration along all 3 axes
|
* Gets the acceleration along all 3 axes
|
||||||
@ -124,14 +123,12 @@ namespace upm {
|
|||||||
*/
|
*/
|
||||||
void acceleration(float *xAccel, float *yAccel, float *zAccel);
|
void acceleration(float *xAccel, float *yAccel, float *zAccel);
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
|
||||||
/**
|
/**
|
||||||
* Gets the acceleration along all 3 axes
|
* Gets the acceleration along all 3 axes
|
||||||
*
|
*
|
||||||
* @return Array containing acceleration on X, Y, Z axes
|
* @return std::vector of x, y, z acceleration values
|
||||||
*/
|
*/
|
||||||
float *acceleration();
|
std::vector<float> acceleration();
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* While the sensor is still, measures the X-axis, Y-axis, and Z-axis
|
* While the sensor is still, measures the X-axis, Y-axis, and Z-axis
|
||||||
|
@ -167,14 +167,12 @@ void BMA220::getAccelerometer(float *x, float *y, float *z)
|
|||||||
*z = m_accelZ / m_accelScale;
|
*z = m_accelZ / m_accelScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef JAVACALLBACK
|
std::vector<float> BMA220::getAccelerometer()
|
||||||
float *BMA220::getAccelerometer()
|
|
||||||
{
|
{
|
||||||
float *v = new float[3];
|
std::vector<float> v(3);
|
||||||
getAccelerometer(&v[0], &v[1], &v[2]);
|
getAccelerometer(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t BMA220::getChipID()
|
uint8_t BMA220::getChipID()
|
||||||
{
|
{
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include <mraa/common.hpp>
|
#include <mraa/common.hpp>
|
||||||
#include <mraa/i2c.hpp>
|
#include <mraa/i2c.hpp>
|
||||||
#include <mraa/gpio.hpp>
|
#include <mraa/gpio.hpp>
|
||||||
@ -539,14 +540,12 @@ namespace upm {
|
|||||||
*/
|
*/
|
||||||
void getAccelerometer(float *x, float *y, float *z);
|
void getAccelerometer(float *x, float *y, float *z);
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
/**
|
/**
|
||||||
* get the accelerometer values in gravities
|
* get the accelerometer values in gravities
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z acceleration values
|
* @return std::vector containing X, Y, Z acceleration values
|
||||||
*/
|
*/
|
||||||
float *getAccelerometer();
|
std::vector<float> getAccelerometer();
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set the filtering configuration
|
* set the filtering configuration
|
||||||
|
@ -59,13 +59,6 @@ int Button::value()
|
|||||||
return mraa_gpio_read(m_gpio);
|
return mraa_gpio_read(m_gpio);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*#ifdef JAVACALLBACK
|
|
||||||
void Button::installISR(mraa::Edge level, jobject runnable)
|
|
||||||
{
|
|
||||||
installISR(level, mraa_java_isr_callback, runnable);
|
|
||||||
}
|
|
||||||
#endif*/
|
|
||||||
|
|
||||||
void Button::installISR(mraa::Edge level, void (*isr)(void *), void *arg)
|
void Button::installISR(mraa::Edge level, void (*isr)(void *), void *arg)
|
||||||
{
|
{
|
||||||
if (m_isrInstalled)
|
if (m_isrInstalled)
|
||||||
|
@ -87,11 +87,8 @@ class Button{
|
|||||||
* @param arg Pointer to an object to be supplied as an
|
* @param arg Pointer to an object to be supplied as an
|
||||||
* argument to the ISR.
|
* argument to the ISR.
|
||||||
*/
|
*/
|
||||||
/*#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
void installISR(mraa::Edge level, jobject runnable);
|
|
||||||
#else*/
|
|
||||||
void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
|
void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
|
||||||
//#endif
|
|
||||||
/**
|
/**
|
||||||
* Uninstalls the previously installed ISR
|
* Uninstalls the previously installed ISR
|
||||||
*
|
*
|
||||||
|
@ -31,5 +31,3 @@
|
|||||||
$1 = reinterpret_cast< uint16_t * >(argp);
|
$1 = reinterpret_cast< uint16_t * >(argp);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#elsif (SWIGJAVA)
|
|
||||||
|
@ -52,5 +52,3 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#elsif (SWIGJAVA)
|
|
||||||
|
@ -31,5 +31,3 @@
|
|||||||
$1 = reinterpret_cast< uint8_t * >(argp);
|
$1 = reinterpret_cast< uint8_t * >(argp);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#elsif (SWIGJAVA)
|
|
||||||
|
@ -58,13 +58,6 @@ int GroveButton::value()
|
|||||||
return mraa_gpio_read(m_gpio);
|
return mraa_gpio_read(m_gpio);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*#ifdef JAVACALLBACK
|
|
||||||
void GroveButton::installISR(mraa::Edge level, jobject runnable)
|
|
||||||
{
|
|
||||||
installISR(level, mraa_java_isr_callback, runnable);
|
|
||||||
}
|
|
||||||
#endif*/
|
|
||||||
|
|
||||||
void GroveButton::installISR(mraa::Edge level, void (*isr)(void *), void *arg)
|
void GroveButton::installISR(mraa::Edge level, void (*isr)(void *), void *arg)
|
||||||
{
|
{
|
||||||
if (m_isrInstalled)
|
if (m_isrInstalled)
|
||||||
|
@ -84,11 +84,8 @@ class GroveButton: public Grove {
|
|||||||
* @param arg Pointer to an object to be supplied as an
|
* @param arg Pointer to an object to be supplied as an
|
||||||
* argument to the ISR.
|
* argument to the ISR.
|
||||||
*/
|
*/
|
||||||
//#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
// void installISR(mraa::Edge level, jobject runnable);
|
|
||||||
//#else
|
|
||||||
void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
|
void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
|
||||||
//#endif
|
|
||||||
/**
|
/**
|
||||||
* Uninstalls the previously installed ISR
|
* Uninstalls the previously installed ISR
|
||||||
*
|
*
|
||||||
|
@ -600,25 +600,23 @@ void H3LIS331DL::getXYZ(int *x, int *y, int*z)
|
|||||||
*z = (m_rawZ - m_adjZ);
|
*z = (m_rawZ - m_adjZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
std::vector<float> H3LIS331DL::getAcceleration()
|
||||||
float *H3LIS331DL::getAcceleration()
|
|
||||||
{
|
{
|
||||||
float *v = new float[3];
|
std::vector<float> v(3);
|
||||||
getAcceleration(&v[0], &v[1], &v[2]);
|
getAcceleration(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
int *H3LIS331DL::getRawXYZ()
|
std::vector<int> H3LIS331DL::getRawXYZ()
|
||||||
{
|
{
|
||||||
int *v = new int[3];
|
std::vector<int> v(3);
|
||||||
getRawXYZ(&v[0], &v[1], &v[2]);
|
getRawXYZ(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
int *H3LIS331DL::getXYZ()
|
std::vector<int> H3LIS331DL::getXYZ()
|
||||||
{
|
{
|
||||||
int *v = new int[3];
|
std::vector<int> v(3);
|
||||||
getXYZ(&v[0], &v[1], &v[2]);
|
getXYZ(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include <mraa/common.hpp>
|
#include <mraa/common.hpp>
|
||||||
#include <mraa/i2c.hpp>
|
#include <mraa/i2c.hpp>
|
||||||
|
|
||||||
@ -594,29 +595,26 @@ namespace upm {
|
|||||||
*/
|
*/
|
||||||
void getXYZ(int *x, int *y, int *z);
|
void getXYZ(int *x, int *y, int *z);
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
|
||||||
/**
|
/**
|
||||||
* Gets acceleration values for each of the axes
|
* Gets acceleration values for each of the axes
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z acceleration values
|
* @return std::vector containing X, Y, Z acceleration values
|
||||||
*/
|
*/
|
||||||
float *getAcceleration();
|
std::vector<float> getAcceleration();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets raw axis values
|
* Gets raw axis values
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z raw values
|
* @return std::vector containing X, Y, Z raw values
|
||||||
*/
|
*/
|
||||||
int *getRawXYZ();
|
std::vector<int> getRawXYZ();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets adjusted axis values
|
* Gets adjusted axis values
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z adjusted axis values
|
* @return std::vector containing X, Y, Z adjusted axis values
|
||||||
*/
|
*/
|
||||||
int *getXYZ();
|
std::vector<int> getXYZ();
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides public access to the MRAA I2C context of the class for
|
* Provides public access to the MRAA I2C context of the class for
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
%include "../upm.i"
|
%include "../upm.i"
|
||||||
%include "cpointer.i"
|
%include "cpointer.i"
|
||||||
%include "typemaps.i"
|
%include "typemaps.i"
|
||||||
|
%include "std_vector.i"
|
||||||
|
|
||||||
|
%template(IntVector) std::vector<int>;
|
||||||
|
%template(FloatVector) std::vector<float>;
|
||||||
|
|
||||||
%apply int *OUTPUT { int *x, int *y, int*z };
|
%apply int *OUTPUT { int *x, int *y, int*z };
|
||||||
%apply float *OUTPUT { float *aX, float *aY, float *aZ };
|
%apply float *OUTPUT { float *aX, float *aY, float *aZ };
|
||||||
@ -11,43 +15,6 @@
|
|||||||
%{
|
%{
|
||||||
#include "h3lis331dl.hpp"
|
#include "h3lis331dl.hpp"
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%typemap(jni) float* "jfloatArray"
|
|
||||||
%typemap(jstype) float* "float[]"
|
|
||||||
%typemap(jtype) float* "float[]"
|
|
||||||
|
|
||||||
%typemap(javaout) float* {
|
|
||||||
return $jnicall;
|
|
||||||
}
|
|
||||||
|
|
||||||
%typemap(out) float *getAcceleration {
|
|
||||||
$result = JCALL1(NewFloatArray, jenv, 3);
|
|
||||||
JCALL4(SetFloatArrayRegion, jenv, $result, 0, 3, $1);
|
|
||||||
delete [] $1;
|
|
||||||
}
|
|
||||||
|
|
||||||
%typemap(jni) int* "jintArray"
|
|
||||||
%typemap(jstype) int* "int[]"
|
|
||||||
%typemap(jtype) int* "int[]"
|
|
||||||
|
|
||||||
%typemap(javaout) int* {
|
|
||||||
return $jnicall;
|
|
||||||
}
|
|
||||||
|
|
||||||
%typemap(out) int *getRawXYZ {
|
|
||||||
$result = JCALL1(NewIntArray, jenv, 3);
|
|
||||||
JCALL4(SetIntArrayRegion, jenv, $result, 0, 3, (const int*)$1);
|
|
||||||
}
|
|
||||||
|
|
||||||
%typemap(out) int *getXYZ {
|
|
||||||
$result = JCALL1(NewIntArray, jenv, 3);
|
|
||||||
JCALL4(SetIntArrayRegion, jenv, $result, 0, 3, (const int*)$1);
|
|
||||||
}
|
|
||||||
|
|
||||||
%ignore getRawXYZ(int *, int *, int *);
|
|
||||||
%ignore getXYZ(int *, int *, int *);
|
|
||||||
%ignore getAcceleration(float *, float *, float *);
|
|
||||||
|
|
||||||
%include "h3lis331dl.hpp"
|
%include "h3lis331dl.hpp"
|
||||||
|
|
||||||
JAVA_JNI_LOADLIBRARY(javaupm_h3lis331dl)
|
JAVA_JNI_LOADLIBRARY(javaupm_h3lis331dl)
|
@ -26,6 +26,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "lsm9ds0.hpp"
|
#include "lsm9ds0.hpp"
|
||||||
|
|
||||||
@ -621,28 +622,26 @@ void LSM9DS0::getMagnetometer(float *x, float *y, float *z)
|
|||||||
*z = (m_magZ * m_magScale) / 1000.0;
|
*z = (m_magZ * m_magScale) / 1000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef JAVACALLBACK
|
std::vector<float> LSM9DS0::getAccelerometer()
|
||||||
float *LSM9DS0::getAccelerometer()
|
|
||||||
{
|
{
|
||||||
float *v = new float[3];
|
std::vector<float> v(3);
|
||||||
getAccelerometer(&v[0], &v[1], &v[2]);
|
getAccelerometer(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
float *LSM9DS0::getGyroscope()
|
std::vector<float> LSM9DS0::getGyroscope()
|
||||||
{
|
{
|
||||||
float *v = new float[3];
|
std::vector<float> v(3);
|
||||||
getGyroscope(&v[0], &v[1], &v[2]);
|
getGyroscope(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
float *LSM9DS0::getMagnetometer()
|
std::vector<float> LSM9DS0::getMagnetometer()
|
||||||
{
|
{
|
||||||
float *v = new float[3];
|
std::vector<float> v(3);
|
||||||
getMagnetometer(&v[0], &v[1], &v[2]);
|
getMagnetometer(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
float LSM9DS0::getTemperature()
|
float LSM9DS0::getTemperature()
|
||||||
{
|
{
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include <mraa/common.hpp>
|
#include <mraa/common.hpp>
|
||||||
#include <mraa/i2c.hpp>
|
#include <mraa/i2c.hpp>
|
||||||
|
|
||||||
@ -1266,28 +1267,26 @@ namespace upm {
|
|||||||
*/
|
*/
|
||||||
void getMagnetometer(float *x, float *y, float *z);
|
void getMagnetometer(float *x, float *y, float *z);
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
/**
|
/**
|
||||||
* get the accelerometer values in gravities
|
* get the accelerometer values in gravities
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z acceleration values
|
* @return std::vector containing X, Y, Z acceleration values
|
||||||
*/
|
*/
|
||||||
float *getAccelerometer();
|
std::vector<float> getAccelerometer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the gyroscope values in degrees per second
|
* get the gyroscope values in degrees per second
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z gyroscope values
|
* @return std::vector containing X, Y, Z gyroscope values
|
||||||
*/
|
*/
|
||||||
float *getGyroscope();
|
std::vector<float> getGyroscope();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the magnetometer values in gauss
|
* get the magnetometer values in gauss
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z magnetometer values
|
* @return std::vector containing X, Y, Z magnetometer values
|
||||||
*/
|
*/
|
||||||
float *getMagnetometer();
|
std::vector<float> getMagnetometer();
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the temperature value. Unfortunately the datasheet does
|
* get the temperature value. Unfortunately the datasheet does
|
||||||
|
@ -3,29 +3,15 @@
|
|||||||
%include "typemaps.i"
|
%include "typemaps.i"
|
||||||
%include "arrays_java.i";
|
%include "arrays_java.i";
|
||||||
%include "../java_buffer.i"
|
%include "../java_buffer.i"
|
||||||
|
%include "std_vector.i"
|
||||||
|
|
||||||
|
%template(ShortVector) std::vector<short>;
|
||||||
|
|
||||||
%apply short *OUTPUT { short * ptrX, short * ptrY, short * ptrZ };
|
%apply short *OUTPUT { short * ptrX, short * ptrY, short * ptrZ };
|
||||||
|
|
||||||
%typemap(jni) short* "jshortArray"
|
|
||||||
%typemap(jstype) short* "short[]"
|
|
||||||
%typemap(jtype) short* "short[]"
|
|
||||||
|
|
||||||
%typemap(javaout) short* {
|
|
||||||
return $jnicall;
|
|
||||||
}
|
|
||||||
|
|
||||||
%typemap(out) short *readData {
|
|
||||||
$result = JCALL1(NewShortArray, jenv, 3);
|
|
||||||
JCALL4(SetShortArrayRegion, jenv, $result, 0, 3, (const signed short*)$1);
|
|
||||||
delete [] $1;
|
|
||||||
}
|
|
||||||
|
|
||||||
%ignore readData(short *, short *, short *);
|
|
||||||
|
|
||||||
%{
|
%{
|
||||||
#include "mma7455.hpp"
|
#include "mma7455.hpp"
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%include "mma7455.hpp"
|
%include "mma7455.hpp"
|
||||||
|
|
||||||
JAVA_JNI_LOADLIBRARY(javaupm_mma7455)
|
JAVA_JNI_LOADLIBRARY(javaupm_mma7455)
|
@ -26,6 +26,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <vector>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@ -133,13 +134,11 @@ MMA7455::readData (short * ptrX, short * ptrY, short * ptrZ) {
|
|||||||
return mraa::SUCCESS;
|
return mraa::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
std::vector<short> MMA7455::readData() {
|
||||||
short *MMA7455::readData() {
|
std::vector<short> v(3);
|
||||||
short *v = new short[3];
|
|
||||||
readData(&v[0], &v[1], &v[2]);
|
readData(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
MMA7455::i2cReadReg (unsigned char reg, uint8_t *buffer, int len) {
|
MMA7455::i2cReadReg (unsigned char reg, uint8_t *buffer, int len) {
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include <mraa/i2c.hpp>
|
#include <mraa/i2c.hpp>
|
||||||
|
|
||||||
#define ADDR 0x1D // device address
|
#define ADDR 0x1D // device address
|
||||||
@ -208,14 +209,13 @@ class MMA7455 {
|
|||||||
*/
|
*/
|
||||||
mraa::Result readData (short * ptrX, short * ptrY, short * ptrZ);
|
mraa::Result readData (short * ptrX, short * ptrY, short * ptrZ);
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
|
||||||
/**
|
/**
|
||||||
* Reads X-axis, Y-axis, and Z-axis acceleration data
|
* Reads X-axis, Y-axis, and Z-axis acceleration data
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z acceleration data
|
* @return std::vector containing X, Y, Z acceleration data
|
||||||
*/
|
*/
|
||||||
short *readData ();
|
std::vector<short> readData ();
|
||||||
#endif
|
|
||||||
/**
|
/**
|
||||||
* Internal function for reading I2C data
|
* Internal function for reading I2C data
|
||||||
*
|
*
|
||||||
|
@ -4,41 +4,14 @@
|
|||||||
%include "typemaps.i"
|
%include "typemaps.i"
|
||||||
%include "arrays_java.i";
|
%include "arrays_java.i";
|
||||||
%include "../java_buffer.i"
|
%include "../java_buffer.i"
|
||||||
|
%include "std_vector.i"
|
||||||
|
|
||||||
|
%template(IntVector) std::vector<int>;
|
||||||
|
%template(FloatVector) std::vector<float>;
|
||||||
|
|
||||||
%apply int *OUTPUT { int *x, int *y, int *z };
|
%apply int *OUTPUT { int *x, int *y, int *z };
|
||||||
%apply float *OUTPUT { float *ax, float *ay, float *az };
|
%apply float *OUTPUT { float *ax, float *ay, float *az };
|
||||||
|
|
||||||
%typemap(jni) float* "jfloatArray"
|
|
||||||
%typemap(jstype) float* "float[]"
|
|
||||||
%typemap(jtype) float* "float[]"
|
|
||||||
|
|
||||||
%typemap(javaout) float* {
|
|
||||||
return $jnicall;
|
|
||||||
}
|
|
||||||
|
|
||||||
%typemap(out) float *getAcceleration {
|
|
||||||
$result = JCALL1(NewFloatArray, jenv, 3);
|
|
||||||
JCALL4(SetFloatArrayRegion, jenv, $result, 0, 3, $1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
%typemap(jni) int* "jintArray"
|
|
||||||
%typemap(jstype) int* "int[]"
|
|
||||||
%typemap(jtype) int* "int[]"
|
|
||||||
|
|
||||||
%typemap(javaout) int* {
|
|
||||||
return $jnicall;
|
|
||||||
}
|
|
||||||
|
|
||||||
%typemap(out) int *getRawValues {
|
|
||||||
$result = JCALL1(NewIntArray, jenv, 3);
|
|
||||||
JCALL4(SetIntArrayRegion, jenv, $result, 0, 3, (const signed int*)$1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
%ignore getRawValues(int *, int *, int *);
|
|
||||||
%ignore getAcceleration(float *, float *, float *);
|
|
||||||
|
|
||||||
%{
|
%{
|
||||||
#include "mma7660.hpp"
|
#include "mma7660.hpp"
|
||||||
#include "mma7660_regs.h"
|
#include "mma7660_regs.h"
|
||||||
|
@ -23,7 +23,9 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <mma7660.h>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "mma7660.h"
|
||||||
|
|
||||||
namespace upm {
|
namespace upm {
|
||||||
|
|
||||||
@ -197,17 +199,16 @@ namespace upm {
|
|||||||
*/
|
*/
|
||||||
bool setSampleRate(MMA7660_AUTOSLEEP_T sr);
|
bool setSampleRate(MMA7660_AUTOSLEEP_T sr);
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
/**
|
/**
|
||||||
* Reads the current acceleration values. The returned memory
|
* Reads the current acceleration values. The returned memory
|
||||||
* is statically allocated and will be overwritten on each
|
* is statically allocated and will be overwritten on each
|
||||||
* call.
|
* call.
|
||||||
*
|
*
|
||||||
* @return Array containing x, y, z.
|
* @return std::vector containing x, y, z.
|
||||||
*/
|
*/
|
||||||
float *getAcceleration()
|
std::vector<float> getAcceleration()
|
||||||
{
|
{
|
||||||
static float values[3];
|
std::vector<float> values(3);
|
||||||
getAcceleration(&values[0], &values[1], &values[2]);
|
getAcceleration(&values[0], &values[1], &values[2]);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
@ -217,15 +218,15 @@ namespace upm {
|
|||||||
* is statically allocated and will be overwritten on each
|
* is statically allocated and will be overwritten on each
|
||||||
* call.
|
* call.
|
||||||
*
|
*
|
||||||
* @return Array containing x, y, z.
|
* @return std::vector containing x, y, z.
|
||||||
*/
|
*/
|
||||||
int *getRawValues()
|
std::vector<int> getRawValues()
|
||||||
{
|
{
|
||||||
static int values[3];
|
std::vector<int> values(3);
|
||||||
getRawValues(&values[0], &values[1], &values[2]);
|
getRawValues(&values[0], &values[1], &values[2]);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
/**
|
/**
|
||||||
* Installs an interrupt service routine (ISR) to be called when
|
* Installs an interrupt service routine (ISR) to be called when
|
||||||
* an interrupt occurs
|
* an interrupt occurs
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
%include "typemaps.i"
|
%include "typemaps.i"
|
||||||
%include "arrays_java.i"
|
%include "arrays_java.i"
|
||||||
%include "../java_buffer.i"
|
%include "../java_buffer.i"
|
||||||
|
%include "std_vector.i"
|
||||||
|
|
||||||
|
%template(FloatVector) std::vector<float>;
|
||||||
|
|
||||||
%apply int {mraa::Edge};
|
%apply int {mraa::Edge};
|
||||||
|
|
||||||
@ -10,33 +13,12 @@
|
|||||||
#include "mpu60x0.hpp"
|
#include "mpu60x0.hpp"
|
||||||
#include "mpu9150.hpp"
|
#include "mpu9150.hpp"
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
||||||
%typemap(jni) float * "jfloatArray"
|
|
||||||
%typemap(jstype) float * "float[]"
|
|
||||||
%typemap(jtype) float * "float[]"
|
|
||||||
|
|
||||||
%typemap(javaout) float * {
|
|
||||||
return $jnicall;
|
|
||||||
}
|
|
||||||
|
|
||||||
%typemap(out) float * {
|
|
||||||
$result = JCALL1(NewFloatArray, jenv, 3);
|
|
||||||
JCALL4(SetFloatArrayRegion, jenv, $result, 0, 3, $1);
|
|
||||||
delete [] $1;
|
|
||||||
}
|
|
||||||
|
|
||||||
%ignore getAccelerometer(float *, float *, float *);
|
|
||||||
%ignore getGyroscope(float *, float *, float *);
|
|
||||||
%ignore getMagnetometer(float *, float *, float *);
|
|
||||||
|
|
||||||
%include "mpu60x0.hpp"
|
%include "mpu60x0.hpp"
|
||||||
%include "mpu9150.hpp"
|
%include "mpu9150.hpp"
|
||||||
|
|
||||||
%ignore installISR(int , mraa::Edge , void *, void *);
|
|
||||||
|
|
||||||
%define GETTER get_gpioIRQ()
|
%define GETTER get_gpioIRQ()
|
||||||
%enddef
|
%enddef
|
||||||
|
|
||||||
JAVA_ADD_INSTALLISR_GPIO(upm::MPU60X0)
|
JAVA_ADD_INSTALLISR_GPIO(upm::MPU60X0)
|
||||||
|
|
||||||
JAVA_JNI_LOADLIBRARY(javaupm_mpu9150)
|
JAVA_JNI_LOADLIBRARY(javaupm_mpu9150)
|
||||||
|
@ -109,11 +109,9 @@ void MPU9150::getMagnetometer(float *x, float *y, float *z)
|
|||||||
*z = mz;
|
*z = mz;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
std::vector<float> MPU9150::getMagnetometer()
|
||||||
float *MPU9150::getMagnetometer()
|
|
||||||
{
|
{
|
||||||
float *v = new float[3];
|
std::vector<float> v(3);
|
||||||
getMagnetometer(&v[0], &v[1], &v[2]);
|
getMagnetometer(&v[0], &v[1], &v[2]);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "mpu60x0.hpp"
|
#include "mpu60x0.hpp"
|
||||||
#include "ak8975.hpp"
|
#include "ak8975.hpp"
|
||||||
@ -108,17 +109,13 @@ namespace upm {
|
|||||||
*/
|
*/
|
||||||
void getMagnetometer(float *x, float *y, float *z);
|
void getMagnetometer(float *x, float *y, float *z);
|
||||||
|
|
||||||
#ifdef SWIGJAVA
|
|
||||||
/**
|
/**
|
||||||
* Return the compensated values for the x, y, and z axes. The
|
* Return the compensated values for the x, y, and z axes. The
|
||||||
* unit of measurement is in micro-teslas (uT).
|
* unit of measurement is in micro-teslas (uT).
|
||||||
*
|
*
|
||||||
* @return Array containing X, Y, Z magnetometer values
|
* @return std::vector containing X, Y, Z magnetometer values
|
||||||
*/
|
*/
|
||||||
float *getMagnetometer();
|
std::vector<float> getMagnetometer();
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// magnetometer instance
|
// magnetometer instance
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
class Callback
|
class Callback
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -13,10 +12,9 @@ class Callback
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static void generic_callback (Callback* callback)
|
void generic_callback (Callback* callback)
|
||||||
{
|
{
|
||||||
if (callback == NULL)
|
if (callback == NULL)
|
||||||
return;
|
return;
|
||||||
callback->run();
|
callback->run();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
@ -134,20 +134,12 @@ NRF24L01::setPayload (uint8_t payload) {
|
|||||||
m_payload = payload;
|
m_payload = payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef JAVACALLBACK
|
|
||||||
void
|
void
|
||||||
NRF24L01::setDataReceivedHandler (Callback *call_obj)
|
NRF24L01::setDataReceivedHandler (Callback *call_obj)
|
||||||
{
|
{
|
||||||
callback_obj = call_obj;
|
callback_obj = call_obj;
|
||||||
dataReceivedHandler = &generic_callback;
|
dataReceivedHandler = &generic_callback;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
void
|
|
||||||
NRF24L01::setDataReceivedHandler (funcPtrVoidVoid handler)
|
|
||||||
{
|
|
||||||
dataReceivedHandler = handler;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
NRF24L01::dataReady () {
|
NRF24L01::dataReady () {
|
||||||
@ -316,11 +308,8 @@ void
|
|||||||
NRF24L01::pollListener() {
|
NRF24L01::pollListener() {
|
||||||
if (dataReady()) {
|
if (dataReady()) {
|
||||||
getData (m_rxBuffer);
|
getData (m_rxBuffer);
|
||||||
#ifdef JAVACALLBACK
|
|
||||||
dataReceivedHandler (callback_obj); /* let know that data arrived */
|
dataReceivedHandler (callback_obj); /* let know that data arrived */
|
||||||
#else
|
|
||||||
dataReceivedHandler (); /* let know that data arrived */
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,9 +33,7 @@
|
|||||||
#include <mraa/spi.hpp>
|
#include <mraa/spi.hpp>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
#include "Callback.hpp"
|
#include "Callback.hpp"
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Memory Map */
|
/* Memory Map */
|
||||||
#define CONFIG 0x00
|
#define CONFIG 0x00
|
||||||
@ -142,11 +140,7 @@
|
|||||||
|
|
||||||
namespace upm {
|
namespace upm {
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
typedef void (* funcPtrVoidVoid) (Callback *);
|
typedef void (* funcPtrVoidVoid) (Callback *);
|
||||||
#else
|
|
||||||
typedef void (* funcPtrVoidVoid) ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NRF_250KBPS = 0,
|
NRF_250KBPS = 0,
|
||||||
@ -257,21 +251,13 @@ class NRF24L01 {
|
|||||||
*/
|
*/
|
||||||
void setPayload (uint8_t load);
|
void setPayload (uint8_t load);
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
/**
|
/**
|
||||||
* Sets the handler to be called when data has been
|
* Sets the handler to be called when data has been
|
||||||
* received
|
* received
|
||||||
* @param call_obj Object used for callback - Java
|
* @param call_obj Object used for callback - Java
|
||||||
*/
|
*/
|
||||||
void setDataReceivedHandler (Callback *call_obj);
|
void setDataReceivedHandler (Callback *call_obj);
|
||||||
#else
|
|
||||||
/**
|
|
||||||
* Sets the handler to be called when data has been
|
|
||||||
* received
|
|
||||||
* @param handler Handler used for callback
|
|
||||||
*/
|
|
||||||
void setDataReceivedHandler (funcPtrVoidVoid handler);
|
|
||||||
#endif
|
|
||||||
/**
|
/**
|
||||||
* Checks if the data has arrived
|
* Checks if the data has arrived
|
||||||
*/
|
*/
|
||||||
@ -374,11 +360,12 @@ class NRF24L01 {
|
|||||||
uint8_t m_bleBuffer [32]; /**< BLE buffer */
|
uint8_t m_bleBuffer [32]; /**< BLE buffer */
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
/**< Callback object to use for setting the handler from Java */
|
/* Callback object to use for setting the handler from Java */
|
||||||
Callback *callback_obj;
|
Callback *callback_obj;
|
||||||
#endif
|
|
||||||
funcPtrVoidVoid dataReceivedHandler; /**< Data arrived handler */
|
/** Data arrived handler */
|
||||||
|
funcPtrVoidVoid dataReceivedHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes bytes to an SPI device
|
* Writes bytes to an SPI device
|
||||||
|
@ -32,10 +32,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#ifdef JAVACALLBACK
|
|
||||||
#undef JAVACALLBACK
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pn532.hpp"
|
#include "pn532.hpp"
|
||||||
|
|
||||||
using namespace upm;
|
using namespace upm;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
class Callback
|
class Callback
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -11,5 +10,3 @@ class Callback
|
|||||||
{ /* empty, overloaded in Java*/
|
{ /* empty, overloaded in Java*/
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
|
|
||||||
using namespace upm;
|
using namespace upm;
|
||||||
|
|
||||||
#if defined(JAVACALLBACK)
|
|
||||||
Pulsensor::Pulsensor (Callback *obj_call) : pin_ctx(0)
|
Pulsensor::Pulsensor (Callback *obj_call) : pin_ctx(0)
|
||||||
{
|
{
|
||||||
obj_callback = obj_call;
|
obj_callback = obj_call;
|
||||||
@ -49,24 +48,6 @@ Pulsensor::Pulsensor (Callback *obj_call) : pin_ctx(0)
|
|||||||
qs = FALSE;
|
qs = FALSE;
|
||||||
apmlitude = 100;
|
apmlitude = 100;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
Pulsensor::Pulsensor (callback_handler handler) : pin_ctx(0)
|
|
||||||
{
|
|
||||||
callback = handler;
|
|
||||||
|
|
||||||
sample_counter = 0;
|
|
||||||
last_beat_time = 0;
|
|
||||||
threshold = 512;
|
|
||||||
ibi = 600;
|
|
||||||
trough = 512;
|
|
||||||
peak = 512;
|
|
||||||
is_pulse = FALSE;
|
|
||||||
ret = FALSE;
|
|
||||||
bpm = 0;
|
|
||||||
qs = FALSE;
|
|
||||||
apmlitude = 100;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void Pulsensor::start_sampler ()
|
void Pulsensor::start_sampler ()
|
||||||
{
|
{
|
||||||
@ -114,11 +95,8 @@ void *Pulsensor::do_sample (void *arg) {
|
|||||||
(pulsensor->is_pulse == FALSE) &&
|
(pulsensor->is_pulse == FALSE) &&
|
||||||
(N > (pulsensor->ibi / 5)* 3) ) {
|
(N > (pulsensor->ibi / 5)* 3) ) {
|
||||||
pulsensor->is_pulse = callback_data.is_heart_beat = TRUE;
|
pulsensor->is_pulse = callback_data.is_heart_beat = TRUE;
|
||||||
#if defined(JAVACALLBACK)
|
|
||||||
pulsensor->obj_callback->run(callback_data);
|
pulsensor->obj_callback->run(callback_data);
|
||||||
#else
|
|
||||||
pulsensor->callback(callback_data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pulsensor->ibi = pulsensor->sample_counter - pulsensor->last_beat_time;
|
pulsensor->ibi = pulsensor->sample_counter - pulsensor->last_beat_time;
|
||||||
pulsensor->last_beat_time = pulsensor->sample_counter;
|
pulsensor->last_beat_time = pulsensor->sample_counter;
|
||||||
@ -156,11 +134,9 @@ void *Pulsensor::do_sample (void *arg) {
|
|||||||
if (data_from_sensor < pulsensor->threshold &&
|
if (data_from_sensor < pulsensor->threshold &&
|
||||||
pulsensor->is_pulse == TRUE) {
|
pulsensor->is_pulse == TRUE) {
|
||||||
pulsensor->is_pulse = callback_data.is_heart_beat = FALSE;
|
pulsensor->is_pulse = callback_data.is_heart_beat = FALSE;
|
||||||
#if defined(JAVACALLBACK)
|
|
||||||
pulsensor->obj_callback->run(callback_data);
|
pulsensor->obj_callback->run(callback_data);
|
||||||
#else
|
|
||||||
pulsensor->callback(callback_data);
|
|
||||||
#endif
|
|
||||||
pulsensor->is_pulse = FALSE;
|
pulsensor->is_pulse = FALSE;
|
||||||
pulsensor->apmlitude = pulsensor->peak - pulsensor->trough;
|
pulsensor->apmlitude = pulsensor->peak - pulsensor->trough;
|
||||||
pulsensor->threshold = pulsensor->apmlitude / 2 + pulsensor->trough;
|
pulsensor->threshold = pulsensor->apmlitude / 2 + pulsensor->trough;
|
||||||
|
@ -47,11 +47,7 @@ struct clbk_data {
|
|||||||
int is_heart_beat; /**< heartbeat check */
|
int is_heart_beat; /**< heartbeat check */
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
#include "Callback.hpp"
|
#include "Callback.hpp"
|
||||||
#else
|
|
||||||
typedef void (* callback_handler) (clbk_data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace upm {
|
namespace upm {
|
||||||
/**
|
/**
|
||||||
@ -80,11 +76,8 @@ namespace upm {
|
|||||||
class Pulsensor {
|
class Pulsensor {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
Pulsensor(Callback *callback);
|
Pulsensor(Callback *callback);
|
||||||
#else
|
|
||||||
Pulsensor(callback_handler handler);
|
|
||||||
#endif
|
|
||||||
void start_sampler();
|
void start_sampler();
|
||||||
void stop_sampler();
|
void stop_sampler();
|
||||||
|
|
||||||
@ -106,11 +99,8 @@ private:
|
|||||||
uint8_t second_beat; /**< Second heartbeat */
|
uint8_t second_beat; /**< Second heartbeat */
|
||||||
uint8_t ret; /**< Return value */
|
uint8_t ret; /**< Return value */
|
||||||
mraa::Aio pin_ctx; /**< The pin context */
|
mraa::Aio pin_ctx; /**< The pin context */
|
||||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
|
||||||
Callback *obj_callback; /**< The callback object */
|
Callback *obj_callback; /**< The callback object */
|
||||||
#else
|
|
||||||
callback_handler callback; /**< The callback function */
|
|
||||||
#endif
|
|
||||||
volatile uint16_t ctx_counter;
|
volatile uint16_t ctx_counter;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#ifdef JAVACALLBACK
|
|
||||||
#undef JAVACALLBACK
|
|
||||||
#endif
|
|
||||||
#include "rgbringcoder.hpp"
|
#include "rgbringcoder.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -29,10 +29,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef JAVACALLBACK
|
|
||||||
#undef JAVACALLBACK
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "sx1276.hpp"
|
#include "sx1276.hpp"
|
||||||
|
|
||||||
using namespace upm;
|
using namespace upm;
|
||||||
|
11
src/upm.i
11
src/upm.i
@ -2,6 +2,7 @@
|
|||||||
%include "stdint.i"
|
%include "stdint.i"
|
||||||
%include "upm_exception.i"
|
%include "upm_exception.i"
|
||||||
|
|
||||||
|
/* Import additional SWIG helps (not exposed in wrapper) */
|
||||||
%import _upm.i
|
%import _upm.i
|
||||||
|
|
||||||
%{
|
%{
|
||||||
@ -16,12 +17,14 @@
|
|||||||
|
|
||||||
#if (SWIG_JAVASCRIPT_V8)
|
#if (SWIG_JAVASCRIPT_V8)
|
||||||
%{
|
%{
|
||||||
// Because there's no guarantee that v8 will ever call garbage collection,
|
/* Because there's no guarantee that v8 will ever call garbage collection,
|
||||||
// we're adding a function that will allow a user to call it manually
|
* we're adding a function that will allow a user to call it manually
|
||||||
|
*/
|
||||||
void cleanUp()
|
void cleanUp()
|
||||||
{
|
{
|
||||||
// Call the v8 garbage collector as long as there is memory to clean up
|
/* Call the v8 garbage collector as long as there is memory to clean up
|
||||||
// See https://codereview.chromium.org/412163003 for this API change
|
* See https://codereview.chromium.org/412163003 for this API change
|
||||||
|
*/
|
||||||
#if (SWIG_V8_VERSION < 0x032838)
|
#if (SWIG_V8_VERSION < 0x032838)
|
||||||
while (!v8::V8::IdleNotification())
|
while (!v8::V8::IdleNotification())
|
||||||
#else
|
#else
|
||||||
|
@ -24,9 +24,6 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#ifdef JAVACALLBACK
|
|
||||||
#undef JAVACALLBACK
|
|
||||||
#endif
|
|
||||||
#include "wheelencoder.hpp"
|
#include "wheelencoder.hpp"
|
||||||
|
|
||||||
using namespace upm;
|
using namespace upm;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user