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