java: Use Runnables instead of IsrCallbacks in Java

Signed-off-by: Petre Eftime <petre.p.eftime@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit is contained in:
Petre Eftime 2015-12-23 17:47:26 +02:00 committed by Mihai Tudor Panu
parent e1c66c351a
commit 2cd043c2a1
35 changed files with 96 additions and 162 deletions

View File

@ -67,6 +67,7 @@ macro(upm_SWIG_JAVA)
if (BUILDSWIGJAVA AND BUILDSWIG) if (BUILDSWIGJAVA AND BUILDSWIG)
FIND_PACKAGE (JNI REQUIRED) FIND_PACKAGE (JNI REQUIRED)
pkg_check_modules (MRAAJAVA REQUIRED mraajava>=0.8.0)
include_directories ( include_directories (
${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}
@ -77,7 +78,7 @@ macro(upm_SWIG_JAVA)
set_source_files_properties (javaupm_${libname}.i PROPERTIES CPLUSPLUS ON) set_source_files_properties (javaupm_${libname}.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties (javaupm_${libname}.i PROPERTIES SWIG_FLAGS ";-package;upm_${libname};-I${CMAKE_BINARY_DIR}/src") set_source_files_properties (javaupm_${libname}.i PROPERTIES SWIG_FLAGS ";-package;upm_${libname};-I${CMAKE_BINARY_DIR}/src")
swig_add_module (javaupm_${libname} java javaupm_${libname}.i ${module_src}) swig_add_module (javaupm_${libname} java javaupm_${libname}.i ${module_src})
swig_link_libraries (javaupm_${libname} ${MRAA_LIBRARIES} ${JAVA_LIBRARIES}) swig_link_libraries (javaupm_${libname} ${MRAAJAVA_LDFLAGS} ${JAVA_LDFLAGS})
target_include_directories ( ${SWIG_MODULE_javaupm_${libname}_REAL_NAME} target_include_directories ( ${SWIG_MODULE_javaupm_${libname}_REAL_NAME}
PUBLIC PUBLIC
"${JAVA_INCLUDE_DIRS}" "${JAVA_INCLUDE_DIRS}"

View File

@ -1,25 +0,0 @@
#pragma once
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
class IsrCallback
{
public:
virtual ~IsrCallback()
{
}
virtual void run()
{ /* empty, overloaded in Java*/
}
private:
};
static void generic_callback_isr (void* data)
{
IsrCallback* callback = (IsrCallback*) data;
if (callback == NULL)
return;
callback->run();
}
#endif

View File

@ -58,9 +58,9 @@ bool A110X::magnetDetected()
} }
#ifdef JAVACALLBACK #ifdef JAVACALLBACK
void A110X::installISR( IsrCallback *cb) void A110X::installISR(jobject runnable)
{ {
installISR(generic_callback_isr, cb); installISR(mraa_java_isr_callback, runnable);
} }
#endif #endif

View File

@ -26,10 +26,6 @@
#include <string> #include <string>
#include <mraa/gpio.h> #include <mraa/gpio.h>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
namespace upm { namespace upm {
/** /**
* @brief A110X Hall Effect library * @brief A110X Hall Effect library
@ -90,7 +86,7 @@ namespace upm {
* argument to the ISR. * argument to the ISR.
*/ */
#if defined(SWIGJAVA) || defined(JAVACALLBACK) #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(IsrCallback *cb); void installISR(jobject runnable);
#else #else
void installISR(void (*isr)(void *), void *arg); void installISR(void (*isr)(void *), void *arg);
#endif #endif

View File

@ -1,13 +1,8 @@
%module(directors="1") javaupm_a110x %module javaupm_a110x
%include "../upm.i" %include "../upm.i"
%include "stdint.i" %include "stdint.i"
%include "typemaps.i" %include "typemaps.i"
%feature("director") IsrCallback;
SWIG_DIRECTOR_OWNED(IsrCallback)
%ignore generic_callback_isr;
%include "../IsrCallback.h"
%{ %{
#include "a110x.h" #include "a110x.h"
%} %}

View File

@ -489,14 +489,21 @@ bool BMA220::resetInterrupts()
return writeReg(REG_ENABLE_CONFIG2, reg); return writeReg(REG_ENABLE_CONFIG2, reg);
} }
#ifdef SWIGJAVA #if defined(SWIGJAVA) || (JAVACALLBACK)
void BMA220::installISR(int gpio, mraa::Edge level, void BMA220::installISR(int gpio, mraa::Edge level,
IsrCallback *cb) jobject runnable)
{ {
installISR(gpio, level, generic_callback_isr, cb); // delete any existing ISR and GPIO context
} uninstallISR();
#endif
// create gpio context
m_gpioIntr = new mraa::Gpio(gpio);
m_gpioIntr->dir(mraa::DIR_IN);
m_gpioIntr->isr(level, runnable);
}
#else
void BMA220::installISR(int gpio, mraa::Edge level, void BMA220::installISR(int gpio, mraa::Edge level,
void (*isr)(void *), void *arg) void (*isr)(void *), void *arg)
{ {
@ -509,6 +516,7 @@ void BMA220::installISR(int gpio, mraa::Edge level,
m_gpioIntr->dir(mraa::DIR_IN); m_gpioIntr->dir(mraa::DIR_IN);
m_gpioIntr->isr(level, isr, arg); m_gpioIntr->isr(level, isr, arg);
} }
#endif
void BMA220::uninstallISR() void BMA220::uninstallISR()
{ {

View File

@ -28,10 +28,6 @@
#include <mraa/i2c.hpp> #include <mraa/i2c.hpp>
#include <mraa/gpio.hpp> #include <mraa/gpio.hpp>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
#define BMA220_I2C_BUS 0 #define BMA220_I2C_BUS 0
#define BMA220_DEFAULT_ADDR 0x0a #define BMA220_DEFAULT_ADDR 0x0a
@ -782,7 +778,7 @@ namespace upm {
bool resetInterrupts(); bool resetInterrupts();
#if defined(SWIGJAVA) || defined(JAVACALLBACK) #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(int gpio, mraa::Edge level, IsrCallback *cb); void installISR(int gpio, mraa::Edge level, jobject runnable);
#else #else
/** /**
* install an interrupt handler. * install an interrupt handler.

View File

@ -1,15 +1,10 @@
%module(directors="1") javaupm_bma220 %module javaupm_bma220
%include "../upm.i" %include "../upm.i"
%include "cpointer.i" %include "cpointer.i"
%include "typemaps.i" %include "typemaps.i"
%include "arrays_java.i"; %include "arrays_java.i";
%include "../java_buffer.i" %include "../java_buffer.i"
%feature("director") IsrCallback;
SWIG_DIRECTOR_OWNED(IsrCallback)
%ignore generic_callback_isr;
%include "../IsrCallback.h"
%apply int {mraa::Edge}; %apply int {mraa::Edge};
%apply float *INOUT { float *x, float *y, float *z }; %apply float *INOUT { float *x, float *y, float *z };

View File

@ -279,9 +279,9 @@ int GroveButton::value()
} }
#ifdef JAVACALLBACK #ifdef JAVACALLBACK
void GroveButton::installISR(mraa::Edge level, IsrCallback *cb) void GroveButton::installISR(mraa::Edge level, jobject runnable)
{ {
installISR(level, generic_callback_isr, cb); installISR(level, mraa_java_isr_callback, runnable);
} }
#endif #endif

View File

@ -29,10 +29,6 @@
#include <mraa/aio.hpp> #include <mraa/aio.hpp>
#include <mraa/gpio.hpp> #include <mraa/gpio.hpp>
#ifdef JAVACALLBACK
#include "../IsrCallback.h"
#endif
namespace upm { namespace upm {
/** /**
@ -392,7 +388,7 @@ class GroveButton: public Grove {
* argument to the ISR. * argument to the ISR.
*/ */
#if defined(SWIGJAVA) || defined(JAVACALLBACK) #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(mraa::Edge level, IsrCallback *cb); void installISR(mraa::Edge level, jobject runnable);
#else #else
void installISR(mraa::Edge level, void (*isr)(void *), void *arg); void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
#endif #endif

View File

@ -1,12 +1,7 @@
%module (directors="1", docstring="Basic Grove sensors") javaupm_grove %module (docstring="Basic Grove sensors") javaupm_grove
%include "../upm.i" %include "../upm.i"
%feature("director") IsrCallback;
SWIG_DIRECTOR_OWNED(IsrCallback)
%ignore generic_callback_isr;
%include "../IsrCallback.h"
%apply int {mraa::Edge} %apply int {mraa::Edge}
%{ %{

View File

@ -30,6 +30,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <functional> #include <functional>
#ifdef JAVACALLBACK
#undef JAVACALLBACK
#endif
#include "hcsr04.h" #include "hcsr04.h"
using namespace upm; using namespace upm;

View File

@ -30,10 +30,6 @@
#include <mraa/pwm.h> #include <mraa/pwm.h>
#include <sys/time.h> #include <sys/time.h>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
#define CM 1 #define CM 1
#define INC 0 #define INC 0

View File

@ -1,4 +1,4 @@
%module(directors="1") javaupm_hcsr04 %module javaupm_hcsr04
%include "../upm.i" %include "../upm.i"
%{ %{

View File

@ -1,15 +1,10 @@
%module(directors="1") javaupm_lsm9ds0 %module javaupm_lsm9ds0
%include "../upm.i" %include "../upm.i"
%include "cpointer.i" %include "cpointer.i"
%include "typemaps.i" %include "typemaps.i"
%include "arrays_java.i"; %include "arrays_java.i";
%include "../java_buffer.i" %include "../java_buffer.i"
%feature("director") IsrCallback;
SWIG_DIRECTOR_OWNED(IsrCallback)
%ignore generic_callback_isr;
%include "../IsrCallback.h"
%apply int {mraa::Edge}; %apply int {mraa::Edge};
%apply float *INOUT { float *x, float *y, float *z }; %apply float *INOUT { float *x, float *y, float *z };

View File

@ -741,14 +741,21 @@ uint8_t LSM9DS0::getInterruptGen2Src()
return readReg(DEV_XM, REG_INT_GEN_2_SRC); return readReg(DEV_XM, REG_INT_GEN_2_SRC);
} }
#ifdef SWIGJAVA #if defined(SWIGJAVA) || defined (JAVACALLBACK)
void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level,
IsrCallback *cb) jobject runnable)
{ {
installISR(intr, gpio, level, generic_callback_isr, cb); // delete any existing ISR and GPIO context
} uninstallISR(intr);
#endif
// greate gpio context
getPin(intr) = new mraa::Gpio(gpio);
getPin(intr)->dir(mraa::DIR_IN);
getPin(intr)->isr(level, runnable);
}
#else
void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level,
void (*isr)(void *), void *arg) void (*isr)(void *), void *arg)
{ {
@ -761,6 +768,7 @@ void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level,
getPin(intr)->dir(mraa::DIR_IN); getPin(intr)->dir(mraa::DIR_IN);
getPin(intr)->isr(level, isr, arg); getPin(intr)->isr(level, isr, arg);
} }
#endif
void LSM9DS0::uninstallISR(INTERRUPT_PINS_T intr) void LSM9DS0::uninstallISR(INTERRUPT_PINS_T intr)
{ {

View File

@ -29,10 +29,6 @@
#include <mraa/gpio.hpp> #include <mraa/gpio.hpp>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
#define LSM9DS0_I2C_BUS 1 #define LSM9DS0_I2C_BUS 1
#define LSM9DS0_DEFAULT_XM_ADDR 0x1d #define LSM9DS0_DEFAULT_XM_ADDR 0x1d
#define LSM9DS0_DEFAULT_GYRO_ADDR 0x6b #define LSM9DS0_DEFAULT_GYRO_ADDR 0x6b
@ -1413,7 +1409,7 @@ namespace upm {
#if defined(SWIGJAVA) || defined(JAVACALLBACK) #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level,
IsrCallback *cb); jobject runnable);
#else #else
/** /**
* install an interrupt handler. * install an interrupt handler.
@ -1464,11 +1460,6 @@ namespace upm {
private: private:
// OR'd with a register, this enables register autoincrement mode, // OR'd with a register, this enables register autoincrement mode,
// which we need. // which we need.
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level,
void (*isr)(void *), void *arg);
#endif
static const uint8_t m_autoIncrementMode = 0x80; static const uint8_t m_autoIncrementMode = 0x80;
mraa::I2c m_i2cG; mraa::I2c m_i2cG;

View File

@ -1,13 +1,8 @@
%module(directors="1") javaupm_mma7660 %module javaupm_mma7660
%include "../upm.i" %include "../upm.i"
%include "cpointer.i" %include "cpointer.i"
%include "typemaps.i" %include "typemaps.i"
%feature("director") IsrCallback;
SWIG_DIRECTOR_OWNED(IsrCallback)
%ignore generic_callback_isr;
%include "../IsrCallback.h"
%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 };

View File

@ -207,9 +207,9 @@ bool MMA7660::tiltShake()
} }
#ifdef JAVACALLBACK #ifdef JAVACALLBACK
void MMA7660::installISR(int pin, IsrCallback *cb) void MMA7660::installISR(int pin, jobject runnable)
{ {
installISR(pin, generic_callback_isr, cb); installISR(pin, mraa_java_isr_callback, runnable);
} }
#endif #endif

View File

@ -27,10 +27,6 @@
#include <mraa/i2c.h> #include <mraa/i2c.h>
#include <mraa/gpio.h> #include <mraa/gpio.h>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
#define MMA7660_I2C_BUS 0 #define MMA7660_I2C_BUS 0
#define MMA7660_DEFAULT_I2C_ADDR 0x4c #define MMA7660_DEFAULT_I2C_ADDR 0x4c
@ -271,7 +267,7 @@ namespace upm {
* argument to the ISR. * argument to the ISR.
*/ */
#if defined(SWIGJAVA) || defined(JAVACALLBACK) #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(int pin, IsrCallback *cb); void installISR(int pin, jobject runnable);
#else #else
void installISR(int pin, void (*isr)(void *), void *arg); void installISR(int pin, void (*isr)(void *), void *arg);
#endif #endif

View File

@ -1,14 +1,9 @@
%module(directors="1") javaupm_mpu9150 %module javaupm_mpu9150
%include "../upm.i" %include "../upm.i"
%include "typemaps.i" %include "typemaps.i"
%include "arrays_java.i" %include "arrays_java.i"
%include "../java_buffer.i" %include "../java_buffer.i"
%feature("director") IsrCallback;
SWIG_DIRECTOR_OWNED(IsrCallback)
%ignore generic_callback_isr;
%include "../IsrCallback.h"
%apply int {mraa::Edge}; %apply int {mraa::Edge};
%{ %{

View File

@ -384,14 +384,20 @@ uint8_t MPU60X0::getInterruptPinConfig()
return readReg(REG_INT_PIN_CFG); return readReg(REG_INT_PIN_CFG);
} }
#ifdef JAVACALLBACK #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void MPU60X0::installISR(int gpio, mraa::Edge level, void MPU60X0::installISR(int gpio, mraa::Edge level,
IsrCallback *cb) jobject runnable)
{ {
installISR(gpio, level, generic_callback_isr, cb); // delete any existing ISR and GPIO context
} uninstallISR();
#endif
// greate gpio context
m_gpioIRQ = new mraa::Gpio(gpio);
m_gpioIRQ->dir(mraa::DIR_IN);
m_gpioIRQ->isr(level, runnable);
}
#else
void MPU60X0::installISR(int gpio, mraa::Edge level, void MPU60X0::installISR(int gpio, mraa::Edge level,
void (*isr)(void *), void *arg) void (*isr)(void *), void *arg)
{ {
@ -404,6 +410,7 @@ void MPU60X0::installISR(int gpio, mraa::Edge level,
m_gpioIRQ->dir(mraa::DIR_IN); m_gpioIRQ->dir(mraa::DIR_IN);
m_gpioIRQ->isr(level, isr, arg); m_gpioIRQ->isr(level, isr, arg);
} }
#endif
void MPU60X0::uninstallISR() void MPU60X0::uninstallISR()
{ {

View File

@ -29,10 +29,6 @@
#include <mraa/gpio.hpp> #include <mraa/gpio.hpp>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
#define MPU60X0_I2C_BUS 0 #define MPU60X0_I2C_BUS 0
#define MPU60X0_DEFAULT_I2C_ADDR 0x68 #define MPU60X0_DEFAULT_I2C_ADDR 0x68
@ -921,7 +917,7 @@ namespace upm {
* @param arg the argument to pass the the interrupt handler * @param arg the argument to pass the the interrupt handler
*/ */
#if defined(SWIGJAVA) || defined(JAVACALLBACK) #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(int gpio, mraa::Edge level, IsrCallback *cb); void installISR(int gpio, mraa::Edge level, jobject runnable);
#else #else
void installISR(int gpio, mraa::Edge level, void (*isr)(void *), void *arg); void installISR(int gpio, mraa::Edge level, void (*isr)(void *), void *arg);
#endif #endif
@ -951,10 +947,6 @@ namespace upm {
float m_gyroScale; float m_gyroScale;
private: private:
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(int gpio, mraa::Edge level, void (*isr)(void *), void *arg);
#endif
mraa::I2c m_i2c; mraa::I2c m_i2c;
uint8_t m_addr; uint8_t m_addr;

View File

@ -32,6 +32,10 @@
#include <string> #include <string>
#include <stdexcept> #include <stdexcept>
#ifdef JAVACALLBACK
#undef JAVACALLBACK
#endif
#include "pn532.h" #include "pn532.h"
using namespace upm; using namespace upm;

View File

@ -24,6 +24,9 @@
#include <iostream> #include <iostream>
#ifdef JAVACALLBACK
#undef JAVACALLBACK
#endif
#include "rgbringcoder.h" #include "rgbringcoder.h"
using namespace std; using namespace std;

View File

@ -1,12 +1,7 @@
%module(directors="1") javaupm_rpr220 %module javaupm_rpr220
%include "../upm.i" %include "../upm.i"
%feature("director") IsrCallback;
SWIG_DIRECTOR_OWNED(IsrCallback)
%ignore generic_callback_isr;
%include "../IsrCallback.h"
%{ %{
#include "rpr220.h" #include "rpr220.h"
%} %}

View File

@ -59,9 +59,9 @@ bool RPR220::blackDetected()
} }
#ifdef JAVACALLBACK #ifdef JAVACALLBACK
void RPR220::installISR(IsrCallback *cb) void RPR220::installISR(jobject runnable)
{ {
installISR(generic_callback_isr, cb); installISR(mraa_java_isr_callback, runnable);
} }
#endif #endif

View File

@ -26,10 +26,6 @@
#include <string> #include <string>
#include <mraa/gpio.h> #include <mraa/gpio.h>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
namespace upm { namespace upm {
/** /**
@ -88,7 +84,7 @@ namespace upm {
bool blackDetected(); bool blackDetected();
#if defined(SWIGJAVA) || defined(JAVACALLBACK) #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(IsrCallback *cb); void installISR(jobject runnable);
#else #else
/** /**
* Installs an ISR to be called when * Installs an ISR to be called when

View File

@ -1,4 +1,4 @@
%module(directors="1") javaupm_sx1276 %module javaupm_sx1276
%include "../upm.i" %include "../upm.i"
%include "cpointer.i" %include "cpointer.i"
%include "typemaps.i" %include "typemaps.i"

View File

@ -29,6 +29,10 @@
#include <string> #include <string>
#include <string.h> #include <string.h>
#ifdef JAVACALLBACK
#undef JAVACALLBACK
#endif
#include "sx1276.h" #include "sx1276.h"
using namespace upm; using namespace upm;

View File

@ -1,12 +1,7 @@
%module (directors=1, docstring="TTP223 Touch Sensor") javaupm_ttp223 %module (docstring="TTP223 Touch Sensor") javaupm_ttp223
%include "../upm.i" %include "../upm.i"
%feature("director") IsrCallback;
SWIG_DIRECTOR_OWNED(IsrCallback)
%ignore generic_callback_isr;
%include "../IsrCallback.h"
%apply int {mraa::Edge} %apply int {mraa::Edge}

View File

@ -60,9 +60,9 @@ bool TTP223::isPressed() {
} }
#ifdef JAVACALLBACK #ifdef JAVACALLBACK
void TTP223::installISR(mraa::Edge level, IsrCallback *cb) void TTP223::installISR(mraa::Edge level, jobject runnable)
{ {
installISR(level, generic_callback_isr, cb); installISR(level, mraa_java_isr_callback, runnable);
} }
#endif #endif

View File

@ -26,10 +26,6 @@
#include <string> #include <string>
#include <mraa/gpio.hpp> #include <mraa/gpio.hpp>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
namespace upm { namespace upm {
/** /**
* @brief TTP223 Touch Detector Sensor library * @brief TTP223 Touch Detector Sensor library
@ -100,7 +96,7 @@ class TTP223 {
* argument to the ISR. * argument to the ISR.
*/ */
#if defined(SWIGJAVA) || defined(JAVACALLBACK) #if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(mraa::Edge level, IsrCallback *cb); void installISR(mraa::Edge level, jobject runnable);
#else #else
void installISR(mraa::Edge level, void (*isr)(void *), void *arg); void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
#endif #endif

View File

@ -26,4 +26,6 @@ void cleanUp();
#endif #endif
#if (SWIGJAVA) #if (SWIGJAVA)
%typemap(jtype) jobject runnable "java.lang.Runnable"
%typemap(jstype) jobject runnable "java.lang.Runnable"
#endif #endif

View File

@ -24,6 +24,9 @@
#include <iostream> #include <iostream>
#ifdef JAVACALLBACK
#undef JAVACALLBACK
#endif
#include "wheelencoder.h" #include "wheelencoder.h"
using namespace upm; using namespace upm;