Android 8.0 रिलीज़ में, यूएसबी कमांड को हैंडल करने की सुविधा को init
स्क्रिप्ट से हटाकर, नेटिव यूएसबी डेमॉन में जोड़ दिया गया है. इससे कॉन्फ़िगरेशन और कोड
की विश्वसनीयता बेहतर होती है. Gadget फ़ंक्शन को कॉन्फ़िगर करने के लिए, init
स्क्रिप्ट (प्रॉपर्टी ट्रिगर) का इस्तेमाल किया जाता है. इससे डिवाइस के हिसाब से गैजेट के ऑपरेशन किए जा सकते हैं.
पिछली रिलीज़ में, डिवाइस के हिसाब से कॉन्फ़िगरेशन को डिवाइस के हिसाब से init
स्क्रिप्ट (प्रॉपर्टी ट्रिगर का इस्तेमाल करके) के ज़रिए हासिल किया जाता था. हार्डवेयर अबस्ट्रैक्शन लेयर (एचएएल) डिज़ाइन पर स्विच करने से, इन समस्याओं को हल करने के लिए बेहतर तरीके से लागू किया जा सकता है:
- ऐसा हो सकता है कि कर्नल sysfs नोड में लिखने जैसी कार्रवाइयां पूरी न हो पाएं. हालांकि, इन्हें प्रॉपर्टी ट्रिगर सेट करने वाले फ़्रेमवर्क कोड में वापस नहीं भेजा जाता. इस वजह से, फ़्रेमवर्क यह मान लेता है कि कार्रवाइयां पूरी हो गई हैं. हालांकि, ऐसा नहीं होता है.
init
स्क्रिप्ट में, सीमित संख्या में ऑपरेशन किए जा सकते हैं.
Android 12 की रिलीज़ में, नेटवर्क कंट्रोल मॉडल (एनसीएम) के लिए यूएसबी गैजेट एचएएल की सुविधा जोड़ी गई है. साथ ही, एपीआई कॉल की सुविधा भी जोड़ी गई है. इससे एचएएल वर्शन नंबर और यूएसबी की स्पीड, दोनों की जानकारी मिलती है. यूएसबी एचएएल के ज़रिए उपलब्ध एपीआई कॉल के बारे में ज़्यादा जानने के लिए, android.hardware.usb
पैकेज की खास जानकारी देखें.
HAL और Treble
डिवाइस के हिसाब से init
स्क्रिप्ट का इस्तेमाल, एचएएल लेयर के विकल्प के तौर पर किया गया था. इससे डिवाइस के हिसाब से यूएसबी ऑपरेशन किए जा सकते थे. यूएसबी (ADB के ज़रिए) सिस्टम की समस्याओं को डीबग करने के लिए, मुख्य इंटरफ़ेस है. यूएसबी कॉन्फ़िगरेशन करने के लिए, नेटिव डेमॉन होने से फ़्रेमवर्क कोड पर निर्भरता खत्म हो जाती है. इसलिए, फ़्रेमवर्क क्रैश होने पर भी यूएसबी काम करता रहेगा.
Android 8.0 में पेश किए गए Treble मॉडल के तहत, सभी एचएएल को सिस्टम सेवाओं से अलग किया जाता है. साथ ही, उन्हें अपने नेटिव डेमॉन में चलाना ज़रूरी होता है. इससे, खास यूएसबी डेमॉन की ज़रूरत नहीं होती, क्योंकि एचएएल लेयर यूएसबी डेमॉन के तौर पर भी काम करती है.
डिफ़ॉल्ट HAL लागू करने की सुविधा, Android 8.0 से पहले के सभी डिवाइसों का ध्यान रखती है. इसलिए, Android 8.0 से पहले के वर्शन वाले डिवाइसों के लिए, डिवाइस के हिसाब से कोई काम नहीं किया जाएगा. Android 8.0, यूएसबी पोर्ट की स्थिति के बारे में क्वेरी करने के लिए HAL इंटरफ़ेस का इस्तेमाल करता है. साथ ही, डेटा रोल और पावर रोल स्वैप करने के लिए भी इसका इस्तेमाल करता है.
लागू करना
Android 8.0 पर लॉन्च होने वाले हर डिवाइस पर, यूएसबी एचएएल इंटरफ़ेस को लागू करना ज़रूरी है.
डिफ़ॉल्ट तौर पर लागू किए गए इस फ़ंक्शन को Android 8.0 से पहले के वर्शन वाले डिवाइसों के साथ काम करना चाहिए. अगर डिवाइस, टाइप-सी पोर्ट की स्थिति की जानकारी देने के लिए dual_role_usb
क्लास का इस्तेमाल करता है, तो डिफ़ॉल्ट तौर पर लागू की गई सेटिंग काफ़ी है. टाइप-सी नोड का मालिकाना हक सिस्टम को ट्रांसफ़र करने के लिए, डिवाइस के हिसाब से बनाई गई यूएसबी स्क्रिप्ट में मामूली बदलाव करने पड़ सकते हैं.