Cấu hình tài sản

Mỗi thuộc tính được hỗ trợ được chỉ định bằng một cấu hình thuộc tính được xác định thông qua cấu trúc VehiclePropConfig và có các trường sau.

Trường Mô tả
prop

Mã tài sản. Đây phải là một trong các thuộc tính hệ thống được xác định từ VehicleProperty.aidl hoặc một thuộc tính của nhà cung cấp. Mã tài sản được tạo bằng cách sử dụng bit-or của các trường sau đây (từ phải sang trái):

  • (0x00000000) 16 bit: Mã nhận dạng duy nhất trong phạm vi 0x0100 – 0xffff.
  • (0x00000000) 8 bit: Loại thuộc tính xác định loại thuộc tính.
  • (0x00000000) 4 bit: Loại khu vực.
  • (0x00000000) 4 bit: VehiclePropertyGroup Đây là SYSTEM (0x10000000) hoặc VENDOR (0x20000000). Xem phần Thuộc tính của nhà cung cấp để biết các thuộc tính mà bạn có thể tuỳ chỉnh.

Ví dụ:
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)

access
  • Chế độ truy cập cho tài sản. Phải là một trong các giá trị READ, WRITE hoặc READ_WRITE.
  • Đối với các thuộc tính hệ thống, đây phải là một trong các chế độ truy cập được xác định được ghi lại trong VehicleProperty.aidl.
  • Đối với các thuộc tính có quyền truy cập theo khu vực, đây là tập hợp con tối đa của quyền truy cập theo khu vực, ví dụ: nếu các thuộc tính có hai khu vực có quyền truy cập là READREAD_WRITE, thì bạn nên đặt giá trị này thành READ.
changeMode
  • Thay đổi chế độ cho thuộc tính. Phải là một trong các giá trị STATIC, ON_CHANGE hoặc CONTINUOUS. STATIC có nghĩa là giá trị thuộc tính không bao giờ thay đổi sau khi khởi động hệ thống. ON_CHANGE có nghĩa là VHAL phải báo cáo khi giá trị thay đổi. CONTINUOUS có nghĩa là giá trị thuộc tính thay đổi liên tục và VHAL phải báo cáo dựa trên tốc độ lấy mẫu của gói thuê bao.
  • Đối với các thuộc tính hệ thống, giá trị này phải bằng chế độ thay đổi được ghi lại trong VehicleProperty.aidl.
configArray Một mảng không bắt buộc để chứa cấu hình dành riêng cho thuộc tính. Có thể để trống. Đối với một số thuộc tính hệ thống nhất định, chẳng hạn như GEAR_SELECTION, mảng cấu hình có ý nghĩa đặc biệt và phải được chỉ định.
configString Chuỗi tuỳ chọn để chứa cấu hình dành riêng cho tài sản. Có thể để trống.
minSampleRatemaxSampleRate Tốc độ lấy mẫu tối thiểu và tối đa được hỗ trợ cho thuộc tính liên tục (tính bằng Hertz). Không được sử dụng nếu thuộc tính không liên tục. minSampleRatemaxSampleRate phải đạt được bằng cách triển khai VHAL. Không phải tốc độ lấy mẫu nào trong khoảng từ tối thiểu đến tối đa đều được hỗ trợ.

Loại cơ sở lưu trú

Được xác định là enum trong VehiclePropertyType.aidl. Các loại thuộc tính được hỗ trợ được liệt kê trong bảng sau.

Loại tài sản Giá trị Mô tả
STRING 0x00100000 Thuộc tính chuỗi, sử dụng trường stringValue trong Giá trị thuộc tính xe.
BOOLEAN 0x00200000 Thuộc tính Boolean, sử dụng phần tử đầu tiên trong trường int32Values trong Giá trị thuộc tính xe. 0 có nghĩa là false, None 0 có nghĩa là true.
INT32 0x00400000 Thuộc tính Integer, sử dụng phần tử đầu tiên trong trường int32Values trong Giá trị thuộc tính xe.
INT32_VEC 0x00410000 Thuộc tính Integer[], sử dụng các phần tử trong trường int32Values trong Giá trị thuộc tính xe.
INT64 0x00500000 Thuộc tính dài, sử dụng phần tử đầu tiên trong trường int64Values trong Giá trị thuộc tính xe.
INT64_VEC 0x00510000 Thuộc tính Long[], sử dụng các phần tử trong trường int64Values trong Giá trị thuộc tính xe.
FLOAT 0x00600000 Thuộc tính Float, sử dụng phần tử đầu tiên trong trường floatValues trong Giá trị thuộc tính xe.
FLOAT_VEC 0x00610000 Thuộc tính Float[], sử dụng các phần tử trong trường floatValues trong Giá trị thuộc tính xe.
BYTES 0x00700000 Thuộc tính byte[], sử dụng các phần tử trong trường byteValues trong Giá trị thuộc tính xe.
MIXED 0x00e00000 Thuộc tính loại hỗn hợp. Bất kỳ tổ hợp nào của các loại vectơ hoặc vô hướng. Bạn phải cung cấp định dạng chính xác trong mảng cấu hình trong cấu hình tài sản.

