Deskriptor: bu nima, Client Characteristic Configuration va misollar

Muallif: IT Sectr Nashr etilgan: 2026-07-15 O'qish vaqti: 8 daq

Deskriptor — bu BLE xarakteristikasining yordamchi atributi bo‘lib, uning qiymati uchun metama’lumotlar yoki konfiguratsiyani ta’minlaydi. Bluetooth Core Specification 5.4 deskriptorlarni GATT profilining ajralmas qismi sifatida belgilaydi: ular o‘lchov birliklarini, qiymat diapazonlarini, matn nomlarini tavsiflaydi va bildirishnomalarga obunani boshqaradi. Eng taniqli deskriptor Client Characteristic Configuration Descriptor (CCCD, 0x2902) bo‘lib, u Centralga xarakteristikadan bildirishnomalarga obuna bo‘lish imkonini beradi. Bluetooth SIG ma’lumotlariga ko‘ra, 8 ta standart deskriptor spetsifikatsiya qilingan va maxsus deskriptorlar ishlab chiquvchi tomonidan har qanday qo‘shimcha metama’lumotlar uchun yaratilishi mumkin.

Asosiy fikrlar

  • Deskriptor — xarakteristikaning metama’lumotlar yoki qiymat konfiguratsiyasini o‘z ichiga olgan yordamchi atributi.
  • CCCD (0x2902) — eng muhim deskriptor: u orqali Central xarakteristika o‘zgarishi haqida bildirishnomalarga obuna bo‘ladi.
  • Standart deskriptorlar matn nomi uchun User Description (0x2901) va ma’lumot formati uchun Presentation Format (0x2904) ni o‘z ichiga oladi.
  • Har bir xarakteristika bir nechta deskriptorga ega bo‘lishi mumkin, lekin har bir standart turdan ko‘pi bilan bitta.
  • Deskriptorlar avtomatik ravishda Core Bluetooth tomonidan yaratiladi, lekin maxsus metama’lumotlar uchun moslashtirilishi mumkin.

BLEda deskriptor nima?

Deskriptor — bu GATT protokolining atributi bo‘lib, u xarakteristikaga biriktiriladi va uning qiymati yoki ishlatish usuli haqida qo‘shimcha ma’lumot beradi. GATT terminologiyasida xarakteristika ma’lumotdir, deskriptor esa bu ma’lumotlarning metama’lumotidir.

Har bir xarakteristika nol yoki undan ko‘p deskriptorga ega bo‘lishi mumkin. Deskriptorlar GATT jadvalida alohida atributlar sifatida belgilanadi va Bluetooth SIG fazosida o‘zining 16-bit UUIDiga ega. Deskriptorlar mustaqil mavjud bo‘la olmaydi — ular har doim ma’lum bir xarakteristikaga bog‘langan.

Bluetooth Core Specification 5.4 (2023) ga ko‘ra, deskriptorlar ikki toifaga bo‘linadi: standart (Bluetooth SIG tomonidan belgilangan) va maxsus (ishlab chiquvchi tomonidan belgilanadigan). Standart deskriptorlar 0x2900–0x2908 diapazonida UUIDga ega va qat’iy belgilangan funksiyalarni bajaradi. Maxsus deskriptorlar xuddi maxsus xizmatlar va xarakteristikalar kabi 128-bit UUIDlardan foydalanadi.

Deskriptorlar BLE ulanishining xatti-harakat konfiguratsiyasi uchun asosiy mexanizmdir. CCCD (0x2902) bo‘lmasa, bildirishnomalarga obuna bo‘lish mumkin emas, Presentation Format (0x2904) bo‘lmasa, Central xarakteristikaning xom baytlarini qanday talqin qilishni bilmaydi.

Client Characteristic Configuration Descriptor (CCCD)

CCCD UUID 0x2902 bilan BLEdagi eng muhim va eng keng qo‘llaniladigan deskriptordir. U Centralning xarakteristikadan bildirishnomalar (Notify) va tasdiqlangan bildirishnomalar (Indicate) ga obunasini boshqaradi. CCCDga yozuv bo‘lmasa, xarakteristika hatto Notify xususiyatiga ega bo‘lsa ham bildirishnomalarni yubormaydi.

CCCD 16-bitli qiymat bo‘lib, unda eng kichik bit (0x0001) Notifyni, ikkinchi bit (0x0002) esa Indicate ni yoqadi. Central CCCDga kerakli qiymatni yozadi va shu bilan bildirishnomalarga obuna bo‘ladi. Agar Central 0x0000 yozsa — obuna bekor qilinadi.

CCCDning ishlash mexanizmi quyidagicha: Central Notify qo‘llab-quvvatlovchi xarakteristikani aniqlaganda, uning CCCD deskriptorini topadi va 0x0001 yozadi. Shundan so‘ng, har safar Peripheral xarakteristika qiymatini yangilaganda, u avtomatik ravishda obuna bo‘lgan Centralga Handle Value Notification orqali yuboriladi (Centraldan so‘rovsiz).

Apple Core Bluetooth Programming Guide ga ko‘ra, CCCD tizim tomonidan avtomatik boshqariladi, xarakteristika uchun setNotifyValue chaqirilganda. Ishlab chiquvchi qo‘lda CCCDni qidirib yozishi shart emas — Core Bluetooth bildirishnomalar faollashtirilganda buni avtomatik bajaradi.

Bildirishnomalarga dasturiy obuna

iOSda obuna CBPeripheral obyektidagi setNotifyValue metodi orqali amalga oshiriladi.

swift
import CoreBluetooth

// Xarakteristika bildirishnomalariga obuna bo‘ling
peripheral.setNotifyValue(true, for: characteristic)

// Delegate yangilangan qiymatlarni oladi
func peripheral(
    _ peripheral: CBPeripheral,
    didUpdateValueFor characteristic: CBCharacteristic,
    error: Error?
) {
    // characteristic.value yangi ma’lumotlarga ega
    guard let data = characteristic.value else { return }
}

Androidda bildirishnomalarga obuna BluetoothGatt.setCharacteristicNotification orqali amalga oshiriladi. Ishlab chiquvchi qo‘lda CCCDga 0x0001 qiymatini yozishi kerak.

java
import android.bluetooth.*;

// Bildirishnomalarni yoqing
bluetoothGatt.setCharacteristicNotification(characteristic, true);

// CCCDga 0x0001 yozing
BluetoothGattDescriptor descriptor = characteristic
    .getDescriptor(
        UUID.fromString("00002902-0000-1000-8000-00805F9B34FB")
    );
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
bluetoothGatt.writeDescriptor(descriptor);

Bluetooth SIG standart deskriptorlari

Bluetooth SIG xarakteristika konfiguratsiyasining keng tarqalgan vazifalari uchun 8 ta standart deskriptorni belgilagan. Har bir deskriptor qat’iy belgilangan UUID va qiymat formatiga ega.

UUIDDeskriptor nomiMaqsadQiymat turi
0x2900Characteristic Extended PropertiesXarakteristikaning qo‘shimcha xususiyatlariuint16 (bit maskasi)
0x2901Characteristic User DescriptionXarakteristikaning matn nomiUTF-8 satr
0x2902Client Characteristic ConfigurationBildirishnomalarni boshqarishuint16
0x2903Server Characteristic ConfigurationBroadcast uchun server konfiguratsiyasiuint16
0x2904Characteristic Presentation FormatMa’lumot taqdimot formatiStruktura (7 bayt)
0x2905Characteristic Aggregate FormatBir nechta xarakteristikani birlashtirishUUID ro‘yxati
0x2906Valid RangeRuxsat etilgan qiymat diapazoniuint16 × 2 (min, max)
0x2907External Report ReferenceTashqi hisobotga havolauint16
0x2908Report ReferenceIchki hisobotga havolauint8 + uint16

Characteristic User Description (0x2901) UI uchun ayniqsa foydalidir: u ilova interfeysida ko‘rsatilishi mumkin bo‘lgan inson o‘qiy oladigan xarakteristika nomini o‘z ichiga oladi. Masalan, Battery Level xarakteristikasi “Batareya zaryad darajasi” qiymatiga ega User Description deskriptoriga ega bo‘lishi mumkin.

