Chúng tôi cung cấp một cách triển khai tham chiếu cho AIDL VHAL. Luồng dịch vụ chính được triển khai tại VehicleService.cpp
.
Phần triển khai giao diện VHAL nằm ở DefaultVehicleHal.cpp
.
Việc triển khai tham chiếu dựa trên cấu trúc hai lớp. Ở lớp trên, DefaultVehicleHal
triển khai giao diện VHAL AIDL và cung cấp logic VHAL chung cho tất cả thiết bị phần cứng. Trên lớp thấp hơn, FakeVehicleHardware
, triển khai giao diện IVehicleHardware
. Lớp này mô phỏng logic VHAL về việc tương tác với phần cứng thực tế hoặc xe buýt thực tế và dành riêng cho từng thiết bị. Nhà cung cấp có thể tuỳ ý điều chỉnh cùng một cấu trúc này, sử dụng lại cùng một lớp DefaultVehicleHal
(mở rộng lớp đó để ghi đè một phương thức) và cung cấp cách triển khai IVehicleHardware
của riêng họ.
DefaultVehicleHal
chứa logic sau đây (được coi là chung và có thể áp dụng cho mọi cách triển khai VHAL).
- Triển khai giao diện
IVehicle
. - Thực hiện các bước kiểm tra đầu vào cơ bản, bao gồm cả việc kiểm tra mã nhận dạng trùng lặp.
- Phân bổ đối tượng ứng dụng (ví dụ:
GetValuesClient
) cho mỗi thao tác cho mỗi ứng dụng liên kết và thêm từng đối tượng vào một nhóm toàn cục. - Quản lý logic của lệnh gọi lại không đồng bộ, chẳng hạn như thêm một yêu cầu đang chờ xử lý vào một nhóm yêu cầu đang chờ xử lý. Giải quyết các yêu cầu đang chờ xử lý khi chúng tôi nhận được kết quả hoặc trả về lỗi khi một trong các yêu cầu đang chờ xử lý hết thời gian chờ.
- Tuần tự hoá và giải tuần tự hoá
LargeParcelable
(xemParcelableUtils.h
). - Quản lý gói thuê bao (xem
SubscriptionManager.h
). - Kiểm tra quyền. (Xem hàm
checkReadPermission
vàcheckWritePermission
). - Định kỳ gọi IVehicleHardware.checkHealth và gửi tín hiệu nhịp tim (xem hàm
checkHealth
).
IVehicleHardware
là một giao diện chung dùng để biểu thị phương thức triển khai dành riêng cho phần cứng của VHAL. Cách triển khai tham chiếu cho IVehicleHardware
là FakeVehicleHardware
, sử dụng bản đồ trong bộ nhớ để lưu trữ giá trị thuộc tính và không giao tiếp với một chiếc xe buýt thực tế. Ứng dụng này được thiết kế để chạy trên trình mô phỏng và không có phần phụ thuộc dành riêng cho phần cứng. Việc triển khai của nhà cung cấp không được sử dụng nguyên trạng và phải thêm logic dành riêng cho bus xe.
Trong Android 14, FakeVehicleHardware
đọc cấu hình thuộc tính được hỗ trợ trong thời gian chạy trong quá trình khởi chạy từ thư mục /vendor/etc/automotive/vhalconfig/
của thiết bị, chứa tệp cấu hình kiểu JSON. Hãy xem tệp README tham khảo VHAL để biết định dạng tệp cấu hình và nội dung tệp cấu hình.
FakeVehicleHardware
cũng hỗ trợ ghi đè tệp cấu hình để kiểm thử. Nếu bạn đặt thuộc tính hệ thống persist.vendor.vhal_init_value_override
, thì thuộc tính này sẽ sử dụng tệp cấu hình từ thư mục /vendor/etc/automotive/vhaloverride/
trên thiết bị để ghi đè cấu hình hiện có. Cách triển khai của nhà cung cấp có thể sử dụng một phương pháp tương tự để cấu hình thuộc tính được hỗ trợ VHAL không được mã hoá cứng và có thể được quyết định linh động tại thời điểm khởi động.
Cấu hình thuộc tính xe phải ở trạng thái tĩnh sau khi thiết bị khởi động.