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

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

Sử dụng c2hal

Công cụ c2hal xử lý hầu hết công việc chuyển đổi, giảm số lượng thay đổi thủ công cần thiết. Ví dụ: để tạo tệp HIDL .hal cho NFC 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 thêm tệp trong hardware/interfaces/nfc/1.0/ . Chạy hardware/interfaces/update-makefiles.sh từ thư mục $ANDROID_BUILD_TOP cũng sẽ thêm tệp thực hiện cần thiết vào HAL. Từ đây, bạn có thể thực hiện các thay đổi thủ công để chuyển đổi hoàn toàn HAL.

hoạt động của c2hal

Khi bạn chạy c2hal , mọi thứ trong tệp tiêu đề sẽ được chuyển sang tệp .hal .

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 từng cấu trúc thành một tệp giao diện riêng biệt. Ví dụ: alloc_device_t được chuyển đổi thành mô-đun IAllocDevice HAL (trong tệp IAllocDevice.hal ).

Tất cả các loại dữ liệu khác được sao chép vào tệp types.hal . Định nghĩa pound được chuyển vào enum và các mục không phải là một phần của HIDL hoặc không thể chuyển đổi (chẳng hạn như khai báo hàm tĩnh) được sao chép vào nhận xét đượ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 phải làm gì khi gặp một số 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 các tệp tiêu đề, nó không biết liệu con trỏ đó nên được hiểu là một mảng hay là một tham chiếu đến một đối tượng khác. Con trỏ trống cũng mờ đục tương tự.

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

Thực hiện HAL

Sau khi bạn đã tạo các tệp .hal để thể hiện HAL của mình, bạn phải tạo các tệp makefiles (Make hoặc Soong) để tạo hỗ trợ ngôn ngữ trong C++ và Java (trừ khi HAL sử dụng một tính năng không được hỗ trợ trong Java). Tập lệnh ./hardware/interfaces/update-makefiles.sh có thể tự động tạo tệp tạo tệp cho HAL nằm trong thư mục 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 đã sẵn sàng tạo các tệp tiêu đề và các 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++ (để triển khai C++) hoặc HIDL Java (để triển khai Java).