Wycofanie wersji HAL

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, a maxDelay/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_MODEjedno 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 funkcja batch może nie działać prawidłowo, to błędy wewnętrzne sensor_handle, lub wykluczające sampling_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ści batch()).
  • 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 funkcji batch to nie są już używane. DRY_RUN i WAKE_UPON_FIFO_FULL są są wycofane i nigdy nie zostaną przekazane do funkcji batch.
  • Argument limitu czasu wsadu jest teraz określany jako max_report_latency argument.