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).