Hi Wim,
I've done quite a lot of work with the gpio pin service (e.g.
testing), and I wanted to make you and everyone aware of it.
1) the latest IGPIOPin API is available in the bundle:
bundles/org.eclipse.ecf.raspberrypi.gpio in repo [1]. This
bundle will be needed on both the host and any consumer frameworks
since it declares the IGPIOPin service interface.
2a) The host implementation (using pi4j) is in bundle:
bundles/org.eclipse.ecf.raspberrypi.gpio.pi4j. You will probably
want to look in the Activator class, since I added system
properties to allow the programmer to
a) control which of the 20 pins to create services for (PINS);
b) which of the gpio pin services to export (PINS_EXPORT). I'll
document this soon in a tutorial, but I haven't had a chance to
write a tutorial yet.
2b) The pi4j library comes in bundle form (i.e. with an OSGi
manifest, etc), and naturally this has to be available in the
target platform to that the o.e.e.raspberrypi.gpio.pi4j code can
use it. Note that the pi4j library itself depends upon the
WiringPi native code library...see [3] for pi4j dependency docs
and WiringPi download/install instructions. Before you can use
pi4j for anything described here you have to install a recent
version of WiringPi.
3) I created a simple local test application in bundle:
test/bundles/org.eclipse.ecf.raspberrypi.test.gpio in [1]. All
this test application does is when the bundle is started it
creates a ServiceTracker to discover registered IGPIOPin services,
and when a service gets added it sets the pin state to HIGH
(true). I've been using an LED with the setup described here
[2], to test that the IGPIOPin service is working on pin 0. Short
story: On my raspberry pi it is working great! I'm using a
model B2, and so I had to look at the B2 pi docs to figure out
which gpio pin was pin0...and of course figure out which pin was
ground as well on the B2, but once I got that figured out it was
working.
4) I created a test feature in
test/features/org.eclipse.ecf.raspberrypi.test.gpio.feature
project and also a product configuration. When exported the
product configuration creates a zip named raspberrypigpiotest.zip,
and I built a version of this test application and placed in the
feature project build directory. I can run this on my raspberry
pi (wired up to an LED on pin 0 as described above), by unzipping
the raspberrypigpiotest.zip on the pi, cd into the
raspberrypigpiotest/ directory, switch user to *root* (necessary
because pi4j requires root access to get to the pins), change the
file mode of the gpiotesthost.sh startup script to 700
(executable), and then start the gpiotesthost.sh...e.g.:
root@raspberrypi:/home/pi/raspberrypitestgpio# ./gpiotesthost.sh
javaprops=-Declipse.ignoreApp=true -Dosgi.noShutdown=true
equinox=plugins/org.eclipse.osgi_3.10.0.v20140407-2102.jar
Debug options:
file:/home/pi/raspberrypitestgpio/.options not found
Time to load bundles: 206
osgi> ss
"Framework is launched."
id State Bundle
0 ACTIVE org.eclipse.osgi_3.10.0.v20140407-2102
1 ACTIVE
org.eclipse.ecf.raspberrypi.gpio_1.0.0.201407282024
2 ACTIVE
org.eclipse.ecf.raspberrypi.gpio.pi4j_1.0.0.201407282024
3 RESOLVED
org.eclipse.ecf.raspberrypi.test.gpio_1.0.0.201407282024
4 ACTIVE org.eclipse.osgi.services_3.4.0.v20140312-2051
5 ACTIVE org.eclipse.osgi.util_3.3.0.v20131023-1243
6 ACTIVE pi4j-core_1.0.0.SNAPSHOT
7 ACTIVE
org.eclipse.equinox.console_1.1.0.v20140131-1639
8 ACTIVE
org.apache.felix.gogo.command_0.10.0.v201209301215
9 ACTIVE
org.apache.felix.gogo.runtime_0.10.0.v201209301036
10 ACTIVE
org.apache.felix.gogo.shell_0.10.0.v201212101605
osgi>
Notice:
1) all bundles are started except bundle 3 (the test consumer of
IGPIOPin services);
2) *For the moment* there are no OSGi/ECF remote services bundles
present and so remote service is not being used yet.
If bundle 3 is started from the osgi console, then the IGPIOPin
service (for pin 0) is discovered by the service tracker, and the
pin 0 state is set to high/true (this code is in the
org.eclipse.ecf.raspberrypi.test.gpio bundle). On my pi, with
the LED hooked up to it, the LED lights up!
osgi> start 3
Adding GPIO Pin service. id=0
current pin state is LOW
setting state to HIGH
and if bundle 3 is stopped, the light turns off
osgi> stop 3
Removing GPIO Pin service. id=0
setting state to LOW
osgi>
This testing has been working great, and so now I'm ready to do
some other things over the next few days:
1) Add the ECF remote services/RSA impl to the test code, and
export the IGPIOPin 0 as a remote service.
2) Install the test bundle into Eclipse as an example remote
service consumer, and try manipulating pin 0 as a remote
service... perhaps with some Eclipse UI (e.g. button) to do so.
Anyway, that's what's next on my list of things to do.
Feel free to ask any questions. Like I said, as soon as I can
I'll document this all in the form of another tutorial.
Scott
[1]
https://github.com/ECF/RaspberryPI
[2]
https://projects.drogon.net/raspberry-pi/gpio-examples/tux-crossing/gpio-examples-1-a-single-led/
[3]
http://pi4j.com/dependency.html
On 7/28/2014 2:21 PM, Wim Jongman wrote: