В выпуске L Android мы прекращаем поддержку некоторых версий датчика HAL. Поддерживаются только версии SENSORS_DEVICE_API_VERSION_1_0
и SENSORS_DEVICE_API_VERSION_1_3
.
В следующих выпусках мы, вероятно, также прекратим поддержку 1_0.
1_0 не имеет концепции пакетной обработки. Если возможно, все устройства, использующие 1_0, ДОЛЖНЫ обновиться до 1_3.
1_1 и 1_2 страдают от плохого определения концепции пакетной обработки и больше не поддерживаются.
Все устройства, которые в настоящее время используют 1_1 или 1_2, ДОЛЖНЫ обновиться до 1_3.
В 1_3 мы упростили понятие пакетной обработки и ввели датчики пробуждения.
Чтобы перейти на версию 1_3, выполните перечисленные ниже изменения.
Реализовать пакетную функцию
Даже если вы не реализуете пакетную обработку (на вашем оборудовании нет FIFO), вы должны реализовать batch
функцию. batch
используется для установки периода выборки и максимальной задержки отчета для данного датчика. Он заменяет setDelay
. setDelay
больше не будет вызываться.
Если вы не реализуете batch
обработку, вы можете реализовать ее, просто вызвав существующую функцию setDelay
с предоставленным параметром sampling_period_ns
.
Реализовать функцию сброса
Даже если вы не реализуете пакетную обработку, вы должны реализовать функцию flush
.
Если вы не реализуете пакетную обработку, flush
должен сгенерировать одно событие META_DATA_FLUSH_COMPLETE
и вернуть 0 (успех).
Измените ваш sensor_poll_device_t.common.version
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
Добавьте новые поля в определение ваших датчиков
При определении каждого датчика в дополнение к обычным полям sensor_t :
.name = "My magnetic field Sensor", .vendor = "My company", .version = 1, .handle = mag_handle, .type = SENSOR_TYPE_MAGNETIC_FIELD, .maxRange = 200.0f, .resolution = CONVERT_M, .power = 5.0f, .minDelay = 16667,
вы также должны установить новые поля, определенные между 1_0 и 1_3:
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount : если пакетная обработка не выполняется, установите для этого параметра значение 0.
fifoMaxEventCount : если пакетная обработка не выполняется, установите для этого параметра значение 0.
stringType : установите значение 0 для всех официальных датчиков Android (тех, которые определены в Sensor.h), так как это значение будет перезаписано фреймворком. Для неофициальных датчиков см. Sensor_t для получения подробной информации о том, как его установить.
requiredPermission : это разрешение, которое приложения должны будут иметь для доступа к вашему датчику. Обычно для всех ваших датчиков можно установить значение 0, но для датчиков с типом HEART_RATE
необходимо установить значение SENSOR_PERMISSION_BODY_SENSORS.
maxDelay : это значение важно, и вам нужно будет установить его в соответствии с возможностями датчика и его драйвера.
Это значение определено только для датчиков непрерывного действия и датчиков переключения. Это задержка между двумя событиями датчика, соответствующая самой низкой частоте, поддерживаемой этим датчиком. Когда через batch
функцию запрашиваются более низкие частоты, вместо этого события будут генерироваться на этой частоте. Он может использоваться платформой или приложениями для оценки того, когда пакетный FIFO может быть заполнен. Если это значение не установлено должным образом, CTS завершится ошибкой. Для однократных датчиков и датчиков специального режима отчетов установите для maxDelay
значение 0.
Для непрерывных датчиков установите максимально допустимый период выборки в микросекундах.
Следующие применимы для period_ns
, maxDelay
и minDelay
:
-
period_ns
находится в наносекундах, тогда какmaxDelay
/minDelay
— в микросекундах. -
maxDelay
всегда должен соответствовать 32-битному целому числу со знаком. Он объявлен как 64-разрядный на 64-разрядных архитектурах только из соображений двоичной совместимости.
flags : это поле определяет режим отчета датчика и то, является ли датчик датчиком пробуждения.
Если вы не реализуете пакетную обработку и просто переходите с 1.0 на 1.3, установите для этого параметра значение:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
для одноразовых датчиков
SENSOR_FLAG_CONTINUOUS_MODE
для датчиков непрерывного SENSOR_FLAG_ON_CHANGE_MODE
для датчиков переключения , кроме датчиков приближения SENSOR_FLAG_SPECIAL_REPORTING_MODE
для датчиков со специальным режимом отчетов, кроме датчика наклона .
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
для датчика приближения и официального датчика наклона Android.
Примечания при обновлении с 1_1 или 1_2
-
batch
функция теперь почти всегда завершается успешно, даже для датчиков, которые не поддерживают пакетную обработку, независимо от значения аргумента тайм-аута. Единственными случаями, когдаbatch
функция может дать сбой, являются внутренние ошибки, илиsensor_handle,
или отрицательное значениеsampling_period_ns
или отрицательноеmax_report_latency_ns
. - Поддерживает ли датчик пакетную обработку, определяется тем, имеет ли он значение
fifoMaxEventCount
больше 0. (В предыдущих версиях это основывалось на возвращаемом значенииbatch()
.) - Датчики, поддерживающие пакетную обработку, всегда находятся в том, что мы называли «пакетным режимом» в предыдущих версиях: даже если параметр
max_report_latency_ns
равен 0, датчик все равно должен быть пакетным, то есть события должны сохраняться в FIFO, когда SoC переходит в режим приостановки. . - Параметр
flags
batch
функции больше не используется.DRY_RUN
иWAKE_UPON_FIFO_FULL
устарели и никогда не будут переданы вbatch
функцию. - Аргумент тайм-аута пакета теперь называется аргументом
max_report_latency
.