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

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

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

  • พยายามใช้พร็อพเพอร์ตี้ของระบบก่อนเสมอ ควรใช้พร็อพเพอร์ตี้ของผู้ให้บริการเป็นทางเลือกสุดท้าย เมื่อไม่มีพร็อพเพอร์ตี้ของระบบใดที่ตรงกับความต้องการของคุณ
  • ต้องไม่ใช้พร็อพเพอร์ตี้ของผู้ให้บริการในการจําลองยานพาหนะ เพื่อป้องกันการกระจัดกระจายของระบบนิเวศ พร็อพเพอร์ตี้ที่มีอยู่ใน SDK อยู่แล้ว VehiclePropertyIds หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่ 2.5, ข้อกำหนดด้านยานยนต์ใน CDD
  • ใช้ฟิลด์ต่อไปนี้เพื่อสร้างรหัสพร็อพเพอร์ตี้
    • VehiclePropertyGroup:VENDOR กลุ่ม 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 สถิตินี้ พร็อพเพอร์ตี้เป็นแบบอ่านอย่างเดียว ซึ่งอาร์เรย์การกำหนดค่าระบุสิทธิ์สำหรับพร็อพเพอร์ตี้ของผู้ให้บริการ ซึ่งตั้งค่า 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 คุณสมบัตินี้ต้องเป็น แสดงอยู่ในอาร์เรย์การกำหนดค่า HVAC_POWER_ON หากต้องการดูรายการพร็อพเพอร์ตี้ HVAC ทั้งหมด ค้นหา HVAC_* ใน VehicleProperty.aidl ดู คุณสมบัติของระบบที่รองรับ พร็อพเพอร์ตี้

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

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

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

  • ROW_1_LEFT | แถวที่ 2_ซ้าย
  • ROW_1_RIGHT | ROW_2_CENTER | แถวที่ 2 ขวา

การแมปทางเลือกสำหรับการกำหนดค่าฮาร์ดแวร์เดียวกันคือ

  • ROW_1_LEFT | ROW_2_CENTER | แถวที่ 2_ซ้าย
  • ROW_1_RIGHT | แถวที่ 2 ขวา

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

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

  • แถวที่ 1_ซ้าย
  • แถวที่ 1 ด้านขวา
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | แถวที่ 3 ด้านขวา

ตัวอย่างที่ 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 | แถวที่ 1 ด้านขวา

หาก HVAC_AUTO_ON มีหน่วยควบคุม 2 เครื่องสำหรับฝั่งคนขับและผู้โดยสาร การแมปทางเลือกจะเป็นอาร์เรย์องค์ประกอบ 2 รายการดังนี้

  • แถวที่ 1_ซ้าย
  • แถวที่ 1 ด้านขวา

INFO_EXTERIOR_DIMENSIONS

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

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

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

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

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

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

ชื่อ ค่า คำอธิบาย
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}},
}

ผู้ให้บริการสามารถใช้รหัสพร็อพเพอร์ตี้จาก Android 13 เพื่อรองรับพร็อพเพอร์ตี้นี้ใน 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