Прекращение поддержки версии HAL

В выпуске 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 .