Referenzimplementierung

Wir bieten eine Referenzimplementierung für die AIDL VHAL. Der Hauptdienstthread wird implementiert in VehicleService.cpp. Die VHAL-Schnittstellenimplementierung befindet sich in DefaultVehicleHal.cpp.

Die Referenzimplementierung basiert auf einer zweischichtigen Architektur. In der oberen Schicht implementiert DefaultVehicleHal die VHAL-AIDL-Schnittstelle und bietet eine VHAL-Logik , die für alle Hardwaregeräte gilt. In der unteren Schicht implementiert FakeVehicleHardware, die IVehicleHardware-Schnittstelle. Diese Klasse simuliert die VHAL-Logik der Interaktion mit der tatsächlichen Hardware oder dem Fahrzeugbus und ist gerätespezifisch. Optional können Anbieter diese Architektur anpassen, dieselbe DefaultVehicleHal Klasse wiederverwenden (und sie erweitern, um eine Methode zu überschreiben) und ihre eigene IVehicleHardware Implementierung bereitstellen.

VHAL-Referenzimplementierung
Abbildung 1 VHAL-Referenzimplementierung

DefaultVehicleHal enthält die folgende Logik, die als generisch gilt und auf jede VHAL Implementierung angewendet werden kann.

  • Implementiert die IVehicle-Schnittstelle.
  • Führt grundlegende Eingabeüberprüfungen durch, einschließlich einer Überprüfung auf doppelte IDs.
  • Weist für jeden Binder-Client für jeden Vorgang Clientobjekte zu (z. B. GetValuesClient) und fügt sie einem globalen Pool hinzu.
  • Verwaltet die Logik für asynchrone Callbacks, z. B. durch Hinzufügen einer ausstehenden Anfrage zu einem Pool ausstehender Anfragen. Löst ausstehende Anfragen auf, wenn die Ergebnisse eingehen, oder gibt einen Fehler zurück, wenn das Zeitlimit für eine der ausstehenden Anfragen überschritten wird.
  • Serialisiert und deserialisiert LargeParcelable (siehe ParcelableUtils.h).
  • Verwaltet Abos (siehe SubscriptionManager.h).
  • Prüft Berechtigungen. (Siehe die checkReadPermission und checkWritePermission Funktionen.)
  • Ruft regelmäßig IVehicleHardware.checkHealth auf und sendet Heartbeat-Signale (siehe die checkHealth Funktion).

IVehicleHardware ist eine generische Schnittstelle, die verwendet wird, um eine hardwarespezifische Implementierung von VHAL darzustellen. Die Referenzimplementierung für IVehicleHardware ist FakeVehicleHardware, Sie verwendet eine In-Memory-Map zum Speichern von Attributwerten und kommuniziert nicht mit einem tatsächlichen Fahrzeugbus. Sie ist für die Ausführung auf einem Emulator vorgesehen und hat keine hardwarespezifischen Abhängigkeiten. Anbieterimplementierungen dürfen sie nicht unverändert verwenden und müssen fahrzeugbusspezifische Logik hinzufügen.

Ab Android 14 liest FakeVehicleHardware die Konfiguration der unterstützten Attribute zur Laufzeit während der Initialisierung aus dem Ordner /vendor/etc/automotive/vhalconfig/ des Geräts. Dieser enthält eine Konfigurationsdatei im JSON-Format. Informationen zum Format und Inhalt der Konfigurationsdatei finden Sie in der README-Datei der Referenz-VHAL.

FakeVehicleHardware unterstützt auch das Überschreiben der Konfigurationsdatei für Tests. Wenn die Systemeigenschaft persist.vendor.vhal_init_value_override festgelegt ist (diese Eigenschaft muss zur Build-Zeit oder sehr früh während des Bootvorgangs vor der VHAL-Initialisierung festgelegt werden), wird die Konfigurations datei aus dem Ordner /vendor/etc/automotive/vhaloverride/ auf dem Gerät verwendet, um die vorhandene Konfiguration zu überschreiben. Eine Anbieterimplementierung kann einen ähnlichen Ansatz verwenden, damit die Konfiguration der von VHAL- unterstützten Attribute nicht fest codiert ist und dynamisch zur Startzeit festgelegt werden kann. Die Liste der Konfigurationen der Fahrzeugattribute muss statisch sein, nachdem VHAL initialisiert wurde.

Ab Android 16 bietet GRPCVehicleHardware eine weitere Referenzimplementierung von IVehicleHardware. Bei dieser Implementierung wird davon ausgegangen, dass auf einem Remotecomputer oder einer VM ein separater Server ausgeführt wird, der die Logik zur Attribut verarbeitung enthält. Die VHAL, die auf AAOS-Geräten ausgeführt wird, fungiert als Proxy, der Anfragen an den Remoteserver weiterleitet. Weitere Informationen finden Sie unter gRPC