En la versión L de Android, detendremos la compatibilidad con algunos sensores HAL.
versiones. Las únicas versiones compatibles son SENSORS_DEVICE_API_VERSION_1_0
y SENSORS_DEVICE_API_VERSION_1_3
.
En las próximas versiones, es probable que también dejemos de ser compatible con 1_0.
1_0 no tiene el concepto de agrupación en lotes. Si es posible, todos los dispositivos que usan 1_0 DEBEN actualizar a 1_3.
1_1 y 1_2 se ven afectadas por una mala definición del concepto de lotes y no son ya no es compatible
Todos los dispositivos que actualmente utilizan 1_1 o 1_2 DEBEN actualizarse a 1_3.
En 1_3, simplificamos la noción de agrupación en lotes e introdujimos la función de despertar sensores.
Para actualizar a la versión 1_3, sigue los cambios que se indican a continuación.
Implementa la función por lotes
Incluso si no implementas el procesamiento por lotes (tu hardware no tiene FIFO), debes
implementa la función batch
. batch
se usa para establecer
el período de muestreo y la latencia máxima de informe para un sensor determinado. Integra
reemplaza a setDelay
. No se llamará a setDelay
sus datos.
Si no implementas el procesamiento por lotes, puedes implementar batch
.
simplemente llamando a la función setDelay
existente con el
Parámetro sampling_period_ns
.
Implementa la función de limpieza
Incluso si no implementas el procesamiento por lotes, debes implementar el
función flush
.
Si no implementas el procesamiento por lotes, flush
debe generar uno.
META_DATA_FLUSH_COMPLETE
y muestra 0 (correcto).
Cambia tu sensor_poll_device_t.common.version.
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
Agrega los campos nuevos a la definición de tus sensores
Cuando definas cada sensor, además del sensor_t habitual campos:
.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,
también debes establecer los nuevos campos, definidos entre 1_0 y 1_3:
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount: Si no estás implementando el procesamiento por lotes, establece este en 0.
fifoMaxEventCount: Si no se implementa el procesamiento por lotes, establece este en 0.
stringType: establecer en 0 para todos los sensores oficiales de Android (los que se definen en sensores.h), ya que el framework reemplazará este valor. Para sensores no oficiales, consulta sensor_t para detalles sobre cómo configurarlo.
requiredPermission: Es el permiso que las aplicaciones deberán tener
acceso al sensor. Por lo general, puedes establecerlo
en 0 para todos los sensores,
pero los sensores con el tipo HEART_RATE
deben establecer esto en SENSOR_PERMISSION_BODY_SENSORS.
maxDelay: Este valor es importante y deberás establecerlo según las capacidades del sensor y su controlador.
Este valor solo se define para los sensores continuos y en caso de cambio. Es el
entre dos eventos de sensor que corresponden a la frecuencia más baja a la que
es compatible con el sensor. Cuando se solicitan frecuencias más bajas mediante el
función batch
, los eventos se generarán con esta frecuencia
en su lugar. Lo pueden usar el framework o las aplicaciones para estimar cuándo
el FIFO del lote puede estar lleno. Si este valor no se establece correctamente, el CTS fallará.
Para los sensores del modo de informe único y especial, establece maxDelay
en 0.
Para sensores continuos, establécelo en el período de muestreo máximo permitido en microsegundos.
Lo siguiente se aplica a period_ns
, maxDelay
y minDelay
:
period_ns
está en nanosegundos, mientras quemaxDelay
/minDelay
están en microsegundos.maxDelay
siempre debe ajustarse a un número entero firmado de 32 bits. Integra se declara como de 64 bits en arquitecturas de 64 bits solo por motivos de compatibilidad binaria.
flags: Este campo define el modo de informe del sensor y si este se un sensor de activación.
Si no implementas el procesamiento por lotes y solo pasarás de la 1.0 a la 1.3, configura lo siguiente: a:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
para un intento
sensores
SENSOR_FLAG_CONTINUOUS_MODE
para continuo
sensores SENSOR_FLAG_ON_CHANGE_MODE
para cuando se produce un cambio
sensores excepto de proximidad
SENSOR_FLAG_SPECIAL_REPORTING_MODE
para sensores con especial
de generación de informes, excepto por la inclinación
detector.
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
para el sensor de proximidad y el sensor del detector de inclinación oficial de Android
Notas cuando se actualiza desde 1_1 o 1_2
- La función
batch
ahora casi siempre se ejecuta de forma correcta, incluso para los sensores que no son compatibles. procesamiento por lotes, independiente del valor del argumento tiempo de espera. Los únicos casos en los que la funciónbatch
podría fallar son errores internos osensor_handle,
o negativosampling_period_ns
omax_report_latency_ns
negativo. - La posibilidad de que un sensor admita el procesamiento por lotes se define por si tiene
fifoMaxEventCount
mayor que 0. (En versiones anteriores, era según el valor que se muestra debatch()
). - Los sensores que admiten la agrupación
por lotes están siempre en lo que llamamos
“mode” en versiones anteriores: incluso si el parámetro
max_report_latency_ns
es 0, el sensor aún debe agruparse en lotes, lo que significa que los eventos deben en el FIFO cuando el SoC pasa al modo de suspensión. - El parámetro
flags
de la funciónbatch
es que ya no se usan.DRY_RUN
yWAKE_UPON_FIFO_FULL
son son obsoletos y nunca se pasan a la funciónbatch
. - El argumento del tiempo de espera del lote ahora se conoce como
max_report_latency
.