AIDL VHAL ได้รับการกำหนดไว้ใน
android.hardware.automotive.vehicle namespace
อินเทอร์เฟซ VHAL กำหนดไว้ที่
IVehicle.aidl
โดยจะต้องใช้ทุกวิธีการ เว้นแต่จะระบุไว้เป็นอย่างอื่น
วิธีการ | |
---|---|
VehiclePropConfigs getAllPropConfigs()
|
|
VehiclePropConfigs getPropConfigs(in int[] props)
|
|
void getValues(IVehicleCallback callback, in GetValueRequests requests)
GetValueRequest รายการ ผลลัพธ์ที่ได้จะส่งผ่านทาง
onGetValues วิธีในการติดต่อกลับ |
|
void setValues(IVehicleCallback callback, in SetValueRequests requests)
SetValueRequest แบบไม่พร้อมกัน ผลลัพธ์ที่ได้จะส่งผ่านทาง
onSetValues วิธีในการติดต่อกลับ |
|
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)
|
Callback จะกำหนดที่
IVehicleCallback.aidl
และมีวิธีการเหล่านี้
วิธีการ | |
---|---|
oneway void onGetValues(in GetValueResults responses)
getValues เพื่อให้ได้ผลลัพธ์ค่า โทรหาแล้ว
เมื่อค่าที่จะดึงข้อมูลพร้อม |
|
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 |
โครงสร้างข้อมูลที่มีค่าพร็อพเพอร์ตี้จริง ขึ้นอยู่กับประเภทพร็อพเพอร์ตี้
ช่องอื่นๆ ภายในช่องนี้ใช้ในการจัดเก็บค่าจริง ตัวอย่างเช่น แท็ก
องค์ประกอบใน value.int32Values ใช้สำหรับพร็อพเพอร์ตี้ประเภท Int32 โปรดดูรายละเอียดที่หัวข้อ
พร็อพเพอร์ตี้
การกำหนดค่า |
getValues และ setValues แบบอะซิงโครนัส
การดำเนินการ getValues
และ setValues
จะดำเนินการไม่พร้อมกัน
ซึ่งหมายความว่าฟังก์ชันอาจแสดงผลก่อนที่การดำเนินการ get หรือ set จริงจะเสร็จสมบูรณ์
ผลการดำเนินการ (เช่น ค่าพร็อพเพอร์ตี้สำหรับ getValues
และความสำเร็จหรือ
สถานะข้อผิดพลาดของ setValues
) จะส่งผ่าน Callback ที่ส่งผ่านเป็นอาร์กิวเมนต์
การใช้งานต้องไม่บล็อกผลลัพธ์ในเธรด Binder ที่จัดการคำขอ เราขอแนะนำให้คุณจัดเก็บคำขอไว้ในคิวคำขอและใช้ชุดข้อความของเครื่องจัดการแยกต่างหากแทน จัดการคำขอต่างๆ แบบไม่พร้อมกัน โปรดดู การใช้ข้อมูลอ้างอิงสำหรับ รายละเอียด
รูปที่ 1 กระบวนการแบบไม่พร้อมกัน
แพ็กเกจขนาดใหญ่
โครงสร้างทั้งหมดที่ชื่อ XXXs
เช่น VehiclePropConfigs
จะเรียก SetValueRequests
และ VehiclePropValues
LargeParcelable
(หรือ StableLargeParcelable
) แต่ละแชแนลแสดงรายชื่อ
ค่าที่ใช้ในการส่งข้อมูลขนาดใหญ่ที่อาจเกินข้อจำกัดของ Binder (4 KB ในไฟล์
การใช้ไลบรารี 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
ไม่ได้เป็นค่าว่าง จะมีไฟล์หน่วยความจำที่แชร์ซึ่งจัดเก็บ โครงสร้างแบบอนุกรมของVehiclePropConfigs
โครงสร้างใช้writeToParcel
เพื่อเรียงลำดับพัสดุ
ในฐานะไคลเอ็นต์ Java สำหรับ VHAL บริการรถยนต์จะจัดการการทำให้เป็นอนุกรมและดีซีเรียลไลซ์สำหรับ
LargeParcelable
สำหรับการใช้งาน VHAL และ Native Client
LargeParcelable
ควรทำเป็นอนุกรมและดีซีเรียลไลซ์ด้วยค่า
LargeParcelable
หรือคลาส Wrapper ที่มีประโยชน์สำหรับไลบรารีใน
ParcelableUtils.h
ตัวอย่างเช่น คำขอแยกวิเคราะห์ของไคลเอ็นต์เนทีฟสำหรับ getValues
ที่ได้รับจาก Binder
ดังนี้
// 'requests' are from the binder. GetValueRequests requests; expected<LargeParcelableBase::BorrowedOwnedObject, ScopedAStatus> deserializedResults = fromStableLargeParcelable(requests); if (deserializedResults.ok()) { const std::vector & getValueRequests = deserializedResults.value().getObject()->payloads; // Use the getValueRequests. } else { // handle error. }
ตัวอย่างการใช้งาน VHAL ที่ส่งผลลัพธ์สำหรับ getValues
ผ่านแฟ้ม
แสดงอยู่ด้านล่าง
std::vectorresults = getResults(); GetValueResults parcelableResults; ScopedAStatus status = vectorToStableLargeParcelable(std::move(results), &parcelableResults); if (status.isOk()) { // Send parcelableResults through callback. } else { // Handle error. }