Propriétés du véhicule

L'interface de couche d'abstraction matérielle de véhicule (vhal) définit les propriétés OEM peuvent mettre en œuvre et contient des métadonnées de propriétés (par exemple, si la propriété est un entier et quels modes de changement sont autorisés). L'interface VHAL est basée sur l'accès (lecture, écriture, abonnement) à une propriété, qui est une abstraction pour une fonction spécifique.

Interfaces HAL

Le VHAL utilise les interfaces suivantes :

  • getAllPropConfigs() génère (vec<VehiclePropConfig>propConfigs)
    Répertoriez la configuration de toutes les propriétés prises en charge par le VHAL. CarService utilise uniquement les propriétés prises en charge.
  • 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);
    Écrire une valeur à la propriété. Le résultat de l'écriture est défini par propriété.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) - (StatusCode status); subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) génère (StatusCode status);
    Commencez à surveiller un changement de valeur de propriété. Pour bien zoné, 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 le changement de valeur de la propriété du véhicule. Doit être fait uniquement pour les propriétés souscrites.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Renvoie une erreur de niveau VHAL global ou une erreur par propriété. Une erreur globale provoque le redémarrage de HAL, ce qui peut entraîner le redémarrage d'autres composants (y compris les 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 et en écriture (la prise en charge de la plupart des propriétés est facultative). Chaque propriété est identifiée par une clé int32 et a un type prédéfini ( value_type ):

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

Une propriété zonée peut avoir plusieurs valeurs, en fonction du nombre de zones prises en charge par la propriété.

Types de zone

Le VHAL définit plusieurs types de zones :

Type de zone La description
GLOBAL Cette propriété est un singleton et n'a pas plusieurs zones.
WINDOW Zone basée sur les fenêtres, utilise VehicleAreaWindow ENUM.
MIRROR Zone basée sur des miroirs, utilise VehicleAreaMirror ENUM.
SEAT Zone basée sur les sièges, utilise VehicleAreaSeat ENUM.
DOOR Zone basée sur les portes, utilise VehicleAreaDoor ENUM.
WHEEL Zone basée sur roues, utilise VehicleAreaWheel ENUM.

Chaque propriété zonée doit utiliser un type de zone prédéfini. Chaque type de zone a un ensemble d'indicateurs binaires définis dans une énumération pour le type de zone. Par exemple, la SEAT zone définit VehicleAreaSeat énumérations:

  • 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 traitées via les 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 plusieurs drapeaux de son énumération respective. Par exemple, une propriété à l' aide VehicleAreaSeat peut utiliser l'ID zone suivante:

Article La description
ROW_1_LEFT | ROW_1_RIGHT L'identifiant de zone 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.

Statut de la propriété

Chaque valeur de la propriété est livré avec une VehiclePropertyStatus valeur. Cela indique l'état actuel de la propriété :

Article La description
AVAILABLE La propriété est disponible et la valeur est valide.
UNAVAILABLE La valeur de la propriété est actuellement indisponible. Utilisé pour les fonctionnalités temporairement désactivées pour une propriété prise en charge.
ERROR Quelque chose ne va pas avec cette propriété.

Configurer une propriété

Utilisez VehiclePropConfig pour fournir des informations de configuration pour chaque propriété. Les informations comprennent :

Variable La description
access r , w , rw
changeMode Représente la façon dont une propriété est surveillée, en cas de changement par rapport à la continuité.
areaConfigs areaId , min et max les valeurs.
configArray Paramètres de configuration supplémentaires.
configString Informations supplémentaires transmises sous forme de chaîne.
minSampleRate maxSampleRate
prop ID de propriété, entier

Propriétés de la zone de traitement

Une propriété zonée équivaut à une collection de plusieurs propriétés où chaque sous-propriété est accessible avec la valeur d'ID de zone spécifiée.

  • get appel à la propriété zonée comprend toujours l'ID zone dans la demande. Par conséquent, seule la valeur actuelle de l'ID de zone demandé est renvoyée. Si la propriété est globale, alors l'ID de zone est 0.
  • set appel à la propriété zonée comprend toujours l'ID zone dans la demande. Par conséquent, seul l'ID de zone demandé est modifié.
  • subscribe appel génère des événements pour tous les ID pour la région de la propriété.

Recevez des appels

Lors de l'initialisation, la valeur de la propriété peut ne pas être encore disponible car le message de réseau de véhicule correspondant n'a pas encore été reçu. Dans ce cas, le get appel doit revenir -EAGAIN . Certaines propriétés (telles que HVAC) ont une propriété d'alimentation marche/arrêt séparée. L' appel get pour la propriété d'un tel (quand éteint) doit retourner un UNAVAILABLE statut plutôt que de retourner une erreur. Par exemple, obtenez la température CVC

VHAL obtenir un exemple de CVC

Figure 1. Obtenez la température CVC (CS = CarService, VHAL = Vehicle HAL)

Définir des appels

Un set appel est une opération asynchrone impliquant la notification d'événements après est effectué un changement demandé. Dans une opération typique, un set conduit d'appel à faire une demande de changement à travers le réseau du véhicule. Certains set des appels peuvent exiger des données initiales pour être prêt , mais lors de l' initialisation, ces données peuvent ne pas être encore disponibles. Dans ce cas, l' set appel doit revenir -EAGAIN . Certaines propriétés avec alimentation on / off doivent retourner -ESHUTDOWN lorsque la propriété est mise hors tension et ensemble ne peut pas être fait. Jusqu'à ce set est fait efficace, get ne retourne pas nécessairement la même valeur que ce qui est prévu. Par exemple, set HVAC Temperature la set HVAC Temperature .

Exemple d'ensemble VHAL CVC

Figure 2. Régler la température CVC (CS = CarService, VHAL = Vehicle HAL)

Gestion des propriétés personnalisées

Pour prendre en charge les besoins spécifiques des partenaires, le VHAL autorise des propriétés personnalisées qui sont limitées aux applications système. Utilisez les instructions suivantes 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 VENDOR groupe est utilisé uniquement pour les propriétés personnalisées.
    • VehicleArea
      Sélectionnez un type de zone approprié.
    • VehiclePropertyType
      Sélectionnez le type de données approprié. BYTES type permet la transmission des données brutes 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 à l'ensemble du réseau du véhicule. Soyez prudent lorsque vous ajoutez une charge utile importante.
    • Property ID
      Choisissez un ID à quatre quartets pour la propriété personnalisée.
  • Pour éviter la fragmentation des écosystèmes, des propriétés personnalisées ne doivent pas être utilisés pour les propriétés du véhicule réplicats qui existent déjà dans le ( VehiclePropertyIds SDK).
  • Remplissez VehiclePropConfig.configString avec une brève description de la propriété personnalisée. Cela permet aux outils de vérification de l'intégrité de signaler la réplication accidentelle des propriétés existantes du véhicule. Par exemple, « état de feux de détresse ».
  • Accès par CarPropertyManager (pour les composants Java) ou via l'API de service Vehicle Network (pour natif). Ne modifiez pas d'autres API de voiture, car cela pourrait entraîner de futurs problèmes de compatibilité.
  • Après la mise en œuvre des propriétés des fournisseurs, sélectionnez uniquement la liste des autorisations dans le VehicleVendorPermission ENUM pour les propriétés de vendeur. Le mappage des autorisations du fournisseur sur les propriétés du système interrompra le CTS et le VTS.

Gestion des propriétés HVAC

Vous pouvez utiliser le VHAL pour contrôler le CVC en définissant les propriétés liées au CVC. La plupart des propriétés HVAC sont des propriétés zonées, bien que plusieurs soient des propriétés non zonées (globales). Les exemples de propriétés définies incluent :

Biens But
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Régler la température par zone.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Contrôlez la recirculation par zone.

Pour voir la liste complète des propriétés CVC, rechercher VEHICLE_PROPERTY_HVAC_* dans types.hal . Lorsque la propriété CVC utilise VehicleAreaSeat , des règles supplémentaires pour cartographier une propriété zonée CVC aux ID région appliquent. Chaque siège disponible dans la voiture doit faire partie d'un Area ID dans le tableau Area ID.

Exemple un. Une voiture a 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 ). La voiture dispose de deux unités de contrôle de la température : le côté conducteur et le côté passager.

  • Une cartographie valide ensemble d'ID zone pour HVAC_TEMPERATURE SET est:
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • Un mappage alternatif pour la même configuration matérielle est :
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

Exemple deux. Une voiture comporte trois rangées de sièges avec deux sièges de la première rangée ( ROW_1_LEFT, ROW_1_RIGHT ), trois sièges de la deuxième ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ), et trois dans la troisième rangée ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT ). La voiture dispose de trois unités de contrôle de la température : côté conducteur, côté passager et arrière. Une façon raisonnable de la carte HVAC_TEMPERATURE_SET aux ID est la région comme 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

Gestion des propriétés du capteur

Les propriétés du capteur VHAL représentent des données de capteur réelles ou des informations de politique telles que l'état de conduite. Certaines informations du capteur (telles que l'état de conduite et le mode jour/nuit) sont accessibles par n'importe quelle application sans restriction car les données sont obligatoires pour créer une application de véhicule sûre. D'autres informations de capteur (telles que la vitesse du véhicule) sont plus sensibles et nécessitent des autorisations spécifiques que les utilisateurs peuvent gérer.

Voir les propriétés du capteur pris en charge (en types.hal ).

Service de cartographie des véhicules

Le service de cartographie des véhicules (VMS) fournit un mécanisme pour l' échange des données cartographiques entre les clients dans un pub / interface sous pour soutenir les caractéristiques du véhicule courantes, telles que Advanced Driver Assistance Systems (ADAS) . Les clients peuvent inclure des systèmes de véhicule s'interfaçant via la propriété VMS dans le VHAL ou des applications Android privilégiées. Les données partagées sur VMS sont destinées à être limitées aux données cartographiques à utiliser par les systèmes du véhicule et les applications de support.

VMS est destiné à être utilisé uniquement dans les implémentations Android Automotive ; AOSP ne contient pas de clients par défaut qui publient ou s'abonnent à VMS. Pour la propriété VMS dans le vhal, les types de messages et des structures de données sont décrites dans vhal 2.0 dans le VmsMessageType ENUM, qui répertorie les types de messages pris en charge VMS. Cette énumération est utilisée comme premier entier dans le tableau d'entiers de propriété de véhicule et détermine comment le reste du message est décodé.