Verwenden Sie den High Availability Renderer (HAR), um Fahrzeuginformationen anzuzeigen, die Android nicht darstellen kann. Das kann an Problemen wie Start-up, Verfügbarkeit, Sicherheit oder Vorschriften liegen. HAR ist eine portable, integrierte App, die in Rust geschrieben wurde.
HAR, auch HAR-Framework genannt, enthält Code, den Sie zum Erstellen von Apps verwenden. Eine mit HAR entwickelte App ist eine HAR-basierte App. Das HAR-Framework enthält Codeabschnitte für verschiedene Plattformen. Unter Linux verwenden Sie beispielsweise Bibliotheken wie tinyalsa für Sounds. QNX hat eigene Audiobibliotheken.
Eine Plattform umfasst Hardware, ein Betriebssystem, Systembibliotheken und andere Faktoren. Plattformspezifischer Code hat Teile, die als Subsysteme bezeichnet werden. Jedes Subsystem ist für eine Plattformfunktion zuständig, z. B. Audio, EVS-Kameras oder Fahrzeugdaten. Damit eine Plattform unterstützt werden kann, müssen alle Subsysteme des HAR-Frameworks implementiert sein.
Plattformspezifischer Subsystemcode kann im selben Prozess wie die HAR-basierte App oder in einem separaten Prozess ausgeführt werden. Wenn der Code separat ist, wird damit die Interprozesskommunikation (IPC) verarbeitet, um zu prüfen, ob die Plattform die App unterstützt. Komplexe IPC-Mechanismen müssen Teil des plattformspezifischen Codes sein.
Die HAR-Testsuite führt Tests für alle Subsysteme aus, die für eine Plattform implementiert wurden. Mit dieser Suite können Sie prüfen, ob Plattformen die HAR-Anforderungen erfüllen, und neue Probleme finden.
Terminologie
Diese Begriffe finden Sie auf dieser Seite:
- HAR-basierte App
- Eine OEM- oder funktionsspezifische App, die mit dem HAR-Framework erstellt wurde. Apps unterscheiden sich je nach App-Status und anderen anpassbaren Aspekten.
- HAR-Framework
- Bietet eine Reihe von Basistools zum Erstellen von Apps.
- HAR-Plattformabstraktion
- Teil des HAR-Frameworks, das eine bekannte API bereitstellt, die von allen Zielplattformen implementiert werden muss.
- HAR-Testsuite
- Eine Reihe bekannter Tests für Plattformimplementierungen, mit denen überprüft werden kann, ob Plattformimplementierungen das HAR-Framework auf einer bestimmten Plattform unterstützen.
Gehört nicht zum Umfang
HAR geht nicht auf Folgendes ein:
Individuelle Implementierungen für alle Zielplattformen: Implementierungen für Zielplattformen. Stattdessen werden auf dieser Seite die Schnittstellen beschrieben, die Plattformimplementierungen erfüllen müssen, und die Testsuite, die sie erfüllen muss.
Testläufe: Spezifische Testläufe für alle Schnittstellen. Stattdessen werden auf dieser Seite einzelne Funktionen für Schnittstellen beschrieben, einschließlich Argumenten, Rückgabewerten, erwarteten Verhaltensweisen und erwarteten Nebeneffekten. Auf dieser Seite wird die Testsuite beschrieben, in der Sie Testläufe implementieren und ausführen können.
Allgemeine Kistenstruktur für die Plattformabstraktion
Rust-Projekte bestehen aus Crates. Abbildung 1 zeigt die Kistenstruktur für die HAR-Plattformabstraktionsschicht. Die Plattformabstraktionsschicht betrifft mindestens zwei Rust-Crates:
Abstraktionen (Rust-
trait-Beschreibungen) befinden sich im HAR-Framework-Crate.Implementierungen für eine Plattform erfolgen über ein separates
har-platform-x-Crate. Zum Beispielhar-platform-linuxoderhar-platform-android.
Sie können die HAR-Crate nicht ohne eine angegebene Plattformimplementierung erstellen oder testen. Das ist beabsichtigt, da HAR ein Framework ist.
Eine App, die eine Plattform angibt, muss mit diesem Framework erstellt werden, damit sie funktioniert und getestet werden kann. Die Verbindungen zwischen dem HAR-Framework und der Plattform sind in diesem Diagramm dargestellt:
Abbildung 1. HAR-Box
Allgemeine Struktur in display-safety
Bei diesem Design werden dem Repository display_safety eine Reihe neuer Crates hinzugefügt, wie in Abbildung 2 dargestellt:
Abbildung 2: Abstraktionsmodule.
Eine Testsuite ist strukturell einer App ähnlich, basiert jedoch nur auf einem bestimmten Implementierungs-Crate für die Plattform. Die Testsuite muss sich auf Merkmale und Strukturen beziehen, die im HAR-Framework definiert sind, aber nicht auf komplexere Implementierungen.
Allgemeine Beschreibung der Plattformabstraktionsschicht
In dieser Tabelle werden plattformspezifische Subsysteme beschrieben, die durch die HAR-Plattformabstraktionsschicht definiert werden.
| Name der Abstraktion | Ähnliche Funktion | Beschreibung | Hinweise |
|---|---|---|---|
OpenGL |
2D-Rendering | Bietet OpenGLES 2.0/3.0-Renderingfunktionen für die HAR-Framework-Crate. | |
Audio |
Audio-Rendering | Bietet eine Android SoundPool-ähnliche Schnittstelle zum Verwalten und Abspielen von Systemaudio. | |
Camera |
Display der Fahrzeugkamera | Bietet eine EVS-HAL-ähnliche Schnittstelle zum Verwalten und Anzeigen von Informationen zur Fahrzeugkamera. | |
Looper |
Hauptschleife der App und Displaykonfiguration | Bietet eine Android-Looper-ähnliche Schnittstelle zum Verwalten plattformspezifischer App-Hauptschleifen und der Displaykonfiguration. | |
UserInput |
Berührung, Tastatur, Lenkrad oder Drehregler und andere plattformspezifische Eingaben | Bietet eine Schnittstelle, um HAR-basierte Apps mit Touch- und Tastatureingaben zu versorgen. Referenzimplementierung basierend auf Linux evdev in har-user-input-evdev. |
|
VehicleData |
Eingabe für Fahrzeugstatus | Bietet eine Schnittstelle, um HAR-basierten Apps einen Stream beliebiger Fahrzeugdaten zur Verfügung zu stellen, wie sie von Android VHAL oder einem CAN-Bus bereitgestellt werden. | |
ResourceManager |
App-spezifisches Design-Dokument im Cache | Bietet einen In-Memory-Cache von Ressourcen, die für den HAR-Start erforderlich sind, z. B. zwischengespeicherte Bilder und Designdokumente. Noch kein Datenträger-Cache implementiert. | |
Logging |
System-Logging und ‑Telemetrie | Bietet plattformspezifische Unterstützung für die Protokollierung über das Ablaufverfolgungssystem. Dadurch wird die Erfassung von Telemetriedaten gemäß den Anforderungen der Plattform aktiviert. | |
Tracing |
Ablaufverfolgung | Bietet eine Abstraktionsebene für die Integration in Tracing- und Profiling-Systeme. | |
Monitoring |
System monitoring | Toolkit zur Überwachung von Leistung und Latenzen im HAR-Framework. | |
Commlib |
Fahrzeugdaten | Eine Referenzimplementierung mit Protobuf-Serialisierung.
Eingestellt: Verwenden Sie die in reference/harry-control-api definierten APIs und die Implementierungen harry-grpcio-server und harry-tonic-server (Referenzimplementierung). |
|
TestSupport |
Support-Hooks testen | Unterstützt das Erstellen und Entfernen von Testläufen, das Generieren von Testereignissen und das Erstellen von Testartefakten. Beispielsweise werden simulierte Touch-Ereignisse zum Testen von UserInput und Screenshots zur Analyse generiert. |
Diese Funktion ist durch Rust gesperrt, um die Einbindung in Produktions-Builds zu verhindern. |
Namenskonventionen und Framework-Strukturen
In dieser Tabelle sind diese Namen und Strukturen aufgeführt:
Erwartete
trait-Instanzen des Subsystems, die vom HAR-Framework bereitgestellt werden. Jedestraitsteht für ein plattformspezifisches Subsystem, das implementiert werden muss.Erwartete Namen der plattformspezifischen Subsystemimplementierungen in einem beliebigen Plattform-Crate. Bei HAR-basierten Apps müssen diese spezifischen Namen implementiert werden.
Zugehörige
enum- undstruct-Instanzen des HAR-Frameworks, die in der Regel verwendet werden, um Informationen von plattformbezogenen Implementierungen an das HAR-Framework zu übergeben.
| Eigenschaftsnamen | Implementierungsnamen | HAR-Framework-Enum und ‑Structs |
|---|---|---|
GlContextFactory |
OpenGL |
trait harry::Rendererharry::DisplayRotation |
AudioApiFactory |
Audio |
harry::AudioApiharry::AudioDeviceharry::VolumeMillibel |
ICameraManager |
Camera |
harry::ICameraDeviceharry::CameraDescriptor |
Looper |
Looper |
harry::LooperMessageharry::LooperOptionsharry::DisplayId |
PlatformVehicleData |
VehicleData |
harry::VehicleDataTypeharry::VehicleDataListener |
ResourceManager (Struct) |
ResourceManager |
harry::ResourceManagerMessageharry::ResourceTokenharry::RawImageData |
PlatformTracing |
Tracing |
– |
HarPerformanceMonitor |
Monitoring |
harry::Rendererharry::ResolveLatencyToken |
PlatformTestSupport |
TestSupport |
harry::TestConfigharry::TestDisplayConfig |
Fehler und Fehlerbehebung
Die vorgeschlagenen APIs verwenden den Rust-Typ Result<>. In Rust müssen Sie Result-Typen prüfen, die Fehler enthalten. Andernfalls gibt der Compiler eine Warnung oder einen Fehler aus. Bei einer Build-Zeit-Prüfung wird die Fehlerprüfung aus plattformspezifischem Code erzwungen.
Von Plattformimplementierungen zurückgegebene Fehler haben den Typ harry::error::Error. Verwenden Sie den Standardfehlertyp des HAR-Frameworks, um zu prüfen, ob Plattformfehlertypen in den App-Code gelangen.
Der Typ harry::error::Error wird erweitert, um spezifische Fehler für alle Subsysteme zu enthalten:
// This is Rust
pub enum Error {
Msg(String), // A generic message string
// Legacy error type, likely to be removed or merged into Msg
Audio(String),
}
Nicht behebungsfähige Fehler werden hauptsächlich über die definierten Schnittstellen und Rückrufe zurückgegeben.
Detaillierte Konfiguration der Testsuite
In diesem Abschnitt wird das Design der Testsuite beschrieben, mit der plattformspezifische Implementierungen der Abstraktionen überprüft werden.
Testsuite-Tests erstellen
Bei Soong-Builds (definiert durch Android.bp-Dateien) werden die Tests als Teil des Android-Plattform-Build-Systems kompiliert und ihre Ausführung wird von atest verwaltet.
Testsuite ausführen
So testen Sie eine einzelne Plattform:
Verwenden Sie den Befehl atest mit dem entsprechenden Testziel (z. B. atest <module_name>). Mit diesem Befehl werden die Tests auf einem Android-Gerät oder -Emulator bereitgestellt und ausgeführt.