ขยายคำอธิบายพร็อพเพอร์ตี้ 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

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

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

ValueObject

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 ค่าของเกียร์เข้าเกียร์จอดรถคือ 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}/ ซึ่งเป็นรูทของเอาต์พุตเป้าหมายที่สร้างขึ้น