Propriétés spéciales

Propriétés du fournisseur

Pour répondre aux besoins spécifiques des partenaires, VHAL autorise les propriétés des fournisseurs accessibles uniquement via les API système. Utilisez les directives suivantes lorsque vous travaillez avec les propriétés du fournisseur :

  • Essayez toujours d'utiliser les propriétés du système en premier. Les propriétés du fournisseur doivent être utilisées en dernier recours lorsqu'aucune des propriétés du système ne répond à vos besoins.
  • 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 des véhicules qui existent déjà dans le SDK VehiclePropertyIds . Pour en savoir plus, consultez la section 2.5, Exigences automobiles dans le CDD.
  • Utilisez les champs suivants pour générer l'ID de propriété :
    • VehiclePropertyGroup:VENDOR Le groupe VENDOR est utilisé uniquement pour les propriétés du 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 à l'ensemble du réseau de véhicules. Soyez prudent lorsque vous ajoutez une grosse charge utile.
    • Property ID Choisissez un ID unique sur deux octets pour la propriété du fournisseur. Par exemple, 0x1234.
  • Remplissez VehiclePropConfig.configString avec une brève description de la propriété du fournisseur. Cela permet aux outils de contrôle de validité de signaler la réplication accidentelle des propriétés de véhicules existantes. Par exemple, « Ma propriété personnalisée pour XYZ ».
  • Accès via CarPropertyManager (pour les composants Java) ou via libvhalclient (pour les composants natifs). Ne modifiez pas les autres API du véhicule, car cela pourrait entraîner de futurs problèmes de compatibilité.

Autorisation des 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 une granularité plus fine du contrôle des autorisations, prenez en charge la propriété SUPPORT_CUSTOMIZE_VENDOR_PERMISSION . Cette propriété STATIC est en lecture seule, pour laquelle son tableau de configuration spécifie les autorisations pour les propriétés du fournisseur. Le configArray est défini comme suit (i est un entier commençant à 0) :

  • configArray[3 * i] propId, l'ID de propriété de la propriété du fournisseur.
  • configArray[3 * i + 1] Une énumération dans VehicleVendorPermission.aidl pour indiquer l'autorisation de lire la valeur de la propriété.
  • configArray[3 * i + 2] Une énumération 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 disposer des autorisations :

  • vendor_prop_1 nécessite android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT pour lire, android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT pour écrire.
  • vendor_prop-2 nécessite android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO pour être lu 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 du fournisseur qui ne figurent pas dans ce tableau bénéficient de l'autorisation du fournisseur par défaut. 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)

Voir Propriétés du véhicule ADAS .

SIÈGE et DIRECTION

Voir Propriétés du siège et du volant .

CVC

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 CVC sont associées à des zones particulières du véhicule, bien que plusieurs soient des propriétés globales. Les exemples de propriétés définies incluent :

Propriété But
HVAC_TEMPERATURE_SET Réglez la température par ID de zone.
HVAC_POWER_ON L’état d’alimentation du système CVC par ID de zone.

Pour les propriétés CVC qui dépendent de l'état d'alimentation du système CVC, elles doivent être répertoriées dans le tableau de configuration HVAC_POWER_ON . Pour voir une liste complète des propriétés CVC, recherchez HVAC_* dans VehicleProperty.aidl , voir Propriétés système prises en charge . propriétés.

Règles de mappage des propriétés CVC de type VehicleArea non GLOBAL aux AreaID : chaque « zone » pour 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 affecté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 les sièges de la voiture sont tous exprimés et qu'un moyen raisonnable d'affecter chaque siège est disponible.

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). Il y a deux unités de contrôle de température, une pour le côté conducteur et une pour le côté passager. Un ensemble de mappages valides d'AreaID 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 mappage alternatif pour la même configuration matérielle serait :

  • 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, dont deux dans la première rangée (ROW_1_LEFT, ROW_1_RIGHT) et trois sièges dans la deuxième (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) et la troisième rangée (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, une pour le côté passager et une pour l'arrière. Un moyen raisonnable de mapper HVAC_TEMPERATURE_SET aux AreaID 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 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). Supposons que la voiture prenne en charge HVAC_AUTO_ON uniquement pour les deux sièges avant. Un ensemble de mappages valides d'AreaID pour HVAC_AUTO_ON serait un tableau à un seul élément :

  • ROW_1_LEFT | ROW_1_RIGHT

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

  • ROW_1_LEFT
  • ROW_1_RIGHT

Conformité aux réglementations générales de sécurité de l’Union européenne

Si le véhicule doit être conforme aux 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 prise en charge. Un exemple de cas d'utilisation est GSR-ISA (Intelligent Speed ​​Assist) tel que défini dans le règlement UE 2019/2144. Cette propriété est ajoutée dans AIDL VHAL à partir d'Android 13, cependant, elle est prise en charge dans Car Service depuis la sortie d'Android 12. Cette propriété est définie comme une propriété entière globale 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é GSR n’est pas requise
GSR_COMPLIANCE_REQUIRED_V1 1 La conformité GSR est requise et la version de la solution requise est 1.

Pour prendre en charge cette propriété dans HIDL VHAL (sous Android 12), les fournisseurs doivent coder en dur l'ID de propriété. Par exemple, l'extrait suivant montre comment cela est pris en charge dans la référence HIDL VHAL 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 et versions ultérieures, utilisez VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE comme ID de propriété.
  • Sous Android 12, utilisez la valeur codée en dur de 0x11400F47 comme ID de propriété. Cette propriété nécessite l'autorisation Car#PERMISSION_CAR_INFO .