Emülatördeki VHAL özellik açıklamalarını genişletme

Android Automotive OS (AAOS), bir öykünücünün VHAL penceresinde görüntülenebilen ortak VHAL özelliklerini içerir. Sonuç olarak VHAL'ler hakkında adlar, açıklamalar ve değerlerin anlamları dahil çok sayıda bilgiyi görüntüleyebilirsiniz. Bilgiler, QEMU öykünücüsüne sabit kodlanmış olan VHAL özelliklerinin meta verilerinden çıkarılır.

Cihazlarınızda özel kullanım için kendi VHAL özelliklerinizi eklediğinizde, VHAL penceresinde VHAL meta verilerini görüntülemek, kodu değiştirmenizi ve özelleştirilmiş bir QEMU öykünücüsü oluşturmanızı gerektirir. Bu sorunu çözmek için kendi açıklamalarınızı JSON formatında ve sistem görüntünüze yazabilirsiniz.

Genel Bakış

Bu sayfada, bir AAOS öykünücüsünde VHAL özellikleri açıklamalarını nasıl genişletebileceğiniz ayrıntılarıyla anlatılmaktadır.

VHAL özelliklerini genişletmek için JSON meta verileri oluşturun

Emülatör, Android Sanal Aygıt (AVD) yolunda -types-meta.json ile biten tüm dosyalarda ek meta veriler arar. JSON dosyalarının aşağıda gösterildiği gibi bir dizi Enum nesnesinden oluşması beklenir.

Nesneyi numaralandır

VehicleProperty isimli Enum nesnesi kök olarak düşünebileceğiniz özel bir durumdur. İçeriği araç özellikleri haritasına eklenir. Diğer Enums ( VehicleProperty dışında bir adla) özel değerlerin adlarının eşlemelerini tanımlar.

Enum: {
  "name" : String,
  "values" : Array of { ValueObject }
}  

DeğerObjesi

ValueObject: {
  "name" : String,
  "value" : Integer,
  "data_enum" : String, VehicleProperty only, optional,
}

VehicleProperty için Enum adı, bu özelliğin öykünücünün VHAL penceresinde nasıl görüntülendiğini açıklar. Değer, ValueObject tarafından tanımlanan özelliğin property_id . data_enum ValueObject başka bir Enum ile ilişkilendirir. Bu ilişkilendirme, bir değeri insan tarafından okunabilen bir dizeye eşlemek için kullanılır ve yalnızca Enum VehicleProperty ValueObjects için mevcuttur. VehicleProperty örneği aşağıda gösterilmektedir:

[
  {
      "name": "VehicleProperty",
      "values": [
          {
              "name": "CURRENT_GEAR",
              "value": 289408001
          }
      ]
  }
]

Bu örnekte CURRENT_GEAR için name olarak 289408001 value sahip bir property_id sağlanmıştır. Öykünücüde bu özellik zaten Current Gear adı olarak sabit kodlanmıştır. (Bu sayfa, gösterim amacıyla tüm sabit kodlu özellikler kaldırıldıktan sonra yazıldığı için bu senaryoyu yeniden oluşturamazsınız.)

Şekil 1. Adı ve değeri ile tanımlanan Araç Özelliği.

Emülatörün VHAL Özellikleri sekmesinde, ad beklendiği gibi CURRENT_GEAR okuyacak şekilde yenilenir.

veri_enum

Yukarıdaki örnekte vites P olarak ayarlandığında görüntülenen değer 4'tür .

Şekil 2. Değer 4 olarak görüntülenir.

Amaçlandığı gibi öykünücünün VHAL Özellikleri sekmesinde ad CURRENT_GEAR olarak görünür. Bu, P olarak görüntülendiği mevcut öykünücünün tersidir.

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,
}

Daha fazla bilgi edinmek için AIDL tanımına bakın.

AIDL'de tanımlandığı gibi Park dişlisinin değeri 4'tür , yani 4 değerini P'ye çevirmeniz gerekir. Bu, bu özellik değerini başka bir Enum insanlar tarafından okunabilen bir dizeyle eşleyen data_enum kullandığınız zamandır. Emülatör bu haritayı özellik değerlerini çevirmek için kullanır. Örneğin:

[
    {
        "name": "VehicleProperty",
        "values": [
            {
                "name": "CURRENT_GEAR",
                "value": 289408001,
                "data_enum": "VehicleGear"
            }
        ]
    },
    {
        "name": "VehicleGear",
        "values": [
            {
                "name": "GEAR_UNKNOWN",
                "value": 0
            },
            {
                "name": "GEAR_PARK",
                "value": 4
            }
        ]
    }

]

"data_enum": "VehicleGear" ekleyin, böylece öykünücü, özellik değerini çevirmek için VehicleGear adlı bir Enum kullanır. Değeri ValueObject dizisi olan ve özellik değerinin (değerle birlikte) bir ad olarak görüntülenmesi gereken VehicleGear adında başka bir Enum ekleyin.

Şekil 3. GEAR_PARK olarak gösterilen değer.

Emülatörün VHAL Özellikleri sekmesinde beklendiği gibi ad CURRENT_GEAR okuyacak şekilde yenilenir. 4 özellik değeri GEAR_PARK olarak görüntülenir.

VHAL özelliklerini genişletmek için JSON meta verilerini kullanın

VHAL özelliklerinizi genişletmek amacıyla JSON meta verilerini kullanmak için, AIDL'deki bilgilerden genişletilmiş JSON özelliğini oluşturmak üzere bu Python betiğini (Android kaynağında bulunur) çalıştırın.

Ortaya çıkan JSON, change_mode , access ve unit gibi bazı gereksiz değerleri içerir. Bu bilgiler VHAL özelliğinin bir parçası olsa da bu JSON değerleri öykünücünün VHAL özellik penceresinde görüntülenenleri etkilemez.

JSON meta verilerini sistem görüntüsüne ekleme

Bir dosya adının -types-meta.json ile bitmesi gerektiğine dikkat edin. Aksi takdirde dosya dikkate alınmaz.

Yapı hedefi ekleme

-types-meta.json dosyasını PRODUCT_COPY_FILE dosyasına ekleyin. Örneğin:

PRODUCT_COPY_FILES += \
    device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json

Bu kod, dosyayı yerleşik hedef çıktınızın kökü olan out/target/product/{your_target_path}/ dizinine kopyalar.