คุณอัปเดตโมดูล HAL ที่มีอยู่แล้วเป็นโมดูล HIDL HAL ได้โดยการแปลงส่วนหัวใน 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 จะแปลงเป็น
โมดูล HAL IAllocDevice (ในไฟล์
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 จะสร้างไฟล์ Make สำหรับ HAL ที่อยู่ในไดเรกทอรี hardware/interfaces
โดยอัตโนมัติ (สำหรับ HAL ในตำแหน่งอื่นๆ ให้อัปเดตสคริปต์)
เมื่อไฟล์ Makefile เป็นเวอร์ชันล่าสุดแล้ว คุณก็พร้อมที่จะสร้างไฟล์ส่วนหัวและ เมธอดการใช้งาน ดูรายละเอียดเกี่ยวกับการติดตั้งใช้งานอินเทอร์เฟซที่สร้างขึ้นได้ที่ HIDL C++ (สำหรับการติดตั้งใช้งาน C++) หรือ HIDL Java (สำหรับการติดตั้งใช้งาน Java)