Dokumentacja struktury vehicle_hw_device
#include <
vehicle.h
>
Pola danych |
|
struct hw_device_t | wspólne |
int(* | init )(struct vehicle_hw_device *device, vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn) |
int(* | release )(struct vehicle_hw_device *device) |
vehicle_prop_config_t const *(* | list_properties )(struct vehicle_hw_device *device, int *num_properties) |
int(* | get )(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
void(* | release_memory_from_get )(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
int(* | set )(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
int(* | subscribe )(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
int(* | unsubscribe )(struct vehicle_hw_device *device, int32_t prop) |
int(* | dump )(struct vehicle_hw_device *device, int fd) |
Szczegółowy opis
Dokumentacja pola
struct hw_device_t common |
int(* dump)(struct vehicle_hw_device *device, int fd) |
Wydrukuj stan debugowania interfejsu HAL pojazdu. Ta usługa zostanie wywołana przez usługę sieci pojazdu i zostanie uwzględniona w dumpie usługi.
Przekazany deskryptor pliku może służyć do zapisywania tekstu debugowania za pomocą funkcji dprintf() lub write(). Tekst powinien być zapisany tylko w kodowaniu ASCII.
Wymagania dotyczące wydajności:
Musi to być wywołanie nieblokujące. Interfejs HAL powinien zwrócić wynik tego wywołania w 1 ms, a musi to nastąpić w 10 ms. To wywołanie musi zapobiegać blokadom, ponieważ może być wywoływane w dowolnym momencie działania. Wszystkie używane obiekty synchronizacji (np. blokady mutex lub semafora) powinny być pozyskiwane z czasem oczekiwania.
int(* get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
Od razu uzyskać wartość właściwości pojazdu. Dane powinny być prawidłowo przypisane. Pole danych należy do wywołującego interfejs API. Wywołujący ustawia dane->prop, dane->value_type i opcjonalnie wartość strefy dla właściwości strefy. Jednak implementacja HAL musi prawidłowo wypełnić wszystkie wpisy podczas zwracania. W przypadku typu wskaźnika implementacja HAL powinna przydzielić niezbędną pamięć, a wywołujący jest odpowiedzialny za wywołanie release_memory_from_get, co pozwala HALowi zwolnić przydzieloną pamięć. W przypadku typu właściwości VEHICLE_PROP_CHANGE_MODE_STATIC funkcja get powinna zawsze zwracać tę samą wartość. W przypadku typu właściwości VEHICLE_PROP_CHANGE_MODE_ON_CHANGE powinna zwracać najnowszą wartość. Jeśli nie ma jeszcze dostępnych danych, co może się zdarzyć na początkowym etapie, wywołanie powinno zwrócić natychmiast kod błędu -EAGAIN.
int(* init)(struct vehicle_hw_device *device, vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn) |
vehicle_prop_config_t const*(* list_properties)(struct vehicle_hw_device *device, int *num_properties) |
Wymień wszystkie dostępne usługi. Lista jest zwracana w elementach „list”.
- Parametry
-
num_properties liczba właściwości zawartych w zwróconej tablicy.
- Zwroty
- Tablica konfiguracji właściwości obsługiwanych przez ten samochód. Pamiętaj, że zwracane dane są stałe i wywołujący nie może ich modyfikować. Implementacja HAL powinna zachować to wspomnienie do czasu jego wydania, aby uniknąć ponownego kopiowania.
int(* release)(struct vehicle_hw_device *device) |
Przed zamknięciem połączenia użytkownik powinien usunąć zarejestrowane funkcje wywołania zwrotnego. Jeśli funkcja unsubscribe() nie zostanie wywołana we wszystkich usługach przed wywołaniem funkcji release() , funkcja release() sama anuluje subskrypcję tych usług.
void(* release_memory_from_get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
Zwolnij pamięć przydzieloną do danych w poprzednim wywołaniu get. Wywołanie get dla bajtów lub ciągu znaków wiąże się z przydzieleniem niezbędnej pamięci z hal pojazdu. Aby zachować bezpieczeństwo, pamięć przydzielona przez vehicle hal powinna zostać zwolniona przez vehicle hal, a usługa vehicle network powinna wywołać tę funkcję, gdy dane z vehicle hal nie będą już potrzebne. Implementacja vehicle hal powinna zwalniać tylko element vehicle_prop_value_t, np. data->str_value.data lub data->bytes_value.data, ale nie same dane, ponieważ są one przydzielane przez usługę vehicle network. Gdy pamięć zostanie zwolniona, odpowiedni wskaźnik powinien zostać ustawiony na NULL przez HAL pojazdu.
int(* set)(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
Ustaw wartość właściwości pojazdu. Dane powinny być prawidłowo przydzielone, a nie NULL. Pole danych należy do wywołującego interfejs API. W przypadku operacji set sygnatura czasowa danych zostanie zignorowana. Ustawianie niektórych właściwości wymaga dostępu do stanu początkowego. W zależności od interfejsu HAL pojazdu te dane początkowe mogą być niedostępne przez krótki czas po uruchomieniu. W takim przypadku wywołanie set call może zwrócić -EAGAIN, tak jak get call. W przypadku obiektu z osobnym włącznikiem może wystąpić błąd, jeśli obiekt jest wyłączony. W takim przypadku funkcja hal powinna zwrócić błąd -ESHUTDOWN.
int(* subscribe)(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
subskrybować zdarzenia; W zależności od danych wyjściowych funkcji list_properties, jeśli właściwość jest: a) zmienna: sample_rate należy ustawić na 0. b) obsługuje częstotliwość: sample_rate należy ustawić od min_sample_rate do max_sample_rate. W przypadku właściwości typu „w zmianie” usługa sieci pojazdu wykona kolejne wywołanie GET, aby sprawdzić stan początkowy. Dlatego implementacja HAL pojazdu nie musi wysyłać stanu początkowego w przypadku właściwości typu „on-change”.
- Parametry
-
urządzenie rekwizyt sample_rate stref Wszystkie subskrybowane strefy w przypadku usługi z podziałem na strefy. W przypadku usługi bez podziału na strefy można je zignorować. Wartość 0 oznacza, że obsługiwane są wszystkie strefy, a nie brak strefy.
int(* unsubscribe)(struct vehicle_hw_device *device, int32_t prop) |
Dokumentacja tego typu danych została wygenerowana z tego pliku:
- hardware/libhardware/include/hardware/ vehicle.h