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

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

ตั้งแต่ Android 16 เป็นต้นไป GRPCVehicleHardware มีการใช้งาน IVehicleHardware อ้างอิงอีกรายการ การใช้งานนี้ถือว่ามีเซิร์ฟเวอร์แยกต่างหากที่ทำงานบนเครื่องหรือ VM ระยะไกลซึ่งมีตรรกะการจัดการพร็อพเพอร์ตี้ VHAL ที่ทำงานในอุปกรณ์ AAOS จะทำหน้าที่เป็นพร็อกซีที่ส่งต่อคำขอไปยังเซิร์ฟเวอร์ระยะไกล ดูรายละเอียดเพิ่มเติมได้ที่ grpc