Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

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

Giao diện Lớp trừu tượng phần cứng xe (VHAL) xác định các thuộc tính OEM có thể triển khai và chứa siêu dữ liệu thuộc tính (ví dụ: liệu 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, ghi, đăng ký) một thuộc tính, là một phần trừu tượng 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ả lại 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 thuộc tính. Kết quả ghi được xác định cho mỗi thuộc tính.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) tạo (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 ra (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 sự thay đổi giá trị tài sản của xe. Chỉ nên thực hiện cho 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 trên mỗi thuộc tính. Lỗi chung khiến HAL khởi động lại, có thể dẫn đến khởi động lại các thành phần khác (bao gồm cả ứng dụng).

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

Các thuộc tính có thể là chỉ đọc, chỉ ghi (được sử dụng để chuyển thông tin đến 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ó kiểu đượ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 hỗ trợ bởi thuộc tính.

Các loại khu vực

VHAL xác định nhiều loại khu vực:

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 enum VehicleAreaWindow .
MIRROR Khu vực dựa trên gương, sử dụng VehicleAreaMirror enum.
SEAT Khu vực dựa trên chỗ ngồi, sử dụng VehicleAreaSeat enum.
DOOR Khu vực dựa trên cửa ra vào, sử dụng VehicleAreaDoor enum.
WHEEL Khu vực dựa trên bánh xe, sử dụng enum VehicleAreaWheel .

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 tập hợp các cờ bit được xác định trong một enum cho loại khu vực. Ví dụ, vùng SEAT xác định các enums 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

Thuộc tính được khoanh vùng được giải quyết thông qua ID vùng. Mỗi thuộc tính được khoanh vùng có thể hỗ trợ một hoặc nhiều ID vùng. 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 thuộc tính:

Mục Sự miêu tả
AVAILABLE Tài sản có sẵn và giá trị hợp lệ.
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 bị vô hiệu hóa tạm thời 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 Trình bày cách một thuộc tính được giám sát, thay đổi so với liên tục.
areaConfigs giá trị areaId , minmax .
configArray Các thông số cấu hình bổ sung.
configString Thông tin bổ sung được chuyển dưới dạng một chuỗi.
minSampleRate maxSampleRate
prop ID thuộc tính, 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 con 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ục, thì ID khu vực là 0.
  • set lệnh gọi cho thuộc tính được khoanh vùng luôn bao gồm ID vùng trong yêu cầu. Do đó, chỉ ID khu vực được yêu cầu mới đượ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, cuộc 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 bật / tắt nguồn riêng biệt. Việc gọi get đối với một thuộc tính như vậy (khi tắt nguồn) sẽ trả về trạng thái UNAVAILABLE chứ không phải 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

Một cuộc gọi set là một hoạt động không đồng bộ liên quan đến thông báo sự kiện sau khi một thay đổi được yêu cầu được thực hiện. Trong một hoạt động điển hình, một cuộc gọi set sẵn dẫn đến việc thực hiện một yêu cầu thay đổi trên mạng phương tiện. Một số lệnh 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ề -EAGAIN . Một số thuộc tính có bật / tắt nguồn riêng biệt sẽ trả về -ESHUTDOWN khi thuộc tính bị tắt nguồn và không thể thực hiện được việc đặt. Cho đến khi set có hiệu lực, get không nhất thiết phải trả về cùng giá trị với giá trị được đặt. 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ý các thuộc tính tùy chỉnh

Để hỗ trợ các nhu cầu cụ thể của đối tác, VHAL cho phép các thuộc tính tùy chỉnh bị hạn chế đối với 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 thích hợp. Kiểu BYTES cho phép truyền dữ liệu thô là đủ trong hầu hết các trường hợp. 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 quá trình truy cập mạng của toàn bộ phương tiện - 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 của hệ sinh thái, các thuộc tính tùy chỉnh không được sử dụng để sao chép các thuộc tính của phương tiện đã tồn tại trong (SDK VehiclePropertyIds ).
  • Điền vào VehiclePropConfig.configString với mô tả ngắn gọ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 sự tỉnh táo để gắn cờ sao chép ngẫu nhiên các thuộc tính hiện có của xe. Ví dụ: "trạng thái đèn 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 nguyên bản). Không sửa đổi các API xe hơi khác vì làm như vậy có thể dẫn đến các vấn đề 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. Việc á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 phân vùng, mặc dù một số thuộc tính không được phân vùng (toàn cục). Các thuộc tính được xác định mẫu bao gồm:

Bất động 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 mỗi vùng.

Để 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 khoanh vùng với ID khu vực sẽ được áp dụng. Mỗi chỗ ngồi còn trống trên xe phải là một phần của ID khu vực trong mảng ID khu vực.

Ví dụ một. 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 độ: bên lái và bên hành khách.

  • Bộ ánh xạ hợp lệ của ID khu vực 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. Một ô 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 thành ID khu vực là 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

Đặc tính cảm biến VHAL thể hiện dữ liệu cảm biến thực hoặc thông tin chính sách như trạng thái lái xe. 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) có thể truy cập được bằng bất kỳ ứng dụng nào mà không bị hạn chế vì dữ liệu là bắt buộc để xây dựng ứng dụng xe 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 các 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 các loại. types.hal ).

Dịch vụ bản đồ phương tiện

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 khách hàng 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ợ Lái xe Nâng cao (ADAS) . Khách hàng có thể bao gồm hệ thống xe 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 xe và các ứng dụng hỗ trợ sử dụng.

VMS chỉ được thiết kế để sử dụng trong việc 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 xe và xác định cách giải mã phần còn lại của thông báo.