แปลงโมดูล HAL

คุณสามารถอัปเดตโมดูล 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 จะเพิ่มไฟล์ Make ที่จำเป็นลงใน HAL ด้วย จากตรงนี้ คุณสามารถดำเนินการเปลี่ยนแปลงด้วยตนเองเพื่อแปลง HAL ให้เสร็จสมบูรณ์

กิจกรรม c2hal

เมื่อคุณเรียกใช้ c2hal ระบบจะโอนข้อมูลทั้งหมดในไฟล์ส่วนหัวไปยังไฟล์ .hal

c2hal จะระบุโครงสร้างที่มีตัวชี้ฟังก์ชันในไฟล์ส่วนหัวที่ระบุ และแปลงโครงสร้างแต่ละรายการเป็นไฟล์อินเทอร์เฟซแยกต่างหาก ตัวอย่างเช่น alloc_device_t จะแปลงเป็นข้อบังคับของ IAllocDevice HAL (ในไฟล์ IAllocDevice.hal)

ระบบจะคัดลอกข้อมูลประเภทอื่นๆ ทั้งหมดไปยังไฟล์ types.hal ระบบจะย้ายการกําหนดค่าแบบเครื่องหมายสี่เหลี่ยมผืนผ้าไปยังลิสต์แบบจำกัด และคัดลอกรายการที่ไม่ได้อยู่ใน HIDL หรือไม่สามารถแปลง (เช่น การประกาศฟังก์ชันแบบคงที่) ไปยังความคิดเห็นที่มีข้อความ "NOTE"

กิจกรรมที่ดำเนินการด้วยตนเอง

เครื่องมือ c2hal ไม่ทราบว่าต้องทําอย่างไรเมื่อพบรูปแบบบางอย่าง ตัวอย่างเช่น HIDL ไม่มีแนวคิดเกี่ยวกับพอยน์เตอร์ดิบ เมื่อ c2hal พบพอยน์เตอร์ในไฟล์ส่วนหัว จึงไม่ทราบว่าจะตีความพอยน์เตอร์นั้นเป็นอาร์เรย์หรือเป็นข้อมูลอ้างอิงไปยังออบเจ็กต์อื่น พารามิเตอร์แบบ Void ก็มีลักษณะทึบแสงเช่นเดียวกัน

ฟิลด์ เช่น 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 ที่อยู่ในตำแหน่งอื่น ให้อัปเดตสคริปต์)

เมื่อไฟล์ make เป็นเวอร์ชันล่าสุดแล้ว คุณก็พร้อมที่จะสร้างไฟล์ส่วนหัวและติดตั้งใช้งานเมธอด ดูรายละเอียดเกี่ยวกับการใช้งานอินเทอร์เฟซที่สร้างขึ้นได้ที่ HIDL C++ (สําหรับการใช้งาน C++) หรือ HIDL Java (สําหรับการใช้งาน Java)