การกําหนดค่าพร็อพเพอร์ตี้

พร็อพเพอร์ตี้ที่รองรับแต่ละรายการจะระบุโดยการกำหนดค่าพร็อพเพอร์ตี้ที่กำหนดผ่านโครงสร้าง VehiclePropConfig และมีช่องต่อไปนี้

ช่อง คำอธิบาย
prop

รหัสพร็อพเพอร์ตี้ ซึ่งต้องเป็นพร็อพเพอร์ตี้ของระบบที่กำหนดไว้รายการใดรายการหนึ่งจาก VehicleProperty.aidl หรือพร็อพเพอร์ตี้ของผู้ให้บริการ รหัสพร็อพเพอร์ตี้สร้างขึ้นโดยใช้บิตหรือฟิลด์ต่อไปนี้ (จากขวาไปซ้าย):

ตัวอย่างเช่น
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)

access
  • โหมดการเข้าถึงสำหรับพร็อพเพอร์ตี้ ต้องเป็น READ, WRITE หรือ READ_WRITE
  • สำหรับพร็อพเพอร์ตี้ของระบบ ค่านี้ต้องเป็นโหมดการเข้าถึงที่กำหนดไว้ซึ่งระบุไว้ใน VehicleProperty.aidl
  • สําหรับพร็อพเพอร์ตี้ที่มีสิทธิ์เข้าถึงต่อพื้นที่ นี่คือเซ็ตย่อยสูงสุดของสิทธิ์เข้าถึงต่อพื้นที่ เช่น หากพร็อพเพอร์ตี้มี 2 พื้นที่ที่มีสิทธิ์เข้าถึงเป็น READ และ READ_WRITE คุณควรตั้งค่านี้เป็น READ
changeMode
  • เปลี่ยนโหมดสำหรับพร็อพเพอร์ตี้ ต้องเป็น STATIC, ON_CHANGE หรือ CONTINUOUS STATIC หมายความว่าค่าพร็อพเพอร์ตี้จะไม่เปลี่ยนแปลงหลังจากบูตระบบ ON_CHANGE หมายความว่า VHAL ต้องรายงานเมื่อค่ามีการเปลี่ยนแปลง CONTINUOUS หมายความว่าค่าพร็อพเพอร์ตี้ เปลี่ยนแปลงอย่างต่อเนื่องและ VHAL ต้องรายงานตามอัตราการสุ่มตัวอย่างการสมัครใช้บริการ
  • สำหรับพร็อพเพอร์ตี้ของระบบ ค่านี้ต้องเท่ากับโหมดการเปลี่ยนแปลงที่ระบุไว้ใน VehicleProperty.aidl
configArray อาร์เรย์ที่ไม่บังคับซึ่งมีการกำหนดค่าเฉพาะพร็อพเพอร์ตี้ เว้นว่างไว้ได้ สําหรับพร็อพเพอร์ตี้ระบบบางอย่าง เช่น GEAR_SELECTION อาร์เรย์การกําหนดค่าจะมีความหมายพิเศษและต้องระบุ
configString สตริงที่ไม่บังคับซึ่งมีการกำหนดค่าเฉพาะพร็อพเพอร์ตี้ เว้นว่างไว้ได้
minSampleRate และ maxSampleRate อัตราการสุ่มตัวอย่างขั้นต่ำและสูงสุดที่รองรับสำหรับพร็อพเพอร์ตี้แบบต่อเนื่อง (ในหน่วยเฮิรตซ์) ไม่ใช้หากพร็อพเพอร์ตี้ ไม่ต่อเนื่อง minSampleRate และ maxSampleRate ต้องทำได้โดยการติดตั้งใช้งาน VHAL ไม่จำเป็นต้องรองรับอัตราการสุ่มตัวอย่างทั้งหมดระหว่างค่าต่ำสุดและค่าสูงสุด

ประเภทพร็อพเพอร์ตี้

กำหนดเป็น Enum ใน VehiclePropertyType.aidl ประเภทพร็อพเพอร์ตี้ที่รองรับแสดงอยู่ในตารางต่อไปนี้

