Descriptor: mi ez, Client Characteristic Configuration és példák

Szerző: IT Sectr Megjelenés: 2026-07-15 Olvasási idő: 8 perc

Descriptor — egy BLE jellemző segédattribútuma, amely metaadatokat vagy konfigurációt biztosít az értékéhez. A Bluetooth Core Specification 5.4 a deskriptorokat a GATT profil szerves részeként határozza meg: leírják a mértékegységeket, értéktartományokat, szöveges neveket és kezelik az értesítésekre való feliratkozást. A legismertebb descriptor a Client Characteristic Configuration Descriptor (CCCD, 0x2902), amely lehetővé teszi a Central számára, hogy feliratkozzon a jellemző értesítéseire. A Bluetooth SIG szerint 8 szabványos descriptor van specifikálva, és egyedi deskriptorokat a fejlesztő bármilyen további metaadathoz létrehozhat.

Főbb pontok

  • Descriptor — a jellemző segédattribútuma, amely metaadatokat vagy értékkonfigurációt tartalmaz.
  • CCCD (0x2902) — a legfontosabb descriptor: ezen keresztül a Central feliratkozik a jellemző változásának értesítéseire.
  • A szabványos deskriptorok közé tartozik a User Description (0x2901) a szöveges névhez és a Presentation Format (0x2904) az adatformátumhoz.
  • Minden jellemzőnek több deskriptora is lehet, de minden szabványos típusból legfeljebb egy.
  • A deskriptorokat a Core Bluetooth automatikusan létrehozza, de specifikus metaadatokhoz testreszabhatók.

Mi az a descriptor a BLE-ben?

Descriptor — a GATT protokoll attribútuma, amely a jellemzőhöz csatlakozik és további információkat nyújt annak értékéről vagy használati módjáról. A GATT terminológiájában a jellemző az adat, a descriptor pedig ezen adatok metaadata.

Minden jellemzőnek lehet nulla vagy több deskriptora. A deskriptorok különálló attribútumokként vannak meghatározva a GATT táblában, és saját 16 bites UUID-val rendelkeznek a Bluetooth SIG térben. A deskriptorok nem létezhetnek önállóan — mindig egy adott jellemzőhöz kötődnek.

A Bluetooth Core Specification 5.4 (2023) szerint a deskriptorok két kategóriába sorolhatók: szabványos (Bluetooth SIG által meghatározott) és egyedi (fejlesztő által meghatározott). A szabványos deskriptorok UUID-je a 0x2900–0x2908 tartományba esik, és szigorúan meghatározott funkciókat látnak el. Az egyedi deskriptorok 128 bites UUID-t használnak, hasonlóan az egyedi szolgáltatásokhoz és jellemzőkhöz.

A deskriptorok kulcsfontosságú mechanizmust jelentenek a BLE kapcsolat viselkedésének konfigurálásához. CCCD (0x2902) nélkül nem lehet feliratkozni az értesítésekre, Presentation Format (0x2904) nélkül a Central nem tudja, hogyan kell értelmezni a jellemző nyers bájtjait.

Client Characteristic Configuration Descriptor (CCCD)

CCCD 0x2902 UUID-val a legfontosabb és legszélesebb körben használt descriptor a BLE-ben. Kezeli a Central feliratkozását a jellemző értesítéseire (Notify) és megerősített értesítéseire (Indicate). CCCD-be írás nélkül a jellemző nem küld értesítéseket, még akkor sem, ha rendelkezik Notify tulajdonsággal.

CCCD egy 16 bites érték, amelyben a legkisebb bit (0x0001) a Notify-ot, a második bit (0x0002) pedig az Indicate-ot kapcsolja be. A Central a kívánt értéket írja a CCCD-be, ezzel feliratkozik az értesítésekre. Ha a Central 0x0000-t ír — a feliratkozás törlődik.

A CCCD működési mechanizmusa a következő: amikor a Central észlel egy Notify támogatással rendelkező jellemzőt, megkeresi annak CCCD deskriptorát és 0x0001-et ír. Ezután, minden alkalommal, amikor a Peripheral frissíti a jellemző értékét, az automatikusan elküldésre kerül a feliratkozott Central-nak Handle Value Notification útján (a Central kérése nélkül).

Az Apple Core Bluetooth Programming Guide szerint a CCCD automatikusan kezelődik a rendszer által a setNotifyValue jellemzőre történő meghívásakor. A fejlesztőnek nem kell kézzel keresnie és írnia a CCCD-t — a Core Bluetooth ezt automatikusan elvégzi az értesítések aktiválásakor.

Programozott feliratkozás értesítésekre

iOS-ben a feliratkozás a setNotifyValue metódussal történik a CBPeripheral objektumon.

