เรามีการติดตั้งใช้งานอ้างอิงสำหรับ 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และส่งสัญญาณ Heartbeat เป็นระยะๆ (ดูฟังก์ชัน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