Na versão L do Android, estamos interrompendo o suporte para algumas versões do sensor HAL. As únicas versões com suporte 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 de 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 lotes e introduzimos sensores de ativação.
Para atualizar para 1_3, siga as alterações listadas abaixo.
Implemente a função de lote
Mesmo que você não implemente o batching (seu hardware não possui FIFO), você deve 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 batching, poderá implementar o batch
simplesmente chamando sua função setDelay
existente com o parâmetro sampling_period_ns
fornecido.
Implemente a função flush
Mesmo que você não implemente o batching, você deve implementar a função flush
.
Se você não implementar o batching, o flush
deve 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 de seus sensores
Ao definir cada sensor, além dos campos usuais de 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 batching, defina este como 0.
fifoMaxEventCount : Se não estiver implementando o batching, defina este como 0
stringType : Defina como 0 para todos os sensores oficiais do Android (aqueles que são definidos em sensores.h), pois esse valor será substituído pelo framework. Para sensores não oficiais, consulte sensor_t para obter detalhes sobre como configurá-lo.
requiredPermission : Esta é a permissão que os aplicativos precisarão ter para obter acesso ao seu sensor. Normalmente, você pode definir isso como 0 para todos os seus sensores, mas os sensores com 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 aplicativos para estimar quando o FIFO do lote pode estar cheio. Se esse 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 inteiro com sinal de 32 bits. Ele é 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 ativação.
Se você não implementar o batching e estiver apenas passando de 1.0 para 1.3, defina isso como:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
para sensores de disparo único
SENSOR_FLAG_CONTINUOUS_MODE
para sensores contínuos SENSOR_FLAG_ON_CHANGE_MODE
para sensores em mudança exceto proximidade SENSOR_FLAG_SPECIAL_REPORTING_MODE
para sensores com modo de relatório especial exceto para o detector de inclinação .
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 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ção debatch
pode falhar são erros internos, ou umsensor_handle,
ousampling_period_ns
negativo oumax_report_latency_ns
negativo. - Se um sensor suporta lotes é definido se ele tem um
fifoMaxEventCount
maior que 0. (Nas versões anteriores, era baseado no valor de retorno debatch()
.) - Os sensores que suportam batching estão sempre no que chamamos de “modo batch” nas versões anteriores: mesmo que o parâmetro
max_report_latency_ns
seja 0, o sensor ainda deve ser batched, ou seja, os eventos devem ser armazenados no FIFO quando o SoC for para o modo suspenso . - 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ção debatch
. - O argumento de tempo limite do lote agora é chamado de argumento
max_report_latency
.