คุณสมบัติผู้ขาย
เพื่อรองรับความต้องการเฉพาะของคู่ค้า VHAL อนุญาตให้คุณสมบัติของผู้ขายที่เข้าถึงได้ผ่าน API ของระบบเท่านั้น ใช้แนวทางต่อไปนี้เมื่อทำงานกับคุณสมบัติผู้จัดจำหน่าย:
- พยายามใช้คุณสมบัติของระบบก่อนเสมอ คุณสมบัติของผู้จำหน่ายควรใช้เป็นทางเลือกสุดท้าย เมื่อไม่มีคุณสมบัติของระบบใดที่ป้อนความต้องการของคุณ
- เพื่อป้องกันการกระจายตัวของระบบนิเวศ ต้องไม่ใช้คุณสมบัติของผู้ขายเพื่อจำลองคุณสมบัติของยานพาหนะที่มีอยู่แล้วใน SDK VehiclePropertyIds หากต้องการเรียนรู้เพิ่มเติม โปรดดู ส่วนที่ 2.5 ข้อกำหนดด้านยานยนต์ ใน CDD
- ใช้ฟิลด์ต่อไปนี้เพื่อสร้างรหัสคุณสมบัติ:
-
VehiclePropertyGroup:VENDOR
กลุ่ม VENDOR ใช้สำหรับคุณสมบัติของผู้จำหน่ายเท่านั้น -
VehicleArea
เลือกประเภทพื้นที่ที่เหมาะสม -
VehiclePropertyType
เลือกประเภทข้อมูลที่เหมาะสม ประเภท BYTES อนุญาตให้ส่งข้อมูลดิบได้ ซึ่งเพียงพอแล้วในกรณีส่วนใหญ่ การส่งข้อมูลขนาดใหญ่บ่อยครั้งผ่านคุณสมบัติของผู้จำหน่ายอาจทำให้การเข้าถึงเครือข่ายของยานพาหนะทั้งหมดช้าลง โปรดใช้ความระมัดระวังเมื่อเพิ่มเพย์โหลดจำนวนมาก -
Property ID
เลือกรหัสสองไบต์ที่ไม่ซ้ำกันสำหรับคุณสมบัติผู้ขาย ตัวอย่างเช่น 0x1234
-
- กรอก
VehiclePropConfig.configString
พร้อมคำอธิบายสั้นๆ เกี่ยวกับคุณสมบัติของผู้ขาย ซึ่งช่วยให้เครื่องมือตรวจสอบความถูกต้องสามารถทำเครื่องหมายการจำลองคุณสมบัติของยานพาหนะที่มีอยู่โดยไม่ได้ตั้งใจ ตัวอย่างเช่น "คุณสมบัติที่กำหนดเองของฉันสำหรับ XYZ" - เข้าถึงผ่าน CarPropertyManager (สำหรับคอมโพเนนต์ Java) หรือผ่าน
libvhalclient
(สำหรับเนทิฟ) ห้ามแก้ไข API ของรถยนต์อื่นๆ เนื่องจากอาจนำไปสู่ปัญหาความเข้ากันได้ในอนาคต
การอนุญาตคุณสมบัติของผู้ขาย
การอนุญาตเริ่มต้นสำหรับคุณสมบัติผู้ขายที่กำหนดไว้คือ android.car.Car.PERMISSION_VENDOR_EXTENSION
เพื่อการควบคุมสิทธิ์ที่ละเอียดยิ่งขึ้น โปรดสนับสนุนคุณสมบัติ SUPPORT_CUSTOMIZE_VENDOR_PERMISSION
คุณสมบัติ STATIC นี้เป็นแบบอ่านอย่างเดียว ซึ่งอาร์เรย์การกำหนดค่าจะระบุสิทธิ์สำหรับคุณสมบัติผู้ขาย configArray
ได้รับการตั้งค่าดังนี้ (i เป็นจำนวนเต็มเริ่มต้นจาก 0):
-
configArray[3 * i]
propId ซึ่งเป็นรหัสคุณสมบัติสำหรับคุณสมบัติผู้ขาย -
configArray[3 * i + 1]
enum ในVehicleVendorPermission.aidl
เพื่อระบุสิทธิ์ในการอ่านค่าคุณสมบัติ -
configArray[3 * i + 2]
enum ในVehicleVendorPermission.aidl
เพื่อระบุสิทธิ์ในการเขียนค่าคุณสมบัติ
ตัวอย่างเช่น อาร์เรย์การกำหนดค่าต่อไปนี้กำหนดค่าคุณสมบัติผู้ขายสอง vendor_prop_1
และ vendor_prop_2
เพื่อให้มีสิทธิ์:
-
vendor_prop_1
ต้องใช้android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT
เพื่ออ่าน,android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
เพื่อเขียน -
vendor_prop-2
ต้องใช้android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO
เพื่ออ่าน และไม่สามารถเขียนได้สำหรับแอป Android
configArray = { PERMISSION_SET_VENDOR_CATEGORY_SEAT vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE }
คุณสมบัติผู้ขายที่ไม่ได้อยู่ในอาร์เรย์นี้ใช้สิทธิ์ของผู้ขายเริ่มต้น เมื่อเลือก PERMISSION_NOT_ACCESSIBLE
แอป Android จะไม่สามารถเข้าถึงพร็อพเพอร์ตี้ได้ ในตัวอย่างนี้ แอป Android ไม่สามารถเขียนค่าสำหรับ vendor_prop_2
เฉพาะไคลเอ็นต์ VHAL ดั้งเดิมเท่านั้นที่สามารถเขียนไปยังพร็อพเพอร์ตี้นี้ได้
ระบบช่วยเหลือผู้ขับขี่ขั้นสูง (ADAS)
ดู คุณสมบัติของยานพาหนะ ADASที่นั่งและพวงมาลัย
ดู คุณสมบัติของเบาะนั่งและพวงมาลัย
เครื่องปรับอากาศ
คุณสามารถใช้ VHAL เพื่อควบคุม HVAC ได้โดยการตั้งค่าคุณสมบัติที่เกี่ยวข้องกับ HVAC คุณสมบัติ HVAC ส่วนใหญ่เกี่ยวข้องกับพื้นที่เฉพาะในยานพาหนะ แม้ว่าคุณสมบัติหลายประการจะเป็นคุณสมบัติระดับโลกก็ตาม คุณสมบัติที่กำหนดตัวอย่างได้แก่:
คุณสมบัติ | วัตถุประสงค์ |
---|---|
HVAC_TEMPERATURE_SET | ตั้งอุณหภูมิต่อรหัสพื้นที่ |
HVAC_POWER_ON | สถานะพลังงานของระบบ HVAC ต่อรหัสพื้นที่ |
สำหรับคุณสมบัติ HVAC ที่ขึ้นอยู่กับสถานะพลังงานของระบบ HVAC จะต้องแสดงรายการไว้ในอาร์เรย์การกำหนดค่า HVAC_POWER_ON
หากต้องการดูรายการคุณสมบัติ HVAC ทั้งหมด ให้ค้นหา HVAC_*
ใน VehicleProperty.aidl
ดูที่ คุณสมบัติระบบที่รองรับ คุณสมบัติ.
กฎสำหรับการแมปคุณสมบัติ HVAC ประเภท VehicleArea ที่ไม่ใช่ GLOBAL กับ AreaID: ทุก “พื้นที่” สำหรับประเภท VehicleArea
เฉพาะที่ได้รับผลกระทบจากคุณสมบัตินั้น จะต้องรวมอยู่ในรหัสพื้นที่สำหรับคุณสมบัตินั้น ตัวควบคุมอุณหภูมิถูกกำหนดให้กับที่นั่งที่ "มีอิทธิพลมากที่สุด" แต่ที่นั่งที่ได้รับผลกระทบทุกตัวจะต้องรวมไว้เพียงครั้งเดียว การกำหนด AreaID ของเบาะหลังตรงกลางไปทางซ้ายหรือขวาอาจดูเหมือนเป็นกฎเกณฑ์ แต่การรวมทุกที่นั่งที่ได้รับผลกระทบไว้ใน AreaID เดียวช่วยให้มั่นใจได้ว่าที่นั่งในรถจะแสดงออกมาทั้งหมด และมีวิธี ที่เหมาะสม ในการส่งผลต่อแต่ละที่นั่ง
ตัวอย่างที่ 1
รถยนต์มีที่นั่งด้านหน้า 2 ที่นั่ง (ROW_1_LEFT, ROW_1_RIGHT) และเบาะหลัง 3 ที่นั่ง (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) มีชุดควบคุมอุณหภูมิ 2 ชุด ฝั่งคนขับและฝั่งผู้โดยสารอย่างละ 1 ชุด ชุดการแมปที่ถูกต้องของ AreaID สำหรับ HVAC_TEMPERATURE_SET
จะเป็นอาร์เรย์สององค์ประกอบ:
- ROW_1_LEFT | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
การแมปทางเลือกสำหรับการกำหนดค่าฮาร์ดแวร์เดียวกันคือ:
- ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_RIGHT
ตัวอย่างที่ 2
รถยนต์มีสามที่นั่งโดยมีสองที่นั่งในแถวหน้า (ROW_1_LEFT, ROW_1_RIGHT) และสามที่นั่งในแถวที่สอง (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) และแถวที่สาม (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT) มีหน่วยควบคุมอุณหภูมิสามชุด ฝั่งคนขับ ฝั่งผู้โดยสาร และด้านหลังอย่างละชุด วิธีที่เหมาะสมในการแมป HVAC_TEMPERATURE_SET
กับ AreaID คืออาร์เรย์สามองค์ประกอบ:
- ROW_1_LEFT
- ROW_1_RIGHT
- ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
ตัวอย่างที่ 3
รถยนต์มีที่นั่งด้านหน้า 2 ที่นั่ง (ROW_1_LEFT, ROW_1_RIGHT) และเบาะหลัง 3 ที่นั่ง (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) สมมติว่ารถรองรับ HVAC_AUTO_ON สำหรับที่นั่งด้านหน้า 2 ที่นั่งเท่านั้น ชุดการแมปที่ถูกต้องของ AreaID สำหรับ HVAC_AUTO_ON จะเป็นอาร์เรย์องค์ประกอบเดียว:
- ROW_1_LEFT | ROW_1_RIGHT
หาก HVAC_AUTO_ON
มีชุดควบคุมสองชุดแยกกันสำหรับด้านคนขับและด้านผู้โดยสาร การทำแผนที่ทางเลือกจะเป็นอาร์เรย์สององค์ประกอบ:
- ROW_1_LEFT
- ROW_1_RIGHT
การปฏิบัติตามกฎระเบียบความปลอดภัยทั่วไปของสหภาพยุโรป
หากรถยนต์ต้องเป็นไปตามข้อกำหนดของกฎระเบียบความปลอดภัยทั่วไปของสหภาพยุโรป (GSR) ผ่านทาง Android จะต้องรองรับคุณสมบัติ GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
ตัวอย่างการใช้งานคือ GSR-ISA (Intelligent Speed Assist) ตามที่กำหนดไว้ในกฎระเบียบของสหภาพยุโรป 2019/2144 คุณสมบัตินี้ถูกเพิ่มใน AIDL VHAL จาก Android 13 อย่างไรก็ตาม ได้รับการรองรับใน Car Service ตั้งแต่เปิดตัว Android 12 คุณสมบัตินี้ถูกกำหนดให้เป็นคุณสมบัติจำนวนเต็มส่วนกลางคงที่แบบอ่านอย่างเดียว โดยมีค่าที่เป็นไปได้ที่กำหนดโดย GsrComplianceRequirementType
enum:
ชื่อ | ค่า | คำอธิบาย |
---|---|---|
GSR_COMPLIANCE_NOT_REQUIRED | 0 | ไม่จำเป็นต้องมีการปฏิบัติตาม GSR |
GSR_COMPLIANCE_REQUIRED_V1 | 1 | จำเป็นต้องปฏิบัติตาม GSR และเวอร์ชันโซลูชันที่ต้องการคือ 1 |
หากต้องการรองรับคุณสมบัตินี้ใน HIDL VHAL (ใน Android 12) ผู้จำหน่ายจะต้องฮาร์ดโค้ดรหัสคุณสมบัติ ตัวอย่างเช่น ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสิ่งนี้ได้รับการสนับสนุนอย่างไรในการอ้างอิง HIDL VHAL DefaultConfig.h
:
{ .config = { // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT .prop = 0x11400F47, .access = VehiclePropertyAccess::READ, .changeMode = VehiclePropertyChangeMode::STATIC, }, // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1 .initialValue = {.int32Values = {1}}, }
เพื่อสนับสนุนคุณสมบัตินี้ใน AIDL VHAL (จาก Android 13) ผู้จำหน่ายสามารถใช้รหัสคุณสมบัติจาก VehicleProperty.h
และ enum จาก GsrComplianceRequirementType.h
ตัวอย่างเช่น ในการอ้างอิง AIDL VHAL DefaultProperties.json
:
{ "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT", "defaultValue": { "int32Values": [ "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1" ] } }
หากต้องการอ่านพร็อพเพอร์ตี้นี้จากแอป Android ให้ใช้ CarPropertyManager.getIntProperty
- ใน Android 13 ขึ้นไป ให้ใช้
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE
เป็นรหัสพร็อพเพอร์ตี้ - ใน Android 12 ให้ใช้ค่าฮาร์ดโค้ด 0x11400F47 เป็นรหัสคุณสมบัติ คุณสมบัตินี้ต้องได้รับอนุญาต
Car#PERMISSION_CAR_INFO