Descriptor: یہ کیا ہے، Client Characteristic Configuration اور مثالیں

مصنف: IT Sectr اشاعت: 2026-07-15 مطالعے کا وقت: 8 منٹ

Descriptor BLE خصوصیت کی ایک معاون صفت ہے جو اس کی قدر کے لیے میٹا ڈیٹا یا ترتیب فراہم کرتی ہے۔ Bluetooth Core Specification 5.4 ڈسکرپٹرز کو GATT پروفائل کے لازمی حصے کے طور پر بیان کرتی ہے: وہ پیمائش کی اکائیوں، قدروں کی حدود، متنی ناموں کو بیان کرتے ہیں اور اطلاعات کی سبسکرپشن کا انتظام کرتے ہیں۔ سب سے مشہور ڈسکرپٹر Client Characteristic Configuration Descriptor (CCCD, 0x2902) ہے، جو Central کو خصوصیت سے اطلاعات سبسکرائب کرنے کی اجازت دیتا ہے۔ Bluetooth SIG کے مطابق، 8 معیاری ڈسکرپٹرز مخصوص ہیں، اور ڈویلپر کسی بھی اضافی میٹا ڈیٹا کے لیے کسٹم ڈسکرپٹرز بنا سکتا ہے۔

اہم نکات

  • Descriptor — خصوصیت کی ایک معاون صفت جس میں قدر کا میٹا ڈیٹا یا ترتیب ہوتی ہے۔
  • CCCD (0x2902) — سب سے اہم ڈسکرپٹر: اس کے ذریعے Central خصوصیت میں تبدیلیوں کی اطلاعات سبسکرائب کرتا ہے۔
  • معیاری ڈسکرپٹرز میں متنی نام کے لیے User Description (0x2901) اور ڈیٹا فارمیٹ کے لیے Presentation Format (0x2904) شامل ہیں۔
  • ہر خصوصیت میں متعدد ڈسکرپٹرز ہو سکتے ہیں، لیکن ہر معیاری قسم کا ایک سے زیادہ نہیں۔
  • Core Bluetooth خودکار طور پر ڈسکرپٹرز بناتا ہے، لیکن انہیں مخصوص میٹا ڈیٹا کے لیے اپنی مرضی کے مطابق بنایا جا سکتا ہے۔

BLE میں Descriptor کیا ہے؟

Descriptor GATT پروٹوکول کی ایک صفت ہے جو Characteristic سے منسلک ہوتی ہے اور اس کی قدر یا استعمال کے طریقے کے بارے میں اضافی معلومات فراہم کرتی ہے۔ GATT کی اصطلاحات میں، خصوصیت ڈیٹا ہے، اور ڈسکرپٹر اس ڈیٹا کا میٹا ڈیٹا ہے۔

ہر Characteristic میں صفر یا زیادہ ڈسکرپٹرز ہو سکتے ہیں۔ ڈسکرپٹرز GATT جدول میں علیحدہ صفات کے طور پر بیان ہوتے ہیں اور Bluetooth SIG کی جگہ میں ان کے اپنے 16 بٹ UUIDs ہوتے ہیں۔ ڈسکرپٹرز آزادانہ طور پر موجود نہیں ہو سکتے — وہ ہمیشہ ایک مخصوص خصوصیت سے منسلک ہوتے ہیں۔

Bluetooth Core Specification 5.4 (2023) کے مطابق، ڈسکرپٹرز دو حصوں میں تقسیم ہیں: معیاری (Bluetooth SIG کے بیان کردہ) اور کسٹم (ڈویلپر کے بیان کردہ)۔ معیاری ڈسکرپٹرز کے UUIDs 0x2900–0x2908 کی حد میں ہوتے ہیں اور سختی سے بیان کردہ افعال انجام دیتے ہیں۔ کسٹم ڈسکرپٹرز 128 بٹ UUIDs استعمال کرتے ہیں، جیسے کسٹم سروسز اور خصوصیات۔

