-
Notifications
You must be signed in to change notification settings - Fork 4
Driver Usage Guide
Add the following dependency to your pom.xml
:
<dependency>
<groupId>de.uniluebeck.itm</groupId>
<artifactId>wsn-device-drivers-factories</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
As optional dependency you can add the itmutils
:
<dependency>
<groupId>de.uniluebeck.itm.itmutils</groupId>
<artifactId>itmutils</artifactId>
<version>0.4-SNAPSHOT</version>
</dependency>
These are needed when using the following classes:
ForwardingScheduledExecutorService
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3);
DeviceFactory factory = new DeviceFactoryImpl();
Device device = factory.create(executor, DeviceType.ISENSE);
At first we need a ScheduledExecutorService
with a minimum thread size of 3. Then we can initialize the DeviceFactory
and create a iSense Device. All available DeviceType
s are:
- ISENSE
- ISENSE39
- ISENSE48
- TELOSB
- PACEMATE
- MOCK
When you want to use already an existing ExecutorService
you can use the ForwardingScheduledExecutorService
as follows:
// Replace this ExecutorService with your existing one
ExecutorService executorService = Executors.newCachedThreadPool();
ScheduledExecutorService scheduleService = Executors.newScheduledThreadPool(1);
ScheduledExecutorService executor = new ForwardingScheduledExecutorService(scheduleService, executorService);
The ForwardingScheduledExecutorService
will forward all scheduled task to the given ExecutorService
.
device.connect("/dev/ttyUSB0");
Note: connect
can throw an IOException
when a problem occurred during the connecting process.
device.close();
This will close the connection to the device. Note that the ScheduledExecutorService
is not shut down when the close
method is called. This has to be done manually.
All operations executed on the Device are asynchronous. For this purpose you need a OperationCallback
. This callback is notified, when the operation finished, an exception occurred or a progress change happend. A simple callback implementation can look like this:
OperationCallback<Void> callback = new OperationCallback<Void>() {
@Override
public void onProgressChange(float fraction) {
System.out.println("Progress: " + (fraction * 100));
}
@Override
public void onSuccess(Void result) {
System.out.println("Operation done!");
}
@Override
public void onFailure(Throwable throwable) {
System.err.println("Operation failed with Exception: " + throwable, throwable);
}
@Override
public void onExecute() {
System.out.println("Starting operation...");
}
@Override
public void onCancel() {
System.out.println("Operation was canceled!");
}
};
The generic type defines the return type of the operation. In this case the operation returns Void
.
The asynchronously execution of operations allows to execute multiple operations at once without to worry about threading and concurrency. This is all done by this framework. To prevent an infinite execution of an operation all operations have a timeout which can be given in milliseconds. When an operation reaches the timeout limit a TimeoutException
is thrown which is returned by calling the onFailure
method of the callback.
Following operations are available:
getChipType(long timeout, OperationCallback<ChipType> callback)
- `program(byte[] image, long timeout, AsyncCallback callback)``
eraseFlash(long timeout, OperationCallback<Void> callback)
writeFlash(int address, byte[] data, int length, long timeout, OperationCallback<Void> callback)
readFlash(int address, int length, long timeout, OperationCallback<byte[]> callback)
readMac(long timeout, OperationCallback<MacAddress> callback)
writeMac(MacAddress macAddress, long timeout, OperationCallback<Void> callback)
reset(long timeout, OperationCallback<Void> callback)
send(byte[] message, long timeout, OperationCallback<Void> callback)
The usage of these operations is described below.
byte[] image = ... // Your image as byte array
device.program(image, 600000, callback);
All defined operations return an OperationFuture
. This can be used for controlling the async execution. Following functionality is available:
OperationFuture future = device.getChipTypeOperation(30000, callback);
future.cancel();
When the operation was canceled successfully the onCancel
method of the callback
is called.
You can wait for the operation to finished in an synchronous way:
OperationFuture future = device.getChipTypeOperation(30000, callback);
ChipType chipType = future.get(); // Wait for the operation to finish