Na versão L do Android, estamos interrompendo o suporte a algumas versões do HAL
do sensor. 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 não vamos oferecer suporte à versão 1_0.
O 1_0 não tem o conceito de lote. Se possível, todos os dispositivos que usam 1_0 precisam fazer upgrade para 1_3.
1_1 e 1_2 têm uma definição ruim do conceito de lote e não têm mais suporte
Todos os dispositivos que usam a versão 1_1 ou 1_2 precisam fazer upgrade para a 1_3.
Na 1_3, simplificamos a noção de agrupamento e introduzimos os sensores de ativação.
Para fazer upgrade para a versão 1_3, siga as mudanças listadas abaixo.
Implementar a função de lote
Mesmo que você não implemente o lote (seu hardware não tem FIFO), é necessário
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 para um determinado sensor. Ele
substitui setDelay. setDelay não será mais chamado.
Se você não implementar o lote, poderá implementar batch
simplesmente chamando a função setDelay com o parâmetro
sampling_period_ns fornecido.
Implementar a função de limpeza
Mesmo que você não implemente o lote, é necessário implementar a
função flush.
Se você não implementar o lote, o flush vai precisar gerar um
evento META_DATA_FLUSH_COMPLETE e retornar 0 (sucesso).
Mude o sensors_poll_device_t.common.version.
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
Adicionar os novos campos à definição dos sensores
Ao definir cada sensor, além dos campos sensor_t comuns:
.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 precisa 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 você não implementar o agrupamento, defina esse valor como 0.
fifoMaxEventCount: se você não implementar o lote, defina esse valor como 0.
stringType: definido como 0 para todos os sensores oficiais do Android (aqueles que são definidos em sensors.h), já que esse valor será substituído pelo framework. Para sensores não oficiais, consulte sensor_t para detalhes sobre como configurá-los.
requiredPermission: é a permissão que os apps precisam ter para ter
acesso ao sensor. Normalmente, é possível definir esse valor como 0 para todos os sensores,
mas os sensores do tipo HEART_RATE precisam ser definidos como SENSOR_PERMISSION_BODY_SENSORS..
maxDelay: esse valor é importante e precisa ser definido de acordo com os recursos do sensor e do driver dele.
Esse valor é definido apenas para sensores contínuos e de mudança. É o
intervalo entre dois eventos do sensor correspondentes à frequência mais baixa com suporte
do sensor. Quando frequências mais baixas são solicitadas pela função batch, os eventos são gerados nessa frequência. Ele pode ser usado pelo framework ou pelos aplicativos para estimar quando o
FIFO do lote pode estar cheio. Se esse valor não for definido corretamente, o CTS vai falhar.
Para sensores de modo de relatório único e especial, defina maxDelay como 0.
Para sensores contínuos, defina o período de amostragem máximo permitido em microssegundos.
O seguinte é aplicável a period_ns, maxDelay e minDelay:
period_nsestá em nanossegundos, enquantomaxDelay/minDelayestão em microssegundos.maxDelaysempre precisa caber em um número inteiro assinado de 32 bits. Ele é declarado como 64 bits em arquiteturas de 64 bits apenas por motivos de compatibilidade binária.
flags: esse campo define o modo de relatório do sensor e se ele é um sensor de ativação.
Se você não implementar o agrupamento e estiver apenas passando da versão 1.0 para a 1.3, defina como:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE para sensores
one-shot
SENSOR_FLAG_CONTINUOUS_MODE para sensores contínuos
SENSOR_FLAG_ON_CHANGE_MODE para sensores de mudança,
exceto proximidade
SENSOR_FLAG_SPECIAL_REPORTING_MODE para sensores com modo de relatório especial,
exceto o 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.
Observações ao fazer upgrade da versão 1_1 ou 1_2
- A função
batchagora quase sempre tem sucesso, mesmo para sensores que não oferecem suporte a agrupamento, independente do valor do argumento de tempo limite. Os únicos casos em que a funçãobatchpode falhar são erros internos ou umsensor_handle,incorreto ou umsampling_period_nsnegativo oumax_report_latency_nsnegativo. - A compatibilidade de um sensor com o agrupamento é definida por um
fifoMaxEventCountmaior que 0. Nas versões anteriores, ela era baseada no valor de retorno debatch(). - Os sensores que oferecem suporte a agrupamento estão sempre no que chamamos de "modo
de lote" em versões anteriores: mesmo que o parâmetro
max_report_latency_nsseja 0, o sensor ainda precisa ser agrupado, ou seja, os eventos precisam ser armazenados no FIFO quando o SoC entra no modo de suspensão. - O parâmetro
flagsda funçãobatchnão é mais usado.DRY_RUNeWAKE_UPON_FIFO_FULLforam descontinuados e nunca serão transmitidos para a funçãobatch. - O argumento de tempo limite de lote agora é chamado de
max_report_latency.