grove: add callback to GroveButton

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:
Andrei Vasiliu 2015-09-16 18:07:11 +03:00 committed by Mihai Tudor Panu
parent 2002904faa
commit 6719168a20
3 changed files with 62 additions and 3 deletions

View File

@ -277,3 +277,26 @@ int GroveButton::value()
{
return mraa_gpio_read(m_gpio);
}
#ifdef JAVACALLBACK
void GroveButton::installISR(mraa::Edge level, IsrCallback *cb)
{
installISR(level, generic_callback_isr, cb);
}
#endif
void GroveButton::installISR(mraa::Edge level, void (*isr)(void *), void *arg)
{
if (m_isrInstalled)
uninstallISR();
// install our interrupt handler
mraa_gpio_isr(m_gpio, (mraa_gpio_edge_t) level, isr, arg);
m_isrInstalled = true;
}
void GroveButton::uninstallISR()
{
mraa_gpio_isr_exit(m_gpio);
m_isrInstalled = false;
}

View File

@ -26,8 +26,12 @@
#pragma once
#include <string>
#include <mraa/aio.h>
#include <mraa/gpio.h>
#include <mraa/aio.hpp>
#include <mraa/gpio.hpp>
#ifdef JAVACALLBACK
#include "../IsrCallback.h"
#endif
namespace upm {
@ -378,7 +382,31 @@ class GroveButton: public Grove {
* @return Value from the GPIO pin
*/
int value();
/**
* Installs an interrupt service routine (ISR) to be called when
* the button is activated or deactivated.
*
* @param fptr Pointer to a function to be called on interrupt
* @param arg Pointer to an object to be supplied as an
* argument to the ISR.
*/
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(mraa::Edge level, IsrCallback *cb);
#else
void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
#endif
/**
* Uninstalls the previously installed ISR
*
*/
void uninstallISR();
private:
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
#endif
bool m_isrInstalled;
std::string m_name;
mraa_gpio_context m_gpio;
};

View File

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