Bạn có thể cập nhật các mô-đun HAL hiện có thành các 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 bắt buộc. 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 makefile bắt buộc vào HAL. Tại đâ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.
c2hal activities
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 HAL IAllocDevice
(trong tệp IAllocDevice.hal
).
Tất cả các kiểu dữ liệu khác sẽ được sao chép vào tệp types.hal
.
Pound-define được chuyển vào enum và các mục không thuộc HIDL hoặc không chuyển đổi được (chẳng hạn như khai báo hàm tĩnh) sẽ đượ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 phải 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 đề, nó không biết liệu con trỏ đó có nên được diễn giải dưới dạng một mảng hay dưới dạng một tham chiếu đến một đối tượng khác. Con trỏ rỗng cũng tương tự như vậy.
Bạn phải xoá trường như int reserved[7]
theo cách 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 một tên 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 các tệp makefile (Make hoặc Soong) để tạo chế độ hỗ trợ ngôn ngữ bằng 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 ở những vị trí khác, bạn 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à 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 đã tạo, hãy xem HIDL C++ (đối với các cách triển khai C++) hoặc HIDL Java (đối với các cách triển khai Java).