ब्लूटूथ

Android ब्लूटूथ एचएएल का आइकॉन

Android में डिफ़ॉल्ट ब्लूटूथ स्टैक उपलब्ध होता है, जो क्लासिक ब्लूटूथ और ब्लूटूथ स्मार्ट ऑडियो, दोनों के साथ काम करता है. आस-पास मौजूद ब्लूटूथ डिवाइसों के साथ डेटा भेजने और पाने के लिए, Android डिवाइस ब्लूटूथ का इस्तेमाल करके, पर्सनल एरिया नेटवर्क बना सकते हैं.

Android 4.3 और उसके बाद के वर्शन में, Android ब्लूटूथ स्टैक की मदद से, ब्लूटूथ स्मार्ट (बीएलई) को लागू किया जा सकता है. बीएलई एपीआई का पूरा फ़ायदा पाने के लिए, Android ब्लूटूथ एचसीआई की ज़रूरी शर्तों का पालन करें. ज़रूरी शर्तें पूरी करने वाले चिपसेट वाले Android डिवाइसों में, क्लासिक ब्लूटूथ या क्लासिक ब्लूटूथ और बीएलई, दोनों में से किसी एक को लागू किया जा सकता है. बीएलई, पुराने ब्लूटूथ चिपसेट के साथ काम नहीं करता.

Android 8.0 में, नेटिव ब्लूटूथ स्टैक पूरी तरह से ब्लूटूथ 5 के साथ काम करता है. ब्लूटूथ 5 की उपलब्ध सुविधाओं का इस्तेमाल करने के लिए, डिवाइस में ब्लूटूथ 5 की ज़रूरी शर्तें पूरी करने वाला चिपसेट होना चाहिए.

Android आर्किटेक्चर

ब्लूटूथ ऐप्लिकेशन, Binder के ज़रिए ब्लूटूथ प्रोसेस से संपर्क करता है. ब्लूटूथ प्रोसेस, ब्लूटूथ स्टैक के साथ कम्यूनिकेट करने के लिए JNI का इस्तेमाल करती है. साथ ही, डेवलपर को अलग-अलग ब्लूटूथ प्रोफ़ाइलों का ऐक्सेस देती है. इस डायग्राम में, ब्लूटूथ स्टैक का सामान्य स्ट्रक्चर दिखाया गया है:

Android ब्लूटूथ आर्किटेक्चर
पहली इमेज. Android ब्लूटूथ आर्किटेक्चर
ऐप्लिकेशन फ़्रेमवर्क
ऐप्लिकेशन फ़्रेमवर्क लेवल पर ऐप्लिकेशन कोड होता है. यह ब्लूटूथ हार्डवेयर के साथ इंटरैक्ट करने के लिए, android.bluetooth एपीआई का इस्तेमाल करता है. अंदरूनी तौर पर, यह कोड Binder IPC प्रोसेस के ज़रिए ब्लूटूथ प्रोसेस को कॉल करता है.
ब्लूटूथ ऐप्लिकेशन
packages/modules/Bluetooth/android/app में मौजूद ब्लूटूथ ऐप्लिकेशन, Android ऐप्लिकेशन के तौर पर पैकेज किया गया है. साथ ही, यह Android फ़्रेमवर्क लेयर पर ब्लूटूथ प्रोफ़ाइलों को लागू करता है. यह ऐप्लिकेशन, JNI के ज़रिए नेटिव ब्लूटूथ स्टैक को कॉल करता है.
JNI
android.bluetooth से जुड़ा JNI कोड, packages/modules/Bluetooth/android/app/jni में मौजूद है. JNI कोड, ब्लूटूथ स्टैक को तब कॉल करता है, जब ब्लूटूथ से जुड़े कुछ काम होते हैं. जैसे, डिवाइसों का पता चलना.
ब्लूटूथ स्टैक
डिफ़ॉल्ट ब्लूटूथ स्टैक, AOSP में उपलब्ध होता है और यह packages/modules/Bluetooth/system में मौजूद होता है. स्टैक, सामान्य ब्लूटूथ एचएएल को लागू करता है और एक्सटेंशन और कॉन्फ़िगरेशन में बदलाव करके उसे पसंद के मुताबिक बनाता है.
वेंडर के लिए लागू करना
वेंडर डिवाइस, हार्डवेयर इंटरफ़ेस डिज़ाइन लैंग्वेज (एचआईडीएल) का इस्तेमाल करके, ब्लूटूथ स्टैक के साथ इंटरैक्ट करते हैं.

HIDL

HIDL, ब्लूटूथ स्टैक और वेंडर के लागू करने के तरीके के बीच के इंटरफ़ेस को तय करता है. ब्लूटूथ एचआईडीएल फ़ाइलें जनरेट करने के लिए, ब्लूटूथ इंटरफ़ेस फ़ाइलों को एचआईडीएल जनरेशन टूल में पास करें. इंटरफ़ेस फ़ाइलें, hardware/interfaces/bluetooth में मौजूद होती हैं.

ब्लूटूथ स्टैक का डेवलपमेंट

Android ब्लूटूथ स्टैक, पूरी तरह से फ़ंक्शनल ब्लूटूथ स्टैक है. ज़रूरी शर्तों की सूची, Bluetooth SIG की वेबसाइट पर QDID 169365 में दी गई है.

मुख्य ब्लूटूथ स्टैक, packages/modules/Bluetooth में मौजूद होता है. इस टूल को AOSP में डेवलप किया जाता है. इसमें योगदान देने वाले लोगों का स्वागत है.

Android 7.x और इससे पहले के वर्शन का आर्किटेक्चर

ब्लूटूथ सिस्टम सेवा, JNI के ज़रिए ब्लूटूथ स्टैक और ऐप्लिकेशन के साथ Binder IPC के ज़रिए संपर्क करती है. सिस्टम सेवा, डेवलपर को कई तरह की ब्लूटूथ प्रोफ़ाइलों का ऐक्सेस देती है. इस डायग्राम में, ब्लूटूथ स्टैक का सामान्य स्ट्रक्चर दिखाया गया है:

Android ब्लूटूथ आर्किटेक्चर
दूसरी इमेज. Android 7.x और इससे पहले के वर्शन के लिए ब्लूटूथ आर्किटेक्चर
ऐप्लिकेशन फ़्रेमवर्क
ऐप्लिकेशन फ़्रेमवर्क लेवल पर ऐप्लिकेशन कोड होता है. यह ब्लूटूथ हार्डवेयर के साथ इंटरैक्ट करने के लिए, android.bluetooth एपीआई का इस्तेमाल करता है. अंदरूनी तौर पर, यह कोड Binder IPC प्रोसेस के ज़रिए ब्लूटूथ प्रोसेस को कॉल करता है.
ब्लूटूथ सिस्टम सेवा
packages/apps/Bluetooth में मौजूद ब्लूटूथ सिस्टम सेवा को Android ऐप्लिकेशन के तौर पर पैकेज किया जाता है. साथ ही, यह Android फ़्रेमवर्क लेयर पर ब्लूटूथ सेवा और प्रोफ़ाइलों को लागू करती है. यह ऐप्लिकेशन, JNI के ज़रिए HAL लेयर को कॉल करता है.
JNI
android.bluetooth के साथ जुड़ा JNI कोड, packages/apps/Bluetooth/jni में मौजूद है. JNI कोड, एचएएल लेयर को कॉल करता है और जब ब्लूटूथ से जुड़े कुछ काम होते हैं, तो एचएएल से कॉलबैक पाता है. जैसे, डिवाइसों का पता चलने पर.
HAL
हार्डवेयर एब्स्ट्रैक्शन लेयर, स्टैंडर्ड इंटरफ़ेस तय करता है. इसमें android.bluetooth एपीआई और ब्लूटूथ प्रोसेस कॉल शामिल होते हैं. साथ ही, आपको ब्लूटूथ हार्डवेयर को सही तरीके से काम करने के लिए, इसे लागू करना होगा. ब्लूटूथ एचएएल की हेडर फ़ाइल hardware/libhardware/include/hardware/bluetooth.h है. इसके अलावा, सभी hardware/libhardware/include/hardware/bt_*.h फ़ाइलों की समीक्षा करें.
ब्लूटूथ स्टैक
आपके लिए डिफ़ॉल्ट ब्लूटूथ स्टैक उपलब्ध है. यह system/bt में मौजूद है. यह स्टैक, सामान्य ब्लूटूथ एचएएल लागू करता है और एक्सटेंशन और कॉन्फ़िगरेशन में बदलाव करके उसे पसंद के मुताबिक बनाता है.
वेंडर एक्सटेंशन
ट्रैकिंग के लिए कस्टम एक्सटेंशन और एचसीआई लेयर जोड़ने के लिए, libbt-vendor मॉड्यूल बनाएं और इन कॉम्पोनेंट की जानकारी दें.

HAL लागू करना

ब्लूटूथ एचएएल, /hardware/libhardware/include/hardware/bluetooth.h में मौजूद है. bluetooth.h फ़ाइल में ब्लूटूथ स्टैक के लिए बुनियादी इंटरफ़ेस होता है. आपको इसके फ़ंक्शन लागू करने होंगे.

प्रोफ़ाइल से जुड़ी फ़ाइलें एक ही डायरेक्ट्री में होती हैं. ज़्यादा जानकारी के लिए, HAL फ़ाइल का रेफ़रंस देखें.