summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2011-01-19 14:26:25 -0800
committerMathias Agopian <mathias@google.com>2011-01-19 15:32:38 -0800
commita97ead75db11ce7dcaa0d3a598fb2de805d30d2d (patch)
tree5458876a58edb46fbf720ddd4484b9448451a8e7 /services
parenta0bafb471385767f7c9c91efe7fd828b069b2e97 (diff)
downloadframeworks_base-a97ead75db11ce7dcaa0d3a598fb2de805d30d2d.zip
frameworks_base-a97ead75db11ce7dcaa0d3a598fb2de805d30d2d.tar.gz
frameworks_base-a97ead75db11ce7dcaa0d3a598fb2de805d30d2d.tar.bz2
fix [3369027] Sensor.TYPE_ROTATION_VECTOR is unstable and returns NaNs when running slowly
The cut-off frequency of the lowpass filter was too high for the sampling rate used by DELAY_NORMAL. Now we use the same filters used for the gravity vector (cascaded biquad at 1.5 Hz) Change-Id: Iac290a716cc47a78337a8f0e45b103e49b4d9d78
Diffstat (limited to 'services')
-rw-r--r--services/sensorservice/RotationVectorSensor.cpp4
-rw-r--r--services/sensorservice/RotationVectorSensor.h4
2 files changed, 4 insertions, 4 deletions
diff --git a/services/sensorservice/RotationVectorSensor.cpp b/services/sensorservice/RotationVectorSensor.cpp
index 418e7f8..3abfc12 100644
--- a/services/sensorservice/RotationVectorSensor.cpp
+++ b/services/sensorservice/RotationVectorSensor.cpp
@@ -34,9 +34,9 @@ static inline T clamp(T v) {
RotationVectorSensor::RotationVectorSensor(sensor_t const* list, size_t count)
: mSensorDevice(SensorDevice::getInstance()),
- mALowPass(M_SQRT1_2, 5.0f),
+ mALowPass(M_SQRT1_2, 1.5f),
mAX(mALowPass), mAY(mALowPass), mAZ(mALowPass),
- mMLowPass(M_SQRT1_2, 2.5f),
+ mMLowPass(M_SQRT1_2, 1.5f),
mMX(mMLowPass), mMY(mMLowPass), mMZ(mMLowPass)
{
for (size_t i=0 ; i<count ; i++) {
diff --git a/services/sensorservice/RotationVectorSensor.h b/services/sensorservice/RotationVectorSensor.h
index b7c9512..17699f8 100644
--- a/services/sensorservice/RotationVectorSensor.h
+++ b/services/sensorservice/RotationVectorSensor.h
@@ -38,9 +38,9 @@ class RotationVectorSensor : public SensorInterface {
double mAccTime;
double mMagTime;
SecondOrderLowPassFilter mALowPass;
- BiquadFilter mAX, mAY, mAZ;
+ CascadedBiquadFilter mAX, mAY, mAZ;
SecondOrderLowPassFilter mMLowPass;
- BiquadFilter mMX, mMY, mMZ;
+ CascadedBiquadFilter mMX, mMY, mMZ;
public:
RotationVectorSensor(sensor_t const* list, size_t count);