Thuộc tính đặc biệt

Thuộc tính của nhà cung cấp

Để hỗ trợ các nhu cầu cụ thể của đố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 các 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 chỉ nên được sử dụng như phương sách 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 chặn sự phân mảnh hệ sinh thái, bạn không được dùng các thuộc tính của nhà cung cấp để sao chép các thuộc tính của xe đã có trong SDK VehiclePropertyIds. Để 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 VENDOR 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ô, đủ 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 thuộc tính của nhà cung cấp có thể làm chậm toàn bộ quyền truy cập vào mạng lưới xe. Hãy cẩn thận khi thêm tải trọng lớn.
    • Property ID Chọn một mã nhận dạng gồm 2 byte riêng biệt cho thuộc tính của nhà cung cấp. Ví dụ: 0x1234.
  • Điền VehiclePropConfig.configString bằng nội dung mô tả ngắn về thuộc tính 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 hiện có của xe. Ví dụ: "Thuộc tính 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 thành phần gốc). Không sửa đổi các API khác của ô tô 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 đối với tài sản của nhà cung cấp

Quyền mặc định cho mọi thuộc tính nhà cung cấp được xác định 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, trong đó mảng cấu hình của thuộc tính này chỉ định các quyền đối với thuộc tính riêng 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 nhà cung cấp.
  • configArray[3 * i + 1] Một enum trong VehicleVendorPermission.aidl để cho biết quyền đọc giá trị thuộc tính.
  • configArray[3 * i + 2] Một enum trong VehicleVendorPermission.aidl để cho biết quyền ghi giá trị thuộc tính.

Ví dụ: mảng cấu hình sau đây sẽ định cấu hình 2 thuộc tính của nhà cung cấp, vendor_prop_1vendor_prop_2, để có các quyền sau:

  • vendor_prop_1 yêu cầu android.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 yêu cầu android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO đọc và không thể ghi cho 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ẽ có 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 truy cập được vào tài sản này. Trong ví dụ này, các ứng dụng Android không thể ghi giá trị cho vendor_prop_2. Chỉ các ứ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 Thuộc tính xe ADAS.

GHẾ VÀ VÔ LĂNG

Xem phần Seat and Steering Wheel Properties (Thuộc tính ghế 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 để điều khiển hệ thống sưởi ấm, thông gió và điều hoà không khí (HVAC) bằng cách đặt các thuộc tính liên quan đến HVAC. Hầu hết các thuộc tính HVAC đều được 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 chung. 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 HVAC theo mã nhận dạng 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, bạn phải liệt kê các thuộc tính đó 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 Các thuộc tính hệ thống được hỗ trợ. các tài sản.

Quy tắc để liên kết các thuộc tính HVAC thuộc 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, đều 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 ghế mà chúng "ảnh hưởng nhiều nhất", nhưng mỗi ghế bị ảnh hưởng phải được đưa vào chính xác 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ẻ tuỳ ý, nhưng việc đưa mọi ghế chịu ảnh hưởng vào đúng một AreaID đảm bảo rằng tất cả các ghế trong xe đều được biểu thị và có một cách hợp lý để tác động đến từng ghế.

Ví dụ 1

Một chiếc xe có 2 ghế trước (ROW_1_LEFT, ROW_1_RIGHT) và 3 ghế sau (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Có 2 bộ điều khiển nhiệt độ, mỗi bộ cho phía người lái và phía hành khách. Một bộ ánh xạ hợp lệ của AreaID cho HVAC_TEMPERATURE_SET sẽ là một mảng gồm 2 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 đó hàng ghế trước có 2 ghế (ROW_1_LEFT, ROW_1_RIGHT) và hàng ghế thứ hai có 3 ghế (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) và hàng ghế thứ ba có 3 ghế (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Có 3 bộ phận kiểm soát nhiệt độ, mỗi bộ phận cho phía người lái, phía hành khách và phía sau. Một cách hợp lý để ánh xạ HVAC_TEMPERATURE_SET đến 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 xe có 2 ghế trước (ROW_1_LEFT, ROW_1_RIGHT) và 3 ghế sau (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Giả sử ô tô chỉ hỗ trợ HVAC_AUTO_ON cho 2 ghế trước. Một tập hợp ánh xạ 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ó 2 bộ điều khiển riêng biệt cho phía người lái và phía hành khách, thì một cách ánh xạ thay thế sẽ là mảng gồm 2 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 milimet, như minh hoạ trong Hình 1.

Hình 1. Kích thước bên ngoài của xe, chế độ xem phía trước.
Hình 2. Kích thước bên ngoài của xe, chế độ xem bên.

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 các bánh xe của nhà máy thường được bơm căng.
Thời lượng int32Values[1] Khoảng cách theo phương ngang giữa các điểm ngoài cùng ở phía trước và phía sau của 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, không bao gồm gương chiếu hậu bên hông.
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ên.
Chiều dài cơ sở int32Values[4] Khoảng cách giữa tâm của bánh trước và bánh sau của xe.
Chiều rộng bánh xe trước int32Values[5] Khoảng cách giữa bánh trước, đo từ đường tâm của một gai lốp đến đường tâm của gai lốp đối diện.
Chiều rộng bánh sau int32Values[6] Khoảng cách giữa bánh sau, đo từ đường tâm của một gai lốp đến đường tâm của gai 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 ngoài của xe tạo ra khi xe quay một vòng hoàn chỉnh với 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

Nếu xe 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 thông qua Android, thì tài sản 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) theo định nghĩa 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ừ khi phát hành Android 12. Thuộc tính này được xác định là một thuộc tính số nguyên tĩnh chỉ đọc trên toàn cầu, với các giá trị có thể có được xác định 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 theo yêu cầu là 1.

Để hỗ trợ thuộc tính này trong HIDL VHAL (trong Android 12), các 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 tính năng này được hỗ trợ trong VHAL HIDL tham chiếu 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), các 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 AIDL VHAL tham chiếu 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 dùng VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE làm mã nhận dạng thuộc tính.
  • Trong Android 12, hãy 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.