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

พร็อพเพอร์ตี้ของผู้ให้บริการ

VHAL อนุญาตให้เข้าถึงที่พักของผู้ให้บริการได้ผ่าน API ของระบบเท่านั้น เพื่อรองรับความต้องการเฉพาะของพาร์ทเนอร์ ใช้หลักเกณฑ์ต่อไปนี้เมื่อทำงานกับที่พักของผู้ให้บริการ

  • พยายามใช้พร็อพเพอร์ตี้ระบบก่อนเสมอ และควรใช้พร็อพเพอร์ตี้ของผู้ให้บริการเป็นทางเลือกสุดท้ายเมื่อไม่มีพร็อพเพอร์ตี้ระบบใดที่ตรงกับข้อกําหนดของคุณ
  • ต้องไม่ใช้พร็อพเพอร์ตี้ผู้ให้บริการเพื่อจำลองพร็อพเพอร์ตี้ยานพาหนะที่มีอยู่แล้วใน SDK VehiclePropertyIds เพื่อป้องกันไม่ให้เกิดการกระจายตัวของระบบนิเวศ ดูข้อมูลเพิ่มเติมได้ในส่วนที่ 2.5 เกี่ยวกับข้อกำหนดด้านยานยนต์ใน CDD
  • ใช้ช่องต่อไปนี้เพื่อสร้างรหัสพร็อพเพอร์ตี้
    • VehiclePropertyGroup:VENDOR กลุ่มผู้ให้บริการใช้สำหรับพร็อพเพอร์ตี้ของผู้ให้บริการเท่านั้น
    • VehicleArea เลือกประเภทพื้นที่ที่เหมาะสม
    • VehiclePropertyType เลือกประเภทข้อมูลที่เหมาะสม ประเภท BYTES อนุญาตให้ส่งข้อมูลดิบ ซึ่งเพียงพอในเกือบทุกกรณี การส่งข้อมูลขนาดใหญ่บ่อยครั้งผ่านพร็อพเพอร์ตี้ของผู้ให้บริการอาจทำให้การเข้าถึงเครือข่ายของยานพาหนะทั้งหมดช้าลง โปรดระมัดระวังเมื่อเพิ่มเพย์โหลดขนาดใหญ่
    • Property ID เลือกรหัสแบบ 2 ไบต์ที่ไม่ซ้ำกันสำหรับพร็อพเพอร์ตี้ของผู้ให้บริการ เช่น 0x1234
  • กรอก VehiclePropConfig.configString ด้วยคำอธิบายสั้นๆ ของพร็อพเพอร์ตี้ผู้ให้บริการ ซึ่งจะช่วยให้เครื่องมือตรวจสอบความถูกต้องแจ้งว่ามีการจำลองพร็อพเพอร์ตี้ยานพาหนะที่มีอยู่โดยไม่ได้ตั้งใจ เช่น "พร็อพเพอร์ตี้ที่กําหนดเองของฉันสําหรับ XYZ"
  • เข้าถึงผ่าน CarPropertyManager (สําหรับคอมโพเนนต์ Java) หรือผ่าน libvhalclient (สําหรับเนทีฟ) อย่าแก้ไข API รถยนต์อื่นๆ เนื่องจากอาจทำให้เกิดปัญหาความเข้ากันได้ในอนาคต

สิทธิ์สำหรับพร็อพเพอร์ตี้ผู้ให้บริการ

สิทธิ์เริ่มต้นสำหรับพร็อพเพอร์ตี้ของผู้ให้บริการที่กําหนดคือ android.car.Car.PERMISSION_VENDOR_EXTENSION รองรับพร็อพเพอร์ตี้ SUPPORT_CUSTOMIZE_VENDOR_PERMISSION เพื่อการควบคุมสิทธิ์แบบละเอียด พร็อพเพอร์ตี้ STATIC นี้เป็นแบบอ่านอย่างเดียว โดยอาร์เรย์ config จะระบุสิทธิ์สำหรับพร็อพเพอร์ตี้ของผู้ให้บริการ ค่า configArray มีการตั้งค่าดังนี้ (i เป็นจำนวนเต็มที่เริ่มจาก 0):

  • configArray[3 * i] propId รหัสพร็อพเพอร์ตี้สำหรับพร็อพเพอร์ตี้ของผู้ให้บริการ
  • configArray[3 * i + 1] enum ใน VehicleVendorPermission.aidl เพื่อระบุสิทธิ์ในการอ่านค่าพร็อพเพอร์ตี้
  • configArray[3 * i + 2] Enum ใน VehicleVendorPermission.aidl เพื่อบ่งบอกสิทธิ์ในการเขียนค่าพร็อพเพอร์ตี้

