Triển khai tham chiếu

Chúng tôi cung cấp một hoạt động triển khai tham chiếu cho VHAL AIDL. Luồng dịch vụ chính được triển khai tại VehicleService.cpp. Việc triển khai giao diện VHAL nằm ở DefaultVehicleHal.cpp.

Bản triển khai tham chiếu dựa trên cấu trúc hai lớp. Trên 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. Trên lớp dưới cùng, FakeVehicleHardware triển khai giao diện IVehicleHardware. Lớp này mô phỏng logic VHAL khi tương tác với phần cứng thực hoặc bus của xe và dành riêng cho thiết bị. Ngoài ra, các nhà cung cấp có thể đ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 này để ghi đè một phương thức) và cung cấp chế độ triển khai IVehicleHardware của riêng họ.

Triển khai tham chiếu VHAL
Hình 1. Triển khai tham chiếu VHAL

DefaultVehicleHal chứa logic sau đây, được coi là chung và có thể áp dụng cho mọi hoạt động 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ả bước kiểm tra mã nhận dạng trùng lặp.
  • Phân bổ các đối tượng ứng dụng (ví dụ: GetValuesClient) cho từng 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 chung.
  • Quản lý logic 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 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à huỷ tuần tự hoá LargeParcelable (xem ParcelableUtils.h).
  • Quản lý gói thuê bao (xem SubscriptionManager.h).
  • Kiểm tra quyền. (Xem hàm checkReadPermissioncheckWritePermission).
  • Đị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ị việc triển khai dành riêng cho phần cứng của VHAL. Quy trình triển khai tham chiếu cho IVehicleHardwareFakeVehicleHardware, sử dụng một bản đồ trong bộ nhớ để lưu trữ giá trị thuộc tính và không giao tiếp với một bus thực tế của xe. Mục đích của hoạt động này là chạy trên một trình mô phỏng và không có các phần phụ thuộc dành riêng cho phần cứng. Các phương thứ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 của xe.

Kể từ Android 14, FakeVehicleHardware sẽ đọc cấu hình thuộc tính được hỗ trợ tại thời gian chạy trong quá trình khởi động từ thư mục /vendor/etc/automotive/vhalconfig/ của thiết bị. Thư mục này chứa một tệp cấu hình theo kiểu JSON. Hãy xem tệp README VHAL tham chiếu để 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 (bạn phải đặt thuộc tính này tại thời điểm tạo hoặc rất sớm trong quá trình khởi động trước khi khởi tạo VHAL), thì thuộc tính này sẽ sử dụng tệp cấu hình trong thư mục /vendor/etc/automotive/vhaloverride/ trên thiết bị để ghi đè cấu hình hiện có. Phương thức 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 VHAL hỗ trợ không được mã hoá cứng và có thể được quyết định linh hoạt vào thời điểm bắt đầu. Danh sách cấu hình thuộc tính xe phải ở trạng thái tĩnh sau khi VHAL được khởi động.

Kể từ Android 16, GRPCVehicleHardware cung cấp một chế độ triển khai IVehicleHardware tham chiếu khác. Việc triển khai này giả định rằng có một máy chủ riêng chạy trên một máy hoặc máy ảo từ xa chứa logic xử lý thuộc tính. VHAL chạy trên các thiết bị AAOS đóng vai trò là một proxy chuyển tiếp các yêu cầu đến máy chủ từ xa. Hãy xem grpc để biết thêm thông tin.