System operacyjny Android Automotive (AAOS) zawiera typowe właściwości VHAL, które można przeglądać w oknie VHAL emulatora. W rezultacie możesz wyświetlić mnóstwo informacji o VHAL, w tym nazwy, opisy i znaczenie wartości. Informacje są wyodrębniane z metadanych właściwości VHAL, które są zakodowane na stałe w emulatorze QEMU .
Kiedy dodasz własne właściwości VHAL do wyłącznego użytku na swoich urządzeniach, przeglądanie metadanych VHAL w oknie VHAL wymaga modyfikacji kodu i zbudowania dostosowanego emulatora QEMU. Aby obejść ten problem, możesz napisać własne opisy w formacie JSON i umieścić je w obrazie systemu.
Przegląd
Na tej stronie szczegółowo opisano, w jaki sposób można rozszerzyć opisy właściwości VHAL w emulatorze AAOS.
Utwórz metadane JSON, aby rozszerzyć właściwości VHAL
Emulator szuka dodatkowych metadanych we wszystkich plikach kończących się na -types-meta.json
w ścieżce urządzenia wirtualnego Android (AVD). Oczekuje się, że pliki JSON będą składać się z tablicy obiektów Enum
, jak pokazano poniżej.
Obiekt wyliczeniowy
Obiekt Enum
o nazwie VehicleProperty
jest przypadkiem szczególnym, ponieważ można go uważać za pierwiastek. Jego zawartość zostanie dodana do mapy właściwości pojazdu. Inne Enums
(o nazwie innej niż VehicleProperty
) definiują mapy nazw wartości niestandardowych.
Enum: { "name" : String, "values" : Array of { ValueObject } }
Obiekt wartości
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
W przypadku VehicleProperty
nazwa Enum
opisuje sposób wyświetlania tej właściwości w oknie VHAL emulatora. Wartość jest property_id
właściwości opisanej przez ValueObject
. data_enum
kojarzy ValueObject
z innym Enum
. To powiązanie służy do mapowania wartości na ciąg znaków czytelny dla człowieka i istnieje tylko dla ValueObjects
w Enum
VehicleProperty
. Przykład VehicleProperty
pokazano poniżej:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
W tym przykładzie property_id
o value
289408001 jest podany jako name
CURRENT_GEAR
. W emulatorze ta właściwość jest już zakodowana na stałe jako nazwa Current Gear . (Nie możesz odtworzyć tego scenariusza, ponieważ ta strona została utworzona po usunięciu wszystkich zakodowanych na stałe właściwości w celach demonstracyjnych).
Rysunek 1. VehicleProperty zdefiniowana z nazwą i wartością.
Na karcie Właściwości VHAL emulatora nazwa jest odświeżana i wyświetla się zgodnie z oczekiwaniami CURRENT_GEAR
.
dane_enum
W powyższym przykładzie wyświetlana wartość wynosi 4, gdy bieg jest ustawiony na P.
Rysunek 2. Wartość wyświetlana jako 4.
Zgodnie z zamierzeniami na karcie Właściwości VHAL w emulatorze nazwa pojawia się jako CURRENT_GEAR
. Kontrastuje to z istniejącym emulatorem, w którym jest on wyświetlany jako P.
enum VehicleGear { GEAR_UNKNOWN = 0x0000, GEAR_NEUTRAL = 0x0001, GEAR_REVERSE = 0x0002, GEAR_PARK = 0x0004, GEAR_DRIVE = 0x0008, GEAR_1 = 0x0010, GEAR_2 = 0x0020, GEAR_3 = 0x0040, GEAR_4 = 0x0080, GEAR_5 = 0x0100, GEAR_6 = 0x0200, GEAR_7 = 0x0400, GEAR_8 = 0x0800, GEAR_9 = 0x1000, }
Aby dowiedzieć się więcej, zapoznaj się z definicją AIDL .
Zgodnie z definicją w AIDL, wartość biegu postojowego wynosi 4 , co oznacza, że należy przełożyć wartość 4 na P. Dzieje się tak, gdy używasz data_enum
, które odwzorowuje tę wartość właściwości na ciąg czytelny dla człowieka w innym Enum
. Emulator używa tej mapy do tłumaczenia wartości właściwości. Na przykład:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001, "data_enum": "VehicleGear" } ] }, { "name": "VehicleGear", "values": [ { "name": "GEAR_UNKNOWN", "value": 0 }, { "name": "GEAR_PARK", "value": 4 } ] } ]
Dodaj "data_enum": "VehicleGear"
, aby emulator użył Enum
o nazwie VehicleGear
do przetłumaczenia wartości właściwości. Dodaj kolejne Enum
o nazwie VehicleGear
z wartością będącą tablicą ValueObject
, gdzie wartość właściwości (wraz z wartością) powinna być wyświetlana jako nazwa.
Rysunek 3. Wartość wyświetlana jako GEAR_PARK.
Na karcie Właściwości VHAL emulatora nazwa jest odświeżana do CURRENT_GEAR
, zgodnie z oczekiwaniami. Wartość właściwości 4
jest wyświetlana jako GEAR_PARK
.
Użyj metadanych JSON, aby rozszerzyć właściwości VHAL
Aby użyć metadanych JSON do rozszerzenia właściwości VHAL, uruchom ten skrypt w języku Python (zawarty w źródle systemu Android), aby wygenerować rozszerzoną właściwość JSON na podstawie informacji w AIDL.
Wynikowy kod JSON zawiera pewne nadmiarowe wartości, takie jak change_mode
, access
i unit
. Chociaż te informacje są częścią właściwości VHAL, te wartości JSON nie mają wpływu na to, co jest wyświetlane w oknie właściwości VHAL emulatora.
Dodaj metadane JSON do obrazu systemu
Pamiętaj, że nazwa pliku musi kończyć się na -types-meta.json
. Jeżeli nie, plik jest ignorowany.
Dodaj cel kompilacji
Dodaj plik -types-meta.json
do PRODUCT_COPY_FILE
. Na przykład:
PRODUCT_COPY_FILES += \ device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json
Ten kod kopiuje plik do out/target/product/{your_target_path}/
, katalogu głównego zbudowanych docelowych wyników.