diff --git a/src/IsrCallback.h b/src/IsrCallback.h new file mode 100644 index 00000000..34a85a32 --- /dev/null +++ b/src/IsrCallback.h @@ -0,0 +1,23 @@ +#pragma once + +#ifdef SWIGJAVA +class IsrCallback +{ + public: + virtual ~IsrCallback() + { + } + virtual void run() + { /* empty, overloaded in Java*/ + } + + private: +}; + + +static void generic_callback_isr (void* data) +{ + IsrCallback* callback = (IsrCallback*) data; + callback->run(); +} +#endif diff --git a/src/ad8232/ad8232.h b/src/ad8232/ad8232.h index c2f526e9..8cbfe03c 100644 --- a/src/ad8232/ad8232.h +++ b/src/ad8232/ad8232.h @@ -26,7 +26,14 @@ #include #include +#ifdef SWIGJAVA +#undef SWIGJAVA #include +#define SWIGJAVA +#else +#include +#endif + #include #define AD8232_DEFAULT_AREF 3.3 diff --git a/src/lcd/eboled.h b/src/lcd/eboled.h index 9c6e49d6..fbaa3ac5 100644 --- a/src/lcd/eboled.h +++ b/src/lcd/eboled.h @@ -25,7 +25,15 @@ #include #include + +#ifdef SWIGJAVA +#undef SWIGJAVA #include +#define SWIGJAVA +#else +#include +#endif + #include "lcd.h" #include "ssd.h" diff --git a/src/lcd/javaupm_i2clcd.i b/src/lcd/javaupm_i2clcd.i index 2d046d08..5cfe3ab7 100644 --- a/src/lcd/javaupm_i2clcd.i +++ b/src/lcd/javaupm_i2clcd.i @@ -7,24 +7,15 @@ %apply unsigned char[] {uint8_t *}; %apply uint8_t *OUTPUT { uint8_t *data }; -%include "ssd.h" -%{ - #include "ssd.h" -%} %include "lcd.h" %{ #include "lcd.h" %} -%include "jhd1313m1.h" +%include "ssd.h" %{ - #include "jhd1313m1.h" -%} - -%include "lcm1602.h" -%{ - #include "lcm1602.h" + #include "ssd.h" %} %include "ssd1327.h" @@ -37,13 +28,24 @@ #include "ssd1308.h" %} -%include "sainsmartks.h" -%{ - #include "sainsmartks.h" -%} - %include "eboled.h" %{ #include "eboled.h" %} +%include "lcm1602.h" +%{ + #include "lcm1602.h" +%} + +%include "jhd1313m1.h" +%{ + #include "jhd1313m1.h" +%} + +%include "sainsmartks.h" +%{ + #include "sainsmartks.h" +%} + + diff --git a/src/lcd/lcm1602.h b/src/lcd/lcm1602.h index 0757047d..f2d7b50c 100644 --- a/src/lcd/lcm1602.h +++ b/src/lcd/lcm1602.h @@ -34,7 +34,16 @@ #include #include + +#ifdef SWIGJAVA +#undef SWIGJAVA #include +#define SWIGJAVA +#else +#include +#endif + + #include "lcd.h" namespace upm diff --git a/src/lsm9ds0/javaupm_lsm9ds0.i b/src/lsm9ds0/javaupm_lsm9ds0.i index 94debcac..ff1312ff 100644 --- a/src/lsm9ds0/javaupm_lsm9ds0.i +++ b/src/lsm9ds0/javaupm_lsm9ds0.i @@ -4,10 +4,15 @@ %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 *buf}; -%include "lsm9ds0.h" %{ #include "lsm9ds0.h" %} diff --git a/src/lsm9ds0/lsm9ds0.cxx b/src/lsm9ds0/lsm9ds0.cxx index 79579dbd..ecae4821 100644 --- a/src/lsm9ds0/lsm9ds0.cxx +++ b/src/lsm9ds0/lsm9ds0.cxx @@ -699,6 +699,15 @@ uint8_t LSM9DS0::getInterruptGen2Src() return readReg(DEV_XM, REG_INT_GEN_2_SRC); } +#ifdef SWIGJAVA +void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, + IsrCallback *cb) +{ + installISR(intr, gpio, level, generic_callback_isr, cb); +} +#endif + + void LSM9DS0::installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void (*isr)(void *), void *arg) { diff --git a/src/lsm9ds0/lsm9ds0.h b/src/lsm9ds0/lsm9ds0.h index 565343fa..bcbd6823 100644 --- a/src/lsm9ds0/lsm9ds0.h +++ b/src/lsm9ds0/lsm9ds0.h @@ -25,7 +25,19 @@ #include #include + +#ifdef SWIGJAVA +#undef SWIGJAVA #include +#define SWIGJAVA +#else +#include +#endif + +#ifdef SWIGJAVA +#include "../IsrCallback.h" +#endif + #define LSM9DS0_I2C_BUS 1 #define LSM9DS0_DEFAULT_XM_ADDR 0x1d @@ -1382,6 +1394,10 @@ namespace upm { */ uint8_t getInterruptGen2Src(); +#ifdef SWIGJAVA + void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, + IsrCallback *cb); +#else /** * install an interrupt handler. * @@ -1396,7 +1412,7 @@ namespace upm { */ void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void (*isr)(void *), void *arg); - +#endif /** * uninstall a previously installed interrupt handler * @@ -1431,6 +1447,11 @@ namespace upm { private: // OR'd with a register, this enables register autoincrement mode, // which we need. +#ifdef SWIGJAVA + void installISR(INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, + void (*isr)(void *), void *arg); +#endif + static const uint8_t m_autoIncrementMode = 0x80; mraa::I2c m_i2cG; diff --git a/src/mpu9150/mpu60x0.h b/src/mpu9150/mpu60x0.h index e54b1a98..b5d98d55 100644 --- a/src/mpu9150/mpu60x0.h +++ b/src/mpu9150/mpu60x0.h @@ -25,7 +25,14 @@ #include #include + +#ifdef SWIGJAVA +#undef SWIGJAVA #include +#define SWIGJAVA +#else +#include +#endif #define MPU60X0_I2C_BUS 0 #define MPU60X0_DEFAULT_I2C_ADDR 0x68 diff --git a/src/pn532/pn532.h b/src/pn532/pn532.h index 3e6f7f7c..985d49bb 100644 --- a/src/pn532/pn532.h +++ b/src/pn532/pn532.h @@ -32,7 +32,15 @@ #include #include #include + +#ifdef SWIGJAVA +#undef SWIGJAVA #include +#define SWIGJAVA +#else +#include +#endif + #define PN532_I2C_BUS 0 #define PN532_DEFAULT_I2C_ADDR (0x48 >> 1) diff --git a/src/rgbringcoder/rgbringcoder.h b/src/rgbringcoder/rgbringcoder.h index 5102bf48..e3305924 100644 --- a/src/rgbringcoder/rgbringcoder.h +++ b/src/rgbringcoder/rgbringcoder.h @@ -27,7 +27,15 @@ #include #include #include + +#ifdef SWIGJAVA +#undef SWIGJAVA #include +#define SWIGJAVA +#else +#include +#endif + #include diff --git a/src/rpr220/javaupm_rpr220.i b/src/rpr220/javaupm_rpr220.i index d5af1275..b19e90d2 100644 --- a/src/rpr220/javaupm_rpr220.i +++ b/src/rpr220/javaupm_rpr220.i @@ -1,8 +1,13 @@ %module javaupm_rpr220 %include "../upm.i" + +%feature("director") IsrCallback; + +%ignore generic_callback_isr; +%include "../IsrCallback.h" + %{ #include "rpr220.h" %} - %include "rpr220.h" diff --git a/src/rpr220/rpr220.cxx b/src/rpr220/rpr220.cxx index 795c3b3b..3b4bde14 100644 --- a/src/rpr220/rpr220.cxx +++ b/src/rpr220/rpr220.cxx @@ -26,6 +26,7 @@ #include "rpr220.h" + using namespace upm; using namespace std; @@ -55,6 +56,13 @@ bool RPR220::blackDetected() return (mraa_gpio_read(m_gpio) ? true : false); } +#ifdef SWIGJAVA +void RPR220::installISR(IsrCallback *cb) +{ + installISR(generic_callback_isr, cb); +} +#endif + void RPR220::installISR(void (*isr)(void *), void *arg) { if (m_isrInstalled) diff --git a/src/rpr220/rpr220.h b/src/rpr220/rpr220.h index 33b30f60..ad36ae09 100644 --- a/src/rpr220/rpr220.h +++ b/src/rpr220/rpr220.h @@ -26,6 +26,10 @@ #include #include +#ifdef SWIGJAVA +#include "../IsrCallback.h" +#endif + namespace upm { /** @@ -83,6 +87,9 @@ namespace upm { */ bool blackDetected(); +#ifdef SWIGJAVA + void installISR(IsrCallback *cb); +#else /** * Installs an ISR to be called when * black is detected @@ -92,6 +99,7 @@ namespace upm { * argument to the ISR. */ void installISR(void (*isr)(void *), void *arg); +#endif /** * Uninstalls the previously installed ISR @@ -100,6 +108,9 @@ namespace upm { void uninstallISR(); private: +#ifdef SWIGJAVA + void installISR(void (*isr)(void *), void *arg); +#endif bool m_isrInstalled; mraa_gpio_context m_gpio; };