diff --git a/src/a110x/a110x.cxx b/src/a110x/a110x.cxx index 33c4f25a..8061b17f 100644 --- a/src/a110x/a110x.cxx +++ b/src/a110x/a110x.cxx @@ -54,6 +54,13 @@ bool A110X::magnetDetected() return (!mraa_gpio_read(m_gpio) ? true : false); } +#ifdef SWIGJAVA +void A110X::installISR( IsrCallback *cb) +{ +installISR(generic_callback_isr, cb); +} +#endif + void A110X::installISR(void (*isr)(void *), void *arg) { if (m_isrInstalled) diff --git a/src/a110x/a110x.h b/src/a110x/a110x.h index d18b811d..38c4fdb5 100644 --- a/src/a110x/a110x.h +++ b/src/a110x/a110x.h @@ -26,6 +26,10 @@ #include #include +#ifdef SWIGJAVA +#include "../IsrCallback.h" +#endif + namespace upm { /** * @brief A110X Hall Effect library @@ -85,8 +89,11 @@ namespace upm { * @param arg Pointer to an object to be supplied as an * argument to the ISR. */ +#ifdef SWIGJAVA + void installISR(IsrCallback *cb); +#else void installISR(void (*isr)(void *), void *arg); - +#endif /** * Uninstalls the previously installed ISR * @@ -94,6 +101,10 @@ namespace upm { void uninstallISR(); private: +#ifdef SWIGJAVA + void installISR(void (*isr)(void *), void *arg); +#endif + bool m_isrInstalled; mraa_gpio_context m_gpio; }; diff --git a/src/a110x/javaupm_a110x.i b/src/a110x/javaupm_a110x.i index da3a9c7c..782be2fa 100644 --- a/src/a110x/javaupm_a110x.i +++ b/src/a110x/javaupm_a110x.i @@ -2,17 +2,12 @@ %include "../upm.i" %include "stdint.i" %include "typemaps.i" -/* -%feature("director") ISRHelper; -%feature("nodirector") A110x; -*/ -%apply jobject { void * }; -/* -%{ - #include "isrhelper.h" -%} -%include "isrhelper.h" -*/ + +%feature("director") IsrCallback; + +%ignore generic_callback_isr; +%include "../IsrCallback.h" + %{ #include "a110x.h" %} diff --git a/src/hcsr04/hcsr04.cxx b/src/hcsr04/hcsr04.cxx index 362baac4..fa37815a 100644 --- a/src/hcsr04/hcsr04.cxx +++ b/src/hcsr04/hcsr04.cxx @@ -31,6 +31,14 @@ using namespace upm; +#ifdef SWIGJAVA +void +HCSR04::HCSR04 (uint8_t triggerPin, uint8_t echoPin, IsrCallback *cb); +{ + HCSR04 (triggerPin, echoPin, generic_callback_isr); +} +#endif + HCSR04::HCSR04 (uint8_t triggerPin, uint8_t echoPin, void (*fptr)(void *)) { mraa_result_t error = MRAA_SUCCESS; m_name = "HCSR04"; diff --git a/src/hcsr04/hcsr04.h b/src/hcsr04/hcsr04.h index 2e7f01ef..78a24017 100644 --- a/src/hcsr04/hcsr04.h +++ b/src/hcsr04/hcsr04.h @@ -29,6 +29,10 @@ #include #include +#ifdef SWIGJAVA +#include "../IsrCallback.h" +#endif + #define HIGH 1 #define LOW 0 @@ -58,6 +62,9 @@ namespace upm { */ class HCSR04 { public: +#ifdef SWIGJAVA + HCSR04 (uint8_t triggerPin, uint8_t echoPin, IsrCallback *cb); +#else /** * Instantiates an HCSR04 object * @@ -67,7 +74,7 @@ class HCSR04 { * falling-edge interrupts */ HCSR04 (uint8_t triggerPin, uint8_t echoPin, void (*fptr)(void *)); - +#endif /** * HCSR04 object destructor */ @@ -96,6 +103,9 @@ class HCSR04 { } private: +#ifdef SWIGJAVA + HCSR04 (uint8_t triggerPin, uint8_t echoPin, void (*fptr)(void *)); +#endif mraa_pwm_context m_pwmTriggerCtx; mraa_gpio_context m_echoPinCtx; diff --git a/src/hcsr04/javaupm_hcsr04.i b/src/hcsr04/javaupm_hcsr04.i index 15e0ac23..3605b6ed 100644 --- a/src/hcsr04/javaupm_hcsr04.i +++ b/src/hcsr04/javaupm_hcsr04.i @@ -1,6 +1,11 @@ %module javaupm_hcsr04 %include "../upm.i" +%feature("director") IsrCallback; + +%ignore generic_callback_isr; +%include "../IsrCallback.h" + %{ #include "hcsr04.h" %} diff --git a/src/lsm9ds0/lsm9ds0.cxx b/src/lsm9ds0/lsm9ds0.cxx index ecae4821..3a475715 100644 --- a/src/lsm9ds0/lsm9ds0.cxx +++ b/src/lsm9ds0/lsm9ds0.cxx @@ -707,7 +707,6 @@ void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, } #endif - void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void (*isr)(void *), void *arg) { diff --git a/src/mma7660/javaupm_mma7660.i b/src/mma7660/javaupm_mma7660.i index 39656af9..5a7779a9 100644 --- a/src/mma7660/javaupm_mma7660.i +++ b/src/mma7660/javaupm_mma7660.i @@ -3,10 +3,14 @@ %include "cpointer.i" %include "typemaps.i" +%feature("director") IsrCallback; + +%ignore generic_callback_isr; +%include "../IsrCallback.h" + %apply int *OUTPUT { int *x, int *y, int *z }; %apply float *OUTPUT { float *ax, float *ay, float *az }; - %{ #include "mma7660.h" %} diff --git a/src/mma7660/mma7660.cxx b/src/mma7660/mma7660.cxx index 723a78d6..45aa0248 100644 --- a/src/mma7660/mma7660.cxx +++ b/src/mma7660/mma7660.cxx @@ -195,6 +195,13 @@ bool MMA7660::tiltShake() return false; } +#ifdef SWIGJAVA +void MMA7660::installISR(int pin, IsrCallback *cb) +{ + installISR(pin, generic_callback_isr, cb); +} +#endif + void MMA7660::installISR(int pin, void (*isr)(void *), void *arg) { if (m_isrInstalled) diff --git a/src/mma7660/mma7660.h b/src/mma7660/mma7660.h index 03eb95fb..c9ec4683 100644 --- a/src/mma7660/mma7660.h +++ b/src/mma7660/mma7660.h @@ -27,6 +27,10 @@ #include #include +#ifdef SWIGJAVA +#include "../IsrCallback.h" +#endif + #define MMA7660_I2C_BUS 0 #define MMA7660_DEFAULT_I2C_ADDR 0x4c @@ -248,8 +252,11 @@ namespace upm { * @param arg Pointer to an object to be supplied as an * argument to the ISR. */ +#ifdef SWIGJAVA + void installISR(int pin, IsrCallback *cb); +#else void installISR(int pin, void (*isr)(void *), void *arg); - +#endif /** * Uninstalls the previously installed ISR * @@ -276,6 +283,10 @@ namespace upm { bool setSampleRate(MMA7660_AUTOSLEEP_T sr); private: +#ifdef SWIGJAVA + void installISR(int pin, void (*isr)(void *), void *arg); +#endif + bool m_isrInstalled; mraa_i2c_context m_i2c; mraa_gpio_context m_gpio; diff --git a/src/mpu9150/javaupm_mpu9150.i b/src/mpu9150/javaupm_mpu9150.i index a185dd6b..deb45ebf 100644 --- a/src/mpu9150/javaupm_mpu9150.i +++ b/src/mpu9150/javaupm_mpu9150.i @@ -1,8 +1,23 @@ %module javaupm_mpu9150 %include "../upm.i" %include "typemaps.i" +%include "arrays_java.i" +%feature("director") IsrCallback; + +%ignore generic_callback_isr; +%include "../IsrCallback.h" + +%apply int {mraa::Edge}; %apply float *INOUT { float *x, float *y, float *z }; +%apply unsigned char[] {uint8_t *}; + +%{ + #include "mpu60x0.h" +%} + +%include "mpu60x0.h" + %{ #include "mpu9150.h" diff --git a/src/mpu9150/mpu60x0.cxx b/src/mpu9150/mpu60x0.cxx index 619524e8..120725cf 100644 --- a/src/mpu9150/mpu60x0.cxx +++ b/src/mpu9150/mpu60x0.cxx @@ -380,6 +380,14 @@ uint8_t MPU60X0::getInterruptPinConfig() return readReg(REG_INT_PIN_CFG); } +#ifdef SWIGJAVA +void MPU60X0::installISR(int gpio, mraa::Edge level, + IsrCallback *cb) +{ + installISR(intr, gpio, level, generic_callback_isr, cb); +} +#endif + void MPU60X0::installISR(int gpio, mraa::Edge level, void (*isr)(void *), void *arg) { diff --git a/src/mpu9150/mpu60x0.h b/src/mpu9150/mpu60x0.h index b5d98d55..693de505 100644 --- a/src/mpu9150/mpu60x0.h +++ b/src/mpu9150/mpu60x0.h @@ -34,6 +34,10 @@ #include #endif +#ifdef SWIGJAVA +#include "../IsrCallback.h" +#endif + #define MPU60X0_I2C_BUS 0 #define MPU60X0_DEFAULT_I2C_ADDR 0x68 @@ -904,7 +908,11 @@ namespace upm { * @param isr the interrupt handler, accepting a void * argument * @param arg the argument to pass the the interrupt handler */ +#ifdef SWIGJAVA + void installISR(int gpio, mraa::Edge level, IsrCallback *cb); +#else void installISR(int gpio, mraa::Edge level, void (*isr)(void *), void *arg); +#endif /** * uninstall a previously installed interrupt handler @@ -931,6 +939,10 @@ namespace upm { float m_gyroScale; private: +#ifdef SWIGJAVA + void installISR(int gpio, mraa::Edge level, void (*isr)(void *), void *arg); +#endif + mraa::I2c m_i2c; uint8_t m_addr;