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

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

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

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

DefaultVehicleHal มีตรรกะต่อไปนี้ ซึ่งถือเป็นตรรกะทั่วไปและสามารถนำไปใช้กับการใช้งาน VHAL ใดก็ได้

  • ใช้งานอินเทอร์เฟ IVehicle
  • ดำเนินการตรวจสอบอินพุตพื้นฐาน รวมถึงตรวจสอบ ID ที่ซ้ำกัน
  • จัดสรรอ็อบเจ็กต์ไคลเอ็นต์ (เช่น GetValuesClient ) สำหรับแต่ละการดำเนินการสำหรับไคลเอ็นต์ Binder แต่ละรายการ และเพิ่มแต่ละรายการลงในพูลส่วนกลาง
  • จัดการตรรกะการโทรกลับแบบอะซิงโครนัส เช่น การเพิ่มคำขอที่รอดำเนินการไปยังกลุ่มคำขอที่รอดำเนินการ แก้ไขคำขอที่รอดำเนินการเมื่อเราได้รับผลลัพธ์หรือส่งคืนข้อผิดพลาดเมื่อคำขอที่รอดำเนินการรายการใดรายการหนึ่งหมดเวลา
  • ทำให้เป็นอนุกรมและดีซีเรียลไลซ์ LargeParcelable (ดู ParcelableUtils.h )
  • จัดการการสมัครสมาชิก (ดู SubscriptionManager.h )
  • ตรวจสอบสิทธิ์ (ดูฟังก์ชัน checkReadPermission และ checkWritePermission )
  • เรียก IVehicleHardware.checkHealth เป็นระยะๆ และส่งสัญญาณการเต้นของหัวใจ (ดูฟังก์ชัน checkHealth )

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

ใน Android 14 FakeVehicleHardware อ่านการกำหนดค่าคุณสมบัติที่รองรับ ณ รันไทม์ระหว่างการเริ่มต้นจากโฟลเดอร์ /vendor/etc/automotive/vhalconfig/ ของอุปกรณ์ซึ่งมีไฟล์การกำหนดค่าสไตล์ JSON ดู ไฟล์อ้างอิง VHAL README สำหรับรูปแบบไฟล์กำหนดค่าและเนื้อหาไฟล์กำหนดค่า

FakeVehicleHardware ยังรองรับการแทนที่ไฟล์กำหนดค่าสำหรับการทดสอบอีกด้วย หากคุณสมบัติระบบ persist.vendor.vhal_init_value_override ถูกตั้งค่าไว้ ระบบจะใช้ไฟล์กำหนดค่าจากโฟลเดอร์ /vendor/etc/automotive/vhaloverride/ บนอุปกรณ์เพื่อแทนที่การกำหนดค่าที่มีอยู่ การใช้งานผู้จำหน่ายสามารถใช้แนวทางที่คล้ายกันเพื่อให้การกำหนดค่าคุณสมบัติที่รองรับ VHAL ไม่ได้เป็นฮาร์ดโค้ดและสามารถตัดสินใจแบบไดนามิกได้ในเวลาเริ่มต้น การกำหนดค่าคุณสมบัติของยานพาหนะจะต้องคงที่เมื่ออุปกรณ์เริ่มทำงาน