คุณสมบัติของรถ

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

อินเทอร์เฟซ Vehicle Hardware Abstraction Layer (VHAL) กำหนดคุณสมบัติที่ OEM สามารถใช้และมีข้อมูลเมตาของคุณสมบัติ (เช่น คุณสมบัติเป็น int หรือไม่ และโหมดการเปลี่ยนแปลงใดที่อนุญาต) อินเทอร์เฟซ VHAL ขึ้นอยู่กับการเข้าถึงคุณสมบัติ (อ่าน เขียน สมัครสมาชิก) ซึ่งเป็นนามธรรมสำหรับฟังก์ชันเฉพาะ

อินเทอร์เฟซ HAL

VHAL ใช้อินเทอร์เฟซต่อไปนี้:

  • getAllPropConfigs() สร้าง (vec<VehiclePropConfig>propConfigs)
    แสดงรายการการกำหนดค่าคุณสมบัติทั้งหมดที่สนับสนุนโดย VHAL CarService ใช้คุณสมบัติที่รองรับเท่านั้น
  • getPropConfigs(vec<int32_t> props) สร้าง (StatusCode status,vec<VehiclePropConfig> propConfigs);
    ส่งคืนการกำหนดค่าของคุณสมบัติที่เลือก
  • set(VehiclePropValue propValue) สร้าง (StatusCodestatus);
    เขียนค่าคุณสมบัติ ผลลัพธ์ของการเขียนถูกกำหนดตามคุณสมบัติ
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) สร้าง (StatusCode status);
    เริ่มการตรวจสอบการเปลี่ยนแปลงค่าคุณสมบัติ สำหรับคุณสมบัติแบบแบ่ง unsubscribe(IVehicleCallback callback, int32_t propId) สร้าง (StatusCode status);

VHAL ใช้อินเทอร์เฟซการโทรกลับต่อไปนี้:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    แจ้งการเปลี่ยนแปลงมูลค่าทรัพย์สินของรถ ควรทำเฉพาะสำหรับคุณสมบัติที่สมัครสมาชิก
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    ส่งกลับข้อผิดพลาดระดับ VHAL สากลหรือข้อผิดพลาดต่อคุณสมบัติ ข้อผิดพลาดส่วนกลางทำให้ HAL รีสตาร์ท ซึ่งอาจนำไปสู่การรีสตาร์ทส่วนประกอบอื่นๆ (รวมถึงแอปพลิเคชัน)

คุณสมบัติของรถ

คุณสมบัติสามารถเป็นแบบอ่านอย่างเดียว เขียนอย่างเดียว (ใช้เพื่อส่งข้อมูลไปยังระดับ VHAL) หรืออ่านและเขียน (รองรับคุณสมบัติส่วนใหญ่หรือไม่ก็ได้) แต่ละคุณสมบัติถูกระบุโดยไม่ซ้ำกันโดยคีย์ int32 และมีประเภทที่กำหนดไว้ล่วงหน้า ( value_type ):

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

พร็อพเพอร์ตี้แบบแบ่งโซนอาจมีค่ามากกว่าหนึ่งค่า ขึ้นอยู่กับจำนวนของโซนที่พร็อพเพอร์ตี้รองรับ

ประเภทพื้นที่

VHAL กำหนดประเภทพื้นที่หลายประเภท:

ประเภทพื้นที่ คำอธิบาย
GLOBAL คุณสมบัตินี้เป็นซิงเกิลตันและไม่ได้มีหลายพื้นที่
WINDOW พื้นที่ตามหน้าต่าง ใช้ VehicleAreaWindow enum
MIRROR พื้นที่ตามกระจก ใช้ VehicleAreaMirror enum
SEAT พื้นที่ขึ้นอยู่กับที่นั่ง ใช้ VehicleAreaSeat enum
DOOR พื้นที่ตามประตู ใช้ VehicleAreaDoor enum
WHEEL พื้นที่ขึ้นอยู่กับล้อ ใช้ VehicleAreaWheel enum

พร็อพเพอร์ตี้ที่แบ่งโซนแต่ละรายการต้องใช้ประเภทพื้นที่ที่กำหนดไว้ล่วงหน้า แต่ละประเภทพื้นที่มีชุดของบิตแฟล็กที่กำหนดไว้ใน enum สำหรับประเภทพื้นที่ ตัวอย่างเช่น พื้นที่ SEAT กำหนด VehicleAreaSeat enums:

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

