Descontinuação da versão HAL

Na versão L do Android, estamos interrompendo o suporte para algumas versões do sensor HAL. As únicas versões com suporte 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 de 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 lotes e introduzimos sensores de ativação.

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

Implemente a função de lote

Mesmo que você não implemente o batching (seu hardware não possui FIFO), você deve 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 batching, poderá implementar o batch simplesmente chamando sua função setDelay existente com o parâmetro sampling_period_ns fornecido.

Implemente a função flush

Mesmo que você não implemente o batching, você deve implementar a função flush .

Se você não implementar o batching, o flush deve 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 de seus sensores

Ao definir cada sensor, além dos campos usuais de 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 batching, defina este como 0.

fifoMaxEventCount : Se não estiver implementando o batching, defina este como 0

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

requiredPermission : Esta é a permissão que os aplicativos precisarão ter para obter acesso ao seu sensor. Normalmente, você pode definir isso como 0 para todos os seus sensores, mas os sensores com 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 aplicativos para estimar quando o FIFO do lote pode estar cheio. Se esse 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 inteiro com sinal de 32 bits. Ele é 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 ativação.

Se você não implementar o batching e estiver apenas passando de 1.0 para 1.3, defina isso como:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE para sensores de disparo único

SENSOR_FLAG_CONTINUOUS_MODE para sensores contínuos SENSOR_FLAG_ON_CHANGE_MODE para sensores em mudança exceto proximidade SENSOR_FLAG_SPECIAL_REPORTING_MODE para sensores com modo de relatório especial exceto para o detector de inclinação .

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

Observações 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 de batch pode falhar são erros internos, ou um sensor_handle, ou sampling_period_ns negativo ou max_report_latency_ns negativo.
  • Se um sensor suporta lotes é definido se ele tem um fifoMaxEventCount maior que 0. (Nas versões anteriores, era baseado no valor de retorno de batch() .)
  • Os sensores que suportam batching estão sempre no que chamamos de “modo batch” nas versões anteriores: mesmo que o parâmetro max_report_latency_ns seja 0, o sensor ainda deve ser batched, ou seja, os eventos devem ser armazenados no FIFO quando o SoC for para o modo suspenso .
  • 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 de batch .
  • O argumento de tempo limite do lote agora é chamado de argumento max_report_latency .