เรามีการใช้งานอ้างอิงสำหรับ VHAL ของ AIDL เทรดบริการหลักมีการใช้งานที่ VehicleService.cpp
การติดตั้งใช้งานอินเทอร์เฟซ VHAL อยู่ที่ DefaultVehicleHal.cpp
การใช้งานอ้างอิงจะอิงตามสถาปัตยกรรม 2 ชั้น ในเลเยอร์บน DefaultVehicleHal
จะใช้อินเทอร์เฟซ VHAL AIDL และให้ตรรกะ 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
ระบบจะใช้ไฟล์การกําหนดค่าจากโฟลเดอร์ /vendor/etc/automotive/vhaloverride/
ในอุปกรณ์เพื่อลบล้างการกําหนดค่าที่มีอยู่ การใช้งานของผู้ให้บริการอาจใช้แนวทางที่คล้ายกันเพื่อให้การกำหนดค่าพร็อพเพอร์ตี้ที่รองรับ VHAL ไม่ได้เป็นแบบฮาร์ดโค้ดและสามารถตัดสินใจแบบไดนามิกได้เมื่อเริ่มต้น
การกำหนดค่าพร็อพเพอร์ตี้ยานพาหนะต้องเป็นแบบคงที่เมื่ออุปกรณ์เริ่มทำงาน