รหัสพื้นที่

คุณสมบัติแบบแบ่งโซนจะระบุที่อยู่ผ่านรหัสพื้นที่ พร็อพเพอร์ตี้ที่แบ่งโซนแต่ละรายการอาจรองรับรหัสพื้นที่ตั้งแต่หนึ่งรายการขึ้นไป Area ID ประกอบด้วยแฟล็กตั้งแต่หนึ่งแฟล็กจาก enum ที่เกี่ยวข้อง ตัวอย่างเช่น คุณสมบัติที่ใช้ VehicleAreaSeat อาจใช้รหัสพื้นที่ต่อไปนี้:

สิ่งของ คำอธิบาย
ROW_1_LEFT | ROW_1_RIGHT รหัสพื้นที่ใช้กับที่นั่งด้านหน้าทั้งสอง
ROW_2_LEFT ใช้กับเบาะนั่งด้านหลังซ้ายเท่านั้น
ROW_2_RIGHT ใช้กับเบาะนั่งด้านหลังขวาเท่านั้น

สถานะทรัพย์สิน

ทุกมูลค่าทรัพย์สินมาพร้อมกับค่า VehiclePropertyStatus ซึ่งระบุสถานะปัจจุบันของทรัพย์สิน:

สิ่งของ คำอธิบาย
AVAILABLE พร็อพเพอร์ตี้พร้อมใช้งานและมูลค่าถูกต้อง
UNAVAILABLE มูลค่าทรัพย์สินไม่สามารถใช้ได้ในขณะนี้ ใช้สำหรับคุณสมบัติที่ปิดใช้งานชั่วคราวสำหรับคุณสมบัติที่รองรับ
ERROR มีบางอย่างผิดปกติกับคุณสมบัตินี้

การกำหนดค่าคุณสมบัติ

ใช้ VehiclePropConfig เพื่อจัดเตรียมข้อมูลการกำหนดค่าสำหรับแต่ละคุณสมบัติ ข้อมูลรวมถึง:

ตัวแปร คำอธิบาย
access r , w , rw
changeMode แสดงถึงวิธีการตรวจสอบคุณสมบัติ การเปลี่ยนแปลงเทียบกับความต่อเนื่อง
areaConfigs areaId , min , และค่า max
configArray พารามิเตอร์การกำหนดค่าเพิ่มเติม
configString ข้อมูลเพิ่มเติมที่ส่งผ่านเป็นสตริง
minSampleRate maxSampleRate
prop รหัสทรัพย์สิน int

จัดการคุณสมบัติของโซน

คุณสมบัติแบบแบ่งโซนจะเทียบเท่ากับคอลเล็กชันของคุณสมบัติหลายรายการ ซึ่งแต่ละพร็อพเพอร์ตี้ย่อยสามารถเข้าถึงได้ด้วยค่า ID พื้นที่ที่ระบุ

  • get การเรียกคุณสมบัติโซนจะรวม ID พื้นที่ไว้ในคำขอเสมอ ดังนั้น จะส่งกลับเฉพาะค่าปัจจุบันสำหรับ ID พื้นที่ที่ร้องขอเท่านั้น หากพร็อพเพอร์ตี้เป็นแบบโกลบอล รหัสพื้นที่จะเป็น 0
  • set การโทรสำหรับคุณสมบัติโซนจะรวม ID พื้นที่ไว้ในคำขอเสมอ ดังนั้น เฉพาะรหัสพื้นที่ที่ร้องขอเท่านั้นที่จะถูกเปลี่ยน
  • การโทร subscribe สร้างเหตุการณ์สำหรับรหัสพื้นที่ทั้งหมดสำหรับพร็อพเพอร์ตี้

รับสาย

ในระหว่างการเริ่มต้น ค่าสำหรับคุณสมบัติอาจยังไม่พร้อมใช้งานเนื่องจากยังไม่ได้รับข้อความเครือข่ายยานพาหนะที่ตรงกัน ในกรณีเช่นนี้ get call ควรส่งคืน -EAGAIN คุณสมบัติบางอย่าง (เช่น HVAC) มีคุณสมบัติการเปิด/ปิดไฟฟ้าแยกต่างหาก การเรียก get สำหรับคุณสมบัติดังกล่าว (เมื่อปิดเครื่อง) ควรส่งคืนสถานะ UNAVAILABLE แทนที่จะส่งคืนข้อผิดพลาด ตัวอย่างเช่น รับอุณหภูมิ HVAC

