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

ชั้นพาหนะฮาร์ดแวร์ Abstraction (VHAL) อินเตอร์เฟซที่กำหนดคุณสมบัติ OEMs สามารถดำเนินการและมีข้อมูลเมตาอสังหาริมทรัพย์ (เช่นไม่ว่าจะเป็นสถานที่ให้เป็น 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);
    เริ่มการตรวจสอบการเปลี่ยนแปลงค่าคุณสมบัติ สำหรับทรัพย์สิน zoned, 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 พื้นที่บน Windows, ใช้ 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 พื้นที่ที่ร้องขอเท่านั้น หากพร็อพเพอร์ตี้เป็นแบบโกลบอล รหัสพื้นที่จะเป็น 0
  • set โทรสำหรับทรัพย์สินส่วนเสมอรวมถึงรหัสพื้นที่ในคำขอ ดังนั้น เฉพาะรหัสพื้นที่ที่ร้องขอเท่านั้นที่จะถูกเปลี่ยน
  • subscribe โทรสร้างกิจกรรมสำหรับรหัสพื้นที่ทั้งหมดของสถานที่ให้บริการ

รับสาย

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

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

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

ตั้งค่าการโทร

set โทรเป็นงานที่เกี่ยวข้องกับการไม่ตรงกันการแจ้งเตือนเหตุการณ์หลังจากการเปลี่ยนแปลงที่ขอทำ ในการทำงานโดยทั่วไปเป็น set นำไปสู่การเรียกร้องให้ทำคำขอเปลี่ยนแปลงทั่วทั้งเครือข่ายของยานพาหนะ บาง set สายอาจจำเป็นต้องมีข้อมูลเบื้องต้นจะมีความพร้อม แต่ในระหว่างการเตรียมข้อมูลดังกล่าวอาจไม่สามารถใช้ได้เลย ในกรณีเช่นนี้ set การโทรควรกลับ -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) หรือผ่านเครือข่ายบริการยานพาหนะ 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 คุณสมบัติโลโก้รหัสพื้นที่ใช้ แต่ละที่นั่งที่มีในรถจะต้องเป็นส่วนหนึ่งของรหัสพื้นที่ในอาร์เรย์รหัสพื้นที่

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

  • การแมปที่ถูกต้องกำหนดพื้นที่รหัสสำหรับ 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_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT ) รถมีหน่วยควบคุมอุณหภูมิสามชุด: ด้านคนขับ ด้านผู้โดยสาร และด้านหลัง วิธีที่เหมาะสมเพื่อ map HVAC_TEMPERATURE_SET เพื่อรหัสพื้นที่เป็นอาร์เรย์องค์ประกอบที่สาม:

  • 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 นี้ใช้เป็นจำนวนเต็มแรกในอาร์เรย์จำนวนเต็มคุณสมบัติของรถ และกำหนดวิธีถอดรหัสข้อความที่เหลือ