Fahrzeugeigenschaften

Die Vehicle Hardware Abstraction Layer (VHAL)-Schnittstelle definiert die Eigenschaften, die OEMs implementieren können, und enthält Attributmetadaten (z. B. ob es sich um ein Int-Attribut handelt und welche Änderungsmodi zulässig sind). Die VHAL-Schnittstelle basiert auf dem Zugriff auf eine Property (Lesen, Schreiben, Abonnieren), die eine Abstraktion für eine bestimmte Funktion ist.

HAL-Schnittstellen

Die VHAL verwendet die folgenden Schnittstellen:

  • getAllPropConfigs() generiert (vec<VehiclePropConfig>propConfigs)
    Listet die Konfiguration aller von der VHAL unterstützten Properties auf. Für CarService werden nur unterstützte Properties verwendet.
  • getPropConfigs(vec<int32_t> props) generiert (StatusCode status,vec<VehiclePropConfig> propConfigs);
    Gibt die Konfiguration der ausgewählten Properties zurück.
  • set(VehiclePropValue propValue) generiert (StatusCodestatus);
    Schreibt einen Wert in die Property. Das Ergebnis der Schreibvorgänge wird pro Property definiert.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) generiert (StatusCode status);
    Überwachung einer Property-Wertänderung starten. Für eine Zoneneigenschaft wird mit unsubscribe(IVehicleCallback callback, int32_t propId) (StatusCode status); generiert.

Die VHAL verwendet die folgenden Callback-Schnittstellen:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    Benachrichtigt die Änderung des Werts der Fahrzeugeigenschaft. Sollte nur für abonnierte Properties erfolgen.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Gibt einen globalen Fehler auf VHAL-Ebene oder einen Fehler pro Property zurück. Ein globaler Fehler führt zum Neustart der HAL, was zum Neustart anderer Komponenten (einschließlich Anwendungen) führen kann.

Fahrzeugeigenschaften

Properties können schreibgeschützt, nur lesbar (zum Übergeben von Informationen an die VHAL-Ebene) oder les- und schreibbar sein. Die Unterstützung der meisten Properties ist optional. Jede Property wird durch einen int32-Schlüssel eindeutig identifiziert und hat einen vordefinierten Typ (value_type):

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

Ein Zonenattribut kann mehr als einen Wert haben, je nachdem, wie viele Zonen vom Attribut unterstützt werden.

Gebietstypen

Die VHAL definiert mehrere Gebietstypen:

Gebietstyp Beschreibung
GLOBAL Diese Property ist ein Singleton und hat keine weiteren Bereiche.
WINDOW Bereich basierend auf Fenstern, verwendet VehicleAreaWindow enum.
MIRROR Bereich basierend auf Spiegeln, verwendet VehicleAreaMirror enum.
SEAT Bereich basierend auf Sitzplätzen, verwendet VehicleAreaSeat-Enum.
DOOR Bereich basierend auf Türen, verwendet VehicleAreaDoor-Enum.
WHEEL Fläche basierend auf Rädern, verwendet VehicleAreaWheel-Enum.

Für jedes in Zonen aufgeteilte Attribut muss ein vordefinierter Bereichstyp verwendet werden. Für jeden Gebietstyp gibt es eine Reihe von Bitflags, die in einem Enum für den Gebietstyp definiert sind. Zum Beispiel definiert der Bereich SEAT VehicleAreaSeat-Enums:

  • 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

Gebiets-IDs

Zonenspezifische Properties werden über Gebiets-IDs adressiert. Jedes Zonenobjekt kann eine oder mehrere Gebiets-IDs unterstützen. Eine Regions-ID besteht aus einem oder mehreren Flags aus dem entsprechenden Enum. Für eine Property mit VehicleAreaSeat können beispielsweise die folgenden Gebiets-IDs verwendet werden:

Artikel Beschreibung
ROW_1_LEFT | ROW_1_RIGHT Die Zonen-ID gilt für beide Vordersitze.
ROW_2_LEFT Gilt nur für den linken Rücksitz.
ROW_2_RIGHT Gilt nur für den rechten Rücksitz.

Status der Unterkunft

Jeder Property-Wert hat einen VehiclePropertyStatus-Wert. Hier sehen Sie den aktuellen Status der Property:

Artikel Beschreibung
AVAILABLE Die Property ist verfügbar und der Wert ist gültig.
UNAVAILABLE Der Property-Wert ist derzeit nicht verfügbar. Wird für vorübergehend deaktivierte Funktionen für eine unterstützte Property verwendet.
ERROR Mit dieser Property ist ein Fehler aufgetreten.

Property konfigurieren

Verwenden Sie VehiclePropConfig, um Konfigurationsinformationen für jedes Attribut anzugeben. Zu den Informationen gehören:

