Advertising Data — су структурирани подаци које BLE уређај преноси у рекламним пакетима ради идентификације себе и својих сервиса. Bluetooth Core Specification 5.4 (2023) дефинише формат AD Structure: сваки елемент садржи дужину (1 бајт), тип (1 бајт) и вредност (до 29 бајтова). Спецификација укупно описује преко 30 AD типова — од Flags и Local Name до Service UUID и Manufacturer Specific Data. Правилно паковање advertising data-а је критично за компатибилност уређаја са iOS, Android и другим платформама, а такође одређује брзину откривања и енергетску ефикасност рекламе.
Главне тачке
Advertising Data — је структурирани скуп поља које BLE уређај преноси у рекламним пакетима ради идентификације и описа својих могућности. Central, скенирајући канал, чита ове податке и доноси одлуку: да се повеже са уређајем, да га игнорише или да затражи додатне информације путем Scan Response-а.
Подаци су организовани по принципу TLV (Type-Length-Value): сваки AD елемент се састоји од три поља. Length (1 бајт) — дужина Value + Type (тј. укупна дужина елемента минус 1 бајт за Length). Type (1 бајт) — идентификатор типа података из Bluetooth Assigned Numbers. Value (N бајтова) — садржај у зависности од типа.
Стандардни рекламни пакет може да садржи до 31 бајта AD података. Ако то није довољно, користи се Scan Response (још 31 бајт) или Extended Advertising (BLE 5.0, до 251 бајта). Притом су први бајтови рекламног пакета резервисани за заглавље PDU и адресу уређаја — корисни AD терет почиње са помаком.
Сваки AD елемент у рекламном пакету почиње пољем Length (1 бајт). Вредност Length означава број бајтова који следе након Length — тј. Type + Value. На пример, елемент са Length=3 значи да након Length следи 1 бајт Type и 2 бајта Value. Пакет се завршава када збир дужина свих елемената достигне величину рекламних података.
| Поље | Величина | Опис |
|---|---|---|
| Length | 1 бајт | Дужина Type + Value (не укључујући Length) |
| Type (AD Type) | 1 бајт | Идентификатор типа података према Bluetooth SIG |
| Value | 0–29 бајтова | Подаци одређеног типа |
Парсер Central чита секвенцу AD елемената почевши од првог бајта након заглавља. Ако је Length=0, елемент се игнорише, а парсер прелази на следећи бајт. Дуплирани AD типови — више елемената са истим Type у једном пакету — су дозвољени, али Central може обрадити само први или последњи у зависности од имплементације стека.
Важно правило: збир свих Length(+1) у пакету не сме да премаши величину рекламних података (31 бајт за рекламни PDU). Ако подаци не стају, потребно је одредити приоритете — који AD типови су критични за примарно откривање, а који се могу пренети у Scan Response.
Flags (AD Type 0x01) — обавезан елемент у рекламном пакету сваког BLE уређаја. Заузима 3 бајта: Length (0x02), Type (0x01), Value (1 бајт битних заставица). Заставице одређују режиме откривања и могућности уређаја. Core Specification препоручује укључивање Flags у сваки рекламни пакет.
Главне заставице: LE Limited Discoverable Mode (бит 0) — уређај је доступан за откривање ограничено време, LE General Discoverable Mode (бит 1) — уређај је стално доступан, BR/EDR Not Supported (бит 2) — уређај подржава само LE, Simultaneous LE and BR/EDR (бит 3) — подршка за оба режима. За чисто BLE уређаје обавезна је комбинација: LE General Discoverable + BR/EDR Not Supported.
Нетачна вредност Flags — један од честих разлога зашто уређај није откривен у iOS или Android. На пример, ако заставица BR/EDR Not Supported није постављена, iOS може покушати да се повеже преко класичног Bluetooth-а уместо BLE. Проверавајте вредност Flags при отклањању грешака рекламног пакета помоћу Bluetooth анализатора (nRF Connect, Wireshark).
Local Name (AD Type 0x08 или 0x09) — приказано име BLE уређаја. Тип 0x08 (Shortened Local Name) — скраћено име, користи се када пуно име не стаје у рекламни пакет. Тип 0x09 (Complete Local Name) — пуно име уређаја. Максимална дужина имена је 248 бајтова, али у стандардном рекламном пакету није доступно више од 28 бајтова.
Ако име уређаја премашује расположиви простор у рекламном пакету, препоручује се: поставите скраћено име у рекламни PDU (тип 0x08), а пуно име у Scan Response (тип 0x09). iOS приказује име из рекламног пакета при скенирању, а пуно име постаје доступно након повезивања или Scan Response-а.
При избору имена уређаја узмите у обзир: предуго име заузима простор који би могао бити искоришћен за Service UUID или друге важне податке. Препоручена дужина имена је 8–16 знакова. Избегавајте нестандардне знакове и размаке — неки BLE стекови их могу некоректно обрађивати.
Service UUID (AD Type 0x02–0x07) — један од најважнијих AD типова, који омогућава Central-у да утврди које сервисе уређај пружа без повезивања са њим. Bluetooth SIG дефинише неколико формата преноса UUID у зависности од величине: 0x02 (Incomplete 16-bit), 0x03 (Complete 16-bit), 0x04 (Incomplete 32-bit), 0x05 (Complete 32-bit), 0x06 (Incomplete 128-bit), 0x07 (Complete 128-bit).
16-bit UUID (2 бајта) — стандардни Bluetooth SIG сервиси, на пример 0x180F (Battery Service), 0x180A (Device Information). 128-bit UUID (16 бајтова) — прилагођени сервиси које дефинише програмер. 16-bit UUID заузима само 4 бајта у AD (Length + Type + 2 бајта UUID), а 128-bit — 18 бајтова. Ако у једном пакету треба пренети више прилагођених UUID-ова, можда неће стати у 31 бајт.
Препоручује се коришћење типа Incomplete (0x02/0x04/0x06) ако се не преносе сви UUID-ови уређаја, већ само најважнији за филтрирање. Комплетна листа UUID-ова се преноси путем Scan Response-а или GATT Discovery-ја након повезивања. Ово штеди простор у рекламном пакету за друге AD типове.
Manufacturer Specific Data (AD Type 0xFF) — најфлексибилнији AD тип, намењен преносу прилагођених података произвођача. Прва 2 бајта Value — Company Identifier Code, додељен од Bluetooth SIG (на пример, 0x004C за Apple, 0x0075 за Samsung). Преостали бајтови су произвољни подаци у формату који је одредио произвођач.
Apple користи Manufacturer Data за iBeacon: Company ID (0x004C), тип Beacon (0x0215), UUID (16 бајтова), Major (2 бајта), Minor (2 бајта), TX Power (1 бајт). Google користи аналогни формат за Eddystone. Произвођачи IoT уређаја често стављају у Manufacturer Data очитавања сензора или стање уређаја.
// Парсирај Manufacturer Specific Data на Central-у
function parseManufacturerData(data) {
const view = new DataView(data.buffer);
// Код идентификације компаније (прва 2 бајта)
const companyId = view.getUint16(0, true);
// Провери Apple iBeacon
if (companyId === 0x004C) {
return parseIBeacon(view);
}
return null;
}
При коришћењу Manufacturer Data важно је поштовати ограничење величине: 31 бајт за цео рекламни пакет минус обавезни AD типови. За Apple iBeacon цео пакет заузима 30 бајтова, остављајући места само за Flags (3 бајта). За Eddystone — до 31 бајта. Компактни прилагођени формати могу укључити температуру, влажност или притисак у 4–8 бајтова.
Правилно паковање advertising data-а — је уметност постављања максимално корисних информација у ограничени простор од 31 бајта. Стратегија зависи од намене уређаја: маяку је потребан идентификатор, IoT сензору — очитавања, фитнес трекеру — име и UUID сервиса. Општи принцип: што брже Central мора да донесе одлуку, то критичнији подаци треба да буду у рекламном PDU-у.
Препоручена стратегија: рекламни PDU (првих 31 бајт) — Flags (3 бајта) + један 16-bit Service UUID (4 бајта) + скраћено име (до 12 знакова = 14 бајтова) + Manufacturer Data (до 10 бајтова). Scan Response (других 31 бајт) — пуно име (остатак) + додатни Service UUID + TX Power Level (3 бајта). Овакав распоред омогућава Central-у да брзо филтрира уређаје по UUID-у.
| Приоритет | AD тип | Величина | Ставити у |
|---|---|---|---|
| 1 (обавезно) | Flags (0x01) | 3 бајта | Рекламни PDU |
| 2 (филтрирање) | Service UUID (0x02–0x03) | 4+ бајта | Рекламни PDU |
| 3 (идентификација) | Local Name (0x08–0x09) | 2+ бајта | Рекламни PDU (скраћено) |
| 4 (додатно) | TX Power Level (0x0A) | 3 бајта | Scan Response |
| 5 (прилагођено) | Manufacturer Data (0xFF) | 4+ бајта | Рекламни PDU / Scan Response |
| 6 (пуни подаци) | Остали UUID-ови | По величини | Scan Response |
Отклањање грешака advertising data-а — обавезна фаза развоја BLE уређаја. Користите nRF Connect (Nordic Semiconductor) или Wireshark са Bluetooth анализатором за преглед сирових података пакета. Проверите да сви AD типови имају исправан Length, да збир дужина не прелази 31 бајт и да су Flags правилно постављене за ваш сценариј коришћења.
Често постављана питања
Bluetooth Controller стек ће одбацити податке који премашују лимит или неће послати пакет. Проверавајте укупну дужину AD елемената при састављању рекламног пакета. Ако подаци не стају — пребаците део у Scan Response или користите Extended Advertising (BLE 5.0) са лимитом од 251 бајта.
Да, путем Manufacturer Specific Data (0xFF). Упакујте очитавања у 4–8 бајтова: на пример, температуру (2 бајта у fixed-point формату), влажност (2 бајта), напон батерије (2 бајта). Овакав приступ омогућава Central-у да чита податке без повезивања, штедећи енергију.
За прилагођене сервисе користите 128-bit UUID (AD Type 0x06–0x07). Ако UUID не стаје у рекламни PDU (16 бајтова за један UUID), пребаците га у Scan Response или користите скраћени формат Incomplete (0x06) за навођење само првих једног или два UUID-а.
Complete — у пакету су наведени сви UUID-ови сервиса уређаја. Incomplete — само део UUID-ова (обично најважнији). Central не може да се ослони на Incomplete као на комплетну листу, али га користи за брзо филтрирање. Комплетна листа је доступна након GATT Discovery-ја.
Чест разлог — неисправан Flags (0x01). Уверите се да је бит BR/EDR Not Supported постављен. Други разлог — одсуство Service UUID-а у рекламном пакету (iOS филтрира по UUID-у). Трећи — уређај се рекламира преретко (iOS очекује интервал не већи од 1000 ms).
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође