GATT — یہ کیا ہے، Generic Attribute Profile اور Android میں نفاذ

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

GATT (Generic Attribute Profile) ایک Bluetooth Low Energy (BLE) پروفائل ہے جو ڈیٹا کی ساخت اور BLE آلات کے درمیان معلومات کے تبادلے کے قوانین کی وضاحت کرتا ہے۔ GATT Attribute Protocol (ATT) کے اوپر بنایا گیا ہے اور ڈیٹا کو ایک درجہ بندی میں ترتیب دیتا ہے: خدمات (services)، خصوصیات (characteristics) اور وضافت (descriptors)۔ Bluetooth SIG (2025) کے مطابق، GATT پروفائل تمام BLE ایپلیکیشنز کے 98% میں استعمال ہوتا ہے — فٹنس ٹریکرز سے لے کر سمارٹ لاکس اور میڈیکل سینسرز تک۔

اہم نکات

  • GATT — ایک BLE پروفائل جو خدمات، خصوصیات اور وضافت کے ذریعے ڈیٹا کی منتقلی کی ساخت کی وضاحت کرتا ہے
  • درجہ بندی — ایک خدمت میں خصوصیات ہوتی ہیں، ہر خصوصیت کی ایک قدر ہوتی ہے جس میں اختیاری وضافت ہوتے ہیں
  • UUID — ہر خدمت اور خصوصیت کی شناخت 16 بٹ (معیاری) یا 128 بٹ (حسب ضرورت) UUID سے ہوتی ہے
  • کردار — GATT سرور (ڈیٹا فراہم کرتا ہے) اور GATT کلائنٹ (ڈیٹا پڑھتا/لکھتا ہے)
  • Android API — BluetoothGatt، BluetoothGattService، BluetoothGattCharacteristic — GATT کے ساتھ کام کرنے کے لیے اہم کلاسیں

GATT کیا ہے؟

GATT (Generic Attribute Profile) ایک Bluetooth Low Energy (BLE) پروفائل ہے جو یہ طے کرتا ہے کہ دو BLE آلات Attribute Protocol (ATT) کے ذریعے ڈیٹا کا تبادلہ کیسے کرتے ہیں۔ GATT ڈیٹا کی ساخت کو معیاری بناتا ہے: تمام ڈیٹا «خدمت → خصوصیت → واصف» کے درجہ بندی میں ترتیب دیا جاتا ہے۔ یہ پروفائل BLE کے ساتھ Bluetooth 4.0 تصریح (2010) میں متعارف کرایا گیا تھا اور اس کے بعد سے توانائی کی بچت کرنے والے Bluetooth آلات کے لیے ڈیٹا کی منتقلی کا بنیادی طریقہ کار بنا ہوا ہے۔ کلاسک Bluetooth کے برعکس، جہاں ڈیٹا سیریل پورٹ (SPP) کے ذریعے منتقل کیا جاتا ہے، GATT پڑھنے، لکھنے اور اطلاع کے عمل کے ذریعے ڈیٹا تک ساختی رسائی فراہم کرتا ہے۔

BLE اسٹیک میں GATT کا کردار

BLE اسٹیک کئی تہوں پر مشتمل ہے: طبعی تہ (ریڈیو)، ربط تہ (کنیکشن مینجمنٹ)، L2CAP (منطقی چینل کنٹرول)، ATT (Attribute Protocol — صفات تک رسائی) اور GATT (ATT پر مبنی پروفائل)۔ GATT سب سے اوپر کی تہہ ہے جس کے ساتھ ایپلیکیشن ڈویلپر کام کرتے ہیں۔ نیچے کا ATT بنیادی کارروائیاں فراہم کرتا ہے: صفات کو پڑھنا، لکھنا، اطلاع دینا اور اشارہ کرنا۔ GATT معنی شامل کرتا ہے: یہ طے کرتا ہے کہ خدمت اور خصوصیت کیا ہیں، وہ کیسے گروپ کی جاتی ہیں، اور انہیں پڑھنے اور لکھنے پر کون سے قوانین لاگو ہوتے ہیں۔ Bluetooth Core Specification 5.4 (2023) کے مطابق، GATT ایک آلے پر 65,535 تک صفات (خدمات + خصوصیات + وضافت) کو سپورٹ کرتا ہے۔

