summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2011-06-09 18:22:19 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-06-09 18:22:19 -0700
commita8eedaee412cece3672934d50592f29c2cbe0a01 (patch)
tree7a67d6f61ab006890876af22918dd14bbb89d9d5 /services
parent924b7c74960c88660d0d4bae84433c1592a81834 (diff)
parentf8a6737f3d812b6b151990ad1695b55bfb0d8dda (diff)
downloadframeworks_base-a8eedaee412cece3672934d50592f29c2cbe0a01.zip
frameworks_base-a8eedaee412cece3672934d50592f29c2cbe0a01.tar.gz
frameworks_base-a8eedaee412cece3672934d50592f29c2cbe0a01.tar.bz2
Merge "improve orientation sensor with gyro data"
Diffstat (limited to 'services')
-rw-r--r--services/sensorservice/SensorService.cpp23
-rw-r--r--services/sensorservice/SensorService.h1
2 files changed, 20 insertions, 4 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index d1b10f7..0ae7929 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -52,7 +52,6 @@ namespace android {
* Notes:
*
* - what about a gyro-corrected magnetic-field sensor?
- * - option to "hide" the HAL sensors
* - run mag sensor from time to time to force calibration
* - gravity sensor length is wrong (=> drift in linear-acc sensor)
*
@@ -71,6 +70,7 @@ void SensorService::onFirstRef()
SensorDevice& dev(SensorDevice::getInstance());
if (dev.initCheck() == NO_ERROR) {
+ ssize_t orientationIndex = -1;
bool hasGyro = false;
uint32_t virtualSensorsNeeds =
(1<<SENSOR_TYPE_GRAVITY) |
@@ -82,6 +82,9 @@ void SensorService::onFirstRef()
for (int i=0 ; i<count ; i++) {
registerSensor( new HardwareSensor(list[i]) );
switch (list[i].type) {
+ case SENSOR_TYPE_ORIENTATION:
+ orientationIndex = i;
+ break;
case SENSOR_TYPE_GYROSCOPE:
hasGyro = true;
break;
@@ -120,6 +123,18 @@ void SensorService::onFirstRef()
}
}
+ // build the sensor list returned to users
+ mUserSensorList = mSensorList;
+ if (hasGyro &&
+ (virtualSensorsNeeds & (1<<SENSOR_TYPE_ROTATION_VECTOR))) {
+ // if we have the fancy sensor fusion, and it's not provided by the
+ // HAL, use our own (fused) orientation sensor by removing the
+ // HAL supplied one form the user list.
+ if (orientationIndex >= 0) {
+ mUserSensorList.removeItemsAt(orientationIndex);
+ }
+ }
+
run("SensorService", PRIORITY_URGENT_DISPLAY);
mInitCheck = NO_ERROR;
}
@@ -315,9 +330,9 @@ SensorService::getActiveVirtualSensors() const
}
String8 SensorService::getSensorName(int handle) const {
- size_t count = mSensorList.size();
+ size_t count = mUserSensorList.size();
for (size_t i=0 ; i<count ; i++) {
- const Sensor& sensor(mSensorList[i]);
+ const Sensor& sensor(mUserSensorList[i]);
if (sensor.getHandle() == handle) {
return sensor.getName();
}
@@ -328,7 +343,7 @@ String8 SensorService::getSensorName(int handle) const {
Vector<Sensor> SensorService::getSensorList()
{
- return mSensorList;
+ return mUserSensorList;
}
sp<ISensorEventConnection> SensorService::createSensorEventConnection()
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index 77a7e34..4d0f1d9 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -114,6 +114,7 @@ class SensorService :
// constants
Vector<Sensor> mSensorList;
+ Vector<Sensor> mUserSensorList;
DefaultKeyedVector<int, SensorInterface*> mSensorMap;
Vector<SensorInterface *> mVirtualSensorList;
Permission mDump;