ڈسکرپٹرز BLE کنکشن کے رویے کو ترتیب دینے کے لیے ایک اہم طریقہ کار ہیں۔ CCCD (0x2902) کے بغیر اطلاعات سبسکرائب کرنا ناممکن ہے، Presentation Format (0x2904) کے بغیر Central کو معلوم نہیں ہوگا کہ خصوصیت کی خام بائٹس کی کیسے تشریح کرنی ہے۔

Client Characteristic Configuration Descriptor (CCCD)

CCCD UUID 0x2902 کے ساتھ BLE میں سب سے اہم اور وسیع پیمانے پر استعمال ہونے والا ڈسکرپٹر ہے۔ یہ خصوصیت سے Notify اور Indicate کے لیے Central کی سبسکرپشن کا انتظام کرتا ہے۔ CCCD میں لکھے بغیر، خصوصیت اطلاعات نہیں بھیجے گی، چاہے اس میں Notify کی خاصیت ہو۔

CCCD ایک 16 بٹ کی قدر ہے جہاں سب سے کم اہم بٹ (0x0001) Notify کو فعال کرتا ہے، اور دوسرا بٹ (0x0002) Indicate کو فعال کرتا ہے۔ Central CCCD میں مطلوبہ قدر لکھتا ہے، اس طرح اطلاعات سبسکرائب کرتا ہے۔ اگر Central 0x0000 لکھتا ہے — تو سبسکرپشن منسوخ ہو جاتی ہے۔

CCCD کا طریقہ کار اس طرح کام کرتا ہے: جب Central کو Notify کی حمایت کرنے والی خصوصیت ملتی ہے، تو وہ اس کا CCCD ڈسکرپٹر ڈھونڈتا ہے اور 0x0001 لکھتا ہے۔ اس کے بعد، جب بھی Peripheral خصوصیت کی قدر کو اپ ڈیٹ کرتا ہے، تو یہ Handle Value Notification کے ذریعے خود بخود سبسکرائب کردہ Central کو بھیجی جاتی ہے (Central کی درخواست کے بغیر)۔

Apple Core Bluetooth Programming Guide کے مطابق، کسی خصوصیت کے لیے setNotifyValue کال کرنے پر CCCD خود بخود سسٹم کے ذریعے منظم ہوتا ہے۔ ڈویلپر کو دستی طور پر CCCD ڈھونڈنے اور لکھنے کی ضرورت نہیں ہے — Core Bluetooth اطلاعات فعال ہونے پر خود بخود یہ کرتا ہے۔

اطلاعات کی پروگراماتی سبسکرپشن

iOS میں، سبسکرپشن CBPeripheral آبجیکٹ پر setNotifyValue طریقہ سے کی جاتی ہے۔

swift
import CoreBluetooth

// خصوصیت کی اطلاعات سبسکرائب کریں
peripheral.setNotifyValue(true, for: characteristic)

// نمائندہ اپ ڈیٹ کردہ اقدار وصول کرتا ہے
func peripheral(
    _ peripheral: CBPeripheral,
    didUpdateValueFor characteristic: CBCharacteristic,
    error: Error?
) {
    // characteristic.value میں نیا ڈیٹا ہے
    guard let data = characteristic.value else { return }
}

Android میں، اطلاعات کی سبسکرپشن BluetoothGatt.setCharacteristicNotification کے ذریعے کی جاتی ہے۔ ڈویلپر کو دستی طور پر CCCD میں قدر 0x0001 لکھنی ہوگی۔

java
import android.bluetooth.*;

// اطلاعات فعال کریں
bluetoothGatt.setCharacteristicNotification(characteristic, true);

// CCCD میں 0x0001 لکھیں
BluetoothGattDescriptor descriptor = characteristic
    .getDescriptor(
        UUID.fromString("00002902-0000-1000-8000-00805F9B34FB")
    );
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
bluetoothGatt.writeDescriptor(descriptor);

Bluetooth SIG کے معیاری ڈسکرپٹرز

