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