Chuyển đổi mô-đun HAL

Bạn có thể cập nhật các mô-đun HAL có sẵn thành mô-đun HAL HID bằng cách chuyển đổi trong hardware/libhardware/include/hardware.

Sử dụng c2hal

Chiến lược phát hành đĩa đơn c2hal xử lý hầu hết công việc chuyển đổi, giảm bớt số thao tác thủ công bắt buộc thay đổi. Ví dụ: để tạo tệp HIDL .hal cho NFC Lớp trừu tượng phần cứng (HAL):

make c2hal
c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h

Các lệnh này sẽ thêm tệp trong hardware/interfaces/nfc/1.0/. Chạy bộ hardware/interfaces/update-makefiles.sh trên $ANDROID_BUILD_TOP Thư mục này cũng thêm tệp makefile cần thiết vào HAL. Tại đây, bạn có thể thực hiện thay đổi thủ công để chuyển đổi hoàn toàn HAL.

hoạt động hằng ngày

Khi bạn chạy c2hal, mọi nội dung trong tệp tiêu đề sẽ được chuyển vào .hal tệp.

c2hal xác định các cấu trúc chứa con trỏ hàm trong tệp tiêu đề được cung cấp và chuyển đổi mỗi cấu trúc thành một tệp giao diện riêng. Ví dụ: alloc_device_t được chuyển đổi thành Mô-đun HAL IAllocDevice (trong tệp IAllocDevice.hal).

Tất cả các loại dữ liệu khác sẽ được sao chép vào tệp types.hal. Giá trị pound-xác định được chuyển vào enum và các mục không thuộc HIDL hoặc không có thể chuyển đổi (chẳng hạn như khai báo hàm tĩnh) được sao chép vào ghi chú được đánh dấu bằng văn bản "NOTE".

Hoạt động thủ công

Công cụ c2hal không biết việc cần làm khi gặp phải cấu trúc nhất định. Ví dụ: HIDL không có khái niệm về con trỏ thô; vì điều này, khi c2hal gặp một con trỏ trong tệp tiêu đề, nó sẽ không biết liệu con trỏ nên được diễn giải như một mảng hay là một tham chiếu đến đối tượng khác. Con trỏ trống cũng mờ tương tự như vậy.

Bạn phải xoá trường int reserved[7] theo cách thủ công trong chuyển đổi sang HIDL. Các mục như tên của giá trị trả về phải cập nhật thành điều gì đó có ý nghĩa hơn; ví dụ: chuyển đổi lợi nhuận thông số của các phương thức (chẳng hạn như write trong NFC) từ phương thức được tạo tự động int32_t write_ret đến Status status (trong đó Status là một enum mới chứa các trạng thái NFC có thể có).

Triển khai HAL

Sau khi tạo các tệp .hal để đại diện cho HAL, bạn phải tạo các tệp makefile (Make hoặc Soong) có khả năng hỗ trợ ngôn ngữ C++ và Java (trừ phi HAL sử dụng một tính năng không được hỗ trợ trong Java). Chiến lược phát hành đĩa đơn ./hardware/interfaces/update-makefiles.sh tập lệnh có thể tự động tạo tệp makefile cho HAL (Lớp trừu tượng phần cứng) nằm trong hardware/interfaces (đối với HAL ở các vị trí khác, chỉ cần cập nhật tập lệnh).

Khi các tệp makefile được cập nhật, bạn có thể tạo tệp tiêu đề và phương thức triển khai. Để biết chi tiết về cách triển khai giao diện được tạo, hãy xem HIDL C++ (dành cho C++ triển khai nhanh) hoặc HIDL Java (để triển khai Java).