GATT فن تعمیر: خدمات، خصوصیات اور وضافت

GATT درجہ بندی تین سطحوں پر مشتمل ہے۔ خدمت خصوصیات کا ایک منطقی گروپ ہے جو ایک کام حل کرتی ہے (مثال کے طور پر، «بیٹری سروس» یا «دل کی دھڑکن کی سروس»)۔ خصوصیت ایک معروف قسم کے ساتھ ڈیٹا کی اکائی ہے: موجودہ بیٹری کی سطح، سینسر ریڈنگ، سوئچ کی حالت۔ ہر خصوصیت کی ایک قدر ہوتی ہے اور ایک یا زیادہ وضافت جو میٹا ڈیٹا بیان کرتے ہیں: پیمائش کی اکائیاں، اطلاع کی ترتیبات، قدروں کی حد۔ UUID (عالمی منفرد شناخت کنندہ) ہر خدمت اور ہر خصوصیت کی منفرد طور پر شناخت کرتا ہے۔

خصوصیات کے ساتھ کارروائیوں کی اقسام

GATT خصوصیات کے ساتھ تعامل کے لیے چار قسم کی کارروائیوں کو سپورٹ کرتا ہے۔ Read — کلائنٹ سرور سے خصوصیت کی موجودہ قدر کی درخواست کرتا ہے۔ Write — کلائنٹ سرور کو ایک نئی قدر بھیجتا ہے۔ Notify — سرور تصدیق کے بغیر کلائنٹ کو قدر بھیجتا ہے (تیز لیکن کم قابل اعتماد)۔ Indicate — سرور وصولی کی تصدیق کے ساتھ قدر بھیجتا ہے (زیادہ قابل اعتماد لیکن سست)۔ ڈویلپر منظر نامے کی بنیاد پر قسم کا انتخاب کرتا ہے: دل کی دھڑکن کے سینسر ریڈنگ کے لیے Notify کافی ہے؛ سمارٹ لاک کنفیگریشن لکھنے کے لیے تصدیق کے ساتھ Write ضروری ہے۔

kotlin
// Android کوڈ میں GATT ڈیٹا کا ڈھانچہ
data class BleService(
    val uuid: UUID,
    val characteristics: List<BleCharacteristic>
)

data class BleCharacteristic(
    val uuid: UUID,
    val properties: Int, // READ, WRITE, NOTIFY, INDICATE
    val descriptors: List<BleDescriptor>,
    var value: ByteArray?
)

GATT اور GAP: BLE پروفائلز میں فرق

BLE تصریح دو اہم پروفائلز کی وضاحت کرتی ہے: GAP (Generic Access Profile) اور GATT (Generic Attribute Profile)۔ GAP آلات کی دریافت، کنکشن قیام اور نمائش کے انتظام کے لیے ذمہ دار ہے — یہ BLE کی «نیٹ ورک تہہ» ہے۔ GATT کنکشن قائم ہونے کے بعد ڈیٹا کے تبادلے کے لیے ذمہ دار ہے — «ایپلیکیشن تہہ»۔ ڈویلپر اسکین کرنے اور آلے سے جڑنے کے لیے GAP کا استعمال کرتا ہے، اور منسلک آلے سے ڈیٹا پڑھنے، لکھنے اور اطلاعات حاصل کرنے کے لیے GATT کا استعمال کرتا ہے۔

خصوصیتGAPGATT
مقصددریافت اور کنکشنڈیٹا کا تبادلہ
کردارمرکزی / پردییکلائنٹ / سرور
پروٹوکولHCI، ربط تہہATT (Attribute Protocol)
مرحلہکنکشن سے پہلےکنکشن کے بعد
اہم کلاسBluetoothAdapterBluetoothGatt

