summaryrefslogtreecommitdiffstats
path: root/services/sensorservice/SensorService.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'services/sensorservice/SensorService.cpp')
-rw-r--r--services/sensorservice/SensorService.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index e3dcd02..8ff0872 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -45,6 +45,7 @@
#include "LinearAccelerationSensor.h"
#include "OrientationSensor.h"
#include "RotationVectorSensor.h"
+#include "RotationVectorSensor2.h"
#include "SensorFusion.h"
#include "SensorService.h"
@@ -136,6 +137,12 @@ void SensorService::onFirstRef()
if (orientationIndex >= 0) {
mUserSensorList.removeItemsAt(orientationIndex);
}
+ } else if (orientationIndex != -1) {
+ // If we don't have a gyro but have a orientation sensor from
+ // elsewhere, we can compute rotation vector from that.
+ // (Google Maps expects rotation vector sensor to exist.)
+
+ registerVirtualSensor( &RotationVectorSensor2::getInstance() );
}
// debugging sensor list
@@ -272,6 +279,12 @@ bool SensorService::threadLoop()
fusion.process(event[i]);
}
}
+ RotationVectorSensor2& rv2(RotationVectorSensor2::getInstance());
+ if (rv2.isEnabled()) {
+ for (size_t i=0 ; i<size_t(count) ; i++) {
+ rv2.process(event[i]);
+ }
+ }
for (size_t i=0 ; i<size_t(count) && k<minBufferSize ; i++) {
for (size_t j=0 ; j<activeVirtualSensorCount ; j++) {
if (count + k >= minBufferSize) {