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