Bluetooth SIG نے عام خصوصیت کی ترتیب کے کاموں کے لیے 8 معیاری ڈسکرپٹرز بیان کیے ہیں۔ ہر ڈسکرپٹر کا سختی سے بیان کردہ UUID اور قدر کا فارمیٹ ہے۔

UUIDڈسکرپٹر کا ناممقصدقدر کی قسم
0x2900Characteristic Extended Propertiesخصوصیت کی اضافی خصوصیاتuint16 (بٹ ماسک)
0x2901Characteristic User Descriptionخصوصیت کا متنی نامUTF-8 سٹرنگ
0x2902Client Characteristic Configurationاطلاعات کا انتظامuint16
0x2903Server Characteristic Configurationبراڈکاسٹ کے لیے سرور کی ترتیبuint16
0x2904Characteristic Presentation Formatڈیٹا پیش کرنے کا فارمیٹساخت (7 بائٹس)
0x2905Characteristic Aggregate Formatمتعدد خصوصیات کا امتزاجUUIDs کی فہرست
0x2906Valid Rangeموزوں قدروں کی حدuint16 × 2 (کم از کم، زیادہ سے زیادہ)
0x2907External Report Referenceبیرونی رپورٹ کا حوالہuint16
0x2908Report Referenceداخلی رپورٹ کا حوالہuint8 + uint16

Characteristic User Description (0x2901) یوزر انٹرفیس کے لیے خاص طور پر مفید ہے: اس میں خصوصیت کا انسانی پڑھنے کے قابل نام ہوتا ہے جسے ایپلیکیشن انٹرفیس میں دکھایا جا سکتا ہے۔ مثال کے طور پر، Battery Level خصوصیت میں “بیٹری چارج لیول” قدر کے ساتھ User Description ڈسکرپٹر ہو سکتا ہے۔

Characteristic Presentation Format (0x2904) میں خصوصیت کی قدر کی تشریح کرنے کے طریقے کے بارے میں معلومات ہوتی ہیں: فارمیٹ (uint8, uint16, float)، ایکسپوننٹ، پیمائش کی اکائی (Bluetooth SIG رجسٹری سے UUID کے ذریعے)، نام کی جگہ اور تفصیل۔ مثال کے طور پر، درجہ حرارت ایکسپوننٹ -2 (تقسیم کی قدر 0.01°C) اور پیمائش کی اکائی “ڈگری سیلسیس” کے ساتھ int16 ہو سکتا ہے۔

iOS اور Android میں Descriptor کا استعمال

ڈسکرپٹرز تک رسائی iOS اور Android میں مختلف ہے۔ Core Bluetooth اطلاعات فعال ہونے پر خود بخود CCCD کا انتظام کرتا ہے، جبکہ Android میں ڈسکرپٹر میں دستی طور پر قدر لکھنے کی ضرورت ہوتی ہے۔ آئیے دونوں طریقوں کو دیکھتے ہیں۔

iOS: خودکار CCCD انتظام

iOS میں، ڈویلپر عام طور پر براہ راست ڈسکرپٹرز کے ساتھ تعامل نہیں کرتا۔ setNotifyValue کال کرنے پر Core Bluetooth خود بخود CCCD ڈھونڈتا ہے اور مطلوبہ قدر لکھتا ہے۔ ڈسکرپٹرز پڑھنے کے لیے discoverDescriptors طریقہ استعمال کیا جاتا ہے۔

swift
// ڈسکرپٹرز دریافت کریں
peripheral.discoverDescriptors(for: characteristic)

// User Description قدر پڑھیں
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverDescriptorsFor characteristic: CBCharacteristic,
    error: Error?
) {
    for descriptor in characteristic.descriptors ?? [] {
        if descriptor.uuid == CBUUID("2901") {
            peripheral.readValue(for: descriptor)
        }
    }
}

Android: دستی CCCD انتظام

