X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Fedu%2Fucla%2FiBeaconNav%2FSensors.java;h=5d6fb2dd1e94fc4302a868b8bc9c19500ec7e593;hb=c3395e49388e5166d24a770457bffaa9914ac2f2;hp=745c6e6bfbcb4ced82cb0dc7bde916c666ceb320;hpb=c7406355a6be2ceddaa8ec5347d4c62a2da778d3;p=~andy%2FiBeaconNav diff --git a/src/edu/ucla/iBeaconNav/Sensors.java b/src/edu/ucla/iBeaconNav/Sensors.java index 745c6e6..5d6fb2d 100644 --- a/src/edu/ucla/iBeaconNav/Sensors.java +++ b/src/edu/ucla/iBeaconNav/Sensors.java @@ -15,21 +15,21 @@ import android.hardware.SensorManager; import android.os.Handler; import android.os.IBinder; import android.os.Message; -import android.os.Messenger; import android.os.SystemClock; import android.widget.EditText; import edu.ucla.iBeaconNav.R; -public class Sensors extends Service implements SensorEventListener +public class Sensors implements SensorEventListener { /* Private data */ + private Task task; + private SensorManager sensorManager; private Sensor accSensor; private Sensor grvSensor; private Sensor magSensor; private Sensor gyrSensor; - private Messenger messenger; private boolean active; private long lastTime_ms = 0; private float snsInterval_ms = 0; @@ -61,7 +61,7 @@ public class Sensors extends Service implements SensorEventListener private LinkedList rtMtrxBuffers = new LinkedList(); private float[] data = new float[4]; private float[] accSum = {0,0,0}; - private float[] accAvg = {0,0,0}; + private float[] accAvg = {0,0,0}; private float[] magSum = {0,0,0}; private float[] gyrSum = {0,0,0}; private float[] gyrOffset = {0,0,0}; @@ -91,7 +91,6 @@ public class Sensors extends Service implements SensorEventListener private float gyroscopeRef = 0; private boolean ifSetGrvRef = false; - /* Position Related Stuff */ //private float startPosX = 0; //private float startPos = 0; @@ -113,148 +112,48 @@ public class Sensors extends Service implements SensorEventListener private long time1hz = 0; private Vect gyr1hz = new Vect(); - /* Private methods */ - private void tellMain(CMD.Response cmd, Object value) - { - try { - android.os.Message msg = android.os.Message.obtain(); - msg.what = cmd.ordinal(); - msg.obj = value; - this.messenger.send(msg); - } catch (Exception e) { - Util.debug("Sensors: error sending message", e); - } - } - - private void notify(String text, int icon) - { - // Notify Main - this.tellMain(CMD.Response.NOTIFY, text); - - // Notification bar - //Notification note = new Notification(icon, null, 0); - //Intent intent = new Intent(this, Main.class); - //PendingIntent pend = PendingIntent.getActivity(this, 0, intent, 0); - //note.setLatestEventInfo(this, "iBeaconNav!", text, pend); - //PendingIntent pend = PendingIntent.getActivity(this, 0, intent, 0); - - Notification note = new Notification.Builder(this) - .setContentTitle("iBeaconNav!") - .setContentText("iBeaconNav!") - .setSmallIcon(icon) - .build(); - - this.startForeground(1, note); - } - - private void handle(CMD.Command cmd, Messenger mgr) - { - // Validate messenger - if (cmd != CMD.Command.REGISTER && mgr != null && mgr != this.messenger) - Util.debug("Sensors: handle - invalid messenger"); - - // Handle the command - switch (cmd) { - // Setup communication with Main - case REGISTER: - Util.debug("Sensors: handle - register"); - this.messenger = mgr; - break; - - // Create client thread - case CONNECT: - Util.debug("Sensors: handle - connect"); - sensorManager.registerListener(this, accSensor, SensorManager.SENSOR_DELAY_FASTEST); - sensorManager.registerListener(this, grvSensor, SensorManager.SENSOR_DELAY_FASTEST); - sensorManager.registerListener(this, magSensor, SensorManager.SENSOR_DELAY_FASTEST); - sensorManager.registerListener(this, gyrSensor, SensorManager.SENSOR_DELAY_FASTEST); - break; - - // Stop client thread - case DISCONNECT: - Util.debug("Sensors: handle - register"); - // TODO - break; - - // Reset heading - case RSTHEAD: - Util.debug("Sensors: handle - reset heading"); - this.rotation = new Quat(); - currentHeading = 0; - displayData(CMD.Data.HEADING); - break; - - // Reset distance - case RSTDST: - Util.debug("Sensors: handle - reset distance"); - currentPosX = 0; - currentPosY = 0; - displayData(CMD.Data.POSITION); - break; - } - } - /* Public methods */ - public boolean isRunning() + public Sensors(Task task) { - return true; // TODO - } + Util.debug("Sensors: constructor"); + this.task = task; + this.sensorManager = (SensorManager)task.getSystemService(Context.SENSOR_SERVICE); - /* Service Methods */ - @Override - public void onCreate() - { - Util.debug("Sensors: onCreate"); - super.onCreate(); - sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); + // Get sensors accSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); grvSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); magSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); gyrSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); - } - @Override - public void onDestroy() - { - Util.debug("Sensors: onDestroy"); - //this.handle(CMD.Response.DISCONNECT, null); + // Connect sensor listeners + sensorManager.registerListener(this, accSensor, SensorManager.SENSOR_DELAY_FASTEST); + sensorManager.registerListener(this, grvSensor, SensorManager.SENSOR_DELAY_FASTEST); + sensorManager.registerListener(this, magSensor, SensorManager.SENSOR_DELAY_FASTEST); + sensorManager.registerListener(this, gyrSensor, SensorManager.SENSOR_DELAY_FASTEST); } - @Override - public int onStartCommand(Intent intent, int flags, int startId) - { - Util.debug("Sensors: onStartCommand"); - int rval = super.onStartCommand(intent, flags, startId); - CMD.Command cmd = (CMD.Command)intent.getExtras().get("Command"); - Messenger mgr = (Messenger)intent.getExtras().get("Messenger"); - this.handle(cmd, mgr); - return rval; + public void reset_heading() { + Util.debug("Sensors: handle - reset heading"); + this.rotation = new Quat(); + currentHeading = 0; + displayData(CMD.Data.HEADING); } - @Override - public IBinder onBind(Intent intent) - { - Util.debug("Sensors: onBind"); - return messenger.getBinder(); - } - class IncomingHandler extends Handler{ - @Override - public void handleMessage(Message msg) { - //Util.debug("Sensors: MSG HANDLERRRRRRRRR"); - super.handleMessage(msg); - } + public void reset_distance() { + Util.debug("Sensors: handle - reset distance"); + currentPosX = 0; + currentPosY = 0; + displayData(CMD.Data.POSITION); } + /* Sensor Event Listener functions */ @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { - // TODO Auto-generated method stub Util.debug("Sensors: onAccuracyChanged"); - } @Override public void onSensorChanged(SensorEvent event) { - // TODO Auto-generated method stub switch(event.sensor.getType()){ case Sensor.TYPE_ACCELEROMETER: accCnt++; @@ -349,6 +248,7 @@ public class Sensors extends Service implements SensorEventListener processSensorInfo(); } + /* Private helper functions */ private void cycleFloatArray(float[] array, int length){ float temp = array[length-1]; for(int i=1; i