Descontinuação da versão da HAL

Na versão L do Android, estamos interrompendo o suporte a alguns sensores HAL mais recentes. As únicas versões compatíveis são SENSORS_DEVICE_API_VERSION_1_0 e SENSORS_DEVICE_API_VERSION_1_3.

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

1_0 não tem o conceito de loteamento. Se possível, todos os dispositivos que usam 1_0 DEVEM faça o upgrade para 1_3.

1_1 e 1_2 sofrem de uma definição incorreta do conceito de lotes e não são mais suportado

Todos os dispositivos que atualmente usam 1_1 ou 1_2 PRECISAM fazer upgrade para o 1_3.

Em 1_3, simplificamos a noção de lotes e apresentamos a função ou sensores.

Para fazer upgrade para o 1_3, siga as mudanças listadas abaixo.

Implementar a função em lote

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

Se você não implementar lotes, poderá implementar batch basta chamar a função setDelay atual com as sampling_period_ns.

Implementar a função de limpeza

Mesmo que você não implemente lotes, deverá implementar o função flush.

Se você não implementar lotes, flush precisará gerar um evento META_DATA_FLUSH_COMPLETE e retorna 0 (sucesso).

Alterar 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 do sensor_t normal :

.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,

fifoemptyEventCount: se não estiver implementando lotes, defina esse valor como 0.

fifoMaxEventCount: se você não estiver implementando lotes, defina este como 0

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

requiredPermission: é a permissão que os aplicativos precisarão ter para acessar. acesso ao sensor. Geralmente, é possível definir como 0 para todos os sensores, mas os sensores com o tipo HEART_RATE precisam definir como SENSOR_PERMISSION_BODY_SENSORS.

maxDelay: este valor é importante e será preciso defini-lo de acordo com o capacidade do sensor e do driver.

Esse valor é definido apenas para sensores contínuos e em mudança. É o entre dois eventos de sensor correspondentes à menor frequência com que esse que o sensor oferece. Quando frequências mais baixas são solicitadas pelo batch, os eventos serão gerados nessa frequência como alternativa. Ele pode ser usado pelo framework ou aplicativos para estimar quando o lote FIFO pode estar cheio. Se esse valor não for definido corretamente, o CTS vai falhar. Para sensores de modo de relatório único e especiais, defina maxDelay como 0.

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

As informações a seguir são aplicáveis a period_ns, maxDelay e minDelay:

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

flags: esse campo define o modo de comunicação do sensor e se ele está um sensor de ativação.

Se você não implementar lotes e estiver apenas passando da versão 1.0 para a 1.3, configure esta para:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE para one-shot sensores

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

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 fazer upgrade da versão 1_1 ou 1_2

  • A função batch agora funciona quase sempre, mesmo para sensores sem suporte lotes, independente do valor do argumento de tempo limite. Os únicos casos em que a função batch pode falhar são erros internos ou um sensor_handle, ou negativo sampling_period_ns ou max_report_latency_ns negativo.
  • A compatibilidade de um sensor com lotes é determinada pela presença fifoMaxEventCount maior que 0. (Nas versões anteriores, com base no valor de retorno de batch().
  • Os sensores compatíveis com lotes estão sempre no sistema "mode" nas versões anteriores: mesmo que o parâmetro max_report_latency_ns seja 0, o sensor ainda precisa estar agrupado, ou seja, os eventos precisam ser armazenados no FIFO quando o SoC entra no modo de suspensão.
  • O parâmetro flags da função batch é não são mais usados. DRY_RUN e WAKE_UPON_FIFO_FULL estão foi descontinuado e nunca será transmitido para a função batch.
  • O argumento de tempo limite do lote agora é chamado de argumento max_report_latency.