Thuộc tính phương tiện

Giao diện Lớp trừu tượng hóa phần cứng phương tiện (VHAL) xác định các thuộc tính mà OEM có thể triển khai và chứa siêu dữ liệu thuộc tính (ví dụ: thuộc tính có phải là int hay không và chế độ thay đổi nào được phép). Giao diện VHAL dựa trên việc truy cập (đọc, viết, đăng ký) một thuộc tính, là một sự trừu tượng hóa cho một chức năng cụ thể.

giao diện HAL

VHAL sử dụng các giao diện sau:

  • getAllPropConfigs() tạo ra (vec<VehiclePropConfig>propConfigs)
    Liệt kê cấu hình của tất cả các thuộc tính được hỗ trợ bởi VHAL. CarService chỉ sử dụng các thuộc tính được hỗ trợ.
  • getPropConfigs(vec<int32_t> props) tạo ra (StatusCode status,vec<VehiclePropConfig> propConfigs);
    Trả về cấu hình của các thuộc tính đã chọn.
  • set(VehiclePropValue propValue) tạo ra (StatusCodestatus);
    Viết một giá trị cho tài sản. Kết quả ghi được xác định cho mỗi thuộc tính.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) tạo ra (StatusCode status);
    Bắt đầu theo dõi sự thay đổi giá trị tài sản. Đối với thuộc tính được khoanh vùng, unsubscribe(IVehicleCallback callback, int32_t propId) tạo (StatusCode status);

VHAL sử dụng các giao diện gọi lại sau:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    Thông báo thay đổi giá trị tài sản xe. Chỉ nên thực hiện đối với các thuộc tính đã đăng ký.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Trả về lỗi cấp độ VHAL toàn cầu hoặc lỗi cho mỗi thuộc tính. Lỗi toàn cầu khiến HAL khởi động lại, điều này có thể dẫn đến việc khởi động lại các thành phần khác (bao gồm cả ứng dụng).

tài sản xe

Các thuộc tính có thể là chỉ đọc, chỉ ghi (được sử dụng để truyền thông tin tới mức VHAL) hoặc đọc và ghi (hỗ trợ của hầu hết các thuộc tính là tùy chọn). Mỗi thuộc tính được xác định duy nhất bằng khóa int32 và có loại được xác định trước ( value_type ):

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

Thuộc tính được khoanh vùng có thể có nhiều giá trị, dựa trên số vùng được thuộc tính hỗ trợ.

các loại diện tích

VHAL định nghĩa nhiều loại vùng:

Loại khu vực Sự miêu tả
GLOBAL Thuộc tính này là một singleton và không có nhiều khu vực.
WINDOW Khu vực dựa trên cửa sổ, sử dụng VehicleAreaWindow enum.
MIRROR Khu vực dựa trên gương, sử dụng VehicleAreaMirror enum.
SEAT Diện tích dựa trên ghế ngồi, sử dụng VehicleAreaSeat enum.
DOOR Diện tích dựa trên cửa ra vào, sử dụng VehicleAreaDoor enum.
WHEEL Diện tích dựa trên bánh xe, sử dụng VehicleAreaWheel enum.

Mỗi thuộc tính được khoanh 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 bộ cờ bit được xác định trong một enum cho loại khu vực. Ví dụ, khu vực SEAT định nghĩa 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
  • ...

ID khu vực

Các thuộc tính được khoanh vùng được giải quyết thông qua ID khu vực. Mỗi thuộc tính được khoanh vùng có thể hỗ trợ một hoặc nhiều ID khu vực. ID khu vực bao gồm một hoặc nhiều cờ từ enum tương ứng của nó. Ví dụ: một thuộc tính sử dụng VehicleAreaSeat có thể sử dụng các ID khu vực sau:

Mục Sự miêu tả
ROW_1_LEFT | ROW_1_RIGHT ID 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ình Trạng Tài Sản

Mọi giá trị thuộc tính đều đi kèm với giá trị VehiclePropertyStatus . Điều này cho biết trạng thái hiện tại của tài sản:

Mục Sự miêu tả
AVAILABLE Tài sản có sẵn và giá trị có giá trị.
UNAVAILABLE Giá trị tài sản hiện không có sẵn. Được sử dụng cho các tính năng tạm thời bị vô hiệu hóa cho thuộc tính được hỗ trợ.
ERROR Có gì đó không ổn với tài sản này.

Định cấu hình thuộc tính

