ttp223: add Java isr callbacks

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-09-17 17:23:46 +03:00 committed by Mihai Tudor Panu
parent bdacb6c640
commit a0518976c6
3 changed files with 62 additions and 2 deletions

View File

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

View File

@ -39,6 +39,7 @@ TTP223::TTP223(unsigned int pin) {
}
mraa_gpio_dir(m_gpio, MRAA_GPIO_IN);
m_name = "ttp223";
m_isrInstalled = false;
}
TTP223::~TTP223() {
@ -57,3 +58,26 @@ int TTP223::value() {
bool TTP223::isPressed() {
return this->value() == 1;
}
#ifdef JAVACALLBACK
void TTP223::installISR(mraa::Edge level, IsrCallback *cb)
{
installISR(level, generic_callback_isr, cb);
}
#endif
void TTP223::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 TTP223::uninstallISR()
{
mraa_gpio_isr_exit(m_gpio);
m_isrInstalled = false;
}

View File

@ -24,7 +24,11 @@
#pragma once
#include <string>
#include <mraa/gpio.h>
#include <mraa/gpio.hpp>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "../IsrCallback.h"
#endif
namespace upm {
/**
@ -87,9 +91,32 @@ class TTP223 {
*/
bool isPressed();
/**
* 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();
protected:
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
void installISR(mraa::Edge level, void (*isr)(void *), void *arg);
#endif
std::string m_name; //!< name of this sensor
mraa_gpio_context m_gpio; //!< GPIO pin
bool m_isrInstalled;
};
}