Merge "improve orientation sensor with gyro data"
This commit is contained in:
committed by
Android (Google) Code Review
commit
a8eedaee41
@@ -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()
|
||||
|
||||
@@ -114,6 +114,7 @@ class SensorService :
|
||||
|
||||
// constants
|
||||
Vector<Sensor> mSensorList;
|
||||
Vector<Sensor> mUserSensorList;
|
||||
DefaultKeyedVector<int, SensorInterface*> mSensorMap;
|
||||
Vector<SensorInterface *> mVirtualSensorList;
|
||||
Permission mDump;
|
||||
|
||||
Reference in New Issue
Block a user