package org.openiot.cupus.mobile.sensors.implementations;
/**
* Created by kpripuzic on 1/14/14.
*/
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import org.openiot.cupus.artefact.TripletAnnouncement;
import org.openiot.cupus.common.enums.Operator;
import org.openiot.cupus.mobile.sensors.common.PullSensor;
import org.openiot.cupus.mobile.sensors.common.ReadingDefinition;
import org.openiot.cupus.mobile.sensors.common.SensorReading;
public class PressurePullSensor extends PullSensor {
private SensorReading<Float> currentPressure;
private boolean supported;
private BarometerListener barometerListener;
private SensorManager sensorManager;
private int rate;
public PressurePullSensor(SensorManager sensorManager, int rate) {
this.sensorManager = sensorManager;
this.rate = rate;
this.readingDefinition = readingDefinition;
}
@Override
public boolean initialize() {
if (sensorManager != null && !sensorManager.getSensorList(Sensor.TYPE_PRESSURE).isEmpty()) {
Sensor barometer = this.sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
sensorManager.registerListener(barometerListener = new BarometerListener(), barometer, rate);
readingDefinition = new ReadingDefinition("pressure");
tripletAnnouncement = new TripletAnnouncement(-1, System.currentTimeMillis());
tripletAnnouncement.addNumericalPdredicate(readingDefinition.getName(), 0, Operator.GREATER_OR_EQUAL);
//initialization finished
super.setInitialized(true);
return true;
} else {
//initialization failed
super.setInitialized(false);
return false;
}
}
@Override
public boolean terminate() {
sensorManager.unregisterListener(barometerListener);
return true;
}
@Override
public int getId() {
return hashCode();
}
public final SensorReading pullReading() {
return currentPressure;
}
@Override
public boolean isSupported() {
return supported;
}
private class BarometerListener implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent event) {
currentPressure = new SensorReading<Float>(event.values[0]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
}