การใช้ USB HAL

การเปิดตัว Android 8.0 จะย้ายการจัดการคำสั่ง USB ออกจากสคริปต์ init และไปอยู่ใน USB daemon ดั้งเดิมเพื่อการกำหนดค่าที่ดีขึ้นและความน่าเชื่อถือของโค้ด สำหรับการกำหนดค่าฟังก์ชัน Gadget สคริปต์ init (ทริกเกอร์คุณสมบัติ) จะถูกใช้เพื่อดำเนินการกับ Gadget เฉพาะอุปกรณ์

ในรุ่นก่อนหน้านี้ การกำหนดค่าเฉพาะอุปกรณ์เหล่านี้ทำได้ผ่านสคริปต์ init เฉพาะอุปกรณ์ (โดยใช้ทริกเกอร์คุณสมบัติ) การย้ายไปใช้การออกแบบ Hardware Abstraction Layer (HAL) ส่งผลให้มีการใช้งานที่สะอาดตายิ่งขึ้น ซึ่งช่วยแก้ปัญหาเหล่านี้:

  1. การดำเนินการเช่นการเขียนไปยังโหนดเคอร์เนล sysfs อาจล้มเหลว แต่ไม่สามารถเผยแพร่กลับไปยังรหัสเฟรมเวิร์กที่ตั้งค่าทริกเกอร์คุณสมบัติ เป็นผลให้กรอบงานถือว่าการดำเนินการประสบความสำเร็จอย่างไม่ถูกต้องแม้ว่าพวกเขาจะล้มเหลวโดยไม่ตั้งใจก็ตาม
  2. สคริปต์ init มีจำนวนการดำเนินการที่จำกัดที่สามารถดำเนินการได้

รุ่น Android 12 เพิ่มการรองรับ USB Gadget HAL สำหรับ Network Control Models (NCM) และการเรียก API ที่ส่งคืนทั้งหมายเลขเวอร์ชัน HAL และความเร็ว USB สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเรียก API ที่มีให้ผ่าน USB HAL โปรดดู สรุปแพ็คเกจ android.hardware.usb

HAL และเสียงแหลม

สคริปต์ init เฉพาะอุปกรณ์ถูกใช้แทนเลเยอร์ HAL เพื่อดำเนินการ USB เฉพาะอุปกรณ์ USB (ผ่าน ADB) เป็นอินเทอร์เฟซหลักสำหรับการแก้ไขข้อบกพร่องของระบบ การมีดีมอนดั้งเดิมในการกำหนดค่า USB ช่วยลดการพึ่งพาโค้ดเฟรมเวิร์ก ดังนั้นแม้ว่าเฟรมเวิร์กจะขัดข้อง USB ก็ควรจะทำงานอยู่

ภายใต้โมเดล Treble ที่เปิดตัวใน Android 8.0 HAL ทั้งหมดจะถูกแยกออกจากบริการของระบบและจำเป็นต้องทำงานใน daemons ดั้งเดิมของตัวเอง ซึ่งช่วยลดความจำเป็นในการมี USB daemon พิเศษ เนื่องจากเลเยอร์ HAL จะเพิ่มเป็นสองเท่าของ USB daemon

การใช้งาน HAL เริ่มต้นจะดูแลอุปกรณ์ก่อน Android 8.0 ทั้งหมด ดังนั้นจึงไม่มีการทำงานเฉพาะอุปกรณ์ใดๆ สำหรับอุปกรณ์รุ่นก่อน Android 8.0 Android 8.0 ใช้อินเทอร์เฟซ HAL เพื่อค้นหาสถานะของพอร์ต USB และดำเนินการสลับบทบาทข้อมูลและบทบาทพลังงาน

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

ต้องใช้อินเทอร์เฟซ USB HAL ใหม่กับทุกอุปกรณ์ที่เปิดตัวบน Android 8.0 การใช้งานเริ่มต้นควรดูแลอุปกรณ์รุ่นก่อน Android 8.0 การใช้งานเริ่มต้นจะเพียงพอหากอุปกรณ์ใช้คลาส dual_role_usb เพื่อรายงานสถานะพอร์ต type-c อาจจำเป็นต้องมีการเปลี่ยนแปลงเล็กน้อยในสคริปต์ USB เฉพาะอุปกรณ์เพื่อโอนความเป็นเจ้าของโหนด typc-c ไปยังระบบ