diff options
Diffstat (limited to 'libs/gui/Sensor.cpp')
-rw-r--r-- | libs/gui/Sensor.cpp | 136 |
1 files changed, 51 insertions, 85 deletions
diff --git a/libs/gui/Sensor.cpp b/libs/gui/Sensor.cpp index 2103a95..bae05a8 100644 --- a/libs/gui/Sensor.cpp +++ b/libs/gui/Sensor.cpp @@ -80,6 +80,10 @@ Sensor::Sensor(struct sensor_t const* hwSensor, int halVersion) } // Ensure existing sensors have correct string type, required permissions and reporting mode. + // Set reportingMode for all android defined sensor types, set wake-up flag only for proximity + // sensor, significant motion, tilt, pick_up gesture, wake gesture and glance gesture on older + // HALs. Newer HALs can define both wake-up and non wake-up proximity sensors. + // All the OEM defined defined sensors have flags set to whatever is provided by the HAL. switch (mType) { case SENSOR_TYPE_ACCELEROMETER: mStringType = SENSOR_STRING_TYPE_ACCELEROMETER; @@ -140,7 +144,10 @@ Sensor::Sensor(struct sensor_t const* hwSensor, int halVersion) break; case SENSOR_TYPE_PROXIMITY: mStringType = SENSOR_STRING_TYPE_PROXIMITY; - mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP); + mFlags |= SENSOR_FLAG_ON_CHANGE_MODE; + if (halVersion < SENSORS_DEVICE_API_VERSION_1_3) { + mFlags |= SENSOR_FLAG_WAKE_UP; + } break; case SENSOR_TYPE_RELATIVE_HUMIDITY: mStringType = SENSOR_STRING_TYPE_RELATIVE_HUMIDITY; @@ -152,7 +159,10 @@ Sensor::Sensor(struct sensor_t const* hwSensor, int halVersion) break; case SENSOR_TYPE_SIGNIFICANT_MOTION: mStringType = SENSOR_STRING_TYPE_SIGNIFICANT_MOTION; - mFlags |= (SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP); + mFlags |= SENSOR_FLAG_ONE_SHOT_MODE; + if (halVersion < SENSORS_DEVICE_API_VERSION_1_3) { + mFlags |= SENSOR_FLAG_WAKE_UP; + } break; case SENSOR_TYPE_STEP_COUNTER: mStringType = SENSOR_STRING_TYPE_STEP_COUNTER; @@ -166,94 +176,33 @@ Sensor::Sensor(struct sensor_t const* hwSensor, int halVersion) mStringType = SENSOR_STRING_TYPE_TEMPERATURE; mFlags |= SENSOR_FLAG_ON_CHANGE_MODE; break; - case SENSOR_TYPE_NON_WAKE_UP_PROXIMITY_SENSOR: - mStringType = SENSOR_STRING_TYPE_NON_WAKE_UP_PROXIMITY_SENSOR; - mFlags |= SENSOR_FLAG_ON_CHANGE_MODE; - break; - case SENSOR_TYPE_WAKE_UP_ACCELEROMETER: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_ACCELEROMETER; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_MAGNETIC_FIELD: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_MAGNETIC_FIELD; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_ORIENTATION: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_ORIENTATION; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_GYROSCOPE: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_GYROSCOPE; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_LIGHT: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_LIGHT; - mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_PRESSURE: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_PRESSURE; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_GRAVITY: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_GRAVITY; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_LINEAR_ACCELERATION: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_LINEAR_ACCELERATION; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_ROTATION_VECTOR: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_ROTATION_VECTOR; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_RELATIVE_HUMIDITY: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_RELATIVE_HUMIDITY; - mFlags |= (SENSOR_FLAG_SPECIAL_REPORTING_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_AMBIENT_TEMPERATURE: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_AMBIENT_TEMPERATURE; - mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_MAGNETIC_FIELD_UNCALIBRATED: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_MAGNETIC_FIELD_UNCALIBRATED; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_GAME_ROTATION_VECTOR: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_GAME_ROTATION_VECTOR; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_GYROSCOPE_UNCALIBRATED: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_GYROSCOPE_UNCALIBRATED; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_STEP_DETECTOR: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_STEP_DETECTOR; - mFlags |= (SENSOR_FLAG_SPECIAL_REPORTING_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_STEP_COUNTER: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_STEP_COUNTER; - mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_GEOMAGNETIC_ROTATION_VECTOR: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_GEOMAGNETIC_ROTATION_VECTOR; - mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_HEART_RATE: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_HEART_RATE; - mRequiredPermission = SENSOR_PERMISSION_BODY_SENSORS; - mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP); - break; - case SENSOR_TYPE_WAKE_UP_TILT_DETECTOR: - mStringType = SENSOR_STRING_TYPE_WAKE_UP_TILT_DETECTOR; - mFlags |= (SENSOR_FLAG_SPECIAL_REPORTING_MODE | SENSOR_FLAG_WAKE_UP); - break; + case SENSOR_TYPE_TILT_DETECTOR: + mStringType = SENSOR_STRING_TYPE_TILT_DETECTOR; + mFlags |= SENSOR_FLAG_SPECIAL_REPORTING_MODE; + if (halVersion < SENSORS_DEVICE_API_VERSION_1_3) { + mFlags |= SENSOR_FLAG_WAKE_UP; + } + break; case SENSOR_TYPE_WAKE_GESTURE: mStringType = SENSOR_STRING_TYPE_WAKE_GESTURE; - mFlags |= (SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP); + mFlags |= SENSOR_FLAG_ONE_SHOT_MODE; + if (halVersion < SENSORS_DEVICE_API_VERSION_1_3) { + mFlags |= SENSOR_FLAG_WAKE_UP; + } break; case SENSOR_TYPE_GLANCE_GESTURE: mStringType = SENSOR_STRING_TYPE_GLANCE_GESTURE; - mFlags |= (SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP); + mFlags |= SENSOR_FLAG_ONE_SHOT_MODE; + if (halVersion < SENSORS_DEVICE_API_VERSION_1_3) { + mFlags |= SENSOR_FLAG_WAKE_UP; + } + break; + case SENSOR_TYPE_PICK_UP_GESTURE: + mStringType = SENSOR_STRING_TYPE_PICK_UP_GESTURE; + mFlags |= SENSOR_FLAG_ONE_SHOT_MODE; + if (halVersion < SENSORS_DEVICE_API_VERSION_1_3) { + mFlags |= SENSOR_FLAG_WAKE_UP; + } break; default: // Only pipe the stringType, requiredPermission and flags for custom sensors. @@ -279,6 +228,23 @@ Sensor::Sensor(struct sensor_t const* hwSensor, int halVersion) } break; } + + // For the newer HALs log errors if reporting mask flags are set incorrectly. + if (halVersion >= SENSORS_DEVICE_API_VERSION_1_3) { + // Wake-up flag is set here. + mFlags |= (hwSensor->flags & SENSOR_FLAG_WAKE_UP); + if (mFlags != hwSensor->flags) { + int actualReportingMode = + (hwSensor->flags & REPORTING_MODE_MASK) >> REPORTING_MODE_SHIFT; + int expectedReportingMode = (mFlags & REPORTING_MODE_MASK) >> REPORTING_MODE_SHIFT; + if (actualReportingMode != expectedReportingMode) { + ALOGE("Reporting Mode incorrect: sensor %s handle=%d type=%d " + "actual=%d expected=%d", + mName.string(), mHandle, mType, actualReportingMode, expectedReportingMode); + } + + } + } } Sensor::~Sensor() |