Rozszerz opisy właściwości VHAL w emulatorze

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.