ตัวอย่างเช่น อาร์เรย์การกําหนดค่าต่อไปนี้กําหนดค่าพร็อพเพอร์ตี้ผู้ให้บริการ 2 รายการ นั่นคือ 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

เบาะและพวงมาลัย

โปรดดูพร็อพเพอร์ตี้ของเบาะและพวงมาลัย

ระบบปรับอากาศ (HVAC)

คุณสามารถใช้ VHAL เพื่อควบคุม HVAC ได้โดยการตั้งค่าพร็อพเพอร์ตี้ที่เกี่ยวข้องกับ HVAC พร็อพเพอร์ตี้ HVAC ส่วนใหญ่จะเชื่อมโยงกับพื้นที่หนึ่งๆ ในยานพาหนะ แม้ว่าจะมีพร็อพเพอร์ตี้หลายรายการที่เป็นพร็อพเพอร์ตี้ส่วนกลางก็ตาม ตัวอย่างพร็อพเพอร์ตี้ที่กําหนดมีดังนี้

พร็อพเพอร์ตี้ วัตถุประสงค์
HVAC_TEMPERATURE_SET ตั้งอุณหภูมิตามรหัสพื้นที่
HVAC_POWER_ON สถานะการจ่ายไฟของระบบ HVAC ตามรหัสพื้นที่

สำหรับที่พักที่มีระบบปรับอากาศ (HVAC) ซึ่งขึ้นอยู่กับสถานะการจ่ายไฟของระบบปรับอากาศ ที่พักต้องแสดงอยู่ในHVAC_POWER_ONอาร์เรย์ config หากต้องการดูรายการพร็อพเพอร์ตี้ HVAC ทั้งหมด ให้ค้นหา HVAC_* ใน VehicleProperty.aidl โปรดดูพร็อพเพอร์ตี้ระบบที่รองรับ พร็อพเพอร์ตี้

กฎสำหรับการแมปพร็อพเพอร์ตี้ HVAC ประเภท VehicleArea ที่ไม่ใช่ GLOBAL กับรหัสพื้นที่มีดังนี้ "พื้นที่" ทั้งหมดสำหรับ VehicleArea ประเภทหนึ่งๆ ที่ได้รับผลกระทบจากพร็อพเพอร์ตี้นั้นต้องรวมอยู่ในรหัสพื้นที่ของพร็อพเพอร์ตี้นั้น ระบบจะกำหนดตัวควบคุมอุณหภูมิให้กับที่นั่งที่ "มีอิทธิพลมากที่สุด" แต่จะต้องรวมทุกที่นั่งที่ได้รับผลกระทบเพียงครั้งเดียวเท่านั้น การกำหนดเบาะหลังตรงกลางเป็น AreaID ซ้ายหรือขวาอาจดูเหมือนว่าจะทำแบบสุ่ม แต่การรวมเบาะทุกที่นั่งที่ได้รับผลกระทบไว้ใน AreaID เดียวเท่านั้นช่วยให้มั่นใจได้ว่าเบาะทั้งหมดในรถจะแสดงออกมาได้ และมีวิธีสมเหตุสมผลในการกำหนดค่าแต่ละที่นั่ง

ตัวอย่างที่ 1

รถมีเบาะหน้า 2 ที่นั่ง (ROW_1_LEFT, ROW_1_RIGHT) และเบาะหลัง 3 ที่นั่ง (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) มีตัวควบคุมอุณหภูมิ 2 เครื่อง แต่ละชิ้นสำหรับฝั่งคนขับและฝั่งผู้โดยสาร ชุดการแมป AreaID ที่ถูกต้องสําหรับ HVAC_TEMPERATURE_SET จะเป็นอาร์เรย์ 2 องค์ประกอบ ดังนี้

  • 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

รถมี 3 แถวที่นั่ง โดยแถวหน้ามี 2 ที่นั่ง (ROW_1_LEFT, ROW_1_RIGHT) และแถวที่ 2 (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) และแถวที่ 3 (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT) มี 3 ที่นั่ง มีตัวควบคุมอุณหภูมิ 3 ตัว ได้แก่ ฝั่งคนขับ ฝั่งผู้โดยสาร และด้านหลัง วิธีที่เหมาะสมในการแมป HVAC_TEMPERATURE_SET กับ AreaIDs คืออาร์เรย์ 3 องค์ประกอบ ดังนี้

  • 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 มีชุดควบคุมแยกกัน 2 ชุดสำหรับฝั่งคนขับและฝั่งผู้โดยสาร การแมปทางเลือกจะเป็นอาร์เรย์ 2 องค์ประกอบ ดังนี้

  • ROW_1_LEFT
  • แถวที่ 1 ด้านขวา

