diff options
Diffstat (limited to 'services/sensorservice/SensorService.cpp')
-rw-r--r-- | services/sensorservice/SensorService.cpp | 13 |
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) { |