java: Added auto load library code to the SWIG interface file
[contrib/mraa.git] / src / java / mraajava.i
1 %module (directors="1",docstring="Java interface to libmraa") mraa
2
3 %feature("autodoc", "3");
4
5 %typemap(jtype) (uint8_t *txBuf, int length) "byte[]"
6 %typemap(jstype) (uint8_t *txBuf, int length) "byte[]"
7 %typemap(jni) (uint8_t *txBuf, int length) "jbyteArray"
8 %typemap(javain) (uint8_t *txBuf, int length) "$javainput"
9
10 %typemap(in,numinputs=1) (uint8_t *txBuf, int length) {
11   $1 = JCALL2(GetByteArrayElements, jenv, $input, NULL);
12   $2 = JCALL1(GetArrayLength, jenv, $input);
13 }
14
15 %typemap(jtype) (uint8_t *data, int length) "byte[]"
16 %typemap(jstype) (uint8_t *data, int length) "byte[]"
17 %typemap(jni) (uint8_t *data, int length) "jbyteArray"
18 %typemap(javain) (uint8_t *data, int length) "$javainput"
19
20 %typemap(in,numinputs=1) (uint8_t *data, int length) {
21   $1 = JCALL2(GetByteArrayElements, jenv, $input, NULL);
22   $2 = JCALL1(GetArrayLength, jenv, $input);
23 }
24
25 %typemap(argout) (uint8_t *data, int length) {
26   JCALL3(ReleaseByteArrayElements, jenv, $input, $1, JNI_COMMIT);
27 }
28
29 %typemap(jtype) (const uint8_t *data, int length) "byte[]"
30 %typemap(jstype) (const uint8_t *data, int length) "byte[]"
31 %typemap(jni) (const uint8_t *data, int length) "jbyteArray"
32 %typemap(javain) (const uint8_t *data, int length) "$javainput"
33 %typemap(in) (const uint8_t *data, int length) {
34   $1 = JCALL2(GetByteArrayElements, jenv, $input, NULL);
35   $2 = JCALL1(GetArrayLength, jenv, $input);
36 }
37
38 %typemap(jtype) uint8_t * "byte[]"
39 %typemap(jstype) uint8_t * "byte[]"
40 %typemap(jni) uint8_t * "jbyteArray"
41 %typemap(javaout) uint8_t * {
42     return $jnicall;
43 }
44
45 namespace mraa {
46 class Spi;
47 %typemap(out) uint8_t*
48 {
49   /* need to loop over length */
50   $result = JCALL1(NewByteArray, jenv, arg3);
51   JCALL4(SetByteArrayRegion, jenv, $result, 0, arg3, (jbyte *) $1);
52   free($1);
53 }
54 }
55
56 %ignore write(const char* data, int length);
57 %ignore read(char* data, int length);
58
59 %feature("director") IsrCallback;
60 %include ../mraa.i
61
62 %wrapper %{
63     jint JNI_OnLoad(JavaVM *vm, void *reserved) {
64         /* initialize mraa */
65         mraa_init();
66         return JNI_VERSION_1_8;
67     }
68 %}
69
70 %pragma(java) jniclasscode=%{
71     static {
72         try {
73             System.loadLibrary("mraajava");
74         } catch (UnsatisfiedLinkError e) {
75             System.err.println("Native code library failed to load. \n" + e);
76             System.exit(1);
77         }
78     }
79 %}