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