swift
import CoreBluetooth

// Feliratkozás a jellemző értesítéseire
peripheral.setNotifyValue(true, for: characteristic)

// A delegate megkapja a frissített értékeket
func peripheral(
    _ peripheral: CBPeripheral,
    didUpdateValueFor characteristic: CBCharacteristic,
    error: Error?
) {
    // A characteristic.value új adatokkal rendelkezik
    guard let data = characteristic.value else { return }
}

Android-on az értesítésekre való feliratkozás a BluetoothGatt.setCharacteristicNotification segítségével történik. A fejlesztőnek kézzel kell írnia a 0x0001 értéket a CCCD-be.

java
import android.bluetooth.*;

// Értesítések bekapcsolása
bluetoothGatt.setCharacteristicNotification(characteristic, true);

// 0x0001 írása a CCCD-be
BluetoothGattDescriptor descriptor = characteristic
    .getDescriptor(
        UUID.fromString("00002902-0000-1000-8000-00805F9B34FB")
    );
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
bluetoothGatt.writeDescriptor(descriptor);

Bluetooth SIG szabványos deskriptorok

Bluetooth SIG 8 szabványos deskriptort határozott meg a jellemzők konfigurálásának általános feladataihoz. Minden deskriptornak szigorúan meghatározott UUID-je és értékformátuma van.

UUIDDescriptor neveCélÉrték típusa
0x2900Characteristic Extended PropertiesA jellemző kiegészítő tulajdonságaiuint16 (bitmaszk)
0x2901Characteristic User DescriptionA jellemző szöveges neveUTF-8 string
0x2902Client Characteristic ConfigurationÉrtesítések kezeléseuint16
0x2903Server Characteristic ConfigurationSzerver konfiguráció broadcast-hozuint16
0x2904Characteristic Presentation FormatAdatmegjelenítési formátumStruktúra (7 bájt)
0x2905Characteristic Aggregate FormatTöbb jellemző összevonásaUUID lista
0x2906Valid RangeEngedélyezett értékek tartományauint16 × 2 (min, max)
0x2907External Report ReferenceHivatkozás külső jelentésreuint16
0x2908Report ReferenceHivatkozás belső jelentésreuint8 + uint16

Characteristic User Description (0x2901) különösen hasznos a UI számára: tartalmazza a jellemző ember által olvasható nevét, amely megjeleníthető az alkalmazás felületén. Például a Battery Level jellemző rendelkezhet egy User Description deskriptorral, amelynek értéke „Akkumulátor töltési szintje”.

Characteristic Presentation Format (0x2904) információkat tartalmaz arról, hogyan kell értelmezni a jellemző értékét: formátum (uint8, uint16, float), kitevő, mértékegység (UUID-n keresztül a Bluetooth SIG nyilvántartásból), névtér és leírás. Például a hőmérséklet lehet int16 -2 kitevővel (osztási érték 0.01°C) és „Celsius-fok” mértékegységgel.

Hogyan használjuk a deskriptort iOS-ben és Android-ban

Hozzáférés a deskriptorokhoz eltér iOS és Android között. A Core Bluetooth automatikusan kezeli a CCCD-t az értesítések bekapcsolásakor, míg Android kézi értékírást igényel a deskriptorba. Vizsgáljuk meg mindkét megközelítést.

iOS: CCCD automatikus kezelése

iOS-ben a fejlesztő általában nem lép közvetlenül kapcsolatba a deskriptorokkal. A Core Bluetooth automatikusan megtalálja a CCCD-t és beírja a szükséges értéket a setNotifyValue meghívásakor. A deskriptorok olvasásához a discoverDescriptors metódust használjuk.

swift
// Deskriptorok felfedezése
peripheral.discoverDescriptors(for: characteristic)

// User Description érték olvasása
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 kézi kezelése

Android-on a fejlesztőnek magának kell megtalálnia a jellemző CCCD deskriptorát és értéket kell írnia az értesítések bekapcsolásához. Ez egy további lépés az iOS-hez képest.

java
// A User Description deskriptor értékének olvasása
BluetoothGattDescriptor userDesc = characteristic
    .getDescriptor(
        UUID.fromString("00002901-0000-1000-8000-00805F9B34FB")
    );

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

Egyedi deskriptorok létrehozása

Egyedi deskriptorokat akkor használunk, ha a Bluetooth SIG szabványos deskriptorai nem elegendőek. Például egy orvosi érzékelő gyártója hozzáadhat egy deskriptort az érzékelő kalibrációjának információival vagy egy deskriptort hibanaplóval.