ประเภทพร็อพเพอร์ตี้ ค่านิยม คำอธิบาย
STRING 0x00100000 พร็อพเพอร์ตี้สตริง ใช้ฟิลด์ stringValue ในค่าพร็อพเพอร์ตี้ยานพาหนะ
BOOLEAN 0x00200000 พร็อพเพอร์ตี้ Boolean ใช้องค์ประกอบแรกในช่อง int32Values ในค่ายานพาหนะ 0 หมายถึง false, None 0 หมายถึง true
INT32 0x00400000 พร็อพเพอร์ตี้ Integer ใช้องค์ประกอบแรกในช่อง int32Values ในค่ายานพาหนะ
INT32_VEC 0x00410000 พร็อพเพอร์ตี้ Integer[] ใช้องค์ประกอบในฟิลด์ int32Values ใน ค่าพร็อพเพอร์ตี้ยานพาหนะ
INT64 0x00500000 พร็อพเพอร์ตี้ยาว ใช้องค์ประกอบแรกในฟิลด์ int64Values ในค่าพร็อพเพอร์ตี้ยานพาหนะ
INT64_VEC 0x00510000 พร็อพเพอร์ตี้ Long[] ใช้องค์ประกอบในช่อง int64Values ในค่าพร็อพเพอร์ตี้ยานพาหนะ
FLOAT 0x00600000 พร็อพเพอร์ตี้ Float ใช้องค์ประกอบแรกในช่อง floatValues ในค่ายานพาหนะ
FLOAT_VEC 0x00610000 พร็อพเพอร์ตี้ Float[] ใช้องค์ประกอบในช่อง floatValues ในค่าพร็อพเพอร์ตี้ยานพาหนะ
BYTES 0x00700000 พร็อพเพอร์ตี้ byte[] ใช้องค์ประกอบในช่อง byteValues ในค่าพร็อพเพอร์ตี้ยานพาหนะ
MIXED 0x00e00000 ที่พักประเภทผสม ชุดค่าผสมของประเภทสเกลาร์หรือเวกเตอร์ ต้องระบุรูปแบบที่แน่นอนในอาร์เรย์การกำหนดค่าในการกำหนดค่าพร็อพเพอร์ตี้

สำหรับพร็อพเพอร์ตี้ประเภท MIXED ของผู้ให้บริการ คุณต้องจัดรูปแบบ configArray ในโครงสร้างนี้

  • configArray[0], 1 แสดงว่าพร็อพเพอร์ตี้มีค่า String
  • configArray[1], 1 แสดงว่าพร็อพเพอร์ตี้มีค่า Boolean
  • configArray[2], 1 หมายความว่าพร็อพเพอร์ตี้มีค่า Integer
  • configArray[3] ตัวเลขแสดงขนาดของ Integer[] ในพร็อพเพอร์ตี้
  • configArray[4], 1 แสดงว่าพร็อพเพอร์ตี้มีค่า Long
  • configArray[5] ตัวเลขแสดงขนาดของ Long[] ในพร็อพเพอร์ตี้
  • configArray[6], 1 แสดงว่าพร็อพเพอร์ตี้มีค่า Float
  • configArray[7] ตัวเลขแสดงขนาดของ Float[] ในพร็อพเพอร์ตี้
  • configArray[8] ตัวเลขจะระบุขนาดของ byte[] ในพร็อพเพอร์ตี้

เช่น configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} แสดงว่าพร็อพเพอร์ตี้มีค่า String ค่า Boolean ค่า Integer และอาร์เรย์ที่มีจำนวนเต็ม 3 รายการ

การกำหนดค่ารหัสพื้นที่

การกำหนดค่าพร็อพเพอร์ตี้แต่ละรายการอาจมีรายการการกำหนดค่ารหัสพื้นที่ด้วย รายการนี้ไม่บังคับสำหรับพร็อพเพอร์ตี้ทั่วโลก และจำเป็นสำหรับพร็อพเพอร์ตี้ที่แบ่งเขต (พร็อพเพอร์ตี้ที่มีพื้นที่ที่รองรับหลายแห่ง) การกำหนดค่ารหัสพื้นที่แต่ละรายการมีช่องต่อไปนี้

ช่อง คำอธิบาย
areaId รหัสของพื้นที่นี้ ดูรหัสพื้นที่
minInt32Value และ maxInt32Value
  • ค่าต่ำสุดและสูงสุดที่ไม่บังคับสำหรับพร็อพเพอร์ตี้ประเภท INT32 ในเวลาบูต ต้องเป็น 0 สำหรับประเภทอื่นๆ ทั้งหมด ระบบจะไม่สนใจหากทั้งคู่เป็น 0
  • สําหรับพร็อพเพอร์ตี้ส่วนกลาง หากจําเป็นต้องกําหนดค่าต่ำสุดและสูงสุด คุณต้องใช้การกําหนดค่าพื้นที่ 1 รายการ ที่มีรหัสพื้นที่ 0
  • ค่านี้เป็นค่าคงที่และจะไม่เปลี่ยนแปลงแม้ว่าค่าต่ำสุดหรือสูงสุดจะเปลี่ยนแปลง ในขณะรันไทม์ก็ตาม ใช้ IVehicle#getMinMaxSupportedValue สำหรับค่าต่ำสุดหรือสูงสุดแบบไดนามิก
