ब्लूटूथ

Android Bluetooth HAL का आइकॉन

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

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

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

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

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

Android के ब्लूटूथ स्टैक की लेयर दिखाने वाला डायग्राम.

पहली इमेज. Android का ब्लूटूथ आर्किटेक्चर.

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

HIDL

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

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

Android ब्लूटूथ स्टैक, पूरी तरह से योग्य ब्लूटूथ स्टैक है. क्वालिफ़िकेशन लिस्टिंग, Bluetooth SIG की वेबसाइट पर QDID 169365 के तहत उपलब्ध है.

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

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

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

Android 7.x और इससे पहले के वर्शन के ब्लूटूथ आर्किटेक्चर लेयर का डायग्राम.

दूसरी इमेज. Android 7.x और इससे पहले के वर्शन के लिए ब्लूटूथ आर्किटेक्चर.

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

एचएएल लागू करना

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

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