Đối với các thuộc tính loại MIXED của nhà cung cấp, configArray cần được định dạng theo cấu trúc sau:

  • configArray[0], 1 cho biết thuộc tính có giá trị String
  • configArray[1], 1 cho biết thuộc tính có giá trị Boolean
  • configArray[2], 1 cho biết thuộc tính có giá trị Integer
  • configArray[3], số này cho biết kích thước của Integer[] trong thuộc tính
  • configArray[4], 1 cho biết thuộc tính có giá trị Long
  • configArray[5], số này cho biết kích thước của Long[] trong thuộc tính
  • configArray[6], 1 cho biết thuộc tính có giá trị Float
  • configArray[7], số này cho biết kích thước của Float[] trong thuộc tính
  • configArray[8], số này cho biết kích thước của byte[] trong thuộc tính.

Ví dụ: configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} cho biết thuộc tính có giá trị String, giá trị Boolean, giá trị Integer và một mảng có ba số nguyên.

Định cấu hình mã khu vực

Mỗi cấu hình tài sản cũng có thể chứa danh sách cấu hình mã khu vực. Danh sách này là không bắt buộc đối với các tài sản toàn cầu và bắt buộc đối với các tài sản theo khu vực (tài sản có nhiều khu vực được hỗ trợ). Mỗi cấu hình mã khu vực đều có các trường sau.

Trường Mô tả
areaId Mã nhận dạng cho khu vực này. Xem Mã khu vực.
minInt32ValuemaxInt32Value
  • Giá trị tối thiểu và tối đa không bắt buộc cho các thuộc tính loại INT32 tại thời điểm khởi động. Phải là 0 đối với tất cả các loại khác. Bỏ qua nếu cả hai đều bằng 0.
  • Đối với thuộc tính chung, nếu cần xác định giá trị tối thiểu và tối đa, bạn phải sử dụng một cấu hình khu vực có mã khu vực là 0.
  • Giá trị này là tĩnh và sẽ không thay đổi ngay cả khi giá trị tối thiểu hoặc tối đa thay đổi trong thời gian chạy. Triển khai IVehicle#getMinMaxSupportedValue cho giá trị tối thiểu hoặc tối đa động.
minInt64ValuemaxInt64Value
  • Giá trị tối thiểu và tối đa không bắt buộc cho các thuộc tính loại INT64 tại thời điểm khởi động. Phải là 0 đối với tất cả các loại khác. Bỏ qua nếu cả hai đều bằng 0.
  • Đối với thuộc tính chung, nếu cần xác định giá trị tối thiểu và tối đa, bạn phải sử dụng một cấu hình khu vực có mã khu vực là 0.
  • Giá trị này là tĩnh và sẽ không thay đổi ngay cả khi giá trị tối thiểu hoặc tối đa thay đổi trong thời gian chạy. Triển khai IVehicle#getMinMaxSupportedValue cho giá trị tối thiểu hoặc tối đa động.
minFloatValuemaxFloatValue
  • Giá trị tối thiểu và tối đa không bắt buộc cho các thuộc tính loại Float tại thời điểm khởi động. Phải là 0 đối với tất cả các loại khác. Bỏ qua nếu cả hai đều bằng 0.0.
  • Đối với thuộc tính chung, nếu cần xác định giá trị tối thiểu và tối đa, bạn phải sử dụng một cấu hình khu vực có mã khu vực là 0.
  • Giá trị này là tĩnh và sẽ không thay đổi ngay cả khi giá trị tối thiểu hoặc tối đa thay đổi trong thời gian chạy. Triển khai IVehicle#getMinMaxSupportedValue cho giá trị tối thiểu hoặc tối đa động.
(Mới trong Android 14)
supportedEnumValues
  • Danh sách không bắt buộc gồm các giá trị được hỗ trợ tại thời điểm khởi động nếu thuộc tính được xác định là thuộc tính loại enum. Nếu không được chỉ định (trống) hoặc trước Android 14, thì tất cả các giá trị enum đều được giả định là được hỗ trợ.
  • Đối với tài sản chung, nếu cần xác định các giá trị enum được hỗ trợ, bạn phải sử dụng một cấu hình khu vực có mã khu vực là 0.
  • Giá trị này là tĩnh và sẽ không thay đổi ngay cả khi các giá trị được hỗ trợ thay đổi trong thời gian chạy. Triển khai IVehicle#getSupportedValuesLists cho các giá trị được hỗ trợ linh động.
  • Điều này chỉ áp dụng cho các thuộc tính loại enum. Đối với các loại khác, trường này phải để trống. Để hiển thị các giá trị được hỗ trợ cho các loại không phải enum khác, hãy sử dụng IVehicle#getSupportedValuesLists.
