diff --git a/api/mraa/gpio.hpp b/api/mraa/gpio.hpp index 3709620..b4dc7ac 100644 --- a/api/mraa/gpio.hpp +++ b/api/mraa/gpio.hpp @@ -27,6 +27,12 @@ #include "gpio.h" #include +#if defined(SWIGJAVASCRIPT) + #if NODE_MODULE_VERSION >= 0x000D + #include + #endif +#endif + namespace mraa { // These enums must match the enums in gpio.h @@ -122,8 +128,13 @@ class Gpio { static void v8isr(uv_work_t* req, int status) { mraa::Gpio *This = (mraa::Gpio *)req->data; int argc = 1; - v8::Local argv[] = { v8::Integer::New(-1) }; - This->m_v8isr->Call(v8::Context::GetCurrent()->Global(), argc, argv); + v8::Local argv[] = { SWIGV8_INTEGER_NEW(-1) }; +#if NODE_MODULE_VERSION >= 0x000D + v8::Local f = v8::Local::New(v8::Isolate::GetCurrent(), This->m_v8isr); + f->Call(SWIGV8_CURRENT_CONTEXT()->Global(), argc, argv); +#else + This->m_v8isr->Call(SWIGV8_CURRENT_CONTEXT()->Global(), argc, argv); +#endif delete req; } @@ -139,7 +150,11 @@ class Gpio { } mraa_result_t isr(Edge mode, v8::Handle func) { +#if NODE_MODULE_VERSION >= 0x000D + m_v8isr.Reset(v8::Isolate::GetCurrent(), func); +#else m_v8isr = v8::Persistent::New(func); +#endif return mraa_gpio_isr(m_gpio, (gpio_edge_t) mode, &uvwork, this); } #else @@ -164,7 +179,12 @@ class Gpio { */ mraa_result_t isrExit() { #if defined(SWIGJAVASCRIPT) + #if NODE_MODULE_VERSION >= 0x000D + m_v8isr.Reset(); + #else m_v8isr.Dispose(); + m_v8isr.Clear(); + #endif #endif return mraa_gpio_isr_exit(m_gpio); } diff --git a/src/javascript/mraajs.i b/src/javascript/mraajs.i index c894b38..832bea1 100644 --- a/src/javascript/mraajs.i +++ b/src/javascript/mraajs.i @@ -1,6 +1,7 @@ %module (docstring="Javascript interface to libmraa") mraa %feature("autodoc", "3"); +#define NODE012 %include carrays.i %include cpointer.i @@ -28,7 +29,11 @@ namespace mraa { class Spi; %typemap(out) uint8_t* { +#ifdef NODE012 + $result = node::Buffer::New((char*) $1, arg3); +#else $result = node::Buffer::New((char*) $1, arg3)->handle_; +#endif } } @@ -44,7 +49,7 @@ class Spi; $2 = x; if ($2 < 0) { SWIG_exception_fail(SWIG_ERROR, "Positive integer expected"); - SWIGV8_RETURN(v8::Undefined()); + SWIGV8_RETURN(SWIGV8_UNDEFINED()); } $1 = (uint8_t*) malloc($2 * sizeof(uint8_t)); } @@ -53,9 +58,13 @@ class Spi; if (result < 0) { /* Check for I/O error */ free($1); SWIG_exception_fail(SWIG_ERROR, "I2c write failed"); - SWIGV8_RETURN(v8::Undefined()); + SWIGV8_RETURN(SWIGV8_UNDEFINED()); } +#ifdef NODE012 + $result = node::Buffer::New((char*) $1, result); +#else $result = node::Buffer::New((char*) $1, result)->handle_; +#endif free($1); }