L'interface Vehicle Hardware Abstraction Layer (VHAL) définit les propriétés que les OEM peuvent implémenter et contient des métadonnées de propriété (par exemple, si la propriété est un entier et quels modes de modification sont autorisés). L'interface VHAL repose sur l'accès (lecture, écriture, abonnement) à une propriété, qui est une abstraction d'une fonction spécifique.
Interfaces HAL
Le VHAL utilise les interfaces suivantes:
getAllPropConfigs()
génère(vec<VehiclePropConfig>propConfigs)
Liste la configuration de toutes les propriétés compatibles avec le VHAL. CarService n'utilise que les propriétés compatibles.getPropConfigs(vec<int32_t> props)
génère(StatusCode status,vec<VehiclePropConfig> propConfigs);
. Renvoie la configuration des propriétés sélectionnées.set(VehiclePropValue propValue)
génère(StatusCodestatus);
Écrit une valeur dans la propriété. Le résultat de l'écriture est défini par propriété.subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
génère(StatusCode status);
Commencez à surveiller un changement de valeur de propriété. Pour les propriétés zonées,unsubscribe(IVehicleCallback callback, int32_t propId)
génère(StatusCode status);
Le VHAL utilise les interfaces de rappel suivantes:
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
Notifie la modification de la valeur de la propriété du véhicule. Ne doit être effectué que pour les propriétés abonnées.oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
Renvoie une erreur ou une erreur globale au niveau du VHAL globale par propriété. Une erreur globale entraîne le redémarrage du HAL, ce qui peut entraîner le redémarrage d'autres composants (y compris des applications).
Propriétés du véhicule
Les propriétés peuvent être en lecture seule, en écriture seule (utilisées pour transmettre des informations au niveau VHAL) ou en lecture/écriture (la prise en charge de la plupart des propriétés est facultative). Chaque propriété est identifiée de manière unique par une clé int32 et possède un type prédéfini (value_type
):
BYTES
BOOLEAN
EPOCH_TIME
FLOAT
FLOAT[]
INT32
INT32[]
INT64
INT64[]
STRING
MIXED
Une propriété multizone peut avoir plusieurs valeurs, en fonction du nombre de zones acceptées par la propriété.
Types de zones
Le VHAL définit plusieurs types d'aires:
Type de zone | Description |
---|---|
GLOBAL |
Cette propriété est un singleton et ne comporte pas plusieurs zones. |
WINDOW |
Zone basée sur Windows, utilise l'énumération VehicleAreaWindow . |
MIRROR |
Aire basée sur des miroirs, utilise l'énumération VehicleAreaMirror . |
SEAT |
Zone basée sur le nombre de sièges, utilise l'énumération VehicleAreaSeat . |
DOOR |
Zone basée sur les portes, utilise l'énumération VehicleAreaDoor . |
WHEEL |
Zone basée sur les roues, utilise l'énumération VehicleAreaWheel . |
Chaque propriété zonée doit utiliser un type d'espace prédéfini. Chaque type de zone possède un ensemble d'indicateurs de bits définis dans une énumération pour le type de zone. Par exemple, la zone SEAT
définit des énumérations VehicleAreaSeat
:
ROW_1_LEFT = 0x0001
ROW_1_CENTER = 0x0002
ROW_1_RIGHT = 0x0004
ROW_2_LEFT = 0x0010
ROW_2_CENTER = 0x0020
ROW_2_RIGHT = 0x0040
ROW_3_LEFT = 0x0100
- ...
ID de zone
Les propriétés zonées sont adressées à l'aide d'ID de zone. Chaque propriété zonée peut prendre en charge un ou plusieurs ID de zone. Un ID de zone est composé d'un ou de plusieurs indicateurs de son énumération respective. Par exemple, une propriété utilisant VehicleAreaSeat
peut utiliser les ID de zone suivants:
Article | Description |
---|---|
ROW_1_LEFT | ROW_1_RIGHT |
Cet identifiant s'applique aux deux sièges avant. |
ROW_2_LEFT |
S'applique uniquement au siège arrière gauche. |
ROW_2_RIGHT |
S'applique uniquement au siège arrière droit. |
État de l'établissement
Chaque valeur de propriété est associée à une valeur VehiclePropertyStatus
.
Indique l'état actuel de la propriété:
Article | Description |
---|---|
AVAILABLE |
L'établissement est disponible et sa valeur est valide. |
UNAVAILABLE |
La valeur de la propriété est actuellement indisponible. Utilisé pour les fonctionnalités temporairement désactivées d'une propriété compatible. |
ERROR |
Un problème est survenu avec cet établissement. |
Configurer une propriété
Utilisez VehiclePropConfig
pour fournir des informations de configuration pour chaque propriété. Les informations incluent les suivantes:
Variable | Description |
---|---|
access |
r , w , rw |
changeMode |
Représente la façon dont une propriété est surveillée, en cas de modification ou en continu. |
areaConfigs |
Valeurs areaId , min et max . |
configArray |
Paramètres de configuration supplémentaires. |
configString |
Informations supplémentaires transmises sous forme de chaîne. |
minSampleRate |
maxSampleRate |
prop |
ID de la propriété, int |
Gérer les propriétés de la zone
Une propriété zonée équivaut à un ensemble de plusieurs propriétés, chacune pouvant être accessible avec la valeur d'ID de zone spécifiée.
- L'appel
get
pour une propriété zonée inclut toujours l'ID de zone dans la requête. Par conséquent, seule la valeur actuelle de l'ID de zone demandé est renvoyée. S'il s'agit d'une propriété globale, l'ID de zone est 0. - L'appel
set
pour une propriété zonée inclut toujours l'ID de zone dans la requête. Par conséquent, seul l'ID de zone demandé est modifié. - L'appel
subscribe
génère des événements pour tous les ID de zone de la propriété.
Recevoir des appels
Lors de l'initialisation, la valeur de la propriété n'est peut-être pas encore disponible, car le message réseau du véhicule correspondant n'a pas encore été reçu. Dans ce cas, l'appel get
doit renvoyer -EAGAIN
. Certaines propriétés (comme les systèmes CVC) disposent d'une propriété d'alimentation marche/arrêt distincte. L'appel de get
pour une telle propriété (lorsqu'il est éteint) doit renvoyer un état UNAVAILABLE
au lieu de renvoyer une erreur. Par exemple, obtenir la température du système CVC
Figure 1 : Obtenir la température du système CVC (CS = CarService, VHAL = Vehicle HAL)
Définir des appels
Dans une opération typique, un appel set
entraîne l'envoi d'une demande de modification sur le réseau du véhicule. Un appel set
est idéalement une opération asynchrone qui est renvoyée dès que possible, mais il peut également être synchrone. Certains appels set
peuvent nécessiter que les données initiales soient prêtes, mais lors de l'initialisation, ces données ne sont peut-être pas encore disponibles. Dans ce cas, l'appel set
doit renvoyer StatusCode#TRY_AGAIN
. Certaines propriétés avec une mise en marche et une mise hors tension distinctes doivent renvoyer StatusCode#NOT_AVAILABLE
ou StatusCode#NOT_AVAILABLE_DISABLED
lorsque la propriété est éteinte et que set
ne peut pas être effectuée. Tant que set
n'est pas mis en vigueur, get
ne renvoie pas nécessairement la même valeur que celle définie. Par exemple, set HVAC Temperature
.
Figure 2 : Régler la température du système CVC (CS = CarService, VHAL = HAL du véhicule)
Gérer les propriétés personnalisées
Pour répondre aux besoins spécifiques des partenaires, le VHAL autorise les propriétés personnalisées limitées aux applications système. Suivez les consignes ci-dessous lorsque vous travaillez avec des propriétés personnalisées:
- L'ID de propriété doit être généré à l'aide des champs suivants :
VehiclePropertyGroup:VENDOR
Le groupeVENDOR
n'est utilisé que pour les propriétés personnalisées.VehicleArea
Sélectionnez un type de zone approprié.VehiclePropertyType
Sélectionnez le type de données approprié. Le typeBYTES
permet de transmettre des données brutes, ce qui est suffisant dans la plupart des cas. L'envoi fréquent de données volumineuses via des propriétés personnalisées peut ralentir l'accès au réseau de l'ensemble du véhicule. Soyez prudent lorsque vous ajoutez une charge utile importante.Property ID
Choisissez un ID de quatre octets pour la propriété personnalisée.
- Pour éviter la fragmentation de l'écosystème, les propriétés personnalisées ne doivent pas être utilisées pour dupliquer les propriétés de véhicule qui existent déjà dans le SDK VehiclePropertyIds.
- Remplacez
VehiclePropConfig.configString
par une brève description de la propriété personnalisée. Cela permet aux outils de validation de détecter la réplication accidentelle de propriétés de véhicule existantes. Par exemple, "état de feu de danger". - Accès via
CarPropertyManager
(pour les composants Java) ou via l'API Vehicle Network Service (pour les applications natives). Ne modifiez pas d'autres API pour voitures, car cela pourrait entraîner de futurs problèmes de compatibilité. - Après avoir implémenté les propriétés de fournisseur, sélectionnez uniquement la liste des autorisations dans l'énumération
VehicleVendorPermission
pour les propriétés de fournisseur. La mise en correspondance des autorisations des fournisseurs avec les propriétés système empêchera la CTS et le VTS.
Gérer les propriétés de CVC
Vous pouvez utiliser le VHAL pour contrôler le système CVC en définissant des propriétés liées au CVC. La plupart des propriétés CVC sont des propriétés zonées, bien que plusieurs soient des propriétés non zonées (globales). Voici quelques exemples de propriétés définies:
Propriété | Objectif |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET |
Régler la température par zone |
VEHICLE_PROPERTY_HVAC_RECIRC_ON |
Contrôlez la recirculation par zone. |
Pour afficher la liste complète des propriétés CVC, recherchez VEHICLE_PROPERTY_HVAC_*
dans types.hal
. Lorsque la propriété CVC utilise VehicleAreaSeat
, des règles supplémentaires s'appliquent pour mapper une propriété CVC par zone aux identifiants de zone. Chaque siège disponible dans la voiture doit faire partie d'un ID de zone dans le tableau des ID de zone.
Exemple 1 Une voiture possède deux sièges avant (ROW_1_LEFT, ROW_1_RIGHT
) et trois sièges arrière (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
). Elle dispose de deux unités de contrôle de la température: le côté conducteur et le côté passager.
- Voici un ensemble valide d'identifiants de zone pour
HVAC_TEMPERATURE SET
:ROW_1_LEFT | ROW_2_LEFT
ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
- Voici un autre mappage pour la même configuration matérielle:
ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
ROW_1_RIGHT | ROW_2_RIGHT
Exemple 2 Une voiture comporte trois rangées de sièges, avec deux sièges à l'avant (ROW_1_LEFT, ROW_1_RIGHT
), trois au milieu (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
) et trois à l'arrière (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
). Elle dispose de trois unités de contrôle de la température: côté conducteur, côté passager et arrière. Un moyen raisonnable de mapper HVAC_TEMPERATURE_SET
sur les ID de zone consiste à utiliser un tableau à trois éléments:
ROW_1_LEFT
ROW_1_RIGHT
ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
Gérer les propriétés des capteurs
Les propriétés des capteurs VHAL représentent des données réelles du capteur ou des informations sur des règles, telles que l'état de la conduite. Certaines informations des capteurs (comme l'état de conduite et le mode jour/nuit) sont accessibles par n'importe quelle application sans restriction, car ces données sont obligatoires pour créer une application de véhicule sécurisée. Les autres informations des capteurs (telles que la vitesse du véhicule) sont plus sensibles et nécessitent des autorisations spécifiques que les utilisateurs peuvent gérer.
Consultez les propriétés de capteur compatibles (dans types.hal
).
service de cartographie pour véhicule (VMS)
Le service de cartographie de véhicule (VMS, Vehicle Map Service) fournit un mécanisme permettant d'échanger des données cartographiques entre les clients via une interface Pub/Sub pour prendre en charge les fonctionnalités courantes des véhicules, telles que les systèmes avancés d'aide à la conduite (ADAS). Les clients peuvent inclure des systèmes de véhicule qui interagissent via la propriété VMS dans le VHAL ou les applications Android privilégiées. Les données partagées sur VMS sont destinées à être limitées aux données cartographiques utilisées par les systèmes du véhicule et les applications associées.
Le VMS n'est destiné qu'aux implémentations Android Automotive. AOSP ne contient pas de clients par défaut qui publient ou s'abonnent au VMS. Pour la propriété VMS dans le VHAL, les types de messages et les structures de données sont décrits dans VHAL 2.0 dans l'énumération VmsMessageType
, qui liste les types de messages VMS compatibles. Cette énumération est utilisée comme premier entier dans le tableau d'entiers de la propriété du véhicule et détermine la façon dont le reste du message est décodé.