Référence de la struct vehicle_hw_device
#include <
vehicle.h
>
Champs de données |
|
struct hw_device_t | commun |
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) |
Description détaillée
Documentation des champs
struct hw_device_t common |
int(* dump)(struct vehicle_hw_device *device, int fd) |
Imprimez l'état de débogage pour le HAL du véhicule. Il sera appelé par le service réseau du véhicule et sera inclus dans le dump du service.
Le descripteur de fichier transmis peut être utilisé pour écrire du texte de débogage à l'aide de dprintf() ou de write(). Le texte doit être encodé en ASCII uniquement.
Exigences liées aux performances:
Il doit s'agir d'un appel non bloquant. Le HAL doit renvoyer cet appel en 1 ms, et doit le faire en 10 ms. Cet appel doit éviter les interblocages, car il peut être appelé à tout moment de l'opération. Toutes les primitives de synchronisation utilisées (telles que les verrous mutex ou les sémaphores) doivent être acquises avec un délai avant expiration.
int(* get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
Obtenez immédiatement une valeur de propriété de véhicule. Les données doivent être allouées correctement. L'appelant de l'API POSSÈDE le champ de données. L'appelant définira data->prop, data->value_type et éventuellement la valeur de zone pour la propriété zonée. Toutefois, l'implémentation de HAL doit remplir correctement toutes les entrées lors du retour. Pour le type de pointeur, l'implémentation HAL doit allouer la mémoire nécessaire, et l'appelant est chargé d'appeler release_memory_from_get, ce qui permet à HAL de libérer la mémoire allouée. Pour le type de propriété VEHICLE_PROP_CHANGE_MODE_STATIC, get doit toujours renvoyer la même valeur. Pour le type de propriété VEHICLE_PROP_CHANGE_MODE_ON_CHANGE, il doit renvoyer la dernière valeur. Si aucune donnée n'est encore disponible, ce qui peut se produire lors de la phase initiale, cet appel doit renvoyer immédiatement le code d'erreur -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) |
Énumérez toutes les propriétés disponibles. La liste est renvoyée dans "list".
- Paramètres
-
num_properties Nombre de propriétés contenues dans le tableau réétalonné.
- Renvoie
- tableau des configurations de propriété compatibles avec cette voiture. Notez que les données renvoyées sont constantes et que l'appelant ne peut pas les modifier. L'implémentation du HAL doit conserver cette mémoire jusqu'à la libération du HAL pour éviter de la copier à nouveau.
int(* release)(struct vehicle_hw_device *device) |
Avant d'appeler close, l'utilisateur doit détruire les fonctions de rappel enregistrées. Si l'appel unsubscribe() n'est pas appelé sur toutes les propriétés avant release() , release() se désinscrit lui-même des propriétés.
void(* release_memory_from_get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
Libérez la mémoire allouée aux données dans l'appel get précédent. L'appel get pour un octet ou une chaîne implique d'allouer la mémoire nécessaire à partir du HAL du véhicule. Pour des raisons de sécurité, la mémoire allouée par le HAL du véhicule doit être libérée par le HAL du véhicule, et le service réseau du véhicule l'appellera lorsque les données du HAL du véhicule ne seront plus nécessaires. L'implémentation du HAL du véhicule ne doit libérer que le membre de vehicle_prop_value_t, comme data->str_value.data ou data->bytes_value.data, mais pas les données elles-mêmes, car elles sont allouées à partir du service réseau du véhicule. Une fois la mémoire libérée, le pointeur correspondant doit être défini sur NULL par le HAL du véhicule.
int(* set)(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
Définissez une valeur de propriété du véhicule. Les données doivent être correctement allouées et ne pas être NULL. L'appelant de l'API est le PROPRIÉTAIRE du champ de données. Le code temporel des données sera ignoré pour l'opération de définition. Pour définir certaines propriétés, vous devez disposer de l'état initial. Selon le HAL du véhicule, ces données initiales peuvent ne pas être disponibles pendant une courte période après l'initialisation. Dans ce cas, set call peut renvoyer -EAGAIN, comme get call. Pour une propriété avec un contrôle de l'alimentation distinct, l'opération de définition peut échouer si la propriété n'est pas allumée. Dans ce cas, hal doit renvoyer l'erreur -ESHUTDOWN.
int(* subscribe)(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
S'abonner à des événements En fonction de la sortie de list_properties, si la propriété est: a) "on-change" (modification) : sample_rate doit être défini sur 0. b) "supports frequency" (compatible avec la fréquence) : sample_rate doit être défini entre min_sample_rate et max_sample_rate. Pour les propriétés de type "on-change", le service réseau du véhicule effectue un autre appel get pour vérifier l'état initial. Par conséquent, l'implémentation du HAL du véhicule n'a pas besoin d'envoyer l'état initial pour les propriétés de type "on-change".
- Paramètres
-
appareil accessoire sample_rate zones Toutes les zones abonnées pour une propriété zonale peuvent être ignorées pour une propriété non zonale. 0 signifie que toutes les zones sont acceptées au lieu de ne pas en accepter aucune.
int(* unsubscribe)(struct vehicle_hw_device *device, int32_t prop) |
La documentation de ce struct a été générée à partir du fichier suivant :
- hardware/libhardware/include/hardware/ vehicle.h