GATT میں کردار

GATT دو کرداروں کی وضاحت کرتا ہے: GATT سرور اور GATT کلائنٹ۔ سرور ایک آلہ ہے جو ڈیٹا فراہم کرتا ہے (مثال کے طور پر، ایک فٹنس ٹریکر جو دل کی دھڑکن کی ریڈنگ بھیجتا ہے)۔ کلائنٹ ایک آلہ ہے جو ڈیٹا کی درخواست کرتا ہے (مثال کے طور پر، ایک اسمارٹ فون جو ریڈنگ پڑھتا ہے)۔ زیادہ تر منظرناموں میں، Android ایپ GATT کلائنٹ کے طور پر کام کرتی ہے، اور BLE پردیی GATT سرور کے طور پر کام کرتا ہے۔ تاہم، Android GATT سرور بھی ہو سکتا ہے — مثال کے طور پر، جب کوئی ایپ دوسرے آلات کے لیے BLE آلہ کا ایمولیشن کرتی ہے۔ کردار GATT کنکشن سیٹ اپ مرحلے میں طے کیا جاتا ہے اور سیشن کے دوران تبدیل نہیں ہوتا۔

BLE میں GATT مواصلات کیسے کام کرتا ہے

GATT مواصلات کا عمل آلات کے درمیان BLE کنکشن قائم ہونے کے بعد شروع ہوتا ہے۔ پہلے، GATT کلائنٹ سروس ڈسکوری کے ذریعے GATT سرور پر خدمات دریافت کرتا ہے — Android BluetoothGatt.discoverServices() کے ذریعے کنکشن پر خود بخود یہ کرتا ہے۔ دریافت کے بعد، کلائنٹ کو دستیاب خدمات، خصوصیات اور وضافت کی فہرست ملتی ہے۔ پھر کلائنٹ خصوصیت کی قدریں پڑھ سکتا ہے (Read)، نئی قدریں لکھ سکتا ہے (Write)، یا اطلاعات کو سبسکرائب کر سکتا ہے (Set Notify/Indicate)۔ GATT سرور کنکشن قائم ہونے کے بعد کسی بھی وقت کلائنٹ کو Notify/Indicate بھیج سکتا ہے۔

MTU — زیادہ سے زیادہ ترسیلی اکائی

ڈیفالٹ طور پر، BLE میں ایک GATT پیکٹ (MTU) کا سائز 23 بائٹس ہے، جس میں سے 3 بائٹس ATT ہیڈر اور 20 بائٹس پے لوڈ ہیں۔ اگر ایپلیکیشن کو زیادہ ڈیٹا منتقل کرنے کی ضرورت ہو (مثال کے طور پر، OTA فرم ویئر اپ ڈیٹ)، تو Android میں requestMtu() کے ذریعے MTU کو 517 بائٹس تک بڑھایا جا سکتا ہے۔ بڑھا ہوا MTU ایک ڈیٹا بلاک کو منتقل کرنے کے لیے درکار پیکٹوں کی تعداد کو کم کرتا ہے — 50 چھوٹے پیکٹوں کے بجائے، آپ 2 بڑے پیکٹ بھیج سکتے ہیں، جس سے بجلی کی کھپت کم ہوتی ہے اور ترسیل کی رفتار بڑھتی ہے۔ زیادہ سے زیادہ MTU BLE ورژن اور چپ کی صلاحیتوں پر منحصر ہے — Bluetooth 5.0 517 بائٹس تک، پرانے ورژن 247 بائٹس تک سپورٹ کرتا ہے۔

kotlin
// خصوصیت کی اطلاعات کو سبسکرائب کریں
fun enableNotifications(gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic) {
    gatt.setCharacteristicNotification(characteristic, true)

    // CCCD (کلائنٹ کریکٹرسٹک کنفیگریشن ڈسکریپٹر) کو فعال کریں
    val cccdUuid = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")
    val descriptor = characteristic.getDescriptor(cccdUuid)
    descriptor?.let {
        it.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)
        gatt.writeDescriptor(it)
    }
}

