AIDL VHAL được xác định trong android.hardware.automotive.vehicle namespace
.
Giao diện VHAL được xác định tại IVehicle.aidl
.
Trừ phi được chỉ định, tất cả phương thức đều phải được triển khai.
Phương thức | |
---|---|
VehiclePropConfigs getAllPropConfigs()
|
|
VehiclePropConfigs getPropConfigs(in int[] props)
|
|
void getValues(IVehicleCallback callback, in GetValueRequests requests)
GetValueRequest không đồng bộ. Kết quả được phân phối thông qua phương thức gọi lại onGetValues . |
|
void setValues(IVehicleCallback callback, in SetValueRequests requests)
SetValueRequest . Kết quả được phân phối thông qua phương thức gọi lại onSetValues . |
|
void subscribe(in IVehicleCallback callback, in SubscribeOptions[] options, int maxSharedMemoryFileCount)
maxSharedMemoryFileCount . |
|
void unsubscribe(in IVehicleCallback callback, in int[] propIds)
|
|
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId)
|
Các lệnh gọi lại được xác định tại IVehicleCallback.aidl
và chứa các phương thức này.
Phương thức | |
---|---|
oneway void onGetValues(in GetValueResults responses)
getValues để phân phối kết quả nhận giá trị. Được gọi khi một số giá trị cần tìm nạp đã sẵn sàng. |
|
oneway void onSetValues(in SetValueResults responses)
setValues để phân phối kết quả giá trị đã đặt. Được gọi khi VHAL đã xử lý xong một số yêu cầu về tập hợp thuộc tính. |
|
oneway void onPropertyEvent(in VehiclePropValues propValues, int sharedMemoryFileCount)
CONTINUOUS , một sự kiện thuộc tính sẽ xảy ra dựa trên tốc độ lấy mẫu đăng ký
theo Hz hoặc tần suất thông báo của bus xe. Sự kiện của tài sản cũng có thể xảy ra nếu trạng thái của
cơ sở lưu trú thay đổi. Ví dụ: từ không có sẵn sang có sẵn.ON_CHANGE , sự kiện thuộc tính sẽ xảy ra khi giá trị của một thuộc tính hoặc trạng thái của một thuộc tính thay đổi.SharedMemoryFileCount luôn là 0 . |
|
oneway void onPropertySetError(in VehiclePropErrors errors)
onSetValues có kết quả lỗi thay vì lỗi này. |
Để biết thêm thông tin, hãy xem IVehicle.aidl và IVehicleCallback.aidl.
Quá trình triển khai VHAL được xác thực bằng VHAL VTS tại VtsHalAutomotiveVehicle_TargetTest.cpp. Quy trình kiểm thử xác minh rằng các phương thức cơ bản được triển khai chính xác và cấu hình tài sản được hỗ trợ là chính xác.
Giá trị thuộc tính xe
Sử dụng cấu trúc VehiclePropValue
để mô tả giá trị của từng thuộc tính, trong đó có các trường sau:
Trường | Mô tả |
---|---|
timestamp
| Dấu thời gian thể hiện thời gian diễn ra sự kiện và được đồng bộ hoá với đồng hồ SystemClock.elapsedRealtimeNano() . |
prop |
Mã thuộc tính cho giá trị này. |
areaid |
Mã khu vực cho giá trị này. Khu vực phải là một trong các khu vực được hỗ trợ được liệt kê trong cấu hình mã khu vực hoặc 0 đối với các cơ sở lưu trú chung. |
value |
Cấu trúc dữ liệu chứa giá trị thuộc tính thực tế. Dựa trên loại thuộc tính, một hoặc nhiều trường trong trường này được dùng để lưu trữ giá trị thực tế. Ví dụ: phần tử đầu tiên trong value.int32Values được dùng cho các thuộc tính loại Int32. Để biết thông tin chi tiết, hãy xem phần Cấu hình tài sản. |
getValues và setValues không đồng bộ
Các thao tác getValues
và setValues
được thực hiện không đồng bộ, nghĩa là hàm có thể trả về trước khi hoàn tất thao tác lấy hoặc đặt thực tế.
Kết quả của thao tác (ví dụ: giá trị thuộc tính cho getValues
và trạng thái thành công hoặc lỗi cho setValues
) được phân phối thông qua các lệnh gọi lại được truyền dưới dạng đối số.
Quá trình triển khai không được chặn kết quả trong luồng liên kết xử lý yêu cầu. Thay vào đó, bạn nên lưu trữ yêu cầu trong hàng đợi yêu cầu và sử dụng luồng trình xử lý riêng để xử lý các yêu cầu không đồng bộ. Vui lòng xem phần Quy trình triển khai tệp tham chiếu để biết thông tin chi tiết.
Hình 1. Quá trình không đồng bộ.
Các gói có thể phân phối lớn
Tất cả cấu trúc có tên XXXs
, chẳng hạn như VehiclePropConfigs
, SetValueRequests
và VehiclePropValues
đều được gọi là LargeParcelable
(hoặc StableLargeParcelable
). Mỗi cấu trúc đại diện cho một danh sách các giá trị dùng để truyền dữ liệu lớn có thể vượt quá giới hạn liên kết (4KB trong quá trình triển khai thư viện LargeParcelable
) qua các ranh giới liên kết. Mỗi loại đều có định nghĩa cấu trúc tương tự chứa các trường sau.
Hướng dẫn | Mô tả |
---|---|
payloads |
Danh sách giá trị khi kích thước giá trị phù hợp với giới hạn bộ nhớ liên kết hoặc danh sách trống. |
sharedMemoryFd |
Chỉ số mô tả tệp rỗng trỏ đến một tệp bộ nhớ dùng chung lưu trữ các tải trọng đã chuyển đổi tuần tự nếu danh sách giá trị quá lớn. |
Ví dụ: VehiclePropConfigs
được xác định là:
parcelable VehiclePropConfigs {
// The list of vehicle property configs if they fit the binder memory
// limitation.
VehiclePropConfig[] payloads;
// Shared memory file to store configs if they exceed binder memory
// limitation. Created by VHAL, readable only at client. Client could keep
// the fd opened or keep the FD mapped to access configs.
@nullable ParcelFileDescriptor sharedMemoryFd;
}
VehiclePropConfigs
chứa tải trọng không trống hoặc sharedMemoryFd
không rỗng.
- Nếu
payloads
không trống, thì thuộc tính này sẽ lưu trữ danh sách dữ liệu thực tế, tức là cấu hình thuộc tính. - Nếu
sharedMemoryFd
không rỗng, thì tệp này sẽ chứa một tệp bộ nhớ dùng chung, lưu trữ cấu trúc tuần tự củaVehiclePropConfigs
. Cấu trúc này sử dụng hàmwriteToParcel
để chuyển đổi tuần tự một Gói.
Là một ứng dụng Java cho VHAL, Dịch vụ ô tô xử lý việc chuyển đổi tuần tự và huỷ chuyển đổi tuần tự cho LargeParcelable
. Đối với các hoạt động triển khai VHAL và ứng dụng gốc, LargeParcelable
phải được chuyển đổi tuần tự và giải tuần tự bằng thư viện LargeParcelable
hoặc một lớp trình bao bọc hữu ích cho thư viện trong ParcelableUtils.h
.
Ví dụ: một ứng dụng gốc phân tích cú pháp các yêu cầu cho getValues
nhận được từ một liên kết như sau:
// 'requests' are from the binder.
GetValueRequests requests;
expected
Dưới đây là ví dụ về cách triển khai VHAL để gửi kết quả cho getValues
thông qua trình liên kết:
std::vector