Variable Beschreibung
access r, w, rw
changeMode Gibt an, wie eine Property überwacht wird: bei Änderungen oder kontinuierlich.
areaConfigs areaId, min und max
configArray Zusätzliche Konfigurationsparameter.
configString Zusätzliche Informationen, die als String übergeben werden.
minSampleRate maxSampleRate
prop Property-ID, Ganzzahl

Zoneneigenschaften verarbeiten

Eine Zonen-Property entspricht einer Sammlung mehrerer Properties, auf die über den angegebenen Wert der Gebiets-ID zugegriffen werden kann.

  • Der get-Aufruf für eine Zoneneigenschaft enthält immer die Gebiets-ID in der Anfrage. Daher wird nur der aktuelle Wert für die angeforderte Gebiets-ID zurückgegeben. Wenn es sich um eine globale Property handelt, ist die Gebiets-ID 0.
  • Der set-Aufruf für eine Zoneneigenschaft enthält immer die Gebiets-ID in der Anfrage. Daher wird nur die angeforderte Gebiets-ID geändert.
  • Bei einem subscribe-Aufruf werden Ereignisse für alle Gebiets-IDs der Property generiert.

Anrufe erhalten

Während der Initialisierung ist der Wert für die Property möglicherweise noch nicht verfügbar, da die entsprechende Nachricht des Fahrzeugnetzwerks noch nicht empfangen wurde. In solchen Fällen sollte der get-Aufruf -EAGAIN zurückgeben. Einige Unterkünfte (z. B. HLK) haben ein separates Attribut für Ein-/Ausschalten. Wenn get für eine solche Eigenschaft aufgerufen wird, sollte bei ausgeschaltetem Gerät ein UNAVAILABLE-Status zurückgegeben werden, anstatt einen Fehler. Beispiel: HLK-Temperatur abrufen

VHAL get HVAC example

Abbildung 1 HLK-Temperatur abrufen (CS = CarService, VHAL = Fahrzeug-HAL)

Anrufe

Bei einem normalen Vorgang führt ein set-Aufruf zu einer Änderungsanfrage im gesamten Fahrzeugnetzwerk. Ein set-Aufruf ist idealerweise ein asynchroner Vorgang, der so schnell wie möglich zurückgegeben wird. Er kann aber auch synchron sein. Bei einigen set-Aufrufen müssen möglicherweise erste Daten bereit sein. Während der Initialisierung sind solche Daten jedoch möglicherweise noch nicht verfügbar. In solchen Fällen sollte der set-Aufruf StatusCode#TRY_AGAIN zurückgeben. Bei einigen Unterkünften mit separatem Ein- und Ausschalten sollte StatusCode#NOT_AVAILABLE oder StatusCode#NOT_AVAILABLE_DISABLED zurückgegeben werden, wenn die Unterkunft ausgeschaltet ist und set nicht durchgeführt werden kann. Bis set wirksam wird, gibt get nicht unbedingt den festgelegten Wert zurück. Beispiel: set HVAC Temperature.

Beispiel für ein HLK-System mit VHAL

Abbildung 2: HLK-Temperatur festlegen (CS = CarService, VHAL = Fahrzeug-HAL)

Benutzerdefinierte Eigenschaften verarbeiten

Zur Unterstützung partnerspezifischer Anforderungen lässt die VHAL benutzerdefinierte Attribute zu, die auf System-Apps beschränkt sind. Beachten Sie beim Arbeiten mit benutzerdefinierten Properties die folgenden Richtlinien:

  • Die Property-ID sollte mit den folgenden Feldern generiert werden:
    • VehiclePropertyGroup:VENDOR
      Die Gruppe VENDOR wird nur für benutzerdefinierte Properties verwendet.
    • VehicleArea
      Wählen Sie einen geeigneten Gebietstyp aus.
    • VehiclePropertyType
      Wählen Sie den richtigen Datentyp aus. Der BYTES-Typ ermöglicht die Weitergabe von Rohdaten, was in den meisten Fällen ausreicht. Wenn Sie häufig Big Data über benutzerdefinierte Properties senden, kann das den Zugriff auf das gesamte Fahrzeugnetzwerk verlangsamen. Seien Sie daher vorsichtig, wenn Sie eine große Nutzlast hinzufügen.
    • Property ID
      Wählen Sie eine vierstellige Nibble-ID für die benutzerdefinierte Property aus.
  • Um eine Fragmentierung der Umgebung zu vermeiden, dürfen keine benutzerdefinierten Eigenschaften verwendet werden, um Fahrzeugeigenschaften zu replizieren, die bereits im SDK (VehiclePropertyIds) vorhanden sind.
  • Geben Sie in VehiclePropConfig.configString eine kurze Beschreibung der benutzerdefinierten Eigenschaft ein. So können Tools zur Plausibilitätsprüfung die versehentliche Replikation vorhandener Fahrzeugeigenschaften melden. Beispiel: „Stand der Warnblinkanlage“.
  • Zugriff über CarPropertyManager (für Java-Komponenten) oder über die Vehicle Network Service API (für native Apps). Ändern Sie keine anderen Auto-APIs, da dies zu zukünftigen Kompatibilitätsproblemen führen kann.
  • Wählen Sie nach der Implementierung von Anbieter-Properties nur die Berechtigungsliste im VehicleVendorPermission-Enum für Anbieter-Properties aus. Wenn Sie Anbieterberechtigungen Systemeigenschaften zuordnen, funktionieren CTS und VTS nicht mehr.

