Ritiro della versione HAL

Nella versione L di Android, interromperemo il supporto per alcuni sensori HAL e versioni successive. Le uniche versioni supportate sono SENSORS_DEVICE_API_VERSION_1_0 e SENSORS_DEVICE_API_VERSION_1_3.

Nelle prossime versioni, è probabile che ritireremo il supporto anche per 1_0.

1_0 non ha un concetto di raggruppamento. Se possibile, tutti i dispositivi che utilizzano 1_0 DOVREBBERO eseguire l'upgrade a 1_3.

1_1 e 1_2 soffrono di una scarsa definizione del concetto di batching e non sono più supportato

Tutti i dispositivi che attualmente utilizzano 1_1 o 1_2 DEVONO eseguire l'upgrade alla versione 1_3.

In 1_3, abbiamo semplificato la nozione di batch e abbiamo introdotto i sensori.

Per eseguire l'upgrade alla versione 1_3, segui le modifiche elencate di seguito.

Implementare la funzione batch

Anche se non implementi il batch (l'hardware non è dotato di FIFO), devi implementare la funzione batch. batch viene utilizzato per impostare il periodo di campionamento e la latenza massima di reporting per un determinato sensore. it sostituisce setDelay. setDelay non verrà chiamato più tardi.

Se non implementi il raggruppamento in batch, puoi implementare batch semplicemente chiamando la funzione setDelay esistente con sampling_period_ns.

Implementa la funzione di svuotamento

Anche se non implementi la modalità batch, devi implementare Funzione flush.

Se non implementi il raggruppamento in batch, flush deve generarne uno META_DATA_FLUSH_COMPLETE evento e restituisce 0 (riuscito).

Cambia i sensori_poll_device_t.common.version

your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3

Aggiungi i nuovi campi alla definizione dei sensori

Durante la definizione di ogni sensore, oltre al solito sensor_t campi:

.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,

è necessario anche impostare i nuovi campi, definiti tra 1_0 e 1_3:

.fifoReservedEventCount = 0,
.fifoMaxEventCount =   0,
.stringType =         0,
.requiredPermission = 0,
.maxDelay =      200000
.flags =
SENSOR_FLAG_CONTINUOUS_MODE,

fifoConfidentialEventCount: se non implementi il batch, imposta questo valore su 0.

fifoMaxEventCount: se non implementi il raggruppamento in batch, imposta questo valore su 0

stringType: imposta su 0 per tutti i sensori Android ufficiali (definiti in sensori.h), in quanto questo valore verrà sovrascritto dal framework. Per sensori non ufficiali, vedi sensor_t per dettagli su come configurarlo.

requiredPermission: è l'autorizzazione che le applicazioni dovranno avere per ottenere. l'accesso al sensore. Solitamente, puoi impostarlo su 0 per tutti i sensori, ma i sensori di tipo HEART_RATE devono impostare questo valore su SENSOR_PERMISSION_BODY_SENSORS.

maxDelay: questo valore è importante e deve essere impostato in base alla capacità del sensore e del conducente.

Questo valore è definito solo per i sensori continui e in continuo movimento. È la tra due eventi del sensore corrispondenti alla frequenza più bassa che questo supportati dai sensori. Quando vengono richieste frequenze più basse tramite funzione batch, gli eventi verranno generati con questa frequenza . Può essere utilizzato dal framework o dalle applicazioni per stimare quando il batch FIFO potrebbe essere pieno. Se questo valore non è impostato correttamente, CTS non riesce. Per i sensori one-shot e speciali per la modalità di reporting, imposta maxDelay su 0.

Per i sensori continui, imposta il periodo di campionamento massimo consentito in microsecondi.

I seguenti valori si applicano a period_ns, maxDelay e minDelay:

  • period_ns è in nanosecondi, mentre maxDelay/minDelay sono in microsecondi.
  • maxDelay deve sempre rientrare in un numero intero a 32 bit. it viene dichiarata come a 64 bit nelle architetture a 64 bit solo per motivi di compatibilità binaria.

flags: questo campo definisce la modalità di segnalazione del sensore e se quest'ultimo è un sensore per la riattivazione.

Se non si implementa il raggruppamento in batch e si sta solo passando dalla versione 1.0 alla 1.3, impostare questo a:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE per one-shot sensori

SENSOR_FLAG_CONTINUOUS_MODE per continua sensori SENSOR_FLAG_ON_CHANGE_MODE per in caso di variazione sensori tranne la prossimità SENSOR_FLAG_SPECIAL_REPORTING_MODE per sensori con speciali modalità di generazione dei report, tranne la inclinazione rilevatore.

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE per il sensore di prossimità e il sensore del rilevatore di inclinazione ufficiale di Android.

Note in caso di upgrade da 1_1 o 1_2

  • La funzione batch ora ha quasi sempre successo, anche per i sensori che non supportano in batch, indipendentemente dal valore dell'argomento timeout. Gli unici casi in cui la funzione batch potrebbe non riuscire sono errori interni o un errore sensor_handle, o sampling_period_ns o negativo negativo max_report_latency_ns.
  • Il supporto di un sensore in batch è determinato dalla presenza o meno di una fifoMaxEventCount maggiore di 0. (Nelle versioni precedenti, era in base al valore restituito di batch().
  • I sensori che supportano il batch si trovano sempre in quello che chiamiamo "batch " nelle versioni precedenti: anche se il parametro max_report_latency_ns è 0, il sensore deve comunque essere raggruppato, il che significa che gli eventi devono archiviati nel FIFO quando il SoC passa in modalità di sospensione.
  • Il parametro flags della funzione batch è non viene più usato. DRY_RUN e WAKE_UPON_FIFO_FULL sono sono entrambi deprecati e non verranno mai passati alla funzione batch.
  • L'argomento timeout batch è ora denominato max_report_latency argomento.