Android میں، ڈویلپر کو خصوصیت کا CCCD ڈسکرپٹر ڈھونڈنا ہوگا اور اطلاعات فعال کرنے کے لیے قدر لکھنی ہوگی۔ یہ iOS کے مقابلے میں ایک اضافی قدم ہے۔

java
// User Description ڈسکرپٹر کی قدر پڑھیں
BluetoothGattDescriptor userDesc = characteristic
    .getDescriptor(
        UUID.fromString("00002901-0000-1000-8000-00805F9B34FB")
    );

if (userDesc != null) {
    bluetoothGatt.readDescriptor(userDesc);
}

کسٹم ڈسکرپٹرز بنانا

کسٹم ڈسکرپٹرز اس وقت استعمال ہوتے ہیں جب Bluetooth SIG کے معیاری ڈسکرپٹرز کافی نہ ہوں۔ مثال کے طور پر، ایک طبی سینسر بنانے والا سینسر کیلیبریشن کی معلومات والا ڈسکرپٹر یا خرابی لاگ والا ڈسکرپٹر شامل کر سکتا ہے۔

ایک کسٹم ڈسکرپٹر 128 بٹ UUID کے ساتھ بنایا جاتا ہے، جیسے کسٹم خصوصیت۔ Peripheral کی طرف، ڈویلپر اسے مناسب API کے ذریعے خصوصیت میں شامل کرتا ہے۔ Central کی طرف، discoverDescriptors کال کرنے پر ڈسکرپٹر خود بخود دریافت ہو جاتا ہے۔

کسٹم ڈسکرپٹر بناتے وقت، ان اصولوں پر عمل کریں: قدر کی لمبائی متوقع ڈیٹا کی قسم سے مطابقت رکھتی ہو، اور رسائی کے حقوق (پڑھنا/لکھنا) واضح طور پر بتائے گئے ہوں۔ کسٹم مقاصد کے لیے Bluetooth SIG کے معیاری ڈسکرپٹر رینج (0x2900–0x2908) کے UUIDs استعمال نہ کریں۔

Descriptor اور Characteristic میں فرق

خصوصیت اور ڈسکرپٹر GATT صفات کی مختلف سطحیں ہیں۔ خصوصیت ایک ڈیٹا پوائنٹ ہے، جبکہ ڈسکرپٹر اس کا میٹا ڈیٹا یا ترتیب ہے۔ فرق کئی پہلوؤں میں ظاہر ہوتا ہے: مقصد، UUID اور رسائی کے قواعد۔

ایک خصوصیت کا لازمی اعلان ہوتا ہے جو ہمیشہ GATT جدول میں موجود ہوتا ہے۔ ڈسکرپٹر اختیاری ہے — ایک خصوصیت میں کوئی ڈسکرپٹر نہیں ہو سکتا۔ ایک خصوصیت کو آزادانہ طور پر پڑھا، لکھا یا اطلاعات بھیجی جا سکتی ہیں۔ ڈسکرپٹر ہمیشہ ایک خصوصیت سے منسلک ہوتا ہے اور علیحدہ طور پر موجود نہیں ہوتا۔

Bluetooth Core Specification 5.4 کے مطابق، GATT جدول میں صفات کی ترتیب یہ ہے: سروس کا اعلان، خصوصیت کا اعلان، خصوصیت کی قدر، خصوصیت کے ڈسکرپٹرز (اگر ہوں)، پھر اگلی سروس۔ یہ ترتیب GATT کلائنٹس کے درست کام کے لیے لازمی ہے۔

اکثر پوچھے گئے سوالات

اگر خصوصیت میں پہلے سے Notify کی خاصیت ہے تو CCCD کی ضرورت کیوں ہے؟

CCCD سبسکرپشن کے انتظام کے لیے ضروری ہے: Notify کی خاصیت صرف یہ بتاتی ہے کہ خصوصیت اطلاعات بھیج سکتی ہے، لیکن انہیں فعال نہیں کرتی۔ Central کو CCCD میں 0x0001 لکھ کر واضح طور پر سبسکرائب کرنا ہوتا ہے۔ یہ تیار نہ ہونے والے Central کو ناپسندیدہ ڈیٹا بھیجنے سے روکتا ہے۔

