Bạn có thể cập nhật các mô-đun HAL hiện có thành mô-đun HAL HIDL 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 .hal
HIDL cho HAL NFC:
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 vào hardware/interfaces/nfc/1.0/
. Việc chạy hardware/interfaces/update-makefiles.sh
từ thư mục $ANDROID_BUILD_TOP
cũng sẽ thêm tệp makefile bắt buộc vào HAL. Từ đây, bạn có thể thực hiện các thay đổi theo cách thủ công để chuyển đổi hoàn toàn HAL.
Hoạt động c2hal
Khi bạn chạy c2hal
, mọi nội dung trong tệp tiêu đề sẽ được chuyển sang các 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 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
.
Các định nghĩa dấu thăng đượ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 các 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ô; do đó, khi c2hal
gặp một con trỏ trong tệp tiêu đề, c2hal
sẽ không biết liệu con trỏ đó có được diễn giải là một mảng hay là một tham chiếu đến một đối tượng khác hay không. Con trỏ rỗng cũng mờ tương tự.
Bạn phải xoá các trường như int reserved[7]
theo cách thủ công trong quá trình chuyển đổi sang HIDL. Bạn nên cập nhật các mục như tên của giá trị trả về thành một nội dung có ý nghĩa hơn; ví dụ: chuyển đổi tham số trả về của các phương thức như write
trong NFC từ int32_t write_ret
được tạo tự động thành 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
để biểu thị HAL, bạn phải tạo tệp makefile (Make hoặc Soong) để tạo tính năng hỗ trợ ngôn ngữ trong C++ và Java (trừ phi 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 makefile cho các HAL nằm trong thư mục hardware/interfaces
(đối với các HAL ở vị trí khác, bạn chỉ cần cập nhật tập lệnh).
Khi tệp makefile đã được cập nhật, bạn có thể tạo tệp tiêu đề và triển khai các phương thức. Để biết thông tin chi tiết về cách triển khai giao diện được tạo, hãy xem HIDL C++ (đối với các phương thức triển khai C++) hoặc HIDL Java (đối với các phương thức triển khai Java).