แปลงโมดูล HAL

คุณอัปเดตโมดูล 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)