ایک خصوصیت میں کتنے ڈسکرپٹرز ہو سکتے ہیں؟

تصریح ڈسکرپٹرز کی تعداد کو محدود نہیں کرتی۔ عملی طور پر، ہر خصوصیت میں عام طور پر 1–3 ڈسکرپٹرز ہوتے ہیں: CCCD (Notify/Indicate والی خصوصیات کے لیے)، اختیاری طور پر User Description اور Presentation Format۔ بہت زیادہ ڈسکرپٹرز GATT جدول کا سائز بڑھاتے ہیں۔

کیا مجھے Peripheral پر دستی طور پر ڈسکرپٹرز بنانے کی ضرورت ہے؟

زیادہ تر معاملات میں، نہیں۔ iOS اور Android پر Core Bluetooth خود بخود ان خصوصیات میں CCCD شامل کرتا ہے جن میں Notify یا Indicate کی خصوصیات ہوں۔ کسٹم ڈسکرپٹرز صرف مخصوص میٹا ڈیٹا کے لیے دستی طور پر بنائے جاتے ہیں۔

کیا میں CCCD میں کسٹم ڈیٹا لکھ سکتا ہوں؟

نہیں، CCCD کا سختی سے بیان کردہ فارمیٹ (uint16) اور مقصد ہے — اطلاعات کا انتظام۔ دیگر قدریں لکھنا Bluetooth کی تصریح کی خلاف ورزی کرتا ہے اور سبسکرپشن کے کام بند کرنے کا سبب بن سکتا ہے۔ کسٹم ڈیٹا کے لیے، 128 بٹ UUID والے کسٹم ڈسکرپٹرز استعمال کریں۔

Characteristic User Description ایپلیکیشن کے لیے کیسے مفید ہے؟

User Description میں خصوصیت کا انسانی پڑھنے کے قابل نام ہوتا ہے — مثال کے طور پر، UUID 0x2A6E کے بجائے “ڈیوائس کا درجہ حرارت”۔ ایپلیکیشن اس نام کو انٹرفیس میں دکھا سکتی ہے، جس سے سخت کوڈ والی سٹرنگز کے بغیر BLE آلہ کے ساتھ تعامل صارف کے لیے قابل فہم ہو جاتا ہے۔

خلاصہ

  • Descriptor — میٹا ڈیٹا یا ترتیب ذخیرہ کرنے کے لیے خصوصیت سے منسلک ایک معاون GATT صفت۔
  • CCCD (0x2902) — کلیدی ڈسکرپٹر جو خصوصیت کی اطلاعات اور اشاروں کے لیے Central کی سبسکرپشن کا انتظام کرتا ہے۔
  • Bluetooth SIG نے عام کاموں — تفصیل، فارمیٹنگ اور ترتیب کے لیے 8 معیاری ڈسکرپٹرز (0x2900–0x2908) مخصوص کیے ہیں۔
  • iOS میں، CCCD خود بخود منظم ہوتا ہے؛ Android میں اطلاعات فعال کرنے کے لیے دستی طور پر قدر 0x0001 لکھنی ضروری ہے۔
  • کسٹم ڈسکرپٹرز معیاری ڈسکرپٹرز کے احاطہ میں نہ آنے والے منفرد میٹا ڈیٹا کے لیے 128 بٹ UUID کے ساتھ بنائے جاتے ہیں۔
  • ڈسکرپٹرز آزادانہ طور پر موجود نہیں ہوتے — وہ ہمیشہ ایک خصوصیت سے منسلک ہوتے ہیں اور GATT جدول میں اس کی پیروی کرتے ہیں۔
  • ڈسکرپٹرز کا درست استعمال درست BLE کنکشن ترتیب اور ایپلیکیشن کے لیے ڈیٹا کی وضاحت کو یقینی بناتا ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں