Устаревшая версия HAL

В версии Android L мы прекращаем поддержку некоторых версий датчиков 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 (успех).

Измените датчики_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 для получения подробной информации о том, как его установить.

requirePermission : это разрешение, которое приложениям потребуется для получения доступа к вашему датчику. Обычно вы можете установить это значение на 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 .