ใช้ USB HAL

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

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

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

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

HAL และ Treble

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

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

การใช้ 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 ให้กับระบบ