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.
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(sieheParcelableUtils.h). - Verwaltet Abos (siehe
SubscriptionManager.h). - Prüft Berechtigungen. (Siehe die
checkReadPermissionundcheckWritePermissionFunktionen.) - Ruft regelmäßig
IVehicleHardware.checkHealthauf und sendet Heartbeat-Signale (siehe diecheckHealthFunktion).
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