(Mới trong Android 15)
supportVariableUpdateRate
  • Liệu tốc độ cập nhật biến có được hỗ trợ hay không. Điều này chỉ áp dụng cho các thuộc tính liên tục.
  • Nếu giá trị này là true, thì ứng dụng có thể bật tốc độ cập nhật biến cho một gói thuê bao để chỉ nhận sự kiện cập nhật thuộc tính khi giá trị thuộc tính thay đổi (tức là coi các thuộc tính liên tục là thuộc tính thay đổi).
  • Nếu tất cả người đăng ký của một tài sản đang bật tốc độ cập nhật biến, thì yêu cầu đăng ký với VHAL sẽ bật tốc độ cập nhật biến cho tài sản và VHAL chỉ được gửi sự kiện cập nhật tài sản khi giá trị tài sản thay đổi.
  • Nếu có người đăng ký nào yêu cầu tốc độ cập nhật cố định, thì yêu cầu đăng ký với VHAL sẽ tắt tốc độ cập nhật biến cho tài sản và AAOS sẽ lọc ra các sự kiện trùng lặp cho những ứng dụng yêu cầu tốc độ cập nhật biến.
  • Bạn NÊN hỗ trợ tốc độ cập nhật biến cho tất cả các thuộc tính liên tục không phải là nhịp tim để có hiệu suất tốt hơn, trừ phi dữ liệu thuộc tính có kích thước lớn (ví dụ: mảng byte có kích thước 1k) và có thể chiếm nhiều bộ nhớ để lưu vào bộ nhớ đệm.
(Mới trong Android 16)
hasSupportedValueInfo
  • Nếu không phải null, hãy cho biết thuộc tính này chỉ định giá trị tối thiểu hay tối đa được hỗ trợ hoặc danh sách giá trị được hỗ trợ.
  • Trường này kiểm soát việc liệu các API giá trị được hỗ trợ động: getMinMaxSupportedValue, getSupportedValuesLists, subscribeSupportedValueChange, unsubscribeSupportedValueChange có được hỗ trợ cho mã tài sản và mã khu vực này hay không.
  • Nếu không phải null, VHAL phải triển khai các API này cho mã tài sản và mã khu vực này.
  • Nếu null hoặc trong Android 15 trở xuống, thì các giá trị được hỗ trợ linh động cho mã tài sản và mã khu vực này sẽ không được hỗ trợ. Ứng dụng phải sử dụng thông tin giá trị được hỗ trợ tĩnh được cung cấp trong cấu hình thuộc tính xe.

Loại khu vực

Được xác định là enum trong VehicleArea.aidl. Dưới đây là danh sách các loại khu vực được hỗ trợ.

Loại khu vực Giá trị Mô tả
TOÀN CẦU 0x01000000 Tài sản này là tài sản toàn cục và không có nhiều khu vực.
CỬA SỔ 0x03000000 Khu vực dựa trên cửa sổ, sử dụng enum VehicleAreaWindow.
MIRROR 0x04000000 Khu vực dựa trên gương, sử dụng enum VehicleAreaMirror.
CHỖ NGỒI 0x05000000 Diện tích dựa trên số ghế, sử dụng enum VehicleAreaSeat.
CỬA 0x06000000 Khu vực dựa trên cửa, sử dụng enum VehicleAreaDoor.
VÒNG ĐU QUAY 0x07000000 Diện tích dựa trên bánh xe, sử dụng enum VehicleAreaWheel.

Mỗi cơ sở lưu trú được phân vùng phải sử dụng một loại khu vực được xác định trước. Mỗi loại khu vực có một nhóm cờ bit được xác định trong một enum cho loại khu vực. Ví dụ: khu vực SEAT xác định các enum VehicleAreaSeat:

  • 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
  • ...

Mã khu vực

Các tài sản được phân vùng được xác định thông qua Mã khu vực. Mỗi cơ sở lưu trú được phân vùng có thể hỗ trợ một hoặc nhiều mã khu vực. Mã khu vực bao gồm một hoặc nhiều cờ từ enum tương ứng. Ví dụ: một tài sản sử dụng VehicleAreaSeat có thể sử dụng các Mã khu vực sau:

Mục Mô tả
ROW_1_LEFT | ROW_1_RIGHT Mã khu vực áp dụng cho cả hai ghế trước.
ROW_2_LEFT Chỉ áp dụng cho ghế sau bên trái.
ROW_2_RIGHT Chỉ áp dụng cho ghế sau bên phải.

Để tìm hiểu thêm, hãy xem phần HVAC.