Wycofanie wersji HAL

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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 gdy maxDelay / 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 funkcja batch może się nie powieść, to błędy wewnętrzne lub zły sensor_handle, ujemna wartość sampling_period_ns lub ujemna max_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 przez batch() .)
  • 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 funkcji batch nie jest już używany. DRY_RUN i WAKE_UPON_FIFO_FULL są przestarzałe i nigdy nie zostaną przekazane do funkcji batch .
  • Argument limitu czasu partii jest teraz nazywany argumentem max_report_latency .