ขยายคำอธิบายคุณสมบัติ VHAL ในโปรแกรมจำลอง

Android Automotive OS (AAOS) มีคุณสมบัติ VHAL ทั่วไปที่สามารถดูได้ในหน้าต่าง VHAL ของโปรแกรมจำลอง ด้วยเหตุนี้ คุณสามารถดูข้อมูลมากมายเกี่ยวกับ VHAL รวมถึงชื่อ คำอธิบาย และความหมายของค่าต่างๆ ข้อมูลนี้ดึงมาจากข้อมูลเมตาของคุณสมบัติ VHAL ซึ่งได้รับการฮาร์ดโค้ดลงในโปรแกรมจำลอง QEMU

เมื่อคุณเพิ่มคุณสมบัติ VHAL ของคุณเองเพื่อการใช้งานเฉพาะบนอุปกรณ์ของคุณ การดูข้อมูลเมตา VHAL ในหน้าต่าง VHAL กำหนดให้คุณต้องแก้ไขโค้ดและสร้างโปรแกรมจำลอง QEMU แบบกำหนดเอง เพื่อแก้ไขปัญหานี้ คุณสามารถเขียนคำอธิบายของคุณเองในรูปแบบ JSON และคำอธิบายลงในอิมเมจระบบของคุณได้

ภาพรวม

หน้านี้แสดงรายละเอียดวิธีการขยายคำอธิบายคุณสมบัติ VHAL ในโปรแกรมจำลอง AAOS

สร้างข้อมูลเมตา JSON เพื่อขยายคุณสมบัติ VHAL

โปรแกรมจำลองจะค้นหาข้อมูลเมตาเพิ่มเติมในไฟล์ทั้งหมดที่ลงท้ายด้วย -types-meta.json ในเส้นทาง Android Virtual Device (AVD) ไฟล์ JSON คาดว่าจะประกอบด้วยอาร์เรย์ของออบเจ็กต์ Enum ดังที่แสดงด้านล่าง

วัตถุแจงนับ

วัตถุ Enum ชื่อ VehicleProperty เป็นกรณีพิเศษใน ที่คุณสามารถพิจารณาว่าเป็นรูท เนื้อหาจะถูกเพิ่มลงในแผนที่คุณสมบัติของยานพาหนะ Enums อื่นๆ (ที่มีชื่ออื่นที่ไม่ใช่ VehicleProperty ) จะกำหนดการแมปของชื่อของค่าที่กำหนดเอง

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

ค่าObject

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

สำหรับ VehicleProperty ชื่อ Enum จะอธิบายวิธีการแสดงคุณสมบัตินี้ในหน้าต่าง VHAL ของโปรแกรมจำลอง ค่าคือ property_id ของคุณสมบัติที่อธิบายโดย ValueObject data_enum เชื่อมโยง ValueObject กับ Enum อื่น การเชื่อมโยงนี้ใช้เพื่อจับคู่ค่าลงในสตริงที่มนุษย์สามารถอ่านได้ และมีอยู่สำหรับ ValueObjects ใน Enum สำหรับ VehicleProperty เท่านั้น ตัวอย่างของ VehicleProperty แสดงอยู่ด้านล่าง:

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

ในตัวอย่างนี้ มีการระบุ property_id ที่มี value 289408001 เป็น name ของ CURRENT_GEAR ในโปรแกรมจำลอง คุณสมบัตินี้ได้รับการฮาร์ดโค้ดเป็นชื่อ Current Gear แล้ว (คุณไม่สามารถจำลองสถานการณ์นี้ได้เนื่องจากหน้านี้ถูกเขียนหลังจากลบคุณสมบัติฮาร์ดโค้ดทั้งหมดเพื่อวัตถุประสงค์ในการสาธิต)

รูปที่ 1 VehicleProperty กำหนดด้วยชื่อและค่า

ในแท็บ คุณสมบัติ VHAL ของโปรแกรมจำลอง ชื่อจะถูกรีเฟรชเพื่อให้อ่าน CURRENT_GEAR ตามที่คาดไว้

data_enum

ในตัวอย่างข้างต้น ค่าที่แสดงเป็น 4 เมื่อตั้งค่าเกียร์เป็น P

รูปที่ 2 ค่าที่แสดงเป็น 4

ตามที่ตั้งใจไว้ บนแท็บ คุณสมบัติ VHAL ในโปรแกรมจำลอง ชื่อจะปรากฏเป็น CURRENT_GEAR สิ่งนี้ตรงกันข้ามกับโปรแกรมจำลองที่มีอยู่ซึ่งจะแสดงเป็น 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,
}

หากต้องการเรียนรู้เพิ่มเติม โปรดดูคำจำกัดความ ของ AIDL

ตามที่กำหนดไว้ใน AIDL ค่าของเกียร์ Park คือ 4 ซึ่งหมายความว่าคุณต้องแปลค่า 4 เป็น P นี่คือเมื่อคุณใช้ data_enum ซึ่งจะจับคู่ค่าคุณสมบัตินี้กับสตริงที่มนุษย์สามารถอ่านได้ใน Enum อื่น โปรแกรมจำลองใช้แผนที่นี้เพื่อแปลค่าคุณสมบัติ ตัวอย่างเช่น:

[
    {
        "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" เพื่อให้โปรแกรมจำลองใช้ Enum ชื่อ VehicleGear เพื่อแปลค่าคุณสมบัติ เพิ่ม Enum อื่นชื่อ VehicleGear โดยมีค่าเป็นอาร์เรย์ของ ValueObject โดยที่ค่าคุณสมบัติ (พร้อมค่า) ควรแสดงเป็นชื่อ

รูปที่ 3 ค่าที่แสดงเป็น GEAR_PARK

บนแท็บ คุณสมบัติ VHAL สำหรับโปรแกรมจำลอง ชื่อจะถูกรีเฟรชเพื่อให้อ่าน CURRENT_GEAR ตามที่คาดไว้ ค่าคุณสมบัติของ 4 จะแสดงเป็น GEAR_PARK

ใช้ข้อมูลเมตา JSON เพื่อขยายคุณสมบัติ VHAL

หากต้องการใช้ข้อมูลเมตา JSON เพื่อขยายคุณสมบัติ VHAL ของคุณ ให้เรียกใช้ สคริปต์ Python นี้ (มีอยู่ในซอร์ส Android) เพื่อสร้างคุณสมบัติขยาย JSON จากข้อมูลใน AIDL

JSON ที่ได้จะรวมค่าที่ซ้ำซ้อน เช่น change_mode , access และ unit แม้ว่าข้อมูลนี้จะเป็นส่วนหนึ่งของคุณสมบัติ VHAL แต่ค่า JSON เหล่านี้จะไม่ส่งผลต่อสิ่งที่แสดงในหน้าต่างคุณสมบัติ VHAL ของโปรแกรมจำลอง

เพิ่มข้อมูลเมตา JSON ให้กับอิมเมจระบบ

โปรดทราบว่าชื่อไฟล์จะต้องลงท้ายด้วย -types-meta.json ถ้าไม่เช่นนั้น ไฟล์จะถูกละเว้น

เพิ่มเป้าหมายการสร้าง

เพิ่มไฟล์ -types-meta.json ลงใน PRODUCT_COPY_FILE ตัวอย่างเช่น:

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

โค้ดนี้จะคัดลอกไฟล์ลงใน out/target/product/{your_target_path}/ ซึ่งเป็นรากของเอาต์พุตเป้าหมายที่คุณสร้างขึ้น