В версии 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 переходит в режим ожидания. . - Параметр
flagsbatchфункции больше не используется.DRY_RUNиWAKE_UPON_FIFO_FULLустарели и никогда не будут переданы вbatchфункцию. - Аргумент тайм-аута пакета теперь называется аргументом
max_report_latency.