ขยายคำอธิบายพร็อพเพอร์ตี้ VHAL ในโปรแกรมจำลอง

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

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

ภาพรวม

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

สร้างข้อมูลเมตา JSON เพื่อขยายพร็อพเพอร์ตี้ VHAL

โปรแกรมจำลองจะค้นหาข้อมูลเมตาเพิ่มเติมในไฟล์ทั้งหมดที่ลงท้ายด้วย -types-meta.json ในเส้นทางอุปกรณ์เสมือน (AVD) ของ Android ไฟล์ 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 พร็อพเพอร์ตี้ยานพาหนะที่กำหนดโดยชื่อและค่า

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

แจกแจงข้อมูล

ในตัวอย่างด้านบน ค่าที่แสดงคือ 4 เมื่อตั้งค่าเฟืองเป็น

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

ตามที่ระบุไว้ ในแท็บพร็อพเพอร์ตี้ VHAL ในโปรแกรมจำลอง ชื่อจะปรากฏเป็น CURRENT_GEAR ซึ่งตรงข้ามกับโปรแกรมจำลองที่มีอยู่ซึ่งจะแสดงเป็น

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