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_ns
está em nanossegundos, enquantomaxDelay
/minDelay
estão em microssegundos.maxDelay
sempre 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
batch
agora 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çãobatch
pode falhar são erros internos ou umsensor_handle,
incorreto ou umsampling_period_ns
negativo oumax_report_latency_ns
negativo. - A compatibilidade de um sensor com o agrupamento é definida por um
fifoMaxEventCount
maior 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_ns
seja 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
flags
da funçãobatch
não é mais usado.DRY_RUN
eWAKE_UPON_FIFO_FULL
foram descontinuados e nunca serão transmitidos para a funçãobatch
. - O argumento de tempo limite de lote agora é chamado de
max_report_latency
.