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, mentremaxDelay
/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 funzionebatch
potrebbe non riuscire sono errori interni o un erroresensor_handle,
osampling_period_ns
o negativo negativomax_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 dibatch()
. - 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 funzionebatch
è non viene più usato.DRY_RUN
eWAKE_UPON_FIFO_FULL
sono sono entrambi deprecati e non verranno mai passati alla funzionebatch
. - L'argomento timeout batch è ora denominato
max_report_latency
argomento.