Sử dụng VehiclePropConfig để cung cấp thông tin cấu hình cho từng thuộc tính. Thông tin bao gồm:

Biến đổi Sự miêu tả
access r , w , rw
changeMode Thể hiện cách một thuộc tính được theo dõi, khi thay đổi so với liên tục.
areaConfigs các giá trị areaId , minmax .
configArray Thông số cấu hình bổ sung.
configString Thông tin bổ sung được chuyển dưới dạng chuỗi.
minSampleRate maxSampleRate
prop ID tài sản, int

Xử lý thuộc tính vùng

Thuộc tính được khoanh vùng tương đương với một tập hợp nhiều thuộc tính trong đó mỗi thuộc tính phụ có thể được truy cập bằng giá trị ID khu vực được chỉ định.

  • get cuộc gọi cho thuộc tính được khoanh vùng luôn bao gồm ID khu vực trong yêu cầu. Do đó, chỉ giá trị hiện tại cho ID khu vực được yêu cầu được trả về. Nếu thuộc tính là toàn cầu, thì ID khu vực là 0.
  • set cuộc gọi cho thuộc tính được khoanh vùng luôn bao gồm ID khu vực trong yêu cầu. Do đó, chỉ ID khu vực được yêu cầu được thay đổi.
  • cuộc gọi subscribe tạo sự kiện cho tất cả ID khu vực cho thuộc tính.

Nhận cuộc gọi

Trong quá trình khởi tạo, giá trị của thuộc tính có thể chưa khả dụng do chưa nhận được thông báo mạng xe phù hợp. Trong những trường hợp như vậy, lệnh gọi get sẽ trả về -EAGAIN . Một số thuộc tính (chẳng hạn như HVAC) có thuộc tính nguồn bật/tắt riêng biệt. Gọi get cho một thuộc tính như vậy (khi tắt nguồn) sẽ trả về trạng thái UNAVAILABLE thay vì trả về lỗi. Ví dụ: lấy Nhiệt độ HVAC

VHAL lấy ví dụ về HVAC

Hình 1 . Nhận nhiệt độ HVAC (CS = CarService, VHAL = Vehicle HAL)

Đặt cuộc gọi

Trong một hoạt động điển hình, một cuộc gọi set dẫn đến việc thực hiện một yêu cầu thay đổi trên mạng xe. Một lệnh gọi set lý tưởng là một hoạt động không đồng bộ trả về ngay khi có thể, nhưng nó cũng có thể là đồng bộ. Một số cuộc gọi set có thể yêu cầu dữ liệu ban đầu sẵn sàng nhưng trong quá trình khởi tạo, dữ liệu đó có thể chưa có sẵn. Trong những trường hợp như vậy, lệnh gọi set sẽ trả về StatusCode#TRY_AGAIN . Một số thuộc tính có tính năng bật và tắt nguồn riêng biệt sẽ trả về StatusCode#NOT_AVAILABLE hoặc StatusCode#NOT_AVAILABLE_DISABLED khi thuộc tính bị tắt nguồn và không thể set được. Cho đến khi set có hiệu lực, get không nhất thiết phải trả về cùng giá trị như giá trị đã set. Ví dụ: set HVAC Temperature .

VHAL thiết lập ví dụ HVAC

Hình 2 . Đặt nhiệt độ HVAC (CS = CarService, VHAL = Vehicle HAL)

Xử lý thuộc tính tùy chỉnh

Để 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 tùy chỉnh được giới hạn cho các ứng dụng hệ thống. Sử dụng các nguyên tắc sau khi làm việc với các thuộc tính tùy chỉnh:

  • ID thuộc tính phải được tạo bằng các trường sau:
    • VehiclePropertyGroup:VENDOR
      Nhóm VENDOR chỉ được sử dụng cho các thuộc tính tùy chỉnh.
    • VehicleArea
      Chọn một Loại Khu vực thích hợp.
    • VehiclePropertyType
      Chọn kiểu dữ liệu phù hợp. Loại BYTES cho phép truyền dữ liệu thô là đủ 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 các thuộc tính tùy chỉnh 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 trọng tải lớn.
    • Property ID
      Chọn một ID bốn nibble cho thuộc tính tùy chỉnh.
  • Để ngăn chặn sự phân mảnh hệ sinh thái, không được sử dụng các thuộc tính tùy chỉnh để sao chép các thuộc tính phương tiện đã tồn tại trong ( VehiclePropertyIds SDK).
  • Điền vào VehiclePropConfig.configString một mô tả ngắn về thuộc tính tùy chỉnh. Điều này cho phép các công cụ kiểm tra độ chính xác gắn cờ sự sao chép vô tình của các thuộc tính phương tiện hiện có. Ví dụ: "trạng thái ánh sáng nguy hiểm."
  • Truy cập thông qua CarPropertyManager (đối với các thành phần Java) hoặc thông qua API Dịch vụ Mạng Xe (đối với bản địa). Không sửa đổi các API ô tô khác vì làm như vậy có thể dẫn đến các sự cố tương thích trong tương lai.
  • Sau khi triển khai các thuộc tính của nhà cung cấp, chỉ chọn danh sách quyền trong enum VehicleVendorPermission cho các thuộc tính của nhà cung cấp. Ánh xạ các quyền của nhà cung cấp tới các thuộc tính hệ thống sẽ phá vỡ CTS và VTS.

