W wersji L systemu Android wstrzymujemy obsługę niektórych wersji HAL czujników. Jedyne obsługiwane wersje to SENSORS_DEVICE_API_VERSION_1_0
i SENSORS_DEVICE_API_VERSION_1_3
.
W następnych wersjach prawdopodobnie porzucimy obsługę także dla 1_0.
1_0 nie ma koncepcji przetwarzania wsadowego. Jeśli to możliwe, wszystkie urządzenia korzystające z wersji 1_0 POWINNY dokonać aktualizacji do wersji 1_3.
1_1 i 1_2 mają słabą definicję koncepcji przetwarzania wsadowego i nie są już obsługiwane
Wszystkie urządzenia korzystające obecnie z wersji 1_1 lub 1_2 MUSZĄ dokonać aktualizacji do wersji 1_3.
W wersji 1_3 uprościliśmy pojęcie dozowania 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 implementujesz 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 implementujesz przetwarzania batch
, możesz to zrobić, po prostu wywołując istniejącą funkcję setDelay
z podanym parametrem sampling_period_ns
.
Zaimplementuj funkcję opróżniania
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 (sukces).
Zmień wersję Sensors_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 także ustawić nowe pola, zdefiniowane pomię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 uzyskać szczegółowe informacje na temat ich ustawiania.
wymaganePermission : Jest to pozwolenie wymagane przez aplikacje, aby uzyskać dostęp do czujnika. Zwykle możesz ustawić tę wartość na 0 dla wszystkich czujników, ale czujniki typu HEART_RATE
muszą ustawić tę wartość na SENSOR_PERMISSION_BODY_SENSORS.
maxDelay : Ta wartość jest ważna i należy ją ustawić zgodnie z możliwościami czujnika i jego sterownika.
Wartość ta jest zdefiniowana tylko dla czujników ciągłych i zmiennych. Jest to opóźnienie pomiędzy dwoma zdarzeniami czujnika odpowiadające najniższej częstotliwości obsługiwanej przez ten czujnik. Jeśli w ramach funkcji batch
zażądane zostaną niższe częstotliwości, zdarzenia będą generowane 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 zostanie ustawiona prawidłowo, CTS nie powiedzie się. W przypadku czujników trybu jednorazowego i specjalnego trybu raportowania ustaw maxDelay
na 0.
W przypadku czujników ciągłych należy ustawić maksymalny dozwolony okres próbkowania w mikrosekundach.
Poniższe mają zastosowanie do period_ns
, maxDelay
i minDelay
:
-
period_ns
jest w nanosekundach, podczas gdymaxDelay
/minDelay
w mikrosekundach. -
maxDelay
powinien zawsze mieścić się w 32-bitowej liczbie całkowitej ze znakiem. Jest zadeklarowany jako 64-bitowy w architekturach 64-bitowych tylko ze względu na kompatybilność binarną.
flags : To pole określa tryb raportowania czujnika oraz to, czy czujnik jest czujnikiem budzenia.
Jeśli nie wdrażasz przetwarzania wsadowego i właśnie przechodzisz z wersji 1.0 do 1.3, ustaw tę opcję 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 on-change 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 pochylenia Androida.
Uwagi dotyczące aktualizacji z wersji 1_1 lub 1_2
- Funkcja
batch
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. Jedynymi przypadkami, w których funkcjabatch
może zawieść, są błędy wewnętrzne, złysensor_handle,
ujemnysampling_period_ns
lub ujemnymax_report_latency_ns
. - To, czy czujnik obsługuje przetwarzanie wsadowe, określa się na podstawie tego, czy ma wartość
fifoMaxEventCount
większą niż 0. (W poprzednich wersjach opierało się to na wartości zwracanej przezbatch()
.) - Czujniki obsługujące przetwarzanie wsadowe są zawsze w tym, co w poprzednich wersjach nazywaliśmy „trybem wsadowym”: nawet jeśli parametr
max_report_latency_ns
wynosi 0, czujnik nadal musi być wsadowy, co oznacza, że zdarzenia muszą być przechowywane w FIFO, gdy SoC przechodzi w tryb zawieszenia . - Parametr
flags
funkcjibatch
nie jest już używany. ZarównoDRY_RUN
, jak iWAKE_UPON_FIFO_FULL
są przestarzałe i nigdy nie zostaną przekazane do funkcjibatch
. - Argument limitu czasu wsadowego jest teraz nazywany argumentem
max_report_latency
.