W wersji L Androida wstrzymujemy obsługę niektórych HAL czujników
wersji. Jedyne obsługiwane wersje to SENSORS_DEVICE_API_VERSION_1_0
i SENSORS_DEVICE_API_VERSION_1_3
.
W kolejnych wersjach prawdopodobnie przestaniemy obsługiwać również 1_0.
1_0 nie ma pojęcia o grupowaniu. Jeśli to możliwe, wszystkie urządzenia używające 1_0 POWINNO przejść na wersję 1_3.
W punktach 1_1 i 1_2 koncepcja grupowania jest słaba, już obsługiwane
Wszystkie urządzenia, które obecnie używają wersji 1_1 lub 1_2, MUSZĄ zostać zaktualizowane do wersji 1_3.
W 1_3 uprościliśmy pojęcie grupowania i wprowadziliśmy funkcję wybudzania i czujników.
Aby przejść na wersję 1_3, postępuj zgodnie z poniższymi zmianami.
Wdrażanie funkcji wsadowej
Nawet jeśli nie wdrożysz grupowania (Twój sprzęt nie ma funkcji FIFO), musisz
zaimplementuj funkcję batch
. Pole batch
jest używane do ustawiania
okresu próbkowania i maksymalnego opóźnienia raportowania dla danego czujnika. it
zastępuje setDelay
. Numer setDelay
nie zostanie wywołany
już więcej.
Jeśli nie implementujesz grupowania, możesz zaimplementować batch
przez
wystarczy wywołać istniejącą funkcję setDelay
przy użyciu podanego argumentu
sampling_period_ns
.
Implementacja funkcji flush
Nawet jeśli nie wdrożysz grupowania, musisz zaimplementować
flush
.
Jeśli nie wdrożysz grupowania, flush
musi je wygenerować.
META_DATA_FLUSH_COMPLETE
i zwraca wartość 0 (powodzenie).
Zmiana czujników_poll_device_t.common.version
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
Dodaj nowe pola do definicji czujników
Podczas definiowania każdego czujnika, oprócz zwykłego parametru sensor_t, pola:
.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ż skonfigurować 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,
fifoReserveEventCount: jeśli nie implementujesz grupowania, ustaw wartość tego parametru na 0.
fifoMaxEventCount: jeśli nie implementujesz grupowania, ustaw wartość tego parametru na 0.
stringType: ustaw na 0 dla wszystkich oficjalnych czujników Androida (tych, które są zdefiniowane w sensor.h), ponieważ ta wartość zostanie zastąpiona przez platformę. Dla: nieoficjalne czujniki, zobacz sensor_t, aby znaleźć jak go ustawić.
requiredPermission: to uprawnienie, które aplikacje będą musiały uzyskać w celu
dostępu do czujnika. Zwykle można ustawić to ustawienie na 0 dla wszystkich czujników,
ale dla czujników typu HEART_RATE
należy ustawić wartość SENSOR_PERMISSION_BODY_SENSORS.
maxDelay: ta wartość jest ważna i trzeba ją ustawić zgodnie z możliwości czujnika i jego sterownika.
Ta wartość jest określona tylko dla czujników ciągłych i zmian zmian. Jest to
opóźnienie między 2 zdarzeniami z czujnika odpowiadającymi najniższej częstotliwości
obsługiwane przez czujnik. Jeśli żądania o niższych częstotliwościach są wysyłane przez
batch
, zdarzenia będą generowane z tą częstotliwością
. Platforma lub aplikacje mogą go wykorzystać do oszacowania, kiedy
Wartość FIFO wsadu może być pełna. Jeśli ta wartość nie zostanie prawidłowo ustawiona, CTS nie powiedzie się.
W przypadku czujników jednorazowych i specjalnych w trybie raportowania ustaw maxDelay
na 0.
W przypadku czujników ciągłych ustaw ten okres na maksymalny dozwolony okres próbkowania w mikrosekund.
Te ustawienia obowiązują w przypadku period_ns
, maxDelay
i minDelay
:
period_ns
jest wyrażone w nanosekundach, amaxDelay
/minDelay
jest wyrażony w mikrosekundach.- Wartość
maxDelay
powinna zawsze mieścić się w 32-bitowej liczbie całkowitej ze znakiem. it jest zadeklarowana jako 64-bitowa w architekturze 64-bitowej tylko ze względu na zgodność binarną.
flags: to pole określa tryb raportowania czujnika oraz to, czy czujnik wybudzania.
Jeśli nie implementujesz grupowania i przechodzisz tylko z wersji 1.0 na 1.3, ustaw tę opcję do:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
– jedno uderzenie
czujniki
SENSOR_FLAG_CONTINUOUS_MODE
dla ciągłego
czujniki SENSOR_FLAG_ON_CHANGE_MODE
dla zmiany
czujniki oprócz zbliżeniowego
SENSOR_FLAG_SPECIAL_REPORTING_MODE
dla czujników ze specjalnym kontem
trybu raportowania oprócz pochylenia
detektora.
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
w przypadku czujnika zbliżeniowego i oficjalnego czujnika przechylenia na Androidzie.
Uwagi dotyczące aktualizacji z wersji 1_1 lub 1_2
- Teraz funkcja
batch
działa prawie zawsze, nawet w przypadku czujników, które nie obsługują wsadowe, niezależnie od wartości argumentu limitu czasu. Jedyne przypadki w których przypadku funkcjabatch
może nie działać prawidłowo, to błędy wewnętrznesensor_handle,
lub wykluczającesampling_period_ns
lub ujemna wartość:max_report_latency_ns
. - To, czy czujnik obsługuje grupowanie, zależy od tego, czy ma
fifoMaxEventCount
większe niż 0. (W poprzednich wersjach funkcja ta była na podstawie wartości zwróconej w wysokościbatch()
). - Czujniki obsługujące grupowanie zawsze działają w ramach tzw. „grupowania”,
„mode” w poprzednich wersjach: nawet jeśli parametr
max_report_latency_ns
ma wartość 0, czujnik musi być grupowany, co oznacza, że zdarzenia muszą być w pamięci FIFO, gdy układ SoC przejdzie w tryb zawieszenia. - Parametr
flags
funkcjibatch
to nie są już używane.DRY_RUN
iWAKE_UPON_FIFO_FULL
są są wycofane i nigdy nie zostaną przekazane do funkcjibatch
. - Argument limitu czasu wsadu jest teraz określany jako
max_report_latency
argument.