Suspensão da versão HAL

Na versão L do Android, estamos interrompendo o suporte para algumas versões de sensores HAL. As únicas versões suportadas são SENSORS_DEVICE_API_VERSION_1_0 e SENSORS_DEVICE_API_VERSION_1_3 .

Nas próximas versões, provavelmente abandonaremos o suporte para 1_0 também.

1_0 não tem conceito de lote. Se possível, todos os dispositivos que usam 1_0 DEVEM atualizar para 1_3.

1_1 e 1_2 sofrem com a má definição do conceito de lote e não são mais suportados

Todos os dispositivos que usam atualmente 1_1 ou 1_2 DEVEM atualizar para 1_3.

Em 1_3, simplificamos a noção de lote e introduzimos sensores de ativação.

Para atualizar para 1_3, siga as alterações listadas abaixo.

Implementar a função de lote

Mesmo que você não implemente o lote (seu hardware não possui FIFO), você deverá implementar a função batch . batch é usado para definir o período de amostragem e a latência máxima de relatório para um determinado sensor. Ele substitui setDelay . setDelay não será mais chamado.

Se você não implementar o batch , poderá implementá-lo simplesmente chamando sua função setDelay existente com o parâmetro sampling_period_ns fornecido.

Implementar a função flush

Mesmo se você não implementar o lote, deverá implementar a função flush .

Se você não implementar o lote, flush deverá gerar um evento META_DATA_FLUSH_COMPLETE e retornar 0 (sucesso).

Altere seus sensores_poll_device_t.common.version

your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3

Adicione os novos campos à definição dos seus sensores

Ao definir cada sensor, além dos habituais campos 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,

você também deve definir os novos campos, definidos entre 1_0 e 1_3:

.fifoReservedEventCount = 0,
.fifoMaxEventCount =   0,
.stringType =         0,
.requiredPermission = 0,
.maxDelay =      200000
.flags =
SENSOR_FLAG_CONTINUOUS_MODE,

fifoReservedEventCount : se não estiver implementando o lote, defina este como 0.

fifoMaxEventCount : se não estiver implementando o lote, defina este como 0

stringType : Defina como 0 para todos os sensores oficiais do Android (aqueles definidos em sensores.h), pois esse valor será sobrescrito pelo framework. Para sensores não oficiais, consulte sensor_t para obter detalhes sobre como configurá-lo.

requirePermission : Esta é a permissão que os aplicativos deverão ter para obter acesso ao seu sensor. Geralmente você pode definir isso como 0 para todos os seus sensores, mas os sensores do tipo HEART_RATE devem definir isso como SENSOR_PERMISSION_BODY_SENSORS.

maxDelay : Este valor é importante e você precisará configurá-lo de acordo com as capacidades do sensor e de seu driver.

Este valor é definido apenas para sensores contínuos e em mudança. É o atraso entre dois eventos do sensor correspondente à frequência mais baixa que este sensor suporta. Quando frequências mais baixas são solicitadas através da função batch , os eventos serão gerados nesta frequência. Ele pode ser usado pela estrutura ou pelos aplicativos para estimar quando o FIFO do lote pode estar cheio. Se este valor não for definido corretamente, o CTS falhará. Para sensores de modo de relatório único e especial, defina maxDelay como 0.

Para sensores contínuos, defina-o para o período máximo de amostragem permitido em microssegundos.

O seguinte é aplicável para period_ns , maxDelay e minDelay :

  • period_ns está em nanossegundos, enquanto maxDelay / minDelay estão em microssegundos.
  • maxDelay deve sempre caber em um número inteiro com sinal de 32 bits. É declarado como 64 bits em arquiteturas de 64 bits apenas por motivos de compatibilidade binária.

flags : Este campo define o modo de relatório do sensor e se o sensor é um sensor de despertar.

Se você não implementar o lote e estiver apenas migrando de 1.0 para 1.3, defina como:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE para sensores únicos

SENSOR_FLAG_CONTINUOUS_MODE para sensores contínuos SENSOR_FLAG_ON_CHANGE_MODE para sensores on-change exceto proximidade SENSOR_FLAG_SPECIAL_REPORTING_MODE para sensores com modo de relatório especial exceto para detector de inclinação .

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE para o sensor de proximidade e o sensor detector de inclinação oficial do Android.

Notas ao atualizar de 1_1 ou 1_2

  • A função batch agora quase sempre é bem-sucedida, mesmo para sensores que não suportam batching, independentemente do valor do argumento timeout. Os únicos casos em que a função batch pode falhar são erros internos, ou um sensor_handle, ou sampling_period_ns negativo ou max_report_latency_ns negativo.
  • O fato de um sensor suportar lotes é definido pelo fato de ele ter um fifoMaxEventCount maior que 0. (Nas versões anteriores, era baseado no valor de retorno de batch() .)
  • Os sensores que suportam processamento em lote estão sempre no que chamamos de “modo em lote” nas versões anteriores: mesmo que o parâmetro max_report_latency_ns seja 0, o sensor ainda deve ser armazenado em lote, o que significa que os eventos devem ser armazenados no FIFO quando o SoC entra no modo de suspensão .
  • O parâmetro flags da função batch não é mais usado. DRY_RUN e WAKE_UPON_FIFO_FULL estão obsoletos e nunca serão passados ​​para a função batch .
  • O argumento de tempo limite do lote agora é conhecido como argumento max_report_latency .