Wycofanie wersji HAL

W wersji L Androida zaprzestajemy obsługi niektórych wersji interfejsu HAL czujnika. Obsługiwane są tylko wersje SENSORS_DEVICE_API_VERSION_1_0 SENSORS_DEVICE_API_VERSION_1_3.

W kolejnych wersjach prawdopodobnie zrezygnujemy też z obsługi wersji 1_0.

1_0 nie ma pojęcia zbiorczego przetwarzania. Jeśli to możliwe, wszystkie urządzenia korzystające z wersji 1_0 NALEŻY uaktualnić do wersji 1_3.

W przypadku wersji 1_1 i 1_2 występuje niewłaściwa definicja pojęcia zbiorczego przetwarzania, dlatego te wersje nie są już obsługiwane.

Wszystkie urządzenia, które obecnie korzystają z wersji 1_1 lub 1_2, MUSZĄ zostać zaktualizowane do wersji 1_3.

W wersji 1_3 uprościliśmy pojęcie grupowania, a także wprowadziliśmy czujniki aktywacji.

Aby przejść na wersję 1_3, zastosuj zmiany wymienione poniżej.

Implement the batch function

Nawet jeśli nie wdrożesz grupowania (twój sprzęt nie ma FIFO), musisz zaimplementować funkcję batch. batch służy do ustawiania okresu próbkowania i maksymalnej zwłoki raportowania dla danego czujnika. Zastępuje setDelay. setDelay nie będzie już wywoływany.

Jeśli nie wdrożono grupowania, możesz zaimplementować funkcję batch, po prostu wywołując istniejącą funkcję setDelay z dostarczonym parametrem sampling_period_ns.

Implement the flush function

Nawet jeśli nie wdrożesz zbiorczego przetwarzania, musisz zaimplementować funkcję flush.

Jeśli nie wdrożesz grupowania, flush musi wygenerować jedno zdarzenie META_DATA_FLUSH_COMPLETE i zwrócić wartość 0 (oznaczającą powodzenie).

Zmień ustawienie sensors_poll_device_t.common.version.

your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3

Dodawanie nowych pól do definicji 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 też ustawić nowe pola zdefiniowane w zakresie od 1_0 do 1_3:

.fifoReservedEventCount = 0,
.fifoMaxEventCount =   0,
.stringType =         0,
.requiredPermission = 0,
.maxDelay =      200000
.flags =
SENSOR_FLAG_CONTINUOUS_MODE,

fifoReservedEventCount: jeśli nie stosujesz grupowania, ustaw tę wartość na 0.

fifoMaxEventCount: jeśli nie stosujesz grupowania, ustaw tę wartość na 0.

stringType: ustaw na 0 w przypadku wszystkich oficjalnych czujników Androida (zdefiniowanych w pliku sensors.h), ponieważ ta wartość zostanie zastąpiona przez framework. Szczegółowe informacje o nieoficjalnych czujnikach znajdziesz w ustawieniu sensor_t.

requiredPermission: to uprawnienie, które aplikacje muszą mieć, aby uzyskać dostęp do czujnika. Zwykle można ustawić wartość 0 dla wszystkich czujników, ale czujniki typu HEART_RATE muszą mieć wartość SENSOR_PERMISSION_BODY_SENSORS.

maxDelay: ta wartość jest ważna i należy ją ustawić zgodnie z możliwościami czujnika i jego sterownika.

Ta wartość jest zdefiniowana tylko dla czujników ciągłych i zmiennych. Jest to opóźnienie między dwoma zdarzeniami czujnika odpowiadające najniższej częstotliwości obsługiwanej przez ten czujnik. Gdy żądane są niższe częstotliwości za pomocą funkcji batch, zdarzenia będą generowane zamiast tego z tą częstotliwością. Może ona służyć do oszacowania, kiedy pula FIFO może się zapełnić. Jeśli ta wartość nie zostanie prawidłowo ustawiona, CTS nie zadziała. W przypadku czujników jednorazowych i w trybie raportowania specjalnego ustaw wartość maxDelay na 0.

W przypadku ciągłych czujników ustaw maksymalny dozwolony okres próbkowania w mikrosekundach.

Te warunki obowiązują w przypadku usług period_ns, maxDelayminDelay:

  • period_ns jest podawana w nanosekundach, a maxDelay/minDelay w mikrosekundach.
  • Wartość maxDelay powinna zawsze mieścić się w 32-bitowej liczbie całkowitej ze znakiem. Jest ona deklarowana jako 64-bitowa na 64-bitowych architekturach tylko ze względu na zgodność binarną.

flagi: to pole określa tryb raportowania czujnika oraz to, czy jest to czujnik wybudzania.

Jeśli nie wdrożysz grupowania i przechodzisz z wersji 1.0 na 1.3, ustaw tę opcję na:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE dla czujników jednorazowych

SENSOR_FLAG_CONTINUOUS_MODE w przypadku ciągłego czujnika SENSOR_FLAG_ON_CHANGE_MODE w przypadku zmiennego czujnika z wyjątkiem podobieństwa do podobieństwa pochylenia.SENSOR_FLAG_SPECIAL_REPORTING_MODE

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE dla czujnika zbliżeniowego i oficjalnego czujnika wykrywania pochylenia na Androidzie.

Uwagi dotyczące aktualizacji z wersji 1_1 lub 1_2

  • Funkcja batch działa teraz prawie zawsze, nawet w przypadku czujników, które nie obsługują grupowania, niezależnie od wartości argumentu timeout. Jedynymi przypadkami, w których funkcja batch może się nie powieść, są błędy wewnętrzne lub nieprawidłowy sensor_handle,, sampling_period_ns lub max_report_latency_ns.
  • Czy czujnik obsługuje grupowanie, zależy od tego, czy ma wartość fifoMaxEventCount większą niż 0. (w poprzednich wersjach było to oparte na wartości zwracanej przez funkcję batch()).
  • Czujniki obsługujące grupowanie zawsze znajdują się w tzw. trybie grupowania: nawet jeśli parametr max_report_latency_ns ma wartość 0, czujnik musi być grupowany, co oznacza, że zdarzenia muszą być przechowywane w FIFO, gdy SoC przechodzi w tryb zawieszenia.
  • Parametr flags funkcji batch nie jest już używany. Środowiska wykonawcze DRY_RUNWAKE_UPON_FIFO_FULL są wycofane i nigdy nie zostaną przekazane do funkcji batch.
  • Argument limitu czasu przetwarzania jest teraz nazywany argumentem max_report_latency.