minInt64Value และ maxInt64Value
  • ค่าต่ำสุดและสูงสุดที่ไม่บังคับสำหรับพร็อพเพอร์ตี้ประเภท INT64 ในเวลาบูต ต้องเป็น 0 สำหรับประเภทอื่นๆ ทั้งหมด ระบบจะไม่สนใจหากทั้งคู่เป็น 0
  • สําหรับพร็อพเพอร์ตี้ส่วนกลาง หากจําเป็นต้องกําหนดค่าต่ำสุดและสูงสุด คุณต้องใช้การกําหนดค่าพื้นที่ 1 รายการ ที่มีรหัสพื้นที่ 0
  • ค่านี้เป็นค่าคงที่และจะไม่เปลี่ยนแปลงแม้ว่าค่าต่ำสุดหรือสูงสุดจะเปลี่ยนแปลง ในขณะรันไทม์ก็ตาม ใช้ IVehicle#getMinMaxSupportedValue สำหรับค่าต่ำสุดหรือสูงสุดแบบไดนามิก
minFloatValue และ maxFloatValue
  • ค่าต่ำสุดและสูงสุดที่ไม่บังคับสำหรับพร็อพเพอร์ตี้ประเภท Float ในเวลาบูต ต้องเป็น 0 สำหรับประเภทอื่นๆ ทั้งหมด ระบบจะไม่สนใจหากทั้งคู่เป็น 0.0
  • สําหรับพร็อพเพอร์ตี้ส่วนกลาง หากจําเป็นต้องกําหนดค่าต่ำสุดและสูงสุด คุณต้องใช้การกําหนดค่าพื้นที่ 1 รายการ ที่มีรหัสพื้นที่ 0
  • ค่านี้เป็นค่าคงที่และจะไม่เปลี่ยนแปลงแม้ว่าค่าต่ำสุดหรือสูงสุดจะเปลี่ยนแปลง ในขณะรันไทม์ก็ตาม ใช้ IVehicle#getMinMaxSupportedValue สำหรับค่าต่ำสุดหรือสูงสุดแบบไดนามิก
(ใหม่ใน Android 14)
supportedEnumValues
  • รายการค่าที่รองรับที่ไม่บังคับในเวลาบูต หากกำหนดพร็อพเพอร์ตี้เป็นพร็อพเพอร์ตี้ประเภท Enum หากไม่ได้ระบุ (ว่างเปล่า) หรือก่อน Android 14 ระบบจะถือว่ารองรับค่า enum ทั้งหมด
  • สําหรับพร็อพเพอร์ตี้ส่วนกลาง หากจําเป็นต้องกําหนดค่าแจกแจงที่รองรับ คุณต้องใช้การกําหนดค่าพื้นที่ 1 รายการที่มีรหัสพื้นที่ 0
  • ค่านี้เป็นค่าคงที่และจะไม่เปลี่ยนแปลงแม้ว่าค่าที่รองรับจะเปลี่ยนแปลง ในรันไทม์ก็ตาม ใช้ IVehicle#getSupportedValuesLists สำหรับค่าที่รองรับแบบไดนามิก
  • โดยจะมีผลกับพร็อพเพอร์ตี้ประเภท Enum เท่านั้น สำหรับประเภทอื่นๆ ช่องนี้ต้องว่างเปล่า หากต้องการแสดงค่าที่รองรับสำหรับประเภทอื่นๆ ที่ไม่ใช่ประเภท Enum ให้ใช้ IVehicle#getSupportedValuesLists
(ใหม่ใน Android 15)
supportVariableUpdateRate
  • รองรับอัตราการอัปเดตตัวแปรหรือไม่ ซึ่งใช้ได้กับพร็อพเพอร์ตี้แบบต่อเนื่องเท่านั้น
  • หากเป็น true แอปจะเปิดใช้อัตราการอัปเดตตัวแปรสำหรับการสมัครใช้บริการเพื่อ รับเหตุการณ์การอัปเดตพร็อพเพอร์ตี้เมื่อค่าพร็อพเพอร์ตี้เปลี่ยนแปลงเท่านั้น (ซึ่งถือว่าพร็อพเพอร์ตี้ต่อเนื่องเป็นพร็อพเพอร์ตี้ที่เปลี่ยนแปลง)
  • หากผู้ติดตามทั้งหมดของพร็อพเพอร์ตี้เปิดใช้อัตราการอัปเดตแบบแปรผัน คำขอการติดตาม ไปยัง VHAL จะเปิดใช้อัตราการอัปเดตแบบแปรผันสำหรับพร็อพเพอร์ตี้ และ VHAL ต้อง ส่งเหตุการณ์การอัปเดตพร็อพเพอร์ตี้เมื่อค่าพร็อพเพอร์ตี้มีการเปลี่ยนแปลงเท่านั้น
  • หากผู้สมัครใช้บริการขออัตราการอัปเดตคงที่ คำขอสมัครใช้บริการ VHAL จะปิดใช้อัตราการอัปเดตแบบแปรผันสำหรับพร็อพเพอร์ตี้ และ AAOS จะกรอง เหตุการณ์ที่ซ้ำกันสำหรับไคลเอ็นต์ที่ขออัตราการอัปเดตแบบแปรผัน
  • ขอแนะนำอย่างยิ่งให้รองรับอัตราการอัปเดตตัวแปรสำหรับพร็อพเพอร์ตี้ต่อเนื่องทั้งหมดที่ไม่ใช่การตรวจสอบสถานะ เพื่อประสิทธิภาพที่ดีขึ้น เว้นแต่ข้อมูลพร็อพเพอร์ตี้จะมีขนาดใหญ่ (เช่น อาร์เรย์ไบต์ขนาด 1k) และอาจใช้หน่วยความจำจำนวนมากสำหรับการแคช
