W wersji L Androida zaprzestajemy obsługi niektórych wersji interfejsu HAL czujnika. Obsługiwane są tylko wersje SENSORS_DEVICE_API_VERSION_1_0
i 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
, maxDelay
i minDelay
:
period_ns
jest podawana w nanosekundach, amaxDelay
/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 funkcjabatch
może się nie powieść, są błędy wewnętrzne lub nieprawidłowysensor_handle,
,sampling_period_ns
lubmax_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
funkcjibatch
nie jest już używany. Środowiska wykonawczeDRY_RUN
iWAKE_UPON_FIFO_FULL
są wycofane i nigdy nie zostaną przekazane do funkcjibatch
. - Argument limitu czasu przetwarzania jest teraz nazywany argumentem
max_report_latency
.