Wycofanie wersji HAL

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