อินเทอร์เฟซ 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
รูปที่ 1 . รับอุณหภูมิ HVAC (CS = CarService, VHAL = Vehicle HAL)
ตั้งสาย
set
การโทรคือการดำเนินการแบบอะซิงโครนัสที่เกี่ยวข้องกับการแจ้งเตือนเหตุการณ์หลังจากทำการเปลี่ยนแปลงที่ร้องขอ ในการใช้งานทั่วไป การโทรที่ set
จะนำไปสู่การทำการร้องขอการเปลี่ยนแปลงผ่านเครือข่ายรถยนต์ การเรียกบาง set
อาจต้องการข้อมูลเริ่มต้นเพื่อให้พร้อม แต่ในระหว่างการเริ่มต้น ข้อมูลดังกล่าวอาจยังไม่พร้อมใช้งาน ในกรณีเช่นนี้ set
call ควรส่งคืน -EAGAIN
คุณสมบัติบางอย่างที่มีการเปิด/ปิดแยกต่างหากควรส่งคืน -ESHUTDOWN
เมื่อปิดคุณสมบัติและไม่สามารถทำการตั้งค่าได้ จนกว่า set
จะมีผลบังคับ get
ไม่จำเป็นต้องคืนค่าเดิมกับค่าที่ตั้งไว้ ตัวอย่างเช่น set HVAC Temperature
รูปที่ 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 นี้ใช้เป็นจำนวนเต็มแรกในอาร์เรย์จำนวนเต็มคุณสมบัติของรถ และกำหนดวิธีถอดรหัสข้อความที่เหลือ