พร็อพเพอร์ตี้ของผู้ให้บริการ
VHAL อนุญาตให้ใช้คุณสมบัติของผู้ให้บริการที่เข้าถึงได้ผ่าน API ของระบบเท่านั้น เพื่อรองรับความต้องการเฉพาะของพาร์ทเนอร์ โปรดใช้หลักเกณฑ์ต่อไปนี้เมื่อทำงานกับพร็อพเพอร์ตี้ของผู้ให้บริการ
- พยายามใช้พร็อพเพอร์ตี้ของระบบก่อนเสมอ และควรใช้พร็อพเพอร์ตี้ของผู้ให้บริการเป็นทางเลือกสุดท้าย เมื่อไม่มีพร็อพเพอร์ตี้ของระบบใดที่ตรงกับความต้องการของคุณ
- เพื่อป้องกันการแยกส่วนของระบบนิเวศ คุณต้องไม่ใช้พร็อพเพอร์ตี้ของผู้ให้บริการเพื่อจำลองพร็อพเพอร์ตี้ยานพาหนะ ที่มีอยู่แล้วใน SDK VehiclePropertyIds ดูข้อมูลเพิ่มเติมได้ที่ส่วน 2.5 ข้อกำหนดด้านยานยนต์ใน CDD
- ใช้ช่องต่อไปนี้เพื่อสร้างรหัสพร็อพเพอร์ตี้
    - VehiclePropertyGroup:VENDORกลุ่ม VENDOR ใช้สำหรับพร็อพเพอร์ตี้ของผู้ให้บริการเท่านั้น
- VehicleAreaเลือกประเภทพื้นที่ที่เหมาะสม
- VehiclePropertyTypeเลือกประเภทข้อมูลที่เหมาะสม ประเภทไบต์ช่วยให้ส่งข้อมูลดิบได้ ซึ่งเพียงพอในกรณีส่วนใหญ่ การส่งข้อมูลขนาดใหญ่บ่อยครั้งผ่านพร็อพเพอร์ตี้ของผู้ให้บริการ อาจทำให้การเข้าถึงเครือข่ายยานพาหนะทั้งหมดช้าลง โปรดระมัดระวังเมื่อเพิ่มเพย์โหลดขนาดใหญ่
- Property IDเลือกรหัส 2 ไบต์ที่ไม่ซ้ำกันสำหรับพร็อพเพอร์ตี้ของผู้ให้บริการ เช่น 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เพื่อ ระบุสิทธิ์ในการเขียนค่าพร็อพเพอร์ตี้
ตัวอย่างเช่น อาร์เรย์การกำหนดค่าต่อไปนี้จะกำหนดค่าพร็อพเพอร์ตี้ของผู้ให้บริการ 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)
ดูคุณสมบัติของยานพาหนะ ADASSEAT และ STEERING
ดูพร็อพเพอร์ตี้ที่นั่งและพวงมาลัย
ระบบปรับอากาศ (HVAC)
คุณสามารถใช้ 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 จะเป็นอาร์เรย์ 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)
  และที่นั่ง 3 ที่ในแถวที่ 2 (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) และแถวที่ 3
  (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT) มีชุดควบคุมอุณหภูมิ 3 ชุด โดยมีชุดควบคุมสำหรับ
  ฝั่งคนขับ ฝั่งผู้โดยสาร และด้านหลัง วิธีที่สมเหตุสมผลในการแมป
  HVAC_TEMPERATURE_SET กับ AreaID คืออาร์เรย์ที่มี 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
- ROW_1_RIGHT
INFO_EXTERIOR_DIMENSIONS
ขนาดภายนอกของยานพาหนะจะวัดเป็นมิลลิเมตร ดังแสดงในรูปที่ 1
 
   
  ใช้พร็อพเพอร์ตี้ที่อธิบายไว้ในตารางนี้เพื่อกำหนดขนาดภายนอกของยานพาหนะ
| พร็อพเพอร์ตี้ยานพาหนะ | ฟิลด์ 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 พร็อพเพอร์ตี้นี้กำหนดเป็นพร็อพเพอร์ตี้จำนวนเต็มแบบคงที่ส่วนกลางแบบอ่านอย่างเดียว
  โดยมีค่าที่เป็นไปได้ซึ่งกำหนดโดย
  การแจงนับ 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}},
}หากต้องการรองรับพร็อพเพอร์ตี้นี้ใน AIDL VHAL (จาก Android 13) ผู้ให้บริการสามารถใช้รหัสพร็อพเพอร์ตี้จาก
  VehicleProperty.h และ Enum จาก GsrComplianceRequirementType.h เช่น ใน VHAL ของ AIDL อ้างอิง
  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
