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, enquantomaxDelay
/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çãobatch
pode falhar são erros internos ou umsensor_handle,
ou negativosampling_period_ns
oumax_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 debatch()
. - 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çãobatch
é não são mais usados.DRY_RUN
eWAKE_UPON_FIFO_FULL
estão foi descontinuado e nunca será transmitido para a funçãobatch
. - O argumento de tempo limite do lote agora é chamado de
argumento
max_report_latency
.