การแปลงโมดูล HAL

คุณสามารถอัปเดตโมดูล HAL ที่มีอยู่แล้วเป็นโมดูล HIDL HAL ได้โดยการแปลงส่วนหัวใน hardware/libhardware/include/hardware

ใช้ c2hal

เครื่องมือ c2hal จัดการงานการแปลงส่วนใหญ่ ซึ่งช่วยลดจำนวนการเปลี่ยนแปลงด้วยตนเองที่จำเป็น ตัวอย่างเช่น หากต้องการสร้างไฟล์ 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 ทุกอย่างในไฟล์ส่วนหัวจะถูกโอนไปยังไฟล์ .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 คือแจงนับใหม่ที่มีสถานะ NFC ที่เป็นไปได้)

การนำ HAL ไปปฏิบัติ

หลังจากที่คุณสร้างไฟล์ .hal เพื่อเป็นตัวแทน HAL ของคุณแล้ว คุณต้องสร้างไฟล์ makefiles (Make หรือ Soong) ที่สร้างการรองรับภาษาใน C++ และ Java (เว้นแต่ HAL จะใช้คุณสมบัติที่ไม่รองรับใน Java) สคริปต์ ./hardware/interfaces/update-makefiles.sh สามารถสร้าง makefiles สำหรับ HAL ที่อยู่ใน hardware/interfaces เทอร์เฟซได้โดยอัตโนมัติ (สำหรับ HAL ในตำแหน่งอื่น เพียงอัปเดตสคริปต์)

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