VHAL รับตัวอย่าง HVAC

รูปที่ 1 . รับอุณหภูมิ HVAC (CS = CarService, VHAL = Vehicle HAL)

ตั้งสาย

set การโทรคือการดำเนินการแบบอะซิงโครนัสที่เกี่ยวข้องกับการแจ้งเตือนเหตุการณ์หลังจากทำการเปลี่ยนแปลงที่ร้องขอ ในการใช้งานทั่วไป การโทรที่ set จะนำไปสู่การทำการร้องขอการเปลี่ยนแปลงผ่านเครือข่ายรถยนต์ การเรียกบาง set อาจต้องการข้อมูลเริ่มต้นเพื่อให้พร้อม แต่ในระหว่างการเริ่มต้น ข้อมูลดังกล่าวอาจยังไม่พร้อมใช้งาน ในกรณีเช่นนี้ set call ควรส่งคืน -EAGAIN คุณสมบัติบางอย่างที่มีการเปิด/ปิดแยกต่างหากควรส่งคืน -ESHUTDOWN เมื่อปิดคุณสมบัติและไม่สามารถทำการตั้งค่าได้ จนกว่า set จะมีผลบังคับ get ไม่จำเป็นต้องคืนค่าเดิมกับค่าที่ตั้งไว้ ตัวอย่างเช่น set HVAC Temperature

VHAL ตั้งค่าตัวอย่าง HVAC

รูปที่ 2 . ตั้งอุณหภูมิ HVAC (CS = CarService, VHAL = Vehicle HAL)

การจัดการคุณสมบัติที่กำหนดเอง

เพื่อรองรับความต้องการเฉพาะคู่ค้า VHAL อนุญาตให้ใช้คุณสมบัติแบบกำหนดเองที่จำกัดเฉพาะแอประบบ ใช้แนวทางต่อไปนี้เมื่อทำงานกับคุณสมบัติที่กำหนดเอง:

  • ควรสร้างรหัสพร็อพเพอร์ตี้โดยใช้ฟิลด์ต่อไปนี้:
    • VehiclePropertyGroup:VENDOR
      กลุ่ม VENDOR ใช้สำหรับคุณสมบัติที่กำหนดเองเท่านั้น
    • VehicleArea
      เลือกประเภทพื้นที่ที่เหมาะสม
    • VehiclePropertyType
      เลือกประเภทข้อมูลที่เหมาะสม ประเภท BYTES อนุญาตให้ส่งข้อมูลดิบซึ่งเพียงพอในกรณีส่วนใหญ่ การส่งบิ๊กดาต้าบ่อยครั้งผ่านคุณสมบัติที่กำหนดเองอาจทำให้การเข้าถึงเครือข่ายรถยนต์ทั้งหมดช้าลง — ให้ระมัดระวังเมื่อเพิ่มน้ำหนักบรรทุกจำนวนมาก
    • Property ID
      เลือกสี่ nibble ID สำหรับคุณสมบัติที่กำหนดเอง
  • เพื่อป้องกันการกระจายตัวของระบบนิเวศ จะต้องไม่ใช้คุณสมบัติที่กำหนดเองเพื่อจำลองคุณสมบัติของรถที่มีอยู่แล้วใน ( VehiclePropertyIds SDK)
  • กรอก VehiclePropConfig.configString ด้วยคำอธิบายสั้นๆ ของคุณสมบัติที่กำหนดเอง ซึ่งช่วยให้เครื่องมือตรวจสอบสภาพร่างกายสามารถตั้งค่าสถานะการจำลองคุณสมบัติของรถที่มีอยู่โดยไม่ได้ตั้งใจได้ ตัวอย่างเช่น "สถานะไฟฉุกเฉิน"
  • เข้าถึงผ่าน CarPropertyManager (สำหรับส่วนประกอบ Java) หรือผ่าน Vehicle Network Service API (สำหรับเนทีฟ) ห้ามดัดแปลง API ของรถยนต์คันอื่นๆ เนื่องจากอาจนำไปสู่ปัญหาความเข้ากันได้ในอนาคต
  • หลังจากใช้คุณสมบัติของผู้จัดจำหน่าย เลือก เฉพาะ รายการสิทธิ์ใน VehicleVendorPermission enum สำหรับคุณสมบัติของผู้จัดจำหน่าย การแมปสิทธิ์ของผู้จำหน่ายกับคุณสมบัติของระบบจะทำให้ CTS และ VTS เสียหาย

การจัดการคุณสมบัติของ HVAC

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

คุณสมบัติ วัตถุประสงค์
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET ตั้งอุณหภูมิต่อโซน
VEHICLE_PROPERTY_HVAC_RECIRC_ON ควบคุมการหมุนเวียนต่อโซน

หากต้องการดูรายการคุณสมบัติ HVAC ทั้งหมด ให้ค้นหา VEHICLE_PROPERTY_HVAC_* ใน types.hal เมื่อคุณสมบัติ HVAC ใช้ VehicleAreaSeat กฎเพิ่มเติมสำหรับการแมปคุณสมบัติ HVAC แบบแบ่งโซนกับ Area IDs จะมีผลบังคับใช้ แต่ละที่นั่งที่มีในรถจะต้องเป็นส่วนหนึ่งของรหัสพื้นที่ในอาร์เรย์รหัสพื้นที่

ตัวอย่างที่หนึ่ง รถยนต์มีเบาะนั่งด้านหน้าสองที่นั่ง ( ROW_1_LEFT, ROW_1_RIGHT ) และเบาะหลังสามที่นั่ง ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ) รถมีหน่วยควบคุมอุณหภูมิสองชุด: ด้านคนขับและด้านผู้โดยสาร

  • ชุดการแมปที่ถูกต้องของ Area ID สำหรับ HVAC_TEMPERATURE SET คือ:
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • การทำแผนที่ทางเลือกสำหรับการกำหนดค่าฮาร์ดแวร์เดียวกันคือ:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

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

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

การจัดการคุณสมบัติของเซ็นเซอร์

คุณสมบัติของเซ็นเซอร์ VHAL แสดงถึงข้อมูลเซ็นเซอร์จริงหรือข้อมูลนโยบาย เช่น สถานะการขับขี่ ข้อมูลเซ็นเซอร์บางอย่าง (เช่น สถานะการขับขี่และโหมดกลางวัน/กลางคืน) สามารถเข้าถึงได้โดยแอปใดๆ ก็ตามโดยไม่มีข้อจำกัด เนื่องจากเป็นข้อมูลที่จำเป็นในการสร้างแอปพลิเคชันรถยนต์ที่ปลอดภัย ข้อมูลเซ็นเซอร์อื่นๆ (เช่น ความเร็วของรถ) มีความละเอียดอ่อนกว่าและต้องการการอนุญาตเฉพาะที่ผู้ใช้สามารถจัดการได้

ดูคุณสมบัติเซ็นเซอร์ที่รองรับ (ใน types.hal )

บริการแผนที่รถยนต์

บริการแผนที่ยานพาหนะ (VMS) มีกลไกในการแลกเปลี่ยนข้อมูลแผนที่ระหว่างลูกค้าผ่านอินเทอร์เฟซแบบผับ/ย่อย เพื่อรองรับคุณลักษณะทั่วไปของรถ เช่น ระบบช่วยเหลือผู้ขับขี่ขั้นสูง (ADAS) ลูกค้าสามารถรวมระบบยานพาหนะที่เชื่อมต่อผ่านคุณสมบัติ VMS ใน VHAL หรือแอปพลิเคชัน Android ที่มีสิทธิพิเศษ ข้อมูลที่แชร์บน VMS มีวัตถุประสงค์เพื่อจำกัดข้อมูลแผนที่สำหรับใช้โดยระบบรถและแอพที่รองรับ

VMS มีไว้สำหรับใช้เฉพาะในการใช้งาน Android Automotive เท่านั้น AOSP ไม่มีไคลเอนต์เริ่มต้นที่เผยแพร่หรือสมัครใช้งาน VMS สำหรับคุณสมบัติ VMS ใน VHAL ประเภทข้อความและโครงสร้างข้อมูลได้อธิบายไว้ใน VHAL 2.0 ใน VmsMessageType enum ซึ่งแสดงรายการประเภทของข้อความ VMS ที่รองรับ enum นี้ใช้เป็นจำนวนเต็มแรกในอาร์เรย์จำนวนเต็มคุณสมบัติของรถ และกำหนดวิธีถอดรหัสข้อความที่เหลือ