В версии 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
.