การใช้งานอ้างอิง

เรามีการใช้งานอ้างอิงสำหรับ VHAL ของ AIDL เทรดบริการหลักมีการใช้งานที่ VehicleService.cpp การติดตั้งใช้งานอินเทอร์เฟซ VHAL อยู่ที่ DefaultVehicleHal.cpp

การใช้งานอ้างอิงจะอิงตามสถาปัตยกรรม 2 ชั้น ในเลเยอร์บน DefaultVehicleHal จะใช้อินเทอร์เฟซ VHAL AIDL และให้ตรรกะ VHAL ทั่วไปสำหรับอุปกรณ์ฮาร์ดแวร์ทั้งหมด ในเลเยอร์ล่าง FakeVehicleHardware ใช้อินเทอร์เฟซ IVehicleHardware คลาสนี้จะจำลองตรรกะ VHAL ของการโต้ตอบกับฮาร์ดแวร์หรือบัสของยานพาหนะจริง และใช้ได้กับอุปกรณ์หนึ่งๆ โดยเฉพาะ ผู้ให้บริการสามารถปรับใช้สถาปัตยกรรมเดียวกันนี้ ใช้คลาส DefaultVehicleHal เดียวกันซ้ำ (ขยายคลาสเพื่อเขียนทับเมธอด) และให้บริการ IVehicleHardware ของตนเองได้ (ไม่บังคับ)

การใช้งาน VHAL อ้างอิง
รูปที่ 1 การใช้งาน VHAL อ้างอิง

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 ไม่ได้เป็นแบบฮาร์ดโค้ดและสามารถตัดสินใจแบบไดนามิกได้เมื่อเริ่มต้น การกำหนดค่าพร็อพเพอร์ตี้ยานพาหนะต้องเป็นแบบคงที่เมื่ออุปกรณ์เริ่มทำงาน