اطلاعات کو سنبھالنا

Android پر GATT سرور سے اطلاعات حاصل کرنے کے لیے، آپ کو BluetoothGattCallback.onCharacteristicChanged() کال بیک لاگو کرنا ہوگا۔ اس طریقہ میں، ایپ ہر بار جب سرور Notify یا Indicate بھیجتا ہے تو اپ ڈیٹ شدہ خصوصیت کی قدر حاصل کرتی ہے۔ ریئل ٹائم ڈیٹا پروسیسنگ کے لیے، بفر اور Kotlin coroutines استعمال کریں — یہ شدید اطلاعات کے دوران (مثال کے طور پر، فی سیکنڈ 100+ دل کی دھڑکن کی ریڈنگ) UI تھریڈ کو مسدود ہونے سے روکتا ہے۔ Indication کے لیے، آپ کو سرور کی طرف gatt.sendResponse() کال کرنا ہوگا — Android کلائنٹ پر، یہ خود بخود سنبھالا جاتا ہے۔

Android پر GATT کا نفاذ

Android پر، GATT کے ساتھ کام android.bluetooth پیکیج کی کلاسز کے ذریعے لاگو کیا جاتا ہے: BluetoothGatt (کنکشن)، BluetoothGattService(خدمت)، BluetoothGattCharacteristic (خصوصیت)، اور BluetoothGattDescriptor (واصف)۔ BLE آلہ سے کنکشن BluetoothDevice.connectGatt() کال کرکے شروع ہوتا ہے — یہ طریقہ ایک BluetoothGatt لوٹاتا ہے جس کے ذریعے تمام بعد کی کارروائیاں انجام دی جاتی ہیں۔ تمام GATT کال بیک BluetoothGattCallback میں آتے ہیں — یہ ایک غیر متزامن انٹرفیس ہے جو اسی تھریڈ پر کال کیا جاتا ہے جہاں BluetoothGatt بنایا گیا تھا۔ اہم: تمام GATT کارروائیاں ترتیب وار انجام دی جانی چاہئیں — ایک ہی BluetoothGatt پر بیک وقت متعدد کارروائیاں کال کرنا غلطیوں کا باعث بنتا ہے۔

GATT کنکشن لائف سائیکل

GATT کنکشن لائف سائیکل کا مناسب انتظام BLE ایپ کے استحکام کے لیے بہت اہم ہے۔ connectGatt() کال کرنے کے بعد، ایپ STATE_CONNECTED حالت کے ساتھ onConnectionStateChange() کال بیک کا انتظار کرتی ہے۔ پھر سسٹم خود بخود سروس ڈسکوری شروع کرتا ہے، جس کے مکمل ہونے پر onServicesDiscovered() کال کیا جاتا ہے۔ اس کے بعد ہی آپ پڑھنے، لکھنے اور سبسکرائب کرنے کا کام کر سکتے ہیں۔ ختم ہونے پر، ہمیشہ onDestroy() یا onPause() میں gatt.close() کال کریں — بند نہ کیے گئے GATT کنکشن بیٹری ختم کرتے ہیں اور Android پر اسی آلہ سے دوبارہ کنکشن کو روک سکتے ہیں۔

kotlin
// GATT کے ذریعے BLE آلہ سے جڑیں
private val gattCallback = object : BluetoothGattCallback() {
    override fun onConnectionStateChange(
        gatt: BluetoothGatt, status: Int, newState: Int
    ) {
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            gatt.discoverServices()
        }
    }

    override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) {
        val service = gatt.getService(UUID.fromString("180D"))
        val characteristic = service?.getCharacteristic(
            UUID.fromString("2A37")
        )
        characteristic?.let { enableNotifications(gatt, it) }
    }
}

معیاری GATT پروفائلز اور خدمات

