Device Factories

The class DeviceFactoryHelper encapsulates the logic for accessing the configured service provider. Interfaces for implementing a new service provider are in the com.diozero.internal.provider package. Developing a new service provider is relatively straightforward given the provided APIs and base classes.

In theory the OpenJDK Device I/O service provider should provide the best platform support, however, the JDK Device I/O library doesn't support PWM. Also it appears it is no longer maintained.

The device native service provider library is defined in the following order:

  1. System property com.diozero.devicefactory, e.g. -Dcom.diozero.devicefactory=com.diozero.internal.provider.pi4j.Pi4jDeviceFactory
  2. Service definition file on the classpath, file: /META-INF/services/com.diozero.internal.provider.NativeDeviceFactoryInterface. For example the one for pi4j

Currently implemented service providers:

See below for provider specific details.

TODO Describe steps for creating a new provider.

JDK Device I/O

This library has device providers for JDK Device I/O v1.0 (in Mercurial master repository) and v1.1 Mercurial (in dev repository). Unfortunately these libraries aren't in Maven repositories; to build the JDK Device I/O v1.0 library on the Raspberry Pi:

sudo apt-get install mercurial
mkdir deviceio
cd deviceio
hg clone
cd master
export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt
export PATH=$JAVA_HOME/bin:$PATH
export PI_TOOLS=/usr
make bundle PI_TOOLS=$PI_TOOLS osgi
cp build/deviceio/lib/ext/dio.jar ../dio-1.0.jar
sudo cp build/deviceio/lib/ext/dio.jar $JAVA_HOME/jre/lib/ext/.
sudo cp build/deviceio/lib/arm/ $JAVA_HOME/jre/lib/arm/.

To add Java Device I/O JAR to your local Maven repository (on your development machine) run:

mvn install:install-file -Dfile=dio-1.0.jar -DgroupId=jdk.dio -DartifactId=device-io -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true

Similar instructions should be followed for installing v1.1, the only difference being how it is built:

hg clone
cd dev
export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt
export PATH=$JAVA_HOME/bin:$PATH
export CROSS_TOOL=/usr/bin/
make osgi
cp build/jar/dio.jar ../dio-1.1.jar

wiringPi & Pi4j

Make sure you have wiringPi installed (sudo apt-get update && sudo apt-get install wiringpi). You also need to include Pi4j 1.2 on the classpath.