Thuộc tính của nhà cung cấp
Để hỗ trợ nhu cầu của đối tác, VHAL cho phép truy cập vào tài sản của nhà cung 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. Phương án cuối cùng là chỉ nên sử dụng thuộc tính của nhà cung cấp khi không có thuộc tính hệ thống nào cung cấp yêu cầu của bạn.
- Để ngăn chặ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 phương tiện các thuộc tính đã tồn tại trong SDK CarPropertyIds (Mã thuộc tính xe). Để tìm hiểu thêm, hãy xem Phần 2.5, Yêu cầu về ô 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 Loại khu vực thích 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ô, như vậy là đủ trong hầu hết trường hợp. Thường xuyên gửi dữ liệu lớn thông qua các sản phẩm của nhà cung cấp có thể làm chậm toàn bộ 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ột mã nhận dạng duy nhất 2 byte cho thuộc tính của nhà cung cấp. Ví dụ: 0x1234.
- Điền nội dung mô tả ngắn về nhà cung cấp vào
VehiclePropConfig.configString
thuộc tính này. Điều này cho phép các công cụ kiểm tra tính hợp lệ gắn cờ việc vô tình sao chép các dữ liệu hiện có thuộc tính của xe. 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 quảng cáo gốc). Hành động không sửa đổi các API khác của ô tô vì làm như vậ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
. Để hiểu rõ hơn về quyền
kiểm soát, hỗ trợ thuộc tính SUPPORT_CUSTOMIZE_VENDOR_PERMISSION
. Số liệu thống kê này
thuộc tính chỉ có thể đọc, trong đó mảng cấu hình của thuộc tính sẽ chỉ định quyền đối với các thuộc tính của nhà cung cấp.
configArray
được thiết lập 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
đến cho biết quyền đọc giá trị thuộc tính.configArray[3 * i + 2]
Một enum trongVehicleVendorPermission.aidl
đến cho biết quyền ghi giá trị thuộc tính.
Ví dụ: mảng cấu hình sau đây định cấu hình 2 thuộc tính của nhà cung cấp,
vendor_prop_1
và vendor_prop_2
để có các quyền:
- Cần có
vendor_prop_1
android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT
để đọc,android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
để viết. - Cần có
vendor_prop-2
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 }
Thuộc tính nhà cung cấp không nằm trong mảng này sẽ sử dụng quyền mặc định của nhà cung cấp. Thời gian
Bạn đã chọn PERMISSION_NOT_ACCESSIBLE
, các ứng dụng Android không thể truy cập vào thuộc tính này.
Trong ví dụ, các ứng dụng Android không thể ghi giá trị cho vendor_prop_2
. Chỉ quảng cáo gốc
Ứng dụng VHAL có thể ghi vào thuộc tính này.
Hệ thống hỗ trợ người lái xe nâng cao (ADAS)
Xem phần Thuộc tính xe ADAS.GHẾ NGỒI và CHÂN NGỒ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ể dùng VHAL để điều khiển HVAC bằng cách đặt các thuộc tính liên quan đến HVAC. Hầu hết các khu vực cho hệ thống sưởi, thông gió và điều hoà được liên kết với các khu vực cụ thể trong xe, mặc dù một số khu vực là thuộc tính toàn cầu. 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ã 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 sưởi, thông gió và điều hoà, chúng phải:
được liệt kê trong mảng cấu hình HVAC_POWER_ON
. Cách xem danh sách đầy đủ các thuộc tính cho hệ thống sưởi, thông gió và điều hoà:
tìm kiếm HVAC_*
trong VehicleProperty.aidl
, xem
Các thuộc tính hệ thống được hỗ trợ.
các thuộc tính.
Quy tắc để liên kết các thuộc tính HVAC (Hệ thống sưởi, thông gió và điều hoà) không thuộc loại KHÔI TOÀN TOÀN CẦU với AreaID:
Mọi “khu vực” của một loại VehicleArea
cụ thể chịu ảnh hưởng của cơ sở lưu trú đó đều phải
có trong mã khu vực của cơ sở lưu trú đó. Bộ điều khiển nhiệt độ được chỉ định cho
các vị trí mà họ "ảnh hưởng nhiều nhất", nhưng mỗi giấy phép bị ảnh hưởng chỉ được cung cấp đúng một lần.
Việc chỉ định ghế sau ở giữa phía sau cho AreaID bên trái hoặc bên phải có vẻ như tuỳ ý.
Tuy nhiên, việc thêm mọi vị trí bị ảnh hưởng vào chính xác một AreaID sẽ đảm bảo rằng các vị trí
trong ô tô đều được thể hiện và có sẵn cách tác động hợp lý để từng chỗ ngồi.
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 thiết bị điều khiển nhiệt độ, mỗi thiết bị cho một thiết bị
phía ghế lái và phía ghế phụ. Một tập hợp lập bản đồ AreaID hợp lệ cho
HVAC_TEMPERATURE_SET
sẽ là một mảng hai phần tử:
- ROW_1_LEFT | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_CENTER | Hàm ROW_2_RIGHT
Một mục á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 | Hàm ROW_2_RIGHT
Ví dụ 2
Một chiếc ô tô có 3 hàng ghế với 2 ghế ở hàng trước (ROW_1_LEFT, ROW_1_RIGHT)
và 3 ghế ở hàng thứ hai (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) và hàng thứ ba
(ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Có ba thiết bị điều khiển nhiệt độ, mỗi thiết bị cho một thiết bị
phía ghế lái, phía ghế phụ và phía sau. Cách lập bản đồ hợp lý
HVAC_TEMPERATURE_SET
so với AreaID là một mảng 3 phần tử:
- ROW_1_LEFT
- Hàm ROW_1_RIGHT
- ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | Hàm 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ử ô tô chỉ hỗ trợ HVAC_auto_ON hai ghế trước. Một tập hợp lập bản đồ AreaID hợp lệ cho HVAC_auto_ON sẽ là một mảng phần tử:
- ROW_1_LEFT | Hàm ROW_1_RIGHT
Nếu HVAC_AUTO_ON
có 2 bộ điều khiển riêng biệt cho phía người lái và hành khách
ánh xạ thay thế sẽ là mảng hai phần tử:
- ROW_1_LEFT
- Hàm 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.
Sử dụng các thuộc tính được mô tả trong bảng này để xác định ngoại thất của xe thứ nguyên.
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 bánh xe thường được bơm căng tại nhà máy. |
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ía trước và phía sau 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 ở mỗi bên của xe, ngoại trừ 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 ở mỗi bên của xe, kể cả gương chiếu hậu. |
Đế bánh xe | 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 đường đua, phía trước | int32Values[5] |
Khoảng cách giữa bánh trước, được đo từ đường tâm của một gai lốp đến đường giữa của rãnh lốp đối diện. |
Chiều rộng của đường đi, phía sau | int32Values[6] |
Khoảng cách giữa bánh xe sau, được đo từ đường tâm của một gai lốp đến tim đường giữa của rãnh lốp đối diện. |
Đường kính quay từ lề đường đến lề đường | 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 quay xong có vô lăng đã khoá hoàn toàn. |
Tuân thủ quy định chung về an toàn của Liên minh Châu Âu
Liệu xe có phải tuân thủ các yêu cầu của Quy định chung về an toàn (GSR) của Liên minh Châu Âu hay không
thông qua Android, 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ợ tốc độ thông minh) theo định nghĩa tại Liên minh Châu Âu
Quy định 2019/2144. Thuộc tính này được thêm vào AIDL VHAL từ Android 13, tuy nhiên
đượ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 định nghĩa là thuộc tính chỉ đọc
thuộc tính số nguyên tĩnh toàn cục, với các giá trị có thể được xác định bởi
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 cho 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 biết cách thuộc tính này được hỗ trợ trong tham chiếu HIDL
VHAL (Lớp trừu tượng phần cứng)
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ợ tài sản này trong AIDL VHAL (trên Android 13), nhà cung cấp có thể sử dụng mã tài sản qua
VehicleProperty.h
và enum từ GsrComplianceRequirementType.h
. Cho
ví dụ: như trong tài liệu tham khảo 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 trong một ứng dụng Android, hãy sử dụng
CarPropertyManager.getIntProperty
.
- Trong Android 13 trở lên, hãy sử dụng
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE
làm mã thuộc tính. - 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. Chiến dịch này
thuộc tính yêu cầu quyền,
Car#PERMISSION_CAR_INFO
.