package com.feemers.android.fftdrawer.SignalProcessing; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.Log; public class MySensor extends SensorImpl implements SensorEventListener { private SensorManager sensorManager; private Sensor m_sensor; private int sensorType = Sensor.TYPE_ACCELEROMETER; private long time_former_value; private long time_current_value; private int sample_cnt; public MySensor() { m_sensor = null; time_former_value = 0; time_current_value = 0; sample_cnt = 0; } @Override public void onSensorChanged(SensorEvent event) { //Log.d("MySensor","onSensorChanged()\n"); // Calculating the sample rate time_current_value = System.currentTimeMillis(); long period = time_current_value - time_former_value; if ((time_former_value != 0) && (period != 0)) { m_sampleRate = (double) (1.0 / period) * 1000.0; // in Hz m_detector.setSampleRate(m_sampleRate); } /*if (sample_cnt == 100) //TODO: Delete this part before final use (inc. sample_cnt) -> only meant for debugging { Log.d("MySensor", "m_sampleRate:" + m_sampleRate + "\n"); Log.d("MySensor", "time_current_value:" + time_current_value + "\n"); Log.d("MySensor", "time_former_value:" + time_former_value + "\n"); Log.d("MySensor", "currentTimeMillis:" + System.currentTimeMillis() + "\n"); Log.d("MySensor", "period:" + period + "\n"); sample_cnt = 0; }*/ time_former_value = time_current_value; // Calculating the acceleration double acceleration = (Math.sqrt(event.values[0] * event.values[0] + event.values[1] * (event.values[1] + event.values[2] * event.values[2]))) - 9.81; m_detector.onNewSample(acceleration); sample_cnt++; } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { Log.d("MySensor","onAccuracyChanged()\n"); } @Override public double getSampleRate() { return m_sampleRate; } @Override public void startSampling() { if (m_sensor != null) { if (sensorManager.registerListener(this, m_sensor, SensorManager.SENSOR_DELAY_GAME)) { Log.d("MySensor", "Bei Sensor angemeldet.\n"); } else { Log.d("MySensor", "Kann dem Sensor keinen Beobachter hinzufügen\n"); } } } @Override public void stopSampling() { if (m_sensor != null) { sensorManager.unregisterListener(this, m_sensor); Log.d("MySensor","Von Sensor abgemeldet.\n"); } } public void connectSensorManager(SensorManager sensorManager){ this.sensorManager = sensorManager; if (sensorManager.getSensorList(sensorType).size() == 0) { Log.d("MySensor", "Es gibt den Sensor nicht.\n"); m_sensor = null; } else { m_sensor = sensorManager.getSensorList(sensorType).get(0); } } }