Bluetooth SIG درجنوں معیاری GATT پروفائلز اور خدمات کو مقررہ 16 بٹ UUID کے ساتھ بیان کرتا ہے۔ سب سے عام: Battery Service (UUID 180F، خصوصیت Battery Level 2A19)، Heart Rate سروس (UUID 180D، خصوصیت Heart Rate Measurement 2A37)، Device Information سروس (UUID 180A، خصوصیات Manufacturer Name اور Serial Number)۔ معیاری خدمات کا استعمال مختلف مینوفیکچررز کے آلات کے درمیان مطابقت کو یقینی بناتا ہے — Heart Rate سروس والا کوئی بھی فٹنس بریسلٹ کسی بھی Android ایپ کے ساتھ کام کرنا چاہیے جو اسے سپورٹ کرتی ہو۔

حسب ضرورت GATT خدمات کا ڈیزائن

اگر معیاری خدمات کام کو کور نہیں کرتی ہیں، تو ڈویلپر 128 بٹ UUID کے ساتھ حسب ضرورت GATT خدمات بنا سکتا ہے۔ حسب ضرورت سروس ڈیزائن کرتے وقت، آپ کو ضرورت ہے: خصوصیات کا ایک منطقی گروپ بیان کریں (مثال کے طور پر، «لاک کنٹرول سروس»)، ہر خصوصیت کو صحیح خصوصیات (Read, Write, Notify) تفویض کریں، Characteristic Presentation Format واصف کے ذریعے مجاز اقدار اور پیمائش کی اکائیاں بیان کریں۔ پیچیدہ پروٹوکول کے لیے، Write خصوصیت کے ساتھ Command خصوصیت اور Notify کے ساتھ Status خصوصیت شامل کرنے کی سفارش کی جاتی ہے — یہ صنعتی BLE ایپلیکیشنز میں اپنائے گئے Command/Status پیٹرن کی پیروی کرتا ہے۔

kotlin
// حسب ضرورت GATT سروس بنائیں (GATT سرور کے طور پر Android)
private fun createCustomService(): BluetoothGattService {
    val serviceUuid = UUID.fromString("12345678-1234-5678-1234-56789abcdef0")
    val service = BluetoothGattService(
        serviceUuid, BluetoothGattService.SERVICE_TYPE_PRIMARY
    )

    val charUuid = UUID.fromString("12345678-1234-5678-1234-56789abcdef1")
    val characteristic = BluetoothGattCharacteristic(
        charUuid,
        BluetoothGattCharacteristic.PROPERTY_READ or
        BluetoothGattCharacteristic.PROPERTY_NOTIFY,
        BluetoothGattCharacteristic.PERMISSION_READ
    )
    service.addCharacteristic(characteristic)
    return service
}

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

BLE میں GATT کیا ہے اور اس کی ضرورت کیوں ہے؟

GATT (Generic Attribute Profile) ایک Bluetooth Low Energy پروفائل ہے جو آلات کے درمیان ڈیٹا کے تبادلے کی ساخت کی وضاحت کرتا ہے۔ معلومات تک رسائی کو معیاری بنانے کے لیے اس کی ضرورت ہے: تمام BLE آلات ڈیٹا کو خدمات اور خصوصیات میں ترتیب دیتے ہیں، کسی بھی کلائنٹ کو سینسر ریڈنگ پڑھنے، آلات کو کنٹرول کرنے اور اطلاعات حاصل کرنے کی اجازت دیتے ہیں۔

GATT GAP سے کیسے مختلف ہے؟

GAP BLE آلات کی دریافت اور کنکشن (اسکیننگ، ایڈورٹائزنگ، کنکشن سیٹ اپ) کے لیے ذمہ دار ہے۔ GATT کنکشن کے بعد ڈیٹا کے تبادلے (پڑھنا، لکھنا، اطلاعات) کے لیے ذمہ دار ہے۔ GAP کنکشن سے پہلے کام کرتا ہے، GATT بعد میں۔ دونوں پروفائل BLE کے لیے لازمی ہیں، لیکن مختلف افعال انجام دیتے ہیں: GAP «نیٹ ورک تہہ» ہے، GATT «ایپلیکیشن تہہ» ہے۔