Xử lý thuộc tính 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 là thuộc tính được khoanh vùng, mặc dù một số thuộc tính không được khoanh vùng (toàn cầu). Các thuộc tính được xác định mẫu bao gồm:

Tài sản Mục đích
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Đặt nhiệt độ cho mỗi vùng.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Kiểm soát tuần hoàn trên mỗi khu vực.

Để xem danh sách đầy đủ các thuộc tính HVAC, hãy tìm kiếm VEHICLE_PROPERTY_HVAC_* trong types.hal . Khi thuộc tính HVAC sử dụng VehicleAreaSeat , các quy tắc bổ sung để ánh xạ thuộc tính HVAC được phân vùng thành ID khu vực sẽ được áp dụng. Mỗi ghế có sẵn trong ô tô phải là một phần của ID khu vực trong mảng ID khu vực.

Ví dụ 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 ). Xe có hai bộ phận kiểm soát nhiệt độ: phía người lái và phía hành khách.

  • Tập hợp ID khu vực ánh xạ hợp lệ cho HVAC_TEMPERATURE SET là:
    • 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 là:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

Ví dụ Hai. Ô tô có ba hàng ghế với hai ghế ở hàng trước ( ROW_1_LEFT, ROW_1_RIGHT ), 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 ). Xe có ba bộ phận kiểm soát nhiệt độ: 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 ID khu vực dưới dạng một 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

Xử lý thuộc tính cảm biến

Thuộc tính cảm biến VHAL đại diện cho dữ liệu cảm biến thực hoặc thông tin chính sách, chẳng hạn như trạng thái lái xe. Bất kỳ ứng dụng nào cũng có thể truy cập một số thông tin cảm biến (chẳng hạn như trạng thái lái xe và chế độ ngày/đêm) mà không bị hạn chế vì dữ liệu là bắt buộc để xây dựng ứng dụng phương tiện an toàn. Thông tin cảm biến khác (chẳng hạn như tốc độ xe) nhạy cảm hơn và yêu cầu quyền cụ thể mà người dùng có thể quản lý.

Xem các thuộc tính cảm biến được hỗ trợ (trong types.hal ).

Dịch vụ bản đồ xe

Dịch vụ Bản đồ Phương tiện (VMS) cung cấp cơ chế trao đổi dữ liệu bản đồ giữa các máy khách thông qua giao diện pub/sub để hỗ trợ các tính năng phổ biến của phương tiện, chẳng hạn như Hệ thống Hỗ trợ Người lái Nâng cao (ADAS) . Khách hàng có thể bao gồm các hệ thống phương tiện giao tiếp thông qua thuộc tính VMS trong VHAL hoặc các ứng dụng Android đặc quyền. Dữ liệu được chia sẻ trên VMS nhằm mục đích giới hạn ở dữ liệu bản đồ để các hệ thống phương tiện và ứng dụng hỗ trợ sử dụng.

VMS chỉ dành cho mục đích sử dụng trong triển khai Android Automotive; AOSP không chứa các ứng dụng khách mặc định xuất bản hoặc đăng ký VMS. Đối với thuộc tính VMS trong VHAL, các loại thông báo và cấu trúc dữ liệu được mô tả trong VHAL 2.0 trong enum VmsMessageType , liệt kê các loại thông báo VMS được hỗ trợ. Enum này được sử dụng làm số nguyên đầu tiên trong mảng số nguyên thuộc tính phương tiện và xác định cách giải mã phần còn lại của thông báo.