System operacyjny Android Automotive (AAOS) zawiera popularne właściwości VHAL, które mogą w oknie VHAL emulatora. Dzięki temu masz dostęp do mnóstwa informacji, o kodach VHAL, w tym o nazwach, opisach i znaczeniu wartości. Informacja jest wyodrębnionych z metadanych właściwości VHAL, które są zakodowane na stałe w Emulator QEMU.
Gdy dodasz własne właściwości VHAL do wyłącznego użytku na urządzeniach, wyświetlanie metadanych VHAL w oknie VHAL wymaga zmodyfikowania kodu i stworzenia niestandardowego emulatora QEMU. Do możesz obejść ten problem, możesz utworzyć własne opisy w formacie JSON i przesłać je do systemu .
Omówienie
Na tej stronie dowiesz się, jak rozszerzyć opisy właściwości VHAL w emulatorze AAOS.
Utwórz metadane JSON w celu rozszerzenia właściwości VHAL
Emulator szuka dodatkowych metadanych we wszystkich plikach z rozszerzeniem -types-meta.json
.
w ścieżce urządzenia wirtualnego z Androidem (AVD). Pliki JSON powinny zawierać tablicę
Enum
obiektów jak pokazano poniżej.
Obiekt typu enum
Obiekt Enum
o nazwie VehicleProperty
jest specjalnym przypadkiem, który
można traktować go jako pierwiastek. Jego zawartość jest dodawana do mapy właściwości pojazdu. Inny powód
Enums
(o nazwie innej niż VehicleProperty
) – zdefiniuj mapy nazw
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, jak
jest wyświetlana w oknie VHAL emulatora. Wartość to
property_id
właściwości opisanej w dokumencie ValueObject
.
data_enum
wiąże element ValueObject
z innym elementem Enum
.
To powiązanie służy do mapowania wartości na zrozumiały dla człowieka ciąg znaków i istnieje tylko w przypadku
ValueObjects
w: Enum
dla: VehicleProperty
.
Przykładowy element VehicleProperty
jest widoczny poniżej:
[
{
"name": "VehicleProperty",
"values": [
{
"name": "CURRENT_GEAR",
"value": 289408001
}
]
}
]
W tym przykładzie: property_id
z wartością value
wynoszącą
289408001 jest podawany jako name
dla CURRENT_GEAR
.
W emulatorze ta właściwość jest już na stałe zakodowana jako nazwa Current Gear.
(Nie da się odtworzyć tego scenariusza, ponieważ ta strona została utworzona po usunięciu wszystkich
w celach demonstracyjnych).
Rysunek 1. Parametr Vehicleproperty zdefiniowany za pomocą nazwy i wartości.
Na karcie Właściwości VHAL emulatora nazwa jest odświeżana, aby można było odczytać dane.
CURRENT_GEAR
zgodnie z oczekiwaniami.
wyliczenie_danych
W tym przykładzie wyświetlana wartość to 4, gdy koło zębate jest ustawione na P.
Rysunek 2. Wartość wyświetlana jako 4.
Zgodnie z oczekiwaniami na karcie VHAL Właściwości w emulatorze nazwa będzie wyglądać tak:
CURRENT_GEAR
W przeciwieństwie do istniejącego emulatora, w którym jest 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, przeczytaj AIDL, definicji.
Zgodnie z definicją w AIDL wartością sprzętu Park jest 4, co oznacza
oznacza, że trzeba przetłumaczyć wartość 4 na P. W tym momencie
użyj dyrektywy data_enum
, która mapuje wartość właściwości na zrozumiały dla człowieka ciąg znaków w innym
Enum
Emulator używa tej mapy do tłumaczenia wartości usług. 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żywał parametru Enum
VehicleGear
, by przetłumaczyć wartość właściwości. Dodaj kolejny Enum
o nazwie VehicleGear
, a wartością jest tablica ValueObject
, gdzie
wartość właściwości (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, aby można było odczytać nazwę.
CURRENT_GEAR
zgodnie z oczekiwaniami. Wartość właściwości 4
jest wyświetlana jako
GEAR_PARK
Używanie metadanych JSON do rozszerzania właściwości VHAL
Aby użyć metadanych JSON do rozszerzenia właściwości VHAL, uruchom Skrypt w Pythonie (zawarte w źródle Androida) w celu wygenerowania rozszerzonego kodu JSON właściwości na podstawie informacji w AIDL.
Powstały kod JSON zawiera nadmiarowe wartości, takie jak change_mode
,
access
i unit
. Chociaż informacje te należą do usługi VHAL,
te wartości JSON nie mają wpływu na zawartość wyświetlaną 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śli nie,
zignorowano.
Dodaj cel kompilacji
Dodaj plik -types-meta.json
do PRODUCT_COPY_FILE
. Dla:
przykład:
PRODUCT_COPY_FILES += \
device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json
Ten kod powoduje skopiowanie pliku do katalogu głównego out/target/product/{your_target_path}/
,
gotowego docelowego wyniku.