Propriétés du véhicule

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

Exemple de VHAL get HVAC

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.

Exemple de configuration du système CVC avec VHAL

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 groupe VENDOR 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 type BYTES 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é.