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

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