Characteristic Presentation Format (0x2904) xarakteristika qiymatini qanday talqin qilish haqida ma’lumotni o‘z ichiga oladi: format (uint8, uint16, float), eksponent, o‘lchov birligi (Bluetooth SIG reestridan UUID orqali), nom fazosi va tavsif. Masalan, harorat eksponent -2 (bo‘linma qiymati 0.01°C) va “selsiy darajasi” o‘lchov birligi bilan int16 bo‘lishi mumkin.

iOS va Androidda deskriptordan qanday foydalanish

Deskriptorlarga kirish iOS va Androidda farq qiladi. Core Bluetooth bildirishnomalar yoqilganda CCCDni avtomatik boshqaradi, Android esa deskriptorga qo‘lda qiymat yozishni talab qiladi. Ikkala yondashuvni ko‘rib chiqamiz.

iOS: CCCDni avtomatik boshqarish

iOSda ishlab chiquvchi odatda deskriptorlar bilan bevosita aloqada bo‘lmaydi. Core Bluetooth avtomatik ravishda CCCDni topadi va setNotifyValue chaqirilganda unga kerakli qiymatni yozadi. Deskriptorlarni o‘qish uchun discoverDescriptors metodidan foydalaniladi.

swift
// Deskriptorlarni kashf eting
peripheral.discoverDescriptors(for: characteristic)

// User Description qiymatini o‘qing
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverDescriptorsFor characteristic: CBCharacteristic,
    error: Error?
) {
    for descriptor in characteristic.descriptors ?? [] {
        if descriptor.uuid == CBUUID("2901") {
            peripheral.readValue(for: descriptor)
        }
    }
}

Android: CCCDni qo‘lda boshqarish

Androidda ishlab chiquvchi xarakteristikaning CCCD deskriptorini o‘zi topishi va bildirishnomalarni yoqish uchun unga qiymat yozishi kerak. Bu iOS bilan solishtirganda qo‘shimcha qadamdir.

java
// User Description deskriptori qiymatini o‘qing
BluetoothGattDescriptor userDesc = characteristic
    .getDescriptor(
        UUID.fromString("00002901-0000-1000-8000-00805F9B34FB")
    );

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

Maxsus deskriptorlar yaratish

Maxsus deskriptorlar Bluetooth SIG standart deskriptorlari yetarli bo‘lmaganda ishlatiladi. Masalan, tibbiy sensor ishlab chiqaruvchisi sensor kalibratsiyasi haqida ma’lumotga ega deskriptor yoki xato jurnali bilan deskriptor qo‘shishi mumkin.

Maxsus deskriptor xuddi maxsus xarakteristika kabi 128-bit UUID bilan yaratiladi. Peripheral tomondan ishlab chiquvchi uni tegishli API orqali xarakteristikaga qo‘shadi. Central tomondan deskriptor discoverDescriptors chaqirilganda avtomatik aniqlanadi.

Maxsus deskriptor yaratishda qoidalarga rioya qiling: qiymat uzunligi kutilayotgan ma’lumot turiga mos kelishi kerak, kirish huquqlari (read/write) aniq ko‘rsatilishi kerak. Maxsus maqsadlar uchun Bluetooth SIG standart deskriptorlarining UUID diapazonidan (0x2900–0x2908) foydalanmang.

Deskriptor va xarakteristika o‘rtasidagi farq

Xarakteristika va deskriptor — bu GATT atributlarining turli darajalaridir. Xarakteristika ma’lumot nuqtasidir, deskriptor esa uning metama’lumoti yoki konfiguratsiyasidir. Farq bir nechta jihatlarda namoyon bo‘ladi: maqsad, UUID va kirish qoidalari.

Xarakteristika har doim GATT jadvalida joylashgan majburiy deklaratsiyaga (declaration) ega. Deskriptor ixtiyoriy — xarakteristika deskriptorlarga ega bo‘lmasligi mumkin. Xarakteristika mustaqil ravishda o‘qilishi, yozilishi yoki bildirishnomalar yuborishi mumkin. Deskriptor har doim xarakteristikaga bog‘langan va alohida mavjud emas.

