Thuộc tính của nhà cung cấp
Để hỗ trợ các nhu cầu dành riêng cho đối tác, VHAL cho phép các thuộc tính của nhà cung cấp chỉ được truy cập thông qua API hệ thống. Hãy làm theo các nguyên tắc sau đây khi làm việc với các thuộc tính của nhà cung cấp:
- Luôn cố gắng sử dụng các thuộc tính hệ thống trước tiên, các thuộc tính của nhà cung cấp nên được sử dụng như một phương án cuối cùng khi không có thuộc tính hệ thống nào đáp ứng yêu cầu của bạn.
- Để ngăn sự phân mảnh hệ sinh thái, bạn không được sử dụng thuộc tính của nhà cung cấp để sao chép các thuộc tính của xe đã có trong vehiclePropertyIds của SDK. Để tìm hiểu thêm, hãy xem Mục 2.5, Yêu cầu đối với ô tô trong CDD.
- Sử dụng các trường sau để tạo Mã tài sản:
VehiclePropertyGroup:VENDOR
Nhóm ADVERTISER chỉ được dùng cho các thuộc tính của nhà cung cấp.VehicleArea
Chọn một Loại khu vực phù hợp.VehiclePropertyType
Chọn loại dữ liệu phù hợp. Loại BYTES cho phép truyền dữ liệu thô, điều này là đủ trong hầu hết các trường hợp. Việc thường xuyên gửi dữ liệu lớn thông qua các tài sản của nhà cung cấp có thể làm chậm toàn bộ quyền truy cập mạng của xe. Hãy cẩn thận khi thêm một tải trọng lớn.Property ID
Chọn mã nhận dạng hai byte duy nhất cho tài sản của nhà cung cấp. Ví dụ: 0x1234.
- Điền vào
VehiclePropConfig.configString
nội dung mô tả ngắn gọn về tài sản của nhà cung cấp. Điều này cho phép các công cụ kiểm tra tính hợp lệ gắn cờ trường hợp vô tình sao chép các thuộc tính xe hiện có. Ví dụ: "Tài sản tuỳ chỉnh của tôi cho XYZ". - Truy cập thông qua CarPropertyManager (đối với các thành phần Java) hoặc thông qua
libvhalclient
(đối với mã gốc). Đừng sửa đổi các API ô tô khác vì việc này có thể dẫn đến các vấn đề về khả năng tương thích trong tương lai.
Quyền thuộc tính nhà cung cấp
Quyền mặc định cho mọi thuộc tính đã xác định của nhà cung cấp là android.car.Car.PERMISSION_VENDOR_EXTENSION
. Để kiểm soát quyền chi tiết hơn, hãy hỗ trợ thuộc tính SUPPORT_CUSTOMIZE_VENDOR_PERMISSION
. Thuộc tính StatIC này ở chế độ chỉ có thể đọc, trong đó mảng cấu hình của thuộc tính này chỉ định các quyền đối với các thuộc tính của nhà cung cấp.
configArray
được đặt như sau (i là số nguyên bắt đầu từ 0):
configArray[3 * i]
propId, mã tài sản của tài sản của nhà cung cấp.configArray[3 * i + 1]
Một enum trongVehicleVendorPermission.aidl
để cho biết quyền đọc giá trị thuộc tính.configArray[3 * i + 2]
Một giá trị enum trongVehicleVendorPermission.aidl
để biểu thị quyền ghi giá trị thuộc tính.
Ví dụ: mảng cấu hình sau đây định cấu hình hai thuộc tính nhà cung cấp, vendor_prop_1
và vendor_prop_2
, để có các quyền:
vendor_prop_1
yêu cầuandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT
để đọc,android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
để ghi.vendor_prop-2
cần cóandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO
để đọc và không thể ghi đối với các ứng dụng Android.
configArray = { PERMISSION_SET_VENDOR_CATEGORY_SEAT vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE }
Các thuộc tính của nhà cung cấp không có trong mảng này sẽ sử dụng quyền mặc định của nhà cung cấp. Khi bạn chọn PERMISSION_NOT_ACCESSIBLE
, các ứng dụng Android sẽ không thể truy cập vào thuộc tính này.
Trong ví dụ này, các ứng dụng Android không thể ghi giá trị cho vendor_prop_2
. Chỉ ứng dụng VHAL gốc mới có thể ghi vào thuộc tính này.
Hệ thống hỗ trợ người lái nâng cao (ADAS)
Xem phần Thuộc tính xe ADAS.CHỖ NGỒI và TAY LÁI
Xem bài viết Thuộc tính ghế ngồi và vô lăng.
HVAC (Hệ thống sưởi, thông gió và điều hoà)
Bạn có thể sử dụng VHAL để kiểm soát hệ thống điều hòa không khí bằng cách đặt các thuộc tính liên quan đến hệ thống điều hòa không khí. Hầu hết các thuộc tính HVAC đều liên kết với các khu vực cụ thể trong xe, mặc dù một số thuộc tính là thuộc tính toàn cục. Các thuộc tính mẫu được xác định bao gồm:
Thuộc tính | Mục đích |
---|---|
HVAC_TEMPERATURE_SET |
Đặt nhiệt độ theo mã nhận dạng khu vực. |
HVAC_POWER_ON |
Trạng thái nguồn của hệ thống sưởi, thông gió và điều hoà theo mã khu vực. |
Đối với các thuộc tính HVAC phụ thuộc vào trạng thái nguồn của hệ thống HVAC, các thuộc tính đó phải được liệt kê trong mảng cấu hình HVAC_POWER_ON
. Để xem danh sách đầy đủ các thuộc tính HVAC, hãy tìm HVAC_*
trong VehicleProperty.aidl
, xem bài viết Các thuộc tính hệ thống được hỗ trợ.
thuộc tính.
Quy tắc liên kết các thuộc tính HVAC loại VehicleArea không phải GLOBAL với AreaID:
Mọi "khu vực" cho một loại VehicleArea
cụ thể chịu ảnh hưởng của thuộc tính đó, phải được đưa vào mã khu vực cho thuộc tính đó. Bộ điều khiển nhiệt độ được chỉ định cho những chỗ ngồi mà chúng "có ảnh hưởng nhiều nhất", nhưng mỗi chỗ ngồi bị ảnh hưởng phải được đưa vào đúng một lần.
Việc chỉ định ghế sau giữa cho AreaID bên trái hoặc bên phải có vẻ như tuỳ ý, nhưng việc đưa mọi ghế bị ảnh hưởng vào đúng một AreaID sẽ đảm bảo rằng tất cả các ghế trong ô tô đều được thể hiện và có một cách hợp lý để ảnh hưởng đến từng ghế.
Ví dụ 1
Một chiếc ô tô có hai ghế trước (ROW_1_LEFT, ROW_1_RIGHT) và ba ghế sau (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Có hai bộ điều khiển nhiệt độ, mỗi bộ dành cho bên người lái và bên người ngồi. Một tập hợp ánh xạ hợp lệ của AreaID cho HVAC_TEMPERATURE_SET
sẽ là một mảng gồm hai phần tử:
- ROW_1_LEFT | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
Một ánh xạ thay thế cho cùng một cấu hình phần cứng sẽ là:
- ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_RIGHT
Ví dụ 2
Một chiếc ô tô có 3 hàng ghế, trong đó có 2 ghế ở hàng trước (ROW_1_LEFT, ROW_1_RIGHT) và 3 ghế ở hàng sau (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) và hàng thứ ba (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Có 3 bộ điều khiển nhiệt độ, mỗi bộ dành cho bên người lái, bên người ngồi và phía sau. Một cách hợp lý để liên kết HVAC_TEMPERATURE_SET
với AreaID là một mảng gồm 3 phần tử:
- ROW_1_LEFT
- ROW_1_RIGHT
- ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
Ví dụ 3
Một chiếc ô tô có hai ghế trước (ROW_1_LEFT, ROW_1_RIGHT) và ba ghế sau (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Giả sử xe chỉ hỗ trợ HVAC_auto_ON cho hai ghế trước. Tập hợp liên kết hợp lệ của AreaID cho HVAC_auto_ON sẽ là một mảng phần tử duy nhất:
- ROW_1_LEFT | ROW_1_RIGHT
Nếu HVAC_AUTO_ON
có hai đơn vị điều khiển riêng biệt cho phía người lái và phía người ngồi, thì ánh xạ thay thế sẽ là một mảng gồm hai phần tử:
- ROW_1_LEFT
- ROW_1_RIGHT
INFO_EXTERIOR_DIMENSIONS
Kích thước bên ngoài của xe được đo bằng milimét, như minh hoạ trong Hình 1.
Hãy sử dụng các thuộc tính được mô tả trong bảng này để xác định kích thước bên ngoài của xe.
Thuộc tính xe | Trường VHAL | Mô tả |
---|---|---|
Chiều cao | int32Values[0] |
Khoảng cách theo chiều dọc giữa mặt đất và điểm cao nhất trên xe. Điều này giả định rằng bánh xe của nhà máy được bơm hơi bình thường. |
Thời lượng | int32Values[1] |
Khoảng cách theo chiều ngang giữa các điểm ngoài cùng của phần đầu và phần đuôi xe. |
Chiều rộng, không bao gồm gương | int32Values[2] |
Khoảng cách theo chiều ngang giữa hai điểm ngoài cùng trên mỗi bên của xe, không bao gồm gương chiếu hậu. |
Chiều rộng, bao gồm cả gương | int32Values[3] |
Khoảng cách theo chiều ngang giữa hai điểm ngoài cùng trên mỗi bên của xe, bao gồm cả gương chiếu hậu. |
Chiều dài cơ sở | int32Values[4] |
Khoảng cách giữa tâm bánh trước và bánh sau của xe. |
Chiều rộng rãnh, phía trước | int32Values[5] |
Khoảng cách giữa bánh xe trước, được đo từ đường tâm của một rãnh lốp đến đường tâm của rãnh lốp đối diện. |
Chiều rộng của đường ray, phía sau | int32Values[6] |
Khoảng cách giữa bánh sau, được đo từ đường tâm của một rãnh lốp đến đường tâm của rãnh lốp đối diện. |
Đường kính quay từ lề đường này sang lề đường kia | int32Values[7] |
Đường kính của vòng tròn do các bánh xe bên ngoài của xe tạo ra khi rẽ một vòng hoàn chỉnh với vô lăng được khoá hoàn toàn. |
Tuân thủ quy định chung về an toàn của Liên minh Châu Âu
Nếu xe phải tuân thủ các yêu cầu của Quy định chung về an toàn của Liên minh Châu Âu (GSR) thông qua Android, thì thuộc tính GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
phải được hỗ trợ. Một ví dụ về trường hợp sử dụng là GSR-ISA (Hỗ trợ kiểm soát tốc độ thông minh) như được xác định trong Quy định 2019/2144 của Liên minh Châu Âu. Thuộc tính này được thêm vào AIDL VHAL từ Android 13, tuy nhiên, thuộc tính này được hỗ trợ trong Dịch vụ ô tô kể từ bản phát hành Android 12. Thuộc tính này được xác định là thuộc tính số nguyên toàn cục tĩnh chỉ có thể đọc, với các giá trị có thể xác định được bằng enum GsrComplianceRequirementType
:
Tên | Giá trị | Mô tả |
---|---|---|
GSR_COMPLIANCE_NOT_REQUIRED |
0 | Không bắt buộc phải tuân thủ GSR |
GSR_COMPLIANCE_REQUIRED_V1 |
1 | Bạn phải tuân thủ GSR và phiên bản giải pháp yêu cầu là 1. |
Để hỗ trợ thuộc tính này trong HIDL VHAL (trong Android 12), nhà cung cấp phải mã hoá cứng mã nhận dạng thuộc tính.
Ví dụ: đoạn mã sau đây cho thấy cách hỗ trợ điều này trong tài liệu tham khảo 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}}, }
Để hỗ trợ thuộc tính này trong AIDL VHAL (từ Android 13), nhà cung cấp có thể sử dụng mã nhận dạng thuộc tính từ VehicleProperty.h
và enum từ GsrComplianceRequirementType.h
. Ví dụ: như trong tham chiếu AIDL VHAL DefaultProperties.json
:
{ "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT", "defaultValue": { "int32Values": [ "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1" ] } }
Để đọc thuộc tính này từ một ứng dụng Android, hãy sử dụng CarPropertyManager.getIntProperty
.
- Trên Android 13 trở lên, hãy sử dụng
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE
làm mã tài sản. - Trong Android 12, hãy sử dụng giá trị được mã hoá cứng là 0x11400F47 làm mã nhận dạng thuộc tính. Thuộc tính này yêu cầu quyền
Car#PERMISSION_CAR_INFO
.