Az egyedi deskriptor 128 bites UUID-val jön létre, mint az egyedi jellemző. A Peripheral oldalán a fejlesztő a megfelelő API-n keresztül adja hozzá a jellemzőhöz. A Central oldalán a deskriptor automatikusan észlelésre kerül a discoverDescriptors meghívásakor.

Az egyedi deskriptor létrehozásakor kövesse a szabályokat: az érték hosszának meg kell felelnie a várt adattípusnak, a hozzáférési jogokat (read/write) kifejezetten meg kell adni. Ne használjon UUID-t a Bluetooth SIG szabványos deskriptorainak tartományából (0x2900–0x2908) egyedi célokra.

Különbség a descriptor és a jellemző között

Jellemző és descriptor — a GATT attribútumok különböző szintjei. A jellemző egy adatpont, a descriptor pedig annak metaadata vagy konfigurációja. A különbség több szempontból is megnyilvánul: cél, UUID és hozzáférési szabályok.

A jellemző rendelkezik egy kötelező deklarációval (declaration), amely mindig megtalálható a GATT táblában. A descriptor opcionális — a jellemzőnek nem feltétlenül kell deskriptorokkal rendelkeznie. A jellemző függetlenül olvasható, írható vagy küldhet értesítéseket. A descriptor mindig a jellemzőhöz kötődik és nem létezik külön.

A Bluetooth Core Specification 5.4 szerint a GATT táblában az attribútumok sorrendje a következő: szolgáltatás deklarációja, jellemző deklarációja, jellemző értéke, jellemző deskriptorai (ha vannak), majd a következő szolgáltatás. Ez a sorrend kötelező a GATT kliensek helyes működéséhez.

Gyakori kérdések

Miért van szükség CCCD-re, ha a jellemző rendelkezik Notify tulajdonsággal?

CCCD a feliratkozás kezeléséhez szükséges: a Notify tulajdonság csak annyit mond, hogy a jellemző küldhet értesítéseket, de nem kapcsolja be azokat. A Central-nak kifejezetten fel kell iratkoznia a 0x0001 CCCD-be írásával. Ez megakadályozza a nemkívánatos adatküldést egy felkészületlen Central számára.

Hány deskriptora lehet egy jellemzőnek?

A specifikáció nem korlátozza a deskriptorok számát. A gyakorlatban minden jellemzőnek általában 1–3 deskriptora van: CCCD (Notify/Indicate tulajdonságú jellemzőkhöz), opcionálisan User Description és Presentation Format. Túl sok deskriptor megnöveli a GATT tábla méretét.

Kell kézzel létrehozni deskriptorokat a Peripheral oldalán?

A legtöbb esetben nem. A Core Bluetooth iOS-ben és Android-ban automatikusan hozzáadja a CCCD-t azokhoz a jellemzőkhöz, amelyek Notify vagy Indicate tulajdonsággal rendelkeznek. Az egyedi deskriptorokat csak specifikus metaadatokhoz hozzák létre kézzel.

Írhatok egyedi adatokat a CCCD-be?

Nem, a CCCD szigorúan meghatározott formátummal (uint16) és céllal rendelkezik — az értesítések kezelése. Más értékek írása megsérti a Bluetooth specifikációt, és a feliratkozás működésképtelenné válásához vezethet. Egyedi adatokhoz használjon egyedi deskriptorokat 128 bites UUID-val.

Hogyan hasznos a Characteristic User Description az alkalmazás számára?

User Description tartalmazza a jellemző ember által olvasható nevét — például „Házhőmérséklet” az UUID 0x2A6E helyett. Az alkalmazás megjelenítheti ezt a nevet a felületen, így a BLE eszközzel való interakció érthetővé válik a felhasználó számára keménykódolt karakterláncok nélkül.

Összefoglalás

  • Descriptor — a jellemzőhöz csatolt segéd GATT attribútum metaadatok vagy konfiguráció tárolására.
  • CCCD (0x2902) — a kulcsfontosságú descriptor, amely kezeli a Central feliratkozását a jellemző értesítéseire és megerősített értesítéseire.
  • A Bluetooth SIG 8 szabványos deskriptort (0x2900–0x2908) specifikált tipikus feladatokhoz — leírás, formázás és konfiguráció.
  • iOS-ben a CCCD automatikusan kezelődik, Android-ban kézzel kell írni a 0x0001 értéket az értesítések bekapcsolásához.
  • Az egyedi deskriptorok 128 bites UUID-val jönnek létre azon egyedi metaadatok számára, amelyeket a szabványos deskriptorok nem fednek le.
  • A deskriptorok nem léteznek önállóan — mindig a jellemzőhöz kötődnek és követik azt a GATT táblában.
  • A deskriptorok helyes használata biztosítja a BLE kapcsolat helyes konfigurációját és az adatok érthetőségét az alkalmazás számára.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is