Bluetooth Core Specification 5.4 ga ko‘ra, GATT jadvalida atributlarning tartibi quyidagicha: xizmat deklaratsiyasi, xarakteristika deklaratsiyasi, xarakteristika qiymati, xarakteristika deskriptorlari (agar mavjud bo‘lsa), keyin keyingi xizmat. Bu tartib GATT mijozlarining to‘g‘ri ishlashi uchun majburiydir.

Tez-tez beriladigan savollar

Xarakteristikada Notify xususiyati bo‘lsa, CCCD nima uchun kerak?

CCCD obunani boshqarish uchun kerak: Notify xususiyati faqat xarakteristika bildirishnomalar yuborishi mumkinligini aytadi, lekin ularni yoqmaydi. Central CCCDga 0x0001 yozib, aniq obuna bo‘lishi kerak. Bu tayyor bo‘lmagan Centralga istalmagan ma’lumotlarni yuborishning oldini oladi.

Bitta xarakteristika nechta deskriptorga ega bo‘lishi mumkin?

Spetsifikatsiya deskriptorlar sonini cheklamaydi. Amalda, har bir xarakteristika odatda 1–3 ta deskriptorga ega: CCCD (Notify/Indicate bilan xarakteristikalar uchun), ixtiyoriy User Description va Presentation Format. Haddan tashqari ko‘p deskriptorlar GATT jadvalining hajmini oshiradi.

Peripheral tomonda deskriptorlarni qo‘lda yaratish kerakmi?

Aksariyat hollarda kerak emas. iOS va Androidda Core Bluetooth avtomatik ravishda Notify yoki Indicate xususiyatlariga ega xarakteristikalarga CCCD qo‘shadi. Maxsus deskriptorlar faqat maxsus metama’lumotlar uchun qo‘lda yaratiladi.

CCCDga maxsus ma’lumotlarni yozish mumkinmi?

Yo‘q, CCCD qat’iy belgilangan format (uint16) va maqsadga ega — bildirishnomalarni boshqarish. Boshqa qiymatlarni yozish Bluetooth spetsifikatsiyasini buzadi va obunaning ishlamasligiga olib kelishi mumkin. Maxsus ma’lumotlar uchun 128-bit UUID bilan maxsus deskriptorlardan foydalaning.

Characteristic User Description ilova uchun qanday foydali?

User Description inson o‘qiy oladigan xarakteristika nomini o‘z ichiga oladi — masalan, UUID 0x2A6E o‘rniga “Korpus harorati”. Ilova bu nomni interfeysda ko‘rsatishi mumkin, bu esa BLE qurilmasi bilan o‘zaro aloqani qattiq kodlangan satrlarsiz foydalanuvchi uchun tushunarli qiladi.

Xulosa

  • Deskriptor — metama’lumotlar yoki konfiguratsiyani saqlash uchun xarakteristikaga biriktirilgan yordamchi GATT atributi.
  • CCCD (0x2902) — Centralning xarakteristikaning bildirishnomalari va tasdiqlangan bildirishnomalariga obunasini boshqaruvchi asosiy deskriptor.
  • Bluetooth SIG odatiy vazifalar — tavsif, formatlash va konfiguratsiya uchun 8 ta standart deskriptorni (0x2900–0x2908) belgilagan.
  • iOSda CCCD avtomatik boshqariladi, Androidda bildirishnomalarni yoqish uchun 0x0001 qiymatini qo‘lda yozish talab qilinadi.
  • Maxsus deskriptorlar standart deskriptorlar bilan qoplanmagan noyob metama’lumotlar uchun 128-bit UUID bilan yaratiladi.
  • Deskriptorlar mustaqil mavjud emas — ular har doim xarakteristikaga bog‘langan va GATT jadvalida uni kuzatib boradi.
  • Deskriptorlardan to‘g‘ri foydalanish BLE ulanishining to‘g‘ri konfiguratsiyasini va ma’lumotlarning ilova uchun tushunarli bo‘lishini ta’minlaydi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing