Propriétés spéciales

Propriétés du fournisseur

Pour répondre aux besoins spécifiques des partenaires, le VHAL autorise les propriétés du fournisseur auxquelles on ne peut accéder que via les API système. Suivez les consignes ci-dessous lorsque vous travaillez avec des propriétés de fournisseurs:

  • Essayez toujours d'utiliser d'abord les propriétés système. Les propriétés du fournisseur ne doivent être utilisées qu'en dernier recours, lorsque aucune des propriétés système ne répond à vos exigences.
  • Pour éviter la fragmentation de l'écosystème, les propriétés des fournisseurs ne doivent pas être utilisées pour répliquer les propriétés de véhicules qui existent déjà dans le SDK VehiclePropertyIds. Pour en savoir plus, consultez la section 2.5, Exigences pour les applications automobiles du CDD.
  • Utilisez les champs suivants pour générer l'ID de propriété :
    • VehiclePropertyGroup:VENDOR groupe FOURNISSEURs n'est utilisé que pour les propriétés de fournisseur.
    • 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 les propriétés des fournisseurs peut ralentir l'accès au réseau de l'ensemble du véhicule. Soyez prudent lorsque vous ajoutez une charge utile volumineuse.
    • Property ID Choisissez un ID unique de deux octets pour la propriété du fournisseur. Par exemple, 0x1234.
  • Remplacez VehiclePropConfig.configString par une brève description de la propriété du fournisseur. Cela permet aux outils de vérification de la validité de signaler la réplication accidentelle des propriétés existantes du véhicule. Par exemple, "Ma propriété personnalisée pour XYZ".
  • Accédez à l'élément via CarPropertyManager (pour les composants Java) ou via libvhalclient (pour les éléments natifs). Ne modifiez pas d'autres API de voiture, car cela pourrait entraîner des problèmes de compatibilité à l'avenir.

Autorisation pour les propriétés du fournisseur

L'autorisation par défaut pour toutes les propriétés de fournisseur définies est android.car.Car.PERMISSION_VENDOR_EXTENSION. Pour un contrôle plus précis des autorisations, prenez en charge la propriété SUPPORT_CUSTOMIZE_VENDOR_PERMISSION. Cette propriété STATIC est en lecture seule, et son tableau de configuration spécifie les autorisations pour les propriétés du fournisseur. configArray est défini comme suit (i correspond à un entier commençant à 0):

  • configArray[3 * i] propId, l'ID de la propriété du fournisseur.
  • configArray[3 * i + 1] Enum dans VehicleVendorPermission.aidl pour indiquer l'autorisation de lire la valeur de la propriété.
  • configArray[3 * i + 2] Enum dans VehicleVendorPermission.aidl pour indiquer l'autorisation d'écrire la valeur de la propriété.

Par exemple, le tableau de configuration suivant configure deux propriétés de fournisseur, vendor_prop_1 et vendor_prop_2, pour qu'elles disposent des autorisations:

  • vendor_prop_1 nécessite android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT pour la lecture et android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT pour l'écriture.
  • vendor_prop-2 nécessite android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO pour la lecture et n'est pas accessible en écriture pour les applications Android.
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

Les propriétés de fournisseur qui ne figurent pas dans ce tableau utilisent l'autorisation par défaut du fournisseur. Lorsque PERMISSION_NOT_ACCESSIBLE est sélectionné, les applications Android ne peuvent pas accéder à la propriété. Dans l'exemple, les applications Android ne peuvent pas écrire de valeur pour vendor_prop_2. Seuls les clients VHAL natifs peuvent écrire dans cette propriété.

Systèmes avancés d'aide à la conduite (ADAS)

Consultez la section Propriétés des véhicules équipés d'ADAS.

SIÈGE ET VOLANT

Consultez la section Propriétés du siège et du volant.

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 associées à des zones particulières du véhicule, bien que plusieurs d'entre elles soient des propriétés globales. Voici quelques exemples de propriétés définies:

Propriété Objectif
HVAC_TEMPERATURE_SET Définissez la température par ID de zone.
HVAC_POWER_ON État de l'alimentation du système CVC par identifiant de zone.

Pour les propriétés CVC qui dépendent de l'état de l'alimentation du système CVC, elles doivent être listées dans le tableau de configuration HVAC_POWER_ON. Pour obtenir la liste complète des propriétés CVC, recherchez HVAC_* dans VehicleProperty.aidl. Consultez la section Propriétés système compatibles. propriétés.

Règles de mappage des propriétés de CVC de type VehicleArea non GLOBAL sur des ID de zone : Chaque "zone" d'un type VehicleArea spécifique affecté par la propriété doit être incluse dans un ID de zone pour cette propriété. Les contrôleurs de température sont attribués aux sièges qu'ils "influencent le plus", mais chaque siège concerné doit être inclus exactement une fois. L'attribution du siège arrière central à l'AreaID gauche ou droit peut sembler arbitraire, mais l'inclusion de chaque siège concerné dans exactement un AreaID garantit que tous les sièges sont exprimés dans la voiture et qu'un moyen raisonnable d'affecter chaque siège est disponible.

Exemple 1

Une voiture comporte 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). Il existe deux unités de contrôle de la température, une pour le côté conducteur et une pour le côté passager. Un ensemble de mappage valide d'ID de zone pour HVAC_TEMPERATURE_SET serait un tableau à deux éléments:

  • ROW_1_LEFT | ROW_2_LEFT
  • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT

Un autre mappage pour la même configuration matérielle serait le suivant:

  • ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
  • 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), et trois sièges à la deuxième (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) et troisième rangées (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Il existe trois unités de contrôle de la température, une pour le côté conducteur, un côté passager et l'arrière. Un moyen raisonnable de mapper HVAC_TEMPERATURE_SET sur des ID de zone est 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

Exemple 3

Une voiture comporte 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). Supposons que la voiture soit compatible avec le système HVAC_AUTO_ON uniquement pour les deux sièges avant. Un ensemble de mappage valide d'ID de zone pour HVAC_AUTO_ON serait un tableau à un seul élément:

  • ROW_1_LEFT | ROW_1_RIGHT

Si HVAC_AUTO_ON disposait de deux unités de contrôle distinctes pour le côté conducteur et le côté passager, un autre mappage serait un tableau à deux éléments:

  • ROW_1_LEFT
  • ROW_1_RIGHT

INFO_EXTERIOR_DIMENSIONS

Les dimensions extérieures d'un véhicule sont mesurées en millimètres, comme illustré dans la figure 1.

Figure 1. Dimensions de l'extérieur du véhicule, vue de face.
Figure 2. Dimensions de l'extérieur du véhicule, vue latérale.

Utilisez les propriétés décrites dans ce tableau pour définir les dimensions extérieures d'un véhicule.

Propriété du véhicule Champ VHAL Description
Taille int32Values[0] Distance verticale entre le sol et le point le plus élevé du véhicule. Cela suppose que les roues d'usine sont normalement gonflées.
Durée int32Values[1] Distance horizontale entre les points les plus extérieurs de l'avant et de l'arrière du véhicule.
Largeur, sans miroirs int32Values[2] Distance horizontale entre les deux points les plus extérieurs de chaque côté du véhicule, à l'exclusion des rétroviseurs latéraux.
Largeur, y compris les miroirs int32Values[3] Distance horizontale entre les deux points les plus extérieurs de chaque côté du véhicule, y compris les rétroviseurs latéraux.
Empattement int32Values[4] Distance entre le centre des roues avant et arrière du véhicule.
Largeur de la voie, avant int32Values[5] Distance entre les roues avant, mesurée de la ligne médiane d'une bande de roulement de pneu à la ligne médiane de la bande de roulement du pneu opposé.
Largeur de la voie, arrière int32Values[6] Distance entre les roues arrière, mesurée de la ligne médiane d'une bande de roulement de pneu à la ligne médiane de la bande de roulement de pneu opposée.
Diamètre de braquage entre trottoirs int32Values[7] Diamètre du cercle décrit par les roues extérieures du véhicule lors d'un virage à 360 degrés avec un volant complètement bloqué.

Conformité avec les règles générales de sécurité de l'Union européenne

Si le véhicule doit respecter les exigences du Règlement général sur la sécurité (GSR) de l'Union européenne via Android, la propriété GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT doit être acceptée. L'adaptation intelligente de la vitesse (ISA) GSR, telle que définie dans le règlement 2019/2144 de l'UE, est un exemple de cas d'utilisation. Cette propriété est ajoutée dans AIDL VHAL à partir d'Android 13, mais elle est compatible avec Car Service depuis la version d'Android 12. Cette propriété est définie comme une propriété d'entier global statique en lecture seule, avec des valeurs possibles définies par l'énumération GsrComplianceRequirementType:

Nom Valeur Description
GSR_COMPLIANCE_NOT_REQUIRED 0 La conformité avec le GSR n'est pas requise
GSR_COMPLIANCE_REQUIRED_V1 1 La conformité avec les GSR est obligatoire, et la version de la solution est la 1.

Pour prendre en charge cette propriété dans HIDL VHAL (dans Android 12), les fournisseurs doivent coder en dur l'ID de la propriété. Par exemple, l'extrait de code suivant montre comment cette fonctionnalité est prise en charge dans la VHAL HIDL de référence DefaultConfig.h:

{
  .config =
      {
          // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
          .prop = 0x11400F47,
          .access = VehiclePropertyAccess::READ,
          .changeMode = VehiclePropertyChangeMode::STATIC,
      },
  // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1
  .initialValue = {.int32Values = {1}},
}

Pour prendre en charge cette propriété dans AIDL VHAL (à partir d'Android 13), les fournisseurs peuvent utiliser l'ID de propriété de VehicleProperty.h et l'énumération de GsrComplianceRequirementType.h. Par exemple, comme dans la référence AIDL VHAL DefaultProperties.json:

{
  "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT",
  "defaultValue": {
    "int32Values": [
      "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1"
    ]
  }
}

Pour lire cette propriété à partir d'une application Android, utilisez CarPropertyManager.getIntProperty.

  • Sous Android 13 ou version ultérieure, utilisez VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE comme ID de propriété.
  • Dans Android 12, utilisez la valeur codée en dur 0x11400F47 comme ID de propriété. Cette propriété nécessite l'autorisation Car#PERMISSION_CAR_INFO.