W wersji L systemu Android wstrzymujemy obsługę niektórych wersji czujnika HAL. Jedyne obsługiwane wersje to SENSORS_DEVICE_API_VERSION_1_0
i SENSORS_DEVICE_API_VERSION_1_3
.
W kolejnych wydaniach prawdopodobnie zrezygnujemy również z obsługi 1_0.
1_0 nie ma koncepcji grupowania. Jeśli to możliwe, wszystkie urządzenia korzystające z 1_0 POWINNY uaktualnić do 1_3.
1_1 i 1_2 mają słabą definicję koncepcji grupowania i nie są już obsługiwane
Wszystkie urządzenia korzystające obecnie z 1_1 lub 1_2 MUSZĄ uaktualnić do wersji 1_3.
W 1_3 uprościliśmy pojęcie grupowania i wprowadziliśmy czujniki budzenia.
Aby uaktualnić do wersji 1_3, postępuj zgodnie ze zmianami wymienionymi poniżej.
Zaimplementuj funkcję wsadową
Nawet jeśli nie zaimplementujesz przetwarzania wsadowego (Twój sprzęt nie ma FIFO), musisz zaimplementować funkcję batch
. batch
służy do ustawienia okresu próbkowania i maksymalnego opóźnienia raportowania dla danego czujnika. Zastępuje setDelay
. setDelay
nie będzie już wywoływany.
Jeśli nie zaimplementujesz przetwarzania wsadowego, możesz zaimplementować batch
, po prostu wywołując istniejącą funkcję setDelay
z podanym parametrem sampling_period_ns
.
Zaimplementuj funkcję spłukiwania
Nawet jeśli nie zaimplementujesz przetwarzania wsadowego, musisz zaimplementować funkcję flush
.
Jeśli nie zaimplementujesz przetwarzania wsadowego, flush
musi wygenerować jedno zdarzenie META_DATA_FLUSH_COMPLETE
i zwrócić 0 (powodzenie).
Zmień swoje sensory_poll_device_t.common.version
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
Dodaj nowe pola do definicji swoich czujników
Podczas definiowania każdego czujnika, oprócz zwykłych pól 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,
musisz również ustawić nowe pola, zdefiniowane między 1_0 a 1_3:
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount : jeśli nie implementujesz przetwarzania wsadowego, ustaw tę wartość na 0.
fifoMaxEventCount : Jeśli nie implementujesz przetwarzania wsadowego, ustaw tę wartość na 0
stringType : Ustaw na 0 dla wszystkich oficjalnych czujników Androida (tych, które są zdefiniowane w sensorach.h), ponieważ ta wartość zostanie nadpisana przez framework. W przypadku nieoficjalnych czujników, zobacz sensor_t , aby dowiedzieć się, jak go ustawić.
requiredPermission : jest to uprawnienie wymagane przez aplikacje, aby uzyskać dostęp do czujnika. Zwykle możesz ustawić to na 0 dla wszystkich swoich czujników, ale czujniki typu HEART_RATE
muszą ustawić to na SENSOR_PERMISSION_BODY_SENSORS.
maxDelay : Ta wartość jest ważna i będziesz musiał ją ustawić zgodnie z możliwościami czujnika i jego sterownika.
Ta wartość jest zdefiniowana tylko dla czujników ciągłych i zmianowych. Jest to opóźnienie między dwoma zdarzeniami czujnika odpowiadające najniższej częstotliwości obsługiwanej przez ten czujnik. Kiedy niższe częstotliwości są żądane przez funkcję batch
, zdarzenia będą generowane zamiast tego z tą częstotliwością. Może być używany przez platformę lub aplikacje do oszacowania, kiedy partia FIFO może być pełna. Jeśli ta wartość nie jest ustawiona prawidłowo, CTS nie powiedzie się. Dla czujników jednokrotnego i specjalnego trybu raportowania ustaw maxDelay
na 0.
W przypadku czujników ciągłych ustaw maksymalny dozwolony okres próbkowania w mikrosekundach.
Następujące zasady mają zastosowanie do period_ns
, maxDelay
i minDelay
:
-
period_ns
jest w nanosekundach, podczas gdymaxDelay
/minDelay
są w mikrosekundach. -
maxDelay
powinien zawsze mieścić się w 32-bitowej liczbie całkowitej ze znakiem. Jest deklarowany jako 64-bitowy na architekturach 64-bitowych tylko ze względu na zgodność binarną.
flags : To pole określa tryb raportowania czujnika i czy czujnik jest czujnikiem budzenia.
Jeśli nie zaimplementujesz przetwarzania wsadowego i właśnie przechodzisz z 1.0 do 1.3, ustaw to na:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
dla czujników jednorazowych
SENSOR_FLAG_CONTINUOUS_MODE
dla czujników ciągłych SENSOR_FLAG_ON_CHANGE_MODE
dla czujników na zmianę z wyjątkiem czujników zbliżeniowych SENSOR_FLAG_SPECIAL_REPORTING_MODE
dla czujników ze specjalnym trybem raportowania z wyjątkiem czujnika przechyłu .
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
dla czujnika zbliżeniowego i oficjalnego czujnika wykrywania przechyłu Androida.
Uwagi dotyczące aktualizacji z wersji 1_1 lub 1_2
- Funkcja
batch
teraz prawie zawsze kończy się sukcesem, nawet w przypadku czujników, które nie obsługują przetwarzania wsadowego, niezależnie od wartości argumentu limitu czasu. Jedyne przypadki, w których funkcjabatch
może się nie powieść, to błędy wewnętrzne lub złysensor_handle,
ujemna wartośćsampling_period_ns
lub ujemnamax_report_latency_ns
. - To, czy czujnik obsługuje przetwarzanie wsadowe, jest definiowane przez to, czy ma
fifoMaxEventCount
większą niż 0. (W poprzednich wersjach było to oparte na wartości zwracanej przezbatch()
.) - Czujniki obsługujące przetwarzanie wsadowe są zawsze w tak zwanym „trybie wsadowym” w poprzednich wersjach: nawet jeśli parametr
max_report_latency_ns
ma wartość 0, czujnik nadal musi być wsadowy, co oznacza, że zdarzenia muszą być przechowywane w FIFO, gdy SoC przechodzi w tryb wstrzymania . - Parametr
flags
funkcjibatch
nie jest już używany.DRY_RUN
iWAKE_UPON_FIFO_FULL
są przestarzałe i nigdy nie zostaną przekazane do funkcjibatch
. - Argument limitu czasu partii jest teraz nazywany argumentem
max_report_latency
.