diff --git a/examples/c++/hcsr04.cxx b/examples/c++/hcsr04.cxx index 5a9a485f..c0a27254 100644 --- a/examples/c++/hcsr04.cxx +++ b/examples/c++/hcsr04.cxx @@ -42,15 +42,10 @@ sig_handler(int signo) } //! [Interesting] -void -interrupt (void * args) { - sonar->ackEdgeDetected (); -} - int main(int argc, char **argv) { - sonar = new upm::HCSR04(5, 6, &interrupt); + sonar = new upm::HCSR04(5, 6); signal(SIGINT, sig_handler); sleep(1); diff --git a/examples/java/HCSR04Sample.java b/examples/java/HCSR04Sample.java index aaddd13c..1c3cf213 100644 --- a/examples/java/HCSR04Sample.java +++ b/examples/java/HCSR04Sample.java @@ -22,8 +22,6 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import upm_hcsr04.IsrCallback; - //NOT TESTED!!! public class HCSR04Sample { @@ -38,10 +36,8 @@ public class HCSR04Sample { // ! [Interesting] public static void main(String[] args) throws InterruptedException { - HCSR04ISR callback = new HCSR04ISR(); + upm_hcsr04.HCSR04 sonar = new upm_hcsr04.HCSR04((short) 5, (short) 6); - upm_hcsr04.HCSR04 sonar = new upm_hcsr04.HCSR04((short) 5, (short) 6, callback); - callback.setSonar(sonar); Thread.sleep(1000); while (true) { @@ -53,24 +49,4 @@ public class HCSR04Sample { } } } - -class HCSR04ISR extends IsrCallback { - - private upm_hcsr04.HCSR04 sonar = null; - - public HCSR04ISR() { - super(); - } - - public void setSonar(upm_hcsr04.HCSR04 sonar) { - this.sonar = sonar; - } - - public void run() { - if (sonar != null) - sonar.ackEdgeDetected(); - else - System.out.println("No HCSR04ISR instance given to callback"); - } -} // ! [Interesting] \ No newline at end of file diff --git a/src/hcsr04/hcsr04.cxx b/src/hcsr04/hcsr04.cxx index f30e9d82..f09ad8f4 100644 --- a/src/hcsr04/hcsr04.cxx +++ b/src/hcsr04/hcsr04.cxx @@ -34,14 +34,7 @@ using namespace upm; -#ifdef JAVACALLBACK -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 *)) { +HCSR04::HCSR04 (uint8_t triggerPin, uint8_t echoPin) { mraa_result_t error = MRAA_SUCCESS; m_name = "HCSR04"; @@ -63,7 +56,7 @@ HCSR04::HCSR04 (uint8_t triggerPin, uint8_t echoPin, void (*fptr)(void *)) { } mraa_gpio_dir(m_echoPinCtx, MRAA_GPIO_IN); - mraa_gpio_isr(m_echoPinCtx, MRAA_GPIO_EDGE_BOTH, fptr, (void*)this); + mraa_gpio_isr(m_echoPinCtx, MRAA_GPIO_EDGE_BOTH, &ackEdgeDetected, (void*)this); } HCSR04::~HCSR04 () { @@ -96,16 +89,17 @@ HCSR04::timing() { } void -HCSR04::ackEdgeDetected () { +HCSR04::ackEdgeDetected (void *ctx) { + upm::HCSR04 *This = (upm::HCSR04 *)ctx; struct timeval timer; gettimeofday(&timer, NULL); - ++m_InterruptCounter; - if (!(m_InterruptCounter % 2)) { - m_FallingTimeStamp = 1000000 * timer.tv_sec + timer.tv_usec; - m_doWork = 1; + This->m_InterruptCounter++; + if (!(This->m_InterruptCounter % 2)) { + This->m_FallingTimeStamp = 1000000 * timer.tv_sec + timer.tv_usec; + This->m_doWork = 1; } else { - m_RisingTimeStamp = 1000000 * timer.tv_sec + timer.tv_usec; + This->m_RisingTimeStamp = 1000000 * timer.tv_sec + timer.tv_usec; } } diff --git a/src/hcsr04/hcsr04.h b/src/hcsr04/hcsr04.h index 74e30aab..abec55d4 100644 --- a/src/hcsr04/hcsr04.h +++ b/src/hcsr04/hcsr04.h @@ -68,11 +68,7 @@ class HCSR04 { * @param fptr Function pointer to handle rising-edge and * falling-edge interrupts */ -#if defined(SWIGJAVA) || defined(JAVACALLBACK) - HCSR04 (uint8_t triggerPin, uint8_t echoPin, IsrCallback *cb); -#else - HCSR04 (uint8_t triggerPin, uint8_t echoPin, void (*fptr)(void *)); -#endif + HCSR04 (uint8_t triggerPin, uint8_t echoPin); /** * HCSR04 object destructor */ @@ -83,12 +79,6 @@ class HCSR04 { */ double getDistance (int sys); - /** - * On each interrupt, this function detects if the interrupt - * was falling-edge or rising-edge. - * Should be called from the interrupt handler. - */ - void ackEdgeDetected (); uint8_t m_doWork; /**< Flag to control blocking function while waiting for a falling-edge interrupt */ @@ -101,9 +91,12 @@ class HCSR04 { } private: -#if defined(SWIGJAVA) || defined(JAVACALLBACK) - HCSR04 (uint8_t triggerPin, uint8_t echoPin, void (*fptr)(void *)); -#endif + /** + * On each interrupt, this function detects if the interrupt + * was falling-edge or rising-edge. + */ + static void ackEdgeDetected (void *ctx); + double timing(); mraa_gpio_context m_triggerPinCtx; mraa_gpio_context m_echoPinCtx; diff --git a/src/hcsr04/javaupm_hcsr04.i b/src/hcsr04/javaupm_hcsr04.i index b1881a78..3abee3b7 100644 --- a/src/hcsr04/javaupm_hcsr04.i +++ b/src/hcsr04/javaupm_hcsr04.i @@ -1,11 +1,6 @@ %module(directors="1") javaupm_hcsr04 %include "../upm.i" -%feature("director") IsrCallback; - -%ignore generic_callback_isr; -%include "../IsrCallback.h" - %{ #include "hcsr04.h" %} @@ -21,4 +16,5 @@ System.exit(1); } } -%} \ No newline at end of file +%} +