Na versão L do Android, estamos interrompendo o suporte para algumas versões de sensores HAL. As únicas versões suportadas 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 com a 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 lote e introduzimos sensores de ativação.
Para atualizar para 1_3, siga as alterações listadas abaixo.
Implementar a função de lote
Mesmo que você não implemente o lote (seu hardware não possui FIFO), você deverá 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 batch
, poderá implementá-lo simplesmente chamando sua função setDelay
existente com o parâmetro sampling_period_ns
fornecido.
Implementar a função flush
Mesmo se você não implementar o lote, deverá implementar a função flush
.
Se você não implementar o lote, flush
deverá 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 dos seus sensores
Ao definir cada sensor, além dos habituais campos 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 lote, defina este como 0.
fifoMaxEventCount : se não estiver implementando o lote, defina este como 0
stringType : Defina como 0 para todos os sensores oficiais do Android (aqueles definidos em sensores.h), pois esse valor será sobrescrito pelo framework. Para sensores não oficiais, consulte sensor_t para obter detalhes sobre como configurá-lo.
requirePermission : Esta é a permissão que os aplicativos deverão ter para obter acesso ao seu sensor. Geralmente você pode definir isso como 0 para todos os seus sensores, mas os sensores do 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 pelos aplicativos para estimar quando o FIFO do lote pode estar cheio. Se este 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, enquantomaxDelay
/minDelay
estão em microssegundos. -
maxDelay
deve sempre caber em um número inteiro com sinal de 32 bits. É 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 despertar.
Se você não implementar o lote e estiver apenas migrando de 1.0 para 1.3, defina como:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
para sensores únicos
SENSOR_FLAG_CONTINUOUS_MODE
para sensores contínuos SENSOR_FLAG_ON_CHANGE_MODE
para sensores on-change exceto proximidade SENSOR_FLAG_SPECIAL_REPORTING_MODE
para sensores com modo de relatório especial exceto para 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.
Notas 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çãobatch
pode falhar são erros internos, ou umsensor_handle,
ousampling_period_ns
negativo oumax_report_latency_ns
negativo. - O fato de um sensor suportar lotes é definido pelo fato de ele ter um
fifoMaxEventCount
maior que 0. (Nas versões anteriores, era baseado no valor de retorno debatch()
.) - Os sensores que suportam processamento em lote estão sempre no que chamamos de “modo em lote” nas versões anteriores: mesmo que o parâmetro
max_report_latency_ns
seja 0, o sensor ainda deve ser armazenado em lote, o que significa que os eventos devem 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
estão obsoletos e nunca serão passados para a funçãobatch
. - O argumento de tempo limite do lote agora é conhecido como argumento
max_report_latency
.