คุณอัปเดตโมดูล HAL ที่มีอยู่แล้วเป็นโมดูล HAL ของ HIDL ได้โดยการแปลงส่วนหัวใน hardware/libhardware/include/hardware
ใช้ c2hal
c2hal
เครื่องมือนี้จะจัดการงาน Conversion ส่วนใหญ่ ซึ่งช่วยลดจำนวนการเปลี่ยนแปลงด้วยตนเองที่จำเป็น
ตัวอย่างเช่น หากต้องการสร้างไฟล์ HIDL .hal
สำหรับ 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
คำสั่งเหล่านี้จะเพิ่มไฟล์ใน hardware/interfaces/nfc/1.0/
การเรียกใช้
hardware/interfaces/update-makefiles.sh
จากไดเรกทอรี $ANDROID_BUILD_TOP
จะเพิ่ม Makefile ที่จำเป็นลงใน HAL ด้วย จากตรงนี้ คุณสามารถ
ทำการเปลี่ยนแปลงด้วยตนเองเพื่อแปลง HAL ให้สมบูรณ์ได้
กิจกรรม c2hal
เมื่อเรียกใช้ c2hal
ระบบจะโอนทุกอย่างในไฟล์ส่วนหัว
ไปยังไฟล์ .hal
c2hal
ระบุโครงสร้างที่มีตัวชี้ฟังก์ชันในไฟล์ส่วนหัวที่ระบุ และแปลงโครงสร้างแต่ละรายการเป็นไฟล์อินเทอร์เฟซแยกต่างหาก
เช่น alloc_device_t
จะแปลงเป็น
IAllocDevice
โมดูล HAL (ในไฟล์
IAllocDevice.hal
)
ระบบจะคัดลอกข้อมูลประเภทอื่นๆ ทั้งหมดไปยังไฟล์ types.hal
ระบบจะย้ายการกำหนดปอนด์ไปยังการแจงนับ และคัดลอกรายการที่ไม่ได้เป็นส่วนหนึ่งของ HIDL หรือไม่สามารถแปลงได้ (เช่น การประกาศฟังก์ชันแบบคงที่) ไปยังความคิดเห็นที่ทำเครื่องหมายด้วยข้อความ "NOTE
"
กิจกรรมที่ต้องทำด้วยตนเอง
c2hal
เครื่องมือไม่ทราบว่าจะทำอย่างไรเมื่อพบโครงสร้างบางอย่าง
ตัวอย่างเช่น HIDL ไม่มีแนวคิดเกี่ยวกับพอยน์เตอร์ดิบ ด้วยเหตุนี้ เมื่อ c2hal
พบพอยน์เตอร์ในไฟล์ส่วนหัว ก็จะไม่ทราบว่าควรตีความพอยน์เตอร์เป็นอาร์เรย์หรือเป็นการอ้างอิงไปยังออบเจ็กต์อื่น พอยน์เตอร์เป็นโมฆะก็มีความทึบแสงในลักษณะเดียวกัน
ฟิลด์ เช่น int reserved[7]
ต้องถูกนำออกด้วยตนเองในระหว่าง
การเปลี่ยนไปใช้ HIDL ควรมีการอัปเดตรายการต่างๆ เช่น ชื่อของค่าที่ส่งคืน ให้มีความหมายมากขึ้น เช่น การแปลงพารามิเตอร์ที่ส่งคืนของเมธอดอย่าง write
ใน NFC จาก int32_t write_ret
ที่สร้างขึ้นโดยอัตโนมัติเป็น Status status
(โดยที่ Status
เป็น Enum ใหม่ที่มีสถานะ NFC ที่เป็นไปได้)
ติดตั้งใช้งาน HAL
หลังจากสร้างไฟล์ .hal
เพื่อแสดง HAL แล้ว คุณต้องสร้างไฟล์ Make (Make หรือ Soong) ที่สร้างการรองรับภาษาใน C++ และ Java (เว้นแต่ HAL จะใช้ฟีเจอร์ที่ไม่รองรับใน Java) สคริปต์
./hardware/interfaces/update-makefiles.sh
จะสร้างไฟล์ Makefile สำหรับ HAL ที่อยู่ในไดเรกทอรี hardware/interfaces
โดยอัตโนมัติ (หาก HAL อยู่ในตำแหน่งอื่น ให้อัปเดตสคริปต์)
เมื่อไฟล์ Makefile เป็นเวอร์ชันล่าสุดแล้ว คุณก็พร้อมที่จะสร้างไฟล์ส่วนหัวและ เมธอดการใช้งาน ดูรายละเอียดเกี่ยวกับการใช้งานอินเทอร์เฟซที่สร้างขึ้นได้ที่ HIDL C++ (สำหรับการใช้งาน C++ ) หรือ HIDL Java (สำหรับการใช้งาน Java)