คุณสมบัติพิเศษ

คุณสมบัติผู้ขาย

เพื่อรองรับความต้องการเฉพาะของคู่ค้า 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