Referenzimplementierung

Wir stellen eine Referenzimplementierung für das AIDL VHAL bereit. Der Hauptdienstthread ist unter VehicleService.cpp implementiert. Die VHAL-Schnittstellenimplementierung befindet sich unter DefaultVehicleHal.cpp .

Die Referenzimplementierung basiert auf einer zweischichtigen Architektur. Auf der oberen Ebene implementiert DefaultVehicleHal die VHAL-AIDL-Schnittstelle und stellt generische VHAL-Logik für alle Hardwaregeräte bereit. Auf der unteren Ebene 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 dieselbe Architektur anpassen, dieselbe DefaultVehicleHal Klasse wiederverwenden (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 Eingabeprüfungen durch, einschließlich einer Prüfung auf doppelte IDs.
  • Weist Clientobjekte (z. B. GetValuesClient ) für jeden Vorgang für jeden Binder-Client zu und fügt sie jeweils einem globalen Pool hinzu.
  • Verwaltet die asynchrone Rückruflogik, z. B. das Hinzufügen einer ausstehenden Anfrage zu einem Pool ausstehender Anfragen. Löst ausstehende Anfragen, wenn wir die Ergebnisse erhalten, oder gibt einen Fehler zurück, wenn bei einer der ausstehenden Anfragen das Zeitlimit überschritten wird.
  • Serialisiert und deserialisiert LargeParcelable (siehe ParcelableUtils.h ).
  • Verwaltet das Abonnement (siehe SubscriptionManager.h ).
  • Überprüft Berechtigungen. (Siehe die Funktionen checkReadPermission und checkWritePermission ).
  • Ruft regelmäßig IVehicleHardware.checkHealth auf und sendet Heartbeat-Signale (siehe Funktion checkHealth ).

IVehicleHardware ist eine generische Schnittstelle, die zur Darstellung der hardwarespezifischen Implementierung eines VHAL verwendet wird. Die Referenzimplementierung für IVehicleHardware ist FakeVehicleHardware , die eine In-Memory-Map zum Speichern des Eigenschaftswerts verwendet und nicht mit einem tatsächlichen Fahrzeugbus kommuniziert. Es soll auf einem Emulator ausgeführt werden und weist keine hardwarespezifischen Abhängigkeiten auf. Anbieterimplementierungen dürfen es nicht unverändert verwenden und müssen fahrzeugbusspezifische Logik hinzufügen.

In Android 14 liest FakeVehicleHardware die unterstützte Eigenschaftskonfiguration zur Laufzeit während der Initialisierung aus dem Ordner /vendor/etc/automotive/vhalconfig/ des Geräts, der eine Konfigurationsdatei im JSON-Stil enthält. Informationen zum Konfigurationsdateiformat und zum Inhalt der Konfigurationsdatei finden Sie in der Referenz-VHAL-README-Datei .

FakeVehicleHardware unterstützt auch das Überschreiben von Konfigurationsdateien zu Testzwecken. Wenn die Systemeigenschaft persist.vendor.vhal_init_value_override festgelegt ist, wird die Konfigurationsdatei 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, sodass die VHAL-unterstützte Eigenschaftskonfiguration nicht fest codiert ist und zum Startzeitpunkt dynamisch festgelegt werden kann. Die Fahrzeugeigenschaftenkonfiguration muss statisch sein, sobald das Gerät gestartet wird.