94 lines
No EOL
2.6 KiB
Java
94 lines
No EOL
2.6 KiB
Java
import java.io.*;
|
|
import com.sun.jna.Library;
|
|
import com.sun.jna.Native;
|
|
import com.sun.jna.ptr.*;
|
|
import com.sun.jna.Callback;
|
|
import com.sun.jna.Pointer;
|
|
import com.sun.jna.Structure;
|
|
import com.sun.jna.Memory;
|
|
|
|
import java.util.Date;
|
|
|
|
public class SensorsJNACallback
|
|
{
|
|
public interface CLibrary extends Library {
|
|
|
|
static int TELLSTICK_TEMPERATURE = 1;
|
|
static int TELLSTICK_HUMIDITY = 2;
|
|
|
|
void tdInit();
|
|
void tdClose();
|
|
int tdRegisterSensorEvent(SensorCallback function, Pointer context);
|
|
int tdUnregisterCallback(int callbackID);
|
|
|
|
public interface SensorCallback extends Callback{
|
|
public void callbackfunction(Pointer protocol, Pointer model, int id, int dataType, Pointer value, int timestamp, int callbackId, Pointer context);
|
|
}
|
|
}
|
|
|
|
int callbackID;
|
|
CLibrary lib;
|
|
CLibrary.SensorCallback callback;
|
|
|
|
public SensorsJNACallback(){
|
|
lib = (CLibrary)Native.loadLibrary("libtelldus-core.so.2", CLibrary.class);
|
|
}
|
|
|
|
public void startListening(){
|
|
|
|
lib.tdInit();
|
|
|
|
//save reference to callback to avoid garbage collection
|
|
CLibrary.SensorCallback callback = new CLibrary.SensorCallback(){
|
|
|
|
public void callbackfunction(Pointer protocol, Pointer model, int id, int dataType, Pointer value, int timestamp, int callbackId, Pointer context){
|
|
System.out.println("Sensor: " + protocol.getString(0) + " " + model.getString(0));
|
|
long timestampvalue = (long)timestamp * 1000;
|
|
Date date = new Date(timestampvalue);
|
|
|
|
if(dataType == CLibrary.TELLSTICK_TEMPERATURE){
|
|
System.out.println("Temperature: " + value.getString(0) + "C, " + date.toString());
|
|
}
|
|
else if(dataType == CLibrary.TELLSTICK_HUMIDITY){
|
|
System.out.println("Humidity: " + value.getString(0) + "%, " + date.toString());
|
|
}
|
|
System.out.println("");
|
|
}
|
|
};
|
|
|
|
//register callback function for sensor events
|
|
callbackID = lib.tdRegisterSensorEvent(callback, (Pointer)null);
|
|
|
|
while(true){
|
|
try{
|
|
//just wait for sensor callbacks
|
|
Thread.currentThread().sleep(1000);
|
|
}
|
|
catch(InterruptedException e){
|
|
System.exit(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void stopListening(){
|
|
System.out.println("Exiting");
|
|
lib.tdUnregisterCallback(callbackID);
|
|
callback = null;
|
|
lib.tdClose();
|
|
}
|
|
|
|
public static void main(String[] args)
|
|
{
|
|
final SensorsJNACallback sensorsjnacallback = new SensorsJNACallback();
|
|
|
|
//add shutdown hook to allow callback unregistration
|
|
Runtime.getRuntime().addShutdownHook(new Thread(){
|
|
public void run(){
|
|
sensorsjnacallback.stopListening();
|
|
Runtime.getRuntime().halt(0);
|
|
}
|
|
});
|
|
|
|
sensorsjnacallback.startListening();
|
|
}
|
|
} |