ที่พักพิเศษ

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

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)

ดูคุณสมบัติของยานพาหนะ ADAS

SEAT และ 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

รูปที่ 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 พร็อพเพอร์ตี้นี้กำหนดเป็นพร็อพเพอร์ตี้จำนวนเต็มแบบคงที่ส่วนกลางแบบอ่านอย่างเดียว โดยมีค่าที่เป็นไปได้ซึ่งกำหนดโดย การแจงนับ 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