เรามีการใช้งานอ้างอิง
สำหรับ VHAL ของ AIDL มีการใช้เทรดบริการหลัก
ที่
VehicleService.cpp
การใช้งานอินเทอร์เฟซ VHAL อยู่ที่
DefaultVehicleHal.cpp
การใช้งานอ้างอิงอิงตามสถาปัตยกรรม 2 ชั้น ในเลเยอร์บน
DefaultVehicleHal
จะใช้การติดตั้งอินเทอร์เฟซ AIDL ของ VHAL และมีตรรกะ VHAL
ทั่วไปสำหรับอุปกรณ์ฮาร์ดแวร์ทั้งหมด ในเลเยอร์ล่าง FakeVehicleHardware
,
จะใช้ส่วนติดต่อ IVehicleHardware
คลาสนี้จำลองตรรกะ VHAL
ของการโต้ตอบกับฮาร์ดแวร์จริงหรือบัสของยานพาหนะ และเป็นอุปกรณ์ที่เฉพาะเจาะจง ผู้ให้บริการ
จะปรับสถาปัตยกรรมเดียวกันนี้ นำDefaultVehicleHal
คลาสเดียวกันมาใช้ซ้ำ (ขยาย
เพื่อเขียนทับเมธอด) และระบุการติดตั้งใช้งาน IVehicleHardware
ของตนเองก็ได้
DefaultVehicleHal
มีตรรกะต่อไปนี้ ซึ่งถือว่าเป็นตรรกะทั่วไปและใช้ได้กับการติดตั้งใช้งาน VHAL
ทุกรูปแบบ
- ใช้งานอินเทอร์เฟซ
IVehicle
- ดำเนินการตรวจสอบอินพุตขั้นพื้นฐาน รวมถึงตรวจสอบรหัสที่ซ้ำกัน
- จัดสรรออบเจ็กต์ไคลเอ็นต์ (เช่น
GetValuesClient
) สำหรับการดำเนินการแต่ละอย่างสำหรับ ไคลเอ็นต์ Binder แต่ละรายการ และเพิ่มแต่ละรายการลงในพูลส่วนกลาง - จัดการตรรกะการเรียกกลับแบบไม่พร้อมกัน เช่น การเพิ่มคำขอที่รอดำเนินการลงในพูลคำขอที่รอดำเนินการ แก้ไขคำขอที่รอดำเนินการเมื่อเราได้รับผลลัพธ์ หรือแสดงข้อผิดพลาดเมื่อคำขอที่รอดำเนินการรายการใดรายการหนึ่งหมดเวลา
- จัดรูปแบบและยกเลิกการจัดรูปแบบ
LargeParcelable
(ดูParcelableUtils.h
) - จัดการการสมัครใช้บริการ (ดู
SubscriptionManager.h
) - ตรวจสอบสิทธิ์ (ดูฟังก์ชัน
checkReadPermission
และcheckWritePermission
) - เรียกใช้
IVehicleHardware.checkHealth
และส่งสัญญาณการเต้นของหัวใจเป็นระยะๆ (ดูฟังก์ชันcheckHealth
)
IVehicleHardware
เป็นอินเทอร์เฟซทั่วไปที่ใช้เพื่อแสดงการติดตั้งใช้งานเฉพาะฮาร์ดแวร์ของ VHAL
การใช้งานอ้างอิงสำหรับ IVehicleHardware
คือ
FakeVehicleHardware
ซึ่งใช้แผนที่ในหน่วยความจำเพื่อจัดเก็บค่าพร็อพเพอร์ตี้และไม่ได้
สื่อสารกับบัสของยานพาหนะจริง โดยมีจุดประสงค์เพื่อเรียกใช้ในโปรแกรมจำลองและไม่มี
การอ้างอิงเฉพาะฮาร์ดแวร์ การติดตั้งใช้งานของผู้ให้บริการต้องไม่ใช้แอตทริบิวต์นี้ตามที่เป็นอยู่ และต้องเพิ่มตรรกะเฉพาะบัสของยานพาหนะ
ตั้งแต่ Android 14 เป็นต้นไป FakeVehicleHardware
จะอ่านการกำหนดค่าพร็อพเพอร์ตี้ที่รองรับในขณะรันไทม์
ระหว่างการเริ่มต้นจากโฟลเดอร์ /vendor/etc/automotive/vhalconfig/
ของอุปกรณ์
ซึ่งมีไฟล์การกำหนดค่ารูปแบบ JSON ดูรูปแบบไฟล์การกำหนดค่าและเนื้อหาไฟล์การกำหนดค่าได้ใน
ไฟล์ README ของ VHAL อ้างอิง
FakeVehicleHardware
ยังรองรับการลบล้างไฟล์การกำหนดค่าสำหรับการทดสอบด้วย หากตั้งค่าพร็อพเพอร์ตี้ของระบบ persist.vendor.vhal_init_value_override
(ต้องตั้งค่าพร็อพเพอร์ตี้นี้ในเวลาบิลด์หรือในช่วงแรกๆ ของการบูตก่อนการเริ่มต้น VHAL) ระบบจะใช้ไฟล์การกำหนดค่าจากโฟลเดอร์ /vendor/etc/automotive/vhaloverride/
ในอุปกรณ์เพื่อลบล้างการกำหนดค่าที่มีอยู่ การติดตั้งใช้งานของผู้ให้บริการสามารถใช้วิธีการที่คล้ายกันเพื่อให้การกำหนดค่าพร็อพเพอร์ตี้ที่รองรับ VHAL-
ไม่ได้ฮาร์ดโค้ดและสามารถกำหนดแบบไดนามิกได้ในเวลาเริ่มต้น
รายการการกำหนดค่าพร็อพเพอร์ตี้ยานพาหนะต้องคงที่หลังจากเริ่มต้น VHAL
ตั้งแต่ Android 16 เป็นต้นไป GRPCVehicleHardware
จะมีการติดตั้งใช้งานIVehicleHardware
อ้างอิงอีกรายการ การติดตั้งใช้งานนี้
ถือว่ามีเซิร์ฟเวอร์แยกต่างหากที่ทำงานในเครื่องระยะไกลหรือ VM ซึ่งมีตรรกะการจัดการพร็อพเพอร์ตี้
VHAL ที่ทำงานในอุปกรณ์ AAOS จะทำหน้าที่เป็นพร็อกซีที่ส่งต่อคำขอไปยังเซิร์ฟเวอร์ระยะไกล ดูรายละเอียดเพิ่มเติมได้ที่ grpc