INFO_EXTERIOR_DIMENSIONS

มิติภายนอกของยานพาหนะจะวัดเป็นมิลลิเมตร ดังที่แสดงในรูปที่ 1

รูปที่ 1 ขนาดภายนอกของยานพาหนะ มุมมองด้านหน้า
รูปที่ 2 มิติข้อมูลภายนอกของยานพาหนะ มุมมองด้านข้าง

ใช้พร็อพเพอร์ตี้ที่อธิบายในตารางนี้เพื่อกำหนดขนาดภายนอกของยานพาหนะ

พร็อพเพอร์ตี้ของยานพาหนะ ฟิลด์ VHAL คำอธิบาย
ส่วนสูง int32Values[0] ระยะห่างในแนวตั้งระหว่างพื้นดินและจุดสูงสุดบนยานพาหนะ โดยสมมติว่าล้อจากโรงงานมีการเติมลมตามปกติ
ความยาว int32Values[1] ระยะทางแนวนอนระหว่างจุดที่ยื่นออกมาด้านนอกสุดของส่วนหน้าและหลังของยานพาหนะ
ความกว้าง ไม่รวมกระจก int32Values[2] ระยะห่างในแนวนอนระหว่างจุดด้านนอกสุด 2 จุดที่อยู่แต่ละด้านของรถ ไม่รวมกระจกข้าง
ความกว้างรวมกระจก int32Values[3] ระยะห่างในแนวนอนระหว่างจุดที่ยื่นออกมาด้านนอกสุด 2 จุดในแต่ละด้านของยานพาหนะ ซึ่งรวมถึงกระจกมองข้าง
ฐานล้อ int32Values[4] ระยะห่างระหว่างจุดศูนย์กลางของล้อหน้าและล้อหลังของยานพาหนะ
ความกว้างทางเท้า ด้านหน้า int32Values[5] ระยะห่างระหว่างล้อหน้า ซึ่งวัดจากเส้นกึ่งกลางของดอกยางล้อหนึ่งไปยังเส้นกึ่งกลางของดอกยางล้ออีกข้าง
ความกว้างของร่องล้อหลัง int32Values[6] ระยะห่างระหว่างล้อหลังซึ่งวัดจากเส้นกึ่งกลางของดอกยาง 1 เส้นถึงเส้นกึ่งกลางของยางล้อด้านตรงข้าม
เส้นผ่านศูนย์กลางสำหรับการหมุนจากขอบโค้ง int32Values[7] เส้นผ่านศูนย์กลางของวงกลมที่ล้อด้านนอกของยานพาหนะทำเมื่อเลี้ยวจนสุดขณะที่ล็อกพวงมาลัยไว้

การปฏิบัติตามกฎระเบียบด้านความปลอดภัยทั่วไปของสหภาพยุโรป

หากยานพาหนะต้องเป็นไปตามข้อกำหนดของกฎระเบียบให้ความคุ้มครองข้อมูลส่วนบุคคลของผู้บริโภค (GSR) ของสหภาพยุโรปผ่าน Android จะต้องรองรับพร็อพเพอร์ตี้ GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT ตัวอย่าง Use Case คือ GSR-ISA (Intelligent Speed Assist) ตามที่กำหนดไว้ในกฎระเบียบของสหภาพยุโรป 2019/2144 พร็อพเพอร์ตี้นี้เพิ่มลงใน AIDL VHAL จาก Android 13 แต่รองรับในบริการรถยนต์ตั้งแต่เปิดตัว Android 12 พร็อพเพอร์ตี้นี้ระบุเป็นพร็อพเพอร์ตี้จำนวนเต็มร่วมแบบคงที่แบบอ่านอย่างเดียว โดยค่าที่เป็นไปได้กำหนดด้วย GsrComplianceRequirementType enum ดังนี้

ชื่อ ค่า คำอธิบาย
GSR_COMPLIANCE_NOT_REQUIRED 0 ไม่ต้องปฏิบัติตามข้อกำหนด GSR
GSR_COMPLIANCE_REQUIRED_V1 1 คุณต้องปฏิบัติตามข้อกำหนดของ GSR และเวอร์ชันโซลูชันของข้อกำหนดคือ 1

หากต้องการรองรับพร็อพเพอร์ตี้นี้ใน HIDL VHAL (ใน Android 12) ผู้ให้บริการต้องกำหนดรหัสพร็อพเพอร์ตี้เป็นฮาร์ดโค้ด ตัวอย่างเช่น ตัวอย่างต่อไปนี้แสดงให้เห็นว่า VHAL การอ้างอิง HIDL รองรับฟีเจอร์นี้อย่างไร 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