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

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

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

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

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