VHAL ของ AIDL จะกำหนดไว้ใน
android.hardware.automotive.vehicle namespace
อินเทอร์เฟซ VHAL ได้รับการกําหนดไว้ที่
IVehicle.aidl
ต้องใช้วิธีการทั้งหมด เว้นแต่จะระบุไว้เป็นอย่างอื่น
วิธีการ | |
---|---|
VehiclePropConfigs getAllPropConfigs()
|
|
VehiclePropConfigs getPropConfigs(in int[] props)
|
|
void getValues(IVehicleCallback callback, in GetValueRequests requests)
GetValueRequest แบบเป็นกลุ่มแบบไม่พร้อมกัน ระบบจะแสดงผลลัพธ์ผ่านเมธอด onGetValues ของ Callback |
|
void setValues(IVehicleCallback callback, in SetValueRequests requests)
SetValueRequest แบบเป็นกลุ่มแบบไม่พร้อมกัน ระบบจะแสดงผลลัพธ์ผ่านเมธอด onSetValues ของ Callback |
|
void subscribe(in IVehicleCallback callback, in SubscribeOptions[] options, int maxSharedMemoryFileCount)
maxSharedMemoryFileCount |
|
void unsubscribe(in IVehicleCallback callback, in int[] propIds)
|
|
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId)
|
มีการกําหนดการเรียกกลับที่
IVehicleCallback.aidl
และมีวิธีการเหล่านี้
วิธีการ | |
---|---|
oneway void onGetValues(in GetValueResults responses)
getValues เพื่อแสดงผลลัพธ์ของ get value เรียกใช้เมื่อค่าที่จะดึงข้อมูลบางส่วนพร้อมแล้ว |
|
oneway void onSetValues(in SetValueResults responses)
setValues เพื่อแสดงผลลัพธ์ตามค่าที่ตั้งไว้ เรียกใช้เมื่อ VHAL จัดการคําขอชุดพร็อพเพอร์ตี้บางส่วนเสร็จแล้ว |
|
oneway void onPropertyEvent(in VehiclePropValues propValues, int sharedMemoryFileCount)
CONTINUOUS เหตุการณ์พร็อพเพอร์ตี้จะเกิดขึ้นตามอัตราการสุ่มตัวอย่างการสมัครรับข้อมูลใน Hz หรือความถี่ของข้อความบัสยานพาหนะ เหตุการณ์พร็อพเพอร์ตี้อาจเกิดขึ้นได้หากสถานะของพร็อพเพอร์ตี้มีการเปลี่ยนแปลง เช่น จากไม่พร้อมใช้งานเป็นพร้อมใช้งานON_CHANGE เหตุการณ์พร็อพเพอร์ตี้จะเกิดขึ้นเมื่อค่าของพร็อพเพอร์ตี้หรือสถานะของพร็อพเพอร์ตี้มีการเปลี่ยนแปลงSharedMemoryFileCount เป็น 0 เสมอ |
|
oneway void onPropertySetError(in VehiclePropErrors errors)
onSetValues ที่มีผลลัพธ์ข้อผิดพลาดแทน |
ดูข้อมูลเพิ่มเติมได้ที่ IVehicle.aidl และ IVehicleCallback.aidl
การใช้งาน VHAL ได้รับการตรวจสอบโดย VHAL VTS ที่ VtsHalAutomotiveVehicle_TargetTest.cpp การทดสอบจะยืนยันว่ามีการใช้เมธอดพื้นฐานอย่างถูกต้องและการกำหนดค่าพร็อพเพอร์ตี้ที่รองรับถูกต้อง
ค่าพร็อพเพอร์ตี้ยานพาหนะ
ใช้โครงสร้าง VehiclePropValue
เพื่ออธิบายค่าของพร็อพเพอร์ตี้แต่ละรายการ ซึ่งมีช่องต่อไปนี้
ช่อง | คำอธิบาย |
---|---|
timestamp
| การประทับเวลาที่แสดงเวลาที่เกิดเหตุการณ์และซิงค์กับนาฬิกา SystemClock.elapsedRealtimeNano() |
prop |
รหัสพร็อพเพอร์ตี้ของค่านี้ |
areaid |
รหัสพื้นที่สำหรับค่านี้ พื้นที่ต้องเป็นหนึ่งในพื้นที่ที่รองรับซึ่งแสดงในการกําหนดค่ารหัสพื้นที่ หรือ 0 สําหรับพร็อพเพอร์ตี้ทั่วโลก |
value |
โครงสร้างข้อมูลที่มีค่าพร็อพเพอร์ตี้จริง ระบบจะใช้ฟิลด์อย่างน้อย 1 ช่องในช่องนี้เพื่อจัดเก็บค่าจริงตามประเภทพร็อพเพอร์ตี้ เช่น องค์ประกอบแรกใน value.int32Values ใช้สำหรับพร็อพเพอร์ตี้ประเภท Int32 โปรดดูรายละเอียดที่หัวข้อการกําหนดค่าพร็อพเพอร์ตี้ |
getValues และ setValues แบบอะซิงโครนัส
การดำเนินการ getValues
และ setValues
จะดำเนินการแบบไม่พร้อมกัน ซึ่งหมายความว่าฟังก์ชันอาจแสดงผลก่อนการดำเนินการ get หรือ set จริงเสร็จสมบูรณ์
ระบบจะส่งผลลัพธ์การดำเนินการ (เช่น ค่าพร็อพเพอร์ตี้สำหรับ getValues
และสถานะสำเร็จหรือข้อผิดพลาดสำหรับ setValues
) ผ่านคอลแบ็กที่ส่งเป็นอาร์กิวเมนต์
การติดตั้งใช้งานต้องไม่บล็อกผลลัพธ์ในเธรด Binder ที่จัดการคําขอ เราขอแนะนำให้คุณจัดเก็บคําขอไว้ในคิวคําขอ และใช้เธรดแฮนเดิลแยกต่างหากเพื่อจัดการคําขอแบบไม่พร้อมกัน ดูรายละเอียดได้ในการใช้งานอ้างอิง
รูปที่ 1 กระบวนการแบบอะซิงโครนัส
ไฟล์พาร์เซลขนาดใหญ่
โครงสร้างทั้งหมดที่มีชื่อว่า XXXs
เช่น VehiclePropConfigs
, SetValueRequests
และ VehiclePropValues
จะเรียกว่า LargeParcelable
(หรือ StableLargeParcelable
) โดยแต่ละโครงสร้างจะแสดงรายการค่าที่ใช้ส่งข้อมูลขนาดใหญ่ที่อาจเกินขีดจํากัดของ Binder (4KB ในการใช้งานไลบรารี LargeParcelable
) ข้ามขอบเขต Binder แต่ละรายการมีคำจำกัดความโครงสร้างที่คล้ายกันซึ่งมีช่องต่อไปนี้
คำแนะนำ | คำอธิบาย |
---|---|
payloads |
รายการค่าเมื่อขนาดค่าพอดีกับข้อจํากัดของหน่วยความจําของ Binder หรือรายการว่าง |
sharedMemoryFd |
ตัวระบุไฟล์ที่ลบได้ซึ่งชี้ไปยังไฟล์หน่วยความจําที่แชร์ซึ่งจัดเก็บเพย์โหลดที่แปลงเป็นอนุกรมหากรายการค่ามีขนาดใหญ่เกินไป |
เช่น VehiclePropConfigs
มีคำจำกัดความดังนี้
parcelable VehiclePropConfigs {
// The list of vehicle property configs if they fit the binder memory
// limitation.
VehiclePropConfig[] payloads;
// Shared memory file to store configs if they exceed binder memory
// limitation. Created by VHAL, readable only at client. Client could keep
// the fd opened or keep the FD mapped to access configs.
@nullable ParcelFileDescriptor sharedMemoryFd;
}
VehiclePropConfigs
มีเพย์โหลดที่ไม่ว่างเปล่าหรือ sharedMemoryFd
ที่ไม่เป็นค่าว่าง
- หาก
payloads
ไม่ว่างเปล่า ระบบจะจัดเก็บรายการข้อมูลจริง ซึ่งเป็นการกำหนดค่าพร็อพเพอร์ตี้ - หาก
sharedMemoryFd
ไม่ใช่ค่า Null แสดงว่ามีไฟล์หน่วยความจำที่ใช้ร่วมกัน ซึ่งจัดเก็บโครงสร้างที่แปลงเป็นอนุกรมของVehiclePropConfigs
โครงสร้างนี้ใช้ฟังก์ชันwriteToParcel
เพื่อจัดรูปแบบพัสดุไปรษณีย์
ในฐานะไคลเอ็นต์ Java สําหรับ VHAL บริการรถยนต์จะจัดการการแปลงเป็นอนุกรมและการนำข้อมูลออกจากอนุกรมสําหรับ LargeParcelable
สําหรับการติดตั้งใช้งาน VHAL และไคลเอ็นต์แบบเนทีฟ LargeParcelable
ควรได้รับการจัดรูปแบบเป็นอนุกรมและจัดรูปแบบเป็นอนุกรมอีกครั้งด้วยไลบรารี LargeParcelable
หรือคลาส Wrapper ที่มีประโยชน์สําหรับไลบรารีใน ParcelableUtils.h
ตัวอย่างเช่น คำขอแยกวิเคราะห์ getValues
ของลูกค้าเนทีฟที่ได้รับจาก Binder มีดังนี้
// 'requests' are from the binder.
GetValueRequests requests;
expected
ตัวอย่างการใช้งาน VHAL ที่ส่งผลลัพธ์สำหรับ getValues
ผ่าน Binder แสดงอยู่ด้านล่าง
std::vector