เรามีการใช้งานอ้างอิง
    สำหรับ 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