(ใหม่ใน Android 16)
hasSupportedValueInfo
  • หากไม่ใช่ null จะแสดงว่าพร็อพเพอร์ตี้นี้ระบุค่าต่ำสุดหรือสูงสุด ที่รองรับหรือรายการค่าที่รองรับ
  • ฟิลด์นี้ควบคุมว่า API ค่าที่รองรับแบบไดนามิกต่อไปนี้ getMinMaxSupportedValue, getSupportedValuesLists subscribeSupportedValueChange, unsubscribeSupportedValueChange ได้รับการรองรับสำหรับรหัสพร็อพเพอร์ตี้และรหัสพื้นที่นี้หรือไม่
  • หากไม่ได้null VHAL ต้องใช้ API เหล่านี้สำหรับรหัสพร็อพเพอร์ตี้และรหัสพื้นที่นี้
  • หาก null หรือใน Android 15 หรือต่ำกว่า ระบบจะไม่รองรับค่าที่รองรับแบบไดนามิก สำหรับรหัสพร็อพเพอร์ตี้และรหัสพื้นที่นี้ ไคลเอ็นต์ต้องใช้ ข้อมูลค่าคงที่ที่รองรับซึ่งระบุไว้ในการกำหนดค่าพร็อพเพอร์ตี้ยานพาหนะ

ประเภทพื้นที่

กำหนดเป็น Enum ใน VehicleArea.aidl ประเภทพื้นที่ที่รองรับแสดงอยู่ด้านล่าง

ประเภทพื้นที่ ค่านิยม คำอธิบาย
ทั่วโลก 0x01000000 พร็อพเพอร์ตี้นี้เป็นพร็อพเพอร์ตี้ส่วนกลางและไม่มีหลายพื้นที่
หน้าต่าง 0x03000000 พื้นที่ตามหน้าต่าง ใช้ VehicleAreaWindow enum
Mirror 0x04000000 พื้นที่ตามกระจก ใช้ VehicleAreaMirror enum
SEAT 0x05000000 พื้นที่ตามที่นั่ง ใช้ VehicleAreaSeat enum
DOOR 0x06000000 พื้นที่ตามประตู ใช้ VehicleAreaDoor enum
ล้อ 0x07000000 พื้นที่ตามล้อ ใช้ VehicleAreaWheel enum

พร็อพเพอร์ตี้ที่แบ่งเขตแต่ละรายการต้องใช้ประเภทพื้นที่ที่กำหนดไว้ล่วงหน้า ประเภทพื้นที่แต่ละประเภทมีชุดบิตแฟล็ก ที่กำหนดไว้ใน Enum สำหรับประเภทพื้นที่ ตัวอย่างเช่น พื้นที่ SEAT จะกำหนด VehicleAreaSeat enums ดังนี้

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

รหัสพื้นที่

พร็อพเพอร์ตี้ที่แบ่งเขตจะระบุผ่านรหัสพื้นที่ ที่พักแต่ละแห่งที่แบ่งเขตอาจรองรับรหัสพื้นที่อย่างน้อย 1 รายการ รหัสพื้นที่ประกอบด้วยการตั้งค่าสถานะอย่างน้อย 1 รายการจาก Enum ที่เกี่ยวข้อง เช่น พร็อพเพอร์ตี้ที่ใช้ VehicleAreaSeat อาจใช้รหัสพื้นที่ต่อไปนี้

รายการ คำอธิบาย
ROW_1_LEFT | ROW_1_RIGHT รหัสพื้นที่ใช้ได้กับทั้งที่นั่งด้านหน้า
ROW_2_LEFT โดยจะมีผลเฉพาะที่นั่งด้านหลังซ้าย
ROW_2_RIGHT โดยจะมีผลกับที่นั่งด้านหลังขวาเท่านั้น

ดูข้อมูลเพิ่มเติมได้ที่ HVAC