Java wrapper and code for GPIO Access (with Interrupts)
-
Based on the code I have previously supplied for C/C++ access to GPIO (see: https://community.onion.io/topic/143/alternative-c-code-for-gpio-access-now-with-interrupts and https://community.onion.io/topic/431/access-to-gpio-including-interrupts-using-new-gpio-test-program-and-library) I have now produced Java wrappers and a Java test program for access to GPIO pins that directly parallels the C/C++ code.
In this post I just provide the basic details and necessary files for people to try it out. I will be providing a fully documented package later.
To use the supplied code, your Omega must first fulfill some requirements:
- Your Omega must be on release 0.0.6-b265 or later
- Must have the kmod-gpio-irq package installed by running:
opkg update
opkg install kmod-gpio-irq - Must have sufficient disk space to install jamvm (a lightweight implementation of a full Java Virtual Machine) as in next point. Because jamvm needs more disk space to install than the Omega standardly has, you must extend the disk space using a USB drive as described in: https://wiki.onion.io/Tutorials/Using-USB-Storage-as-Rootfs
- Must have the jamvm package installed. This is a lightweight implementation of a full Java Virtual Machine
This may be installed by running:
opkg install jamvm - Optionally, it is useful (but not absolutely necessary) to extend the Omega's working memory with swap space as described in: https://community.onion.io/topic/9/how-to-install-gcc/46
There are 4 software components that make up the supplied code as in the following attached files:
- libnew-gpio.so
The C/C++ dynamic library for GPIO access as previously supplied
This must be placed in your /lib directory or in a directory on any defined LD_LIBRARY_PATH - libNew-GpioJava.so
This is a JNI C/C++ dynamic library that links between the Java code and the C/C++ code in libnew-gpio.so - JavaNew-GPIOTest.jar
A Java .jar file containing the a Java program being the equivalent of the previously supplied C/C++ new-gpiotest program
This may be placed anywhere suitable (I just use /root) - JavaNew_Gpio.jar
A Java .jar file containing the Java code that calls on to libNew-GpioJava.so providing the wrapper classes for the GPIO access
Currently this must be placed in a ./lib sub-directory relative to the directory of JavaNew-GPIOTest.jar (I use /root/lib) - however this may be changed later.
To run the JavaNew-GPIOTest.jar Java program, from its directory, run the command:
- jamvm -jar JavaNew-GPIOTest.jar <parameters>
The <parameters> are exactly the same as for the C/C++ new-gpiotest program but can be displayed using the command:
- jamvm -jar JavaNew-GPIOTest.jar help
While this is all as yet undocumented (I will do so later), the C/C++ code was compiled on a KUbuntu machine using the Omega cross-compilation toolchain and the Java code was built on the same machine using Java JDK 8 (version 1.8.0_65-b17).
For those of you who might be interested, the following 3 attached archive files contain the sources:
a. libNew-GpioJava-src.tar.bz2
b. JavaNew-GPIOTest-src.tar.bz2
c. JavaNew_Gpio-src.tar.bz2
-
Great work!