Tính chất đặ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 API hệ thống. Hãy sử dụng các nguyên tắc sau khi làm việc với 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ư là phương sách cuối cùng khi không có thuộc tính hệ thống nào đáp ứng được 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 các thuộc tính phương tiện đã tồn tại trong SDK VehiclePropertyIds . Để 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 ID thuộc tính:
    • VehiclePropertyGroup:VENDOR VENDOR chỉ được sử 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 thích 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 gửi dữ liệu lớn thường xuyên thông qua thuộc tính của nhà cung cấp có thể làm chậm toàn bộ quá trình truy cập mạng của phương tiện. Hãy cẩn thận khi thêm tải trọng lớn.
    • Property ID Chọn một ID hai byte duy nhất cho thuộc tính của nhà cung cấp. Ví dụ: 0x1234.
  • Điền vào VehiclePropConfig.configString một mô tả ngắn gọn về thuộc tính 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ờ sự sao chép ngẫu nhiên của các thuộc tính phương tiện hiện có. Ví dụ: "Thuộc tính tùy 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 ô tô khác 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 của nhà cung cấp

Quyền mặc định cho mọi thuộc tính của 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 nó chỉ định các quyền cho 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, ID thuộc tính cho thuộc tính 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 để 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 của nhà cung cấp là vendor_prop_1vendor_prop_2 để có quyền:

  • 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 đố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 có trong mảng này sẽ có quyền mặc định của nhà cung cấp. Khi PERMISSION_NOT_ACCESSIBLE được chọn, ứng dụng Android không thể truy cập thuộc tính. Trong ví dụ này, ứng dụng Android không thể ghi giá trị cho vendor_prop_2 . Chỉ khách hà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 tiên tiến (ADAS)

Xem Thuộc tính xe ADAS .

GHẾ VÀ CHỈ ĐẠO

Xem Thuộc tính ghế và vô lăng .

HVAC

Bạn có thể sử 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 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 chung. Các thuộc tính được xác định mẫu bao gồm:

Tài sản Mục đích
HVAC_TEMPERATURE_SET Đặt nhiệt độ cho mỗi ID khu vực.
HVAC_POWER_ON Trạng thái nguồn của hệ thống HVAC trên mỗi ID 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, chúng 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 kiếm HVAC_* trong VehicleProperty.aidl , xem Thuộc tính hệ thống được hỗ trợ . của cải.

Quy tắc ánh xạ các thuộc tính HVAC thuộc loại VehicleArea không phải TOÀN CẦU tới AreaID: Mọi “khu vực” cho một loại VehicleArea cụ thể bị ảnh hưởng bởi thuộc tính đó, phải được bao gồm trong ID 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 đú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ẻ tùy ý, nhưng việc đưa mọi ghế bị ảnh hưởng vào chính xác một AreaID đảm bảo rằng tất cả các ghế trong xe đều được thể hiện và có sẵn cách hợp lý để tác động đến từng ghế.

ví dụ 1

Một ô 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ột bộ dành cho phía người lái và phía hành khách. Một tập hợp ánh xạ 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 | 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 ô tô có ba hàng ghế với hai ghế ở hàng trước (ROW_1_LEFT, ROW_1_RIGHT) và ba ghế ở hàng thứ hai (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) và ba ghế ở hàng thứ ba (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Có ba bộ phận kiểm soát nhiệt độ, một bộ phận dành 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 tới AreaID là mảng ba 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 ô 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 cho hai ghế trước. Một tập hợp ánh xạ AreaID hợp lệ cho HVAC_AUTO_ON sẽ là một mảng phần tử:

  • ROW_1_LEFT | ROW_1_RIGHT

Nếu HVAC_AUTO_ON có hai bộ điều khiển riêng biệt cho phía người lái và phía hành khách, thì ánh xạ thay thế sẽ là một mảng hai phần tử:

  • ROW_1_LEFT
  • ROW_1_RIGHT

Tuân thủ quy định an toàn chung 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 an toàn chung (GSR) của Liên minh Châu Âu thông qua Android thì thuộc tính GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT phải được hỗ trợ. Một trường hợp sử dụng ví dụ là GSR-ISA (Hỗ trợ tốc độ thông minh) như được định nghĩa trong Quy định 2019/2144 của EU. 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 Car Service kể từ khi 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, với các giá trị có thể được xác định bởi GsrComplianceRequirementType enum:

Tên Giá trị Sự miêu tả
GSR_COMPLIANCE_NOT_REQUIRED 0 Không cần tuân thủ GSR
GSR_COMPLIANCE_REQUIRED_V1 1 Cầ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ã hóa cứng ID thuộc tính. Ví dụ: đoạn mã sau cho thấy cách tính năng này được hỗ trợ trong tham chiếu 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 ID thuộc tính từ VehicleProperty.h và enum từ GsrComplianceRequirementType.h . 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 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 ID thuộc tính.
  • Trong Android 12, hãy sử dụng giá trị được mã hóa cứng là 0x11400F47 làm ID thuộc tính. Thuộc tính này cần có sự cho phép, Car#PERMISSION_CAR_INFO .