Umgang mit den Eigenschaften des Heizungs-/Lüftungs-/Klimasystems

Sie können die VHAL verwenden, um die HLK zu steuern, indem Sie HLK-bezogene Eigenschaften festlegen. Die meisten HLK-Properties sind Zonen-Properties, einige sind jedoch nicht zoniert (global). Beispiele für definierte Properties:

Attribut Zweck
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Stelle die Temperatur pro Zone ein.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Umwälzung pro Zone steuern

Eine vollständige Liste der HLK-Properties finden Sie in types.hal unter VEHICLE_PROPERTY_HVAC_*. Wenn für die HLK-Property VehicleAreaSeat verwendet wird, gelten zusätzliche Regeln für die Zuordnung einer HLK-Property mit Zonen zu Gebiets-IDs. Jeder verfügbare Platz im Auto muss Teil einer Bereichs-ID im Array „Area ID“ (Bereichs-ID) sein.

Beispiel 1: Ein Auto hat zwei Vordersitze (ROW_1_LEFT, ROW_1_RIGHT) und drei Rücksitze (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Es hat zwei Temperaturregler: auf der Fahrer- und der Beifahrerseite.

  • Ein gültiger Zuordnungssatz von Gebiets-IDs für HVAC_TEMPERATURE SET ist:
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • Eine alternative Zuordnung für dieselbe Hardwarekonfiguration ist:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

Beispiel 2 Ein Auto hat drei Sitzreihen mit zwei Sitzen in der ersten Reihe (ROW_1_LEFT, ROW_1_RIGHT), drei Sitzen in der zweiten Reihe (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) und drei Sitzen in der dritten Reihe (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Das Auto hat drei Temperaturregler: Fahrerseite, Beifahrerseite und Rückseite. Eine sinnvolle Möglichkeit, HVAC_TEMPERATURE_SET Flächen-IDs zuzuordnen, ist ein Array mit drei Elementen:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

Sensoreigenschaften verarbeiten

VHAL-Sensoreigenschaften stellen echte Sensordaten oder Richtlinieninformationen wie den Fahrstatus dar. Auf einige Sensordaten (z. B. Fahrstatus und Tag-/Nachtmodus) kann jede App uneingeschränkt zugreifen, da die Daten obligatorisch sind, um eine sichere Fahrzeuganwendung zu erstellen. Andere Sensorinformationen (z. B. die Fahrzeuggeschwindigkeit) sind sensibler und erfordern bestimmte Berechtigungen, die Nutzer verwalten können.

Siehe die unterstützten Sensoreigenschaften (in types.hal).

Fahrzeugkartendienst

Der Fahrzeugkartendienst (Vehicle Map Service, VMS) bietet einen Mechanismus zum Austausch von Kartendaten zwischen Clients über eine Pub/Sub-Schnittstelle, um gängige Fahrzeugfunktionen wie erweiterte Fahrerassistenzsysteme (Advanced Driver Assistance Systems, ADAS) zu unterstützen. Clients können Fahrzeugsysteme umfassen, die über die VMS-Eigenschaft in der VHAL oder über privilegierte Android-Anwendungen kommunizieren. Die auf VMS freigegebenen Daten sollen beschränkt werden, um Daten zur Verwendung durch Fahrzeugsysteme und unterstützende Anwendungen zuzuordnen.

VMS ist nur für Android Automotive-Implementierungen vorgesehen. AOSP enthält keine Standardclients, die VMS veröffentlichen oder abonnieren. Für die VMS-Eigenschaft in der VHAL werden die Nachrichtentypen und Datenstrukturen in VHAL 2.0 im Enum VmsMessageType beschrieben, in dem die Typen der unterstützten VMS-Nachrichten aufgeführt sind. Dieser Enum wird als erste Ganzzahl im Array der Ganzzahlen der Fahrzeugeigenschaft verwendet und bestimmt, wie der Rest der Nachricht decodiert wird.