nrf24l01: Added callback functionality for Java

Signed-off-by: Andrei Vasiliu <andrei.vasiliu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit is contained in:
Andrei Vasiliu 2015-09-17 15:12:00 +03:00 committed by Mihai Tudor Panu
parent ce6a095079
commit bdacb6c640
4 changed files with 76 additions and 5 deletions

22
src/nrf24l01/Callback.h Normal file
View File

@ -0,0 +1,22 @@
#pragma once
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
class Callback
{
public:
virtual ~Callback()
{
}
virtual void run()
{ /* empty, overloaded in Java*/
}
};
static void generic_callback (Callback* callback)
{
if (callback == NULL)
return;
callback->run();
}
#endif

View File

@ -1,9 +1,12 @@
%module javaupm_nrf24l01 %module javaupm_nrf24l01
%include "../upm.i" %include "../upm.i"
%feature("director") Callback;
%include "arrays_java.i"; %include "arrays_java.i";
%apply signed char[] {uint8_t *}; %apply signed char[] {uint8_t *};
%include "Callback.h"
%{ %{
#include "nrf24l01.h" #include "nrf24l01.h"
%} %}

View File

@ -148,6 +148,20 @@ NRF24L01::setPayload (uint8_t payload) {
m_payload = payload; m_payload = payload;
} }
#ifdef JAVACALLBACK
void
NRF24L01::setDataReceivedHandler (Callback *call_obj)
{
callback_obj = call_obj;
dataReceivedHandler = &generic_callback;
}
#else
void setDataReceivedHandler (funcPtrVoidVoid handler)
{
dataReceivedHandler = handler;
}
#endif
bool bool
NRF24L01::dataReady () { NRF24L01::dataReady () {
/* See note in getData() function - just checking RX_DR isn't good enough */ /* See note in getData() function - just checking RX_DR isn't good enough */
@ -315,7 +329,11 @@ void
NRF24L01::pollListener() { NRF24L01::pollListener() {
if (dataReady()) { if (dataReady()) {
getData (m_rxBuffer); getData (m_rxBuffer);
dataRecievedHandler (); /* let know that data arrived */ #ifdef JAVACALLBACK
dataReceivedHandler (callback_obj); /* let know that data arrived */
#else
dataReceivedHandler (); /* let know that data arrived */
#endif
} }
} }

View File

@ -33,6 +33,10 @@
#include <mraa/spi.hpp> #include <mraa/spi.hpp>
#include <cstring> #include <cstring>
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
#include "Callback.h"
#endif
/* Memory Map */ /* Memory Map */
#define CONFIG 0x00 #define CONFIG 0x00
#define EN_AA 0x01 #define EN_AA 0x01
@ -138,7 +142,11 @@
namespace upm { namespace upm {
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
typedef void (* funcPtrVoidVoid) (Callback *);
#else
typedef void (* funcPtrVoidVoid) (); typedef void (* funcPtrVoidVoid) ();
#endif
typedef enum { typedef enum {
NRF_250KBPS = 0, NRF_250KBPS = 0,
@ -249,6 +257,21 @@ class NRF24L01 {
*/ */
void setPayload (uint8_t load); void setPayload (uint8_t load);
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
/**
* Sets the handler to be called when data has been
* received
* @param call_obj Object used for callback - Java
*/
void setDataReceivedHandler (Callback *call_obj);
#else
/**
* Sets the handler to be called when data has been
* received
* @param handler Handler used for callback
*/
void setDataReceivedHandler (funcPtrVoidVoid handler);
#endif
/** /**
* Checks if the data has arrived * Checks if the data has arrived
*/ */
@ -350,8 +373,13 @@ class NRF24L01 {
uint8_t m_txBuffer[MAX_BUFFER]; /**< Transmit buffer */ uint8_t m_txBuffer[MAX_BUFFER]; /**< Transmit buffer */
uint8_t m_bleBuffer [32]; /**< BLE buffer */ uint8_t m_bleBuffer [32]; /**< BLE buffer */
funcPtrVoidVoid dataRecievedHandler; /**< Data arrived handler */
private: private:
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
/**< Callback object to use for setting the handler from Java */
Callback *callback_obj;
#endif
funcPtrVoidVoid dataReceivedHandler; /**< Data arrived handler */
/** /**
* Writes bytes to an SPI device * Writes bytes to an SPI device
*/ */
@ -385,7 +413,7 @@ class NRF24L01 {
uint8_t swapbits (uint8_t a); uint8_t swapbits (uint8_t a);
mraa::Spi m_spi; mraa::Spi m_spi;
uint8_t m_ce; uint8_t m_ce;
uint8_t m_csn; uint8_t m_csn;
uint8_t m_channel; uint8_t m_channel;
@ -394,8 +422,8 @@ class NRF24L01 {
uint8_t m_payload; uint8_t m_payload;
uint8_t m_localAddress[5]; uint8_t m_localAddress[5];
mraa::Gpio m_csnPinCtx; mraa::Gpio m_csnPinCtx;
mraa::Gpio m_cePinCtx; mraa::Gpio m_cePinCtx;
std::string m_name; std::string m_name;
}; };