کون سی GATT خدمات اور خصوصیات موجود ہیں؟

معیاری خدمات میں Battery Service (180F، بیٹری کی سطح)، Heart Rate (180D، نبض)، Device Information (180A، آلہ کا ڈیٹا) شامل ہیں۔ ہر خدمت میں 16 بٹ UUID کے ساتھ متعدد خصوصیات ہوتی ہیں۔ ڈویلپر مخصوص کاموں کے لیے 128 بٹ UUID کے ساتھ حسب ضرورت خدمات بنا سکتے ہیں — جیسے سمارٹ لاک کنٹرول یا فٹنس ٹریکر ڈیٹا ٹرانسمیشن۔

Android پر GATT کیسے کام کرتا ہے؟

Android پر، GATT کو BluetoothGatt (کنکشن)، BluetoothGattService (خدمت)، BluetoothGattCharacteristic (خصوصیت)، اور BluetoothGattDescriptor (واصف) کے ذریعے لاگو کیا جاتا ہے۔ کنکشن connectGatt() کے ذریعے کیا جاتا ہے، جس کے بعد BluetoothGattCallback کے ذریعے واقعات آتے ہیں: onConnectionStateChange، onServicesDiscovered، onCharacteristicChanged (اطلاعات کے لیے)۔ تمام GATT کارروائیاں ترتیب وار انجام دی جانی چاہئیں۔

GATT میں UUID کیا ہے؟

UUID (عالمی منفرد شناخت کنندہ) ایک 16 بٹ یا 128 بٹ شناخت کنندہ ہے جو GATT میں کسی خدمت یا خصوصیت کی منفرد طور پر شناخت کرتا ہے۔ معیاری Bluetooth SIG خدمات 16 بٹ UUID استعمال کرتی ہیں (مثال کے طور پر، Heart Rate کے لیے 180D)۔ ڈویلپر کی حسب ضرورت خدمات 128 بٹ UUID استعمال کرتی ہیں (مثال کے طور پر، 12345678-1234-5678-1234-56789abcdef0)۔ UUID کلائنٹ کو GATT سرور پر مطلوبہ ڈیٹا تلاش کرنے کی اجازت دیتا ہے۔

خلاصہ

  • GATT — Attribute Protocol (ATT) پر مبنی، خدمات، خصوصیات اور وضافت کے درجہ بندی کے ذریعے ساختہ ڈیٹا کے تبادلے کے لیے ایک BLE پروفائل
  • ڈیٹا کا درجہ بندی — خدمت (منطقی گروپ)، خصوصیت (قسم کے ساتھ مخصوص قدر)، واصف (میٹا ڈیٹا — اکائیاں، اطلاع کی ترتیبات)
  • GATT کردار — سرور (ڈیٹا فراہم کرتا ہے، عام طور پر BLE پردیی) اور کلائنٹ (پڑھتا/لکھتا ہے، عام طور پر Android اسمارٹ فون)
  • کارروائیاں — Read، Write، Notify (تصدیق کے بغیر، تیز) اور Indicate (تصدیق کے ساتھ، زیادہ قابل اعتماد)؛ انتخاب منظر نامے پر منحصر ہے
  • Android API — BluetoothGatt، BluetoothGattCallback، BluetoothGattService، BluetoothGattCharacteristic؛ کال بیک کے ذریعے ترتیب وار غیر متزامن کالز
  • معیاری پروفائل — Battery Service، Heart Rate، Device Information — مختلف مینوفیکچررز کے آلات کے درمیان مطابقت کو یقینی بناتے ہیں
  • حسب ضرورت خدمات — منفرد کاموں کے لیے 128 بٹ UUID؛ صحیح خصوصیات (Read, Write, Notify, Indicate) کے ساتھ Command/Status پیٹرن کا استعمال کرتے ہوئے ڈیزائن کیا گیا

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

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

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

مزید پڑھیں