Ever had a phone with a bum gyroscope? Or a totally irrational pedometer? Google, in the interest of better counting your steps and determining just what in the hell your phone is doing moving around in three-dimensional space has now defined a "high fidelity sensor support" flag for Android devices, as in the Android 6.0 Compatibility Definition Document.

The idea here is to give developers a single flag to look for that says "this phone / tablet / whatever is not a dumpster fire of awful sensor accuracy." Or, perhaps, more positively, to just say a device has really good sensors. The sensors targeted by this new flag include the accelerometer, gyroscope, compass (geomagnetic field), barometer (pressure), and pedometer (step counter). Not only are accuracy requirements defined, but strict power consumption targets are provided as well. That is to say, even if your gyroscope is wicked accurate, it can't be using more than 1.5mW (milliwatts) of power when it's turned on if it wants to qualify for the cool kids sensor club. Here is the complete text.

Device implementations supporting a set of higher quality sensors that can meet all the requirements listed in this section MUST identify the support through the android.hardware.sensor.hifi_sensors feature flag. A device declaring android.hardware.sensor.hifi_sensors MUST support all of the following sensor types meeting the quality requirements as below: SENSOR_TYPE_ACCELEROMETER MUST have a measurement range between at least -8g and +8g

MUST have a measurement resolution of at least 1024 LSB/G

MUST have a minimum measurement frequency of 12.5 Hz or lower

MUST have a maxmium measurement frequency of 200 Hz or higher

MUST have a measurement noise not above 400uG/√Hz

MUST implement a non-wake-up form of this sensor with a buffering capability of at least 3000 sensor events

MUST have a batching power consumption not worse than 3 mW SENSOR_TYPE_GYROSCOPE MUST have a measurement range between at least -1000 and +1000 dps

MUST have a measurement resolution of at least 16 LSB/dps

MUST have a minimum measurement frequency of 12.5 Hz or lower

MUST have a maxmium measurement frequency of 200 Hz or higher

MUST have a measurement noise not above 0.014°/s/√Hz SENSOR_TYPE_GYROSCOPE_UNCALIBRATED with the same quality requirements as SENSOR_TYPE_GYROSCOPE SENSOR_TYPE_GEOMAGNETIC_FIELD MUST have a measurement range between at least -900 and +900 uT

MUST have a measurement resolution of at least 5 LSB/uT

MUST have a minimum measurement frequency of 5 Hz or lower

MUST have a maxmium measurement frequency of 50 Hz or higher

MUST have a measurement noise not above 0.5 uT SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED with the same quality requirements as SENSOR_TYPE_GEOMAGNETIC_FIELD and in addition: MUST implement a non-wake-up form of this sensor with a buffering capability of at least 600 sensor events SENSOR_TYPE_PRESSURE MUST have a measurement range between at least 300 and 1100 hPa

MUST have a measurement resolution of at least 80 LSB/hPa

MUST have a minimum measurement frequency of 1 Hz or lower

MUST have a maximum measurement frequency of 10 Hz or higher

MUST have a measurement noise not above 2 Pa/√Hz

MUST implement a non-wake-up form of this sensor with a buffering capability of at least 300 sensor events

MUST have a batching power consumption not worse than 2 mW SENSOR_TYPE_ROTATION_VECTOR MUST have a batching power consumption not worse than 4 mW SENSOR_TYPE_GAME_ROTATION_VECTOR MUST implement a non-wake-up form of this sensor with a buffering capability of at least 300 sensor events SENSOR_TYPE_SIGNIFICANT_MOTION MUST have a power consumption not worse than 0.5 mW when device is static and 1.5 mW when device is moving SENSOR_TYPE_STEP_DETECTOR MUST implement a non-wake-up form of this sensor with a buffering capability of at least 100 sensor events MUST have a power consumption not worse than 0.5 mW when device is static and 1.5 mW when device is moving MUST have a batching power consumption not worse than 4 mW SENSOR_TYPE_STEP_COUNTER MUST have a power consumption not worse than 0.5 mW when device is static and 1.5 mW when device is moving SENSOR_TILT_DETECTOR MUST have a power consumption not worse than 0.5 mW when device is staticand 1.5 mW when device is moving Also such a device MUST meet the following sensor subsystem requirements: The event timestamp of the same physical event reported by the Accelerometer, Gyroscope sensor and Magnetometer MUST be within 2.5 milliseconds of each other. The Gyroscope sensor event timestamps MUST be on the same time base as the camera subsystem and within 1 millisconds of error. The latency of delivery of samples to the HAL SHOULD be below 5 milliseconds from the instant the data is available on the physical sensor hardware. The power consumption MUST not be higher than 0.5 mW when device is static and 2.0 mW when device is moving when any combination of the following sensors are enabled: SENSOR_TYPE_SIGNIFICANT_MOTION,

SENSOR_TYPE_STEP_DETECTOR

SENSOR_TYPE_STEP_COUNTER

SENSOR_TILT_DETECTORS

Note that all power consumption requirements in this section do not include the power consumption of the Application Processor. It is inclusive of the power drawn by the entire sensor chain - the sensor, any supporting circuitry, any dedicated sensor processing system, etc. The following sensor types MAY also be supported on a device implementation declaring android.hardware.sensor.hifi_sensors, but if these sensor types are present they MUST meet the following minimum buffering capability requirement: SENSOR_TYPE_PROXIMITY: 100 sensor events

Our speculation is that this set of requirements is probably met by the new Nexus "sensor hub" on the Nexus 5X and 6P (or at least one of them), with those phones serving as reference designs for high fidelity sensor support. Again, the idea here is pretty developer-centric, even if this is a document targeted at manufacturers. If OEMs meet the requirements, they can tick the flag for high fidelity support, which will allow developers to decide just how to calibrate their apps and games for a given device or whether to display a warning if a given device does not have the level of hi-fi sensor support for optimal performance or power consumption. Basically, this is about standardizing hardware performance for the benefit of user experience.

Note that OEMs are not compelled to build high fidelity sensor support, they merely need to meet the requirements of it if they want their devices to be flagged as hi-fi sensor capable. This isn't a requirement for getting the Play Store or anything like that - just to be clear. It is 100% optional.