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