Emülatörde VHAL mülk açıklamalarını genişletme

Android Automotive OS (AAOS), bir emülatör VHAL penceresinde görüntülenebilen yaygın VHAL özelliklerini içerir. Sonuç olarak, adlar, açıklamalar ve değerlerin anlamı da dahil olmak üzere VHAL'ler hakkında çok sayıda bilgi görüntüleyebilirsiniz. Bilgiler, QEMU emülatörüne yerleştirilmiş olan VHAL mülklerinin meta verilerinden alınır.

Cihazlarınızda özel olarak kullanmak üzere kendi VHAL mülklerinizi eklediğinizde, VHAL meta verilerini VHAL penceresinde görüntülemek için kodu değiştirmeniz ve özelleştirilmiş bir QEMU emülatör oluşturmanız gerekir. Bu sorunu gidermek için kendi açıklamalarınızı JSON biçiminde yazıp sistem resminize ekleyebilirsiniz.

Genel Bakış

Bu sayfada, AAOS emülatöründe VHAL mülk açıklamalarını nasıl genişletebileceğiniz ayrıntılı olarak açıklanmaktadır.

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

Emülatör, Android sanal cihaz (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 Enum nesnesi dizisinden oluşması beklenir.

Enum nesnesi

VehicleProperty adlı Enum nesnesi, özel bir durumdur. Bu nesneyi kök olarak düşünebilirsiniz. İçeriği, araç özellikleri haritasına eklenir. Diğer Enums (VehicleProperty dışında bir ada sahip), özel değerlerin adlarının haritalarını tanımlar.

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

ValueObject

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

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

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

Bu örnekte, CURRENT_GEAR için name olarak 289408001 value değerine sahip bir property_id sağlanmıştır. Bu mülk, emülatörde Mevcut Vites adı olarak zaten sabit kodlanmıştır. (Bu sayfa, açıklama amacıyla tüm sabit kodlu mülkler kaldırıldıktan sonra oluşturulduğu için bu senaryoyu yeniden oluşturamazsınız.)

Şekil 1. Adı ve değeriyle tanımlanan VehicleProperty.

Emülatör'ün VHAL Özellikleri sekmesinde ad, beklenen şekilde CURRENT_GEAR olarak yenilenir.

data_enum

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

Şekil 2. Değer 4 olarak gösterilir.

Amaçlandığı gibi, emülatördeki VHAL Özellikleri sekmesinde ad CURRENT_GEAR olarak görünür. Bu, mevcut emülatörde P olarak gösterilen duruma kıyasla farklıdır.

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 için AIDL tanımına bakın.

AIDL'de tanımlandığı gibi, Park vitesinin değeri 4'tür. Bu, 4 değerini P olarak çevirmeniz gerektiği anlamına gelir. Bu durumda, bu özellik değerini başka bir Enum içindeki kullanıcı tarafından okunabilir bir diziyle eşleyen data_enum işlevini kullanırsınız. Emülatör, mülk değerlerini çevirmek için bu haritayı kullanır. Örnek:

[
    {
        "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 emülatör, mülk değerini çevirmek için VehicleGear adlı bir Enum kullanır. VehicleGear adlı başka bir Enum ekleyin. Bu Enum'nin değeri ValueObject dizisi olmalıdır. Bu durumda, özellik değeri (değerle birlikte) ad olarak gösterilir.

Şekil 3. GEAR_PARK olarak görüntülenen değer.

Emülatör için VHAL Özellikleri sekmesinde ad, beklendiği gibi CURRENT_GEAR olarak yenilenir. 4 mülk değeri GEAR_PARK olarak gösterilir.

VHAL özelliklerini genişletmek için JSON meta verilerini kullanma

VHAL mülklerinizi genişletmek için JSON meta verilerini kullanmak istiyorsanız bu Python komut dosyasını (Android kaynağında bulunur) çalıştırarak AIDL'deki bilgilerden genişletilmiş mülk JSON'unu oluşturun.

Elde edilen JSON, change_mode, access ve unit gibi bazı gereksiz değerler içerir. Bu bilgiler VHAL mülkünün bir parçası olsa da bu JSON değerleri, emülatörün VHAL mülk penceresinde gösterilenleri etkilemez.

Sistem görüntüsüne JSON meta verileri ekleme

Dosya adının -types-meta.json ile bitmesi gerektiğini unutmayın. Aksi takdirde dosya yoksayılır.

Derleme hedefi ekleme

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

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

Bu kod, dosyayı derlenmiş hedef çıkışınızın kökü olan out/target/product/{your_target_path}/ içine kopyalar.