Что такое профиль Bluetooth iBeacon
Я хотел бы создать свой собственный iBeacon с некоторыми наборами Bluetooth low energy dev. Apple еще не выпустила спецификацию для iBeacons, однако несколько разработчиков аппаратного обеспечения реверсировали iBeacon из образца кода AirLocate и начали продавать комплекты iBeacon dev.
Так что же такое профиль iBeacon Bluetooth?
Bluetooth с низким энергопотреблением использует ГАТТ для Le профиль обнаружения услуг. Поэтому я думаю, что нам нужно знать дескриптор атрибута, атрибут Тип, значение атрибута и, возможно, разрешения атрибутов атрибута iBeacon. Итак, для iBeacon с UUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 главное значение 1 и второстепенное значение 1, Что такое служба профиля Bluetooth GATT?
вот некоторые предположения, которые я сделал из обсуждения на форумах Apple и документы.
вам нужно только увидеть службу профилей (GATT) периферийного устройства Bluetooth, чтобы знать, что это технологии iBeacon.
основные и второстепенные ключи кодируются где-то в этом сервисе профиля
вот некоторые компании с наборами разработчиков iBeacon, которые, похоже, уже имеют эту цифру:
надеюсь, со временем у нас будет профиль размещен на Bluetooth.org как эти: https://www.bluetooth.org/en-us/specification/adopted-specifications
6 ответов:
для iBeacon с ProximityUUID
E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
майор0
, несовершеннолетнего0
, и откалибрированная сила Tx-59
RSSI, переданный рекламный пакет BLE выглядит следующим образом:
d6 be 89 8e 40 24 05 a2 17 6e 3d 71 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 52 ab 8d 38 a5
этот пакет может быть разбит следующим образом:
d6 be 89 8e # Access address for advertising data (this is always the same fixed value) 40 # Advertising Channel PDU Header byte 0. Contains: (type = 0), (tx add = 1), (rx add = 0) 24 # Advertising Channel PDU Header byte 1. Contains: (length = total bytes of the advertising payload + 6 bytes for the BLE mac address.) 05 a2 17 6e 3d 71 # Bluetooth Mac address (note this is a spoofed address) 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 # Bluetooth advertisement 52 ab 8d 38 a5 # checksum
ключевой частью этого пакета является реклама Bluetooth, которая может быть разбита следующим образом:
02 # Number of bytes that follow in first AD structure 01 # Flags AD type 1A # Flags value 0x1A = 000011010 bit 0 (OFF) LE Limited Discoverable Mode bit 1 (ON) LE General Discoverable Mode bit 2 (OFF) BR/EDR Not Supported bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller) bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host) 1A # Number of bytes that follow in second (and last) AD structure FF # Manufacturer specific data AD type 4C 00 # Company identifier code (0x004C == Apple) 02 # Byte 0 of iBeacon advertisement indicator 15 # Byte 1 of iBeacon advertisement indicator e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon proximity uuid 00 00 # major 00 00 # minor c5 # The 2's complement of the calibrated Tx Power
любое устройство Bluetooth LE, которое можно настроить для отправки определенного реклама может генерировать вышеуказанный пакет. Я настроил компьютер Linux с помощью Bluez для отправки этого объявления, а устройства iOS7, работающие с тестовым кодом Airlocate от Apple, забирают его как iBeacon с полями, указанными выше. Смотрите:Используйте Bluez Stack В Качестве Периферийного Устройства (Рекламодателя)
этой блог имеет полную информацию о процессе обратного инжениринга.
это, кажется, на основе данных рекламы, в частности, данные производителя:
4C00 02 15 585CDE931B0142CC9A1325009BEDC65E 0000 0000 C5 <company identifier (2 bytes)> <type (1 byte)> <data length (1 byte)> <uuid (16 bytes)> <major (2 bytes)> <minor (2 bytes)> <RSSI @ 1m>
- идентификатор компании Apple (Little Endian), 0x004c
- тип данных, 0x02 = > iBeacon
- длина данных, 0x15 = 21
- uuid: 585CDE931B0142CC9A1325009BEDC65E
- специальность: 0000
- минор: 0000
- meaured мощность на 1 метр: 0xc5 = -59
У меня есть это узел.JS скрипт работа в Linux с примером приложения AirLocate.
просто чтобы примирить разницу между ответом sandeepmistry и ответом davidgyoung:
02 01 1a 1a ff 4C 00
является частью спецификации формата рекламных данных [1]
02 # length of following AD structure 01 # <<Flags>> AD Structure [2] 1a # read as b00011010. # In this case, LE General Discoverable, # and simultaneous BR/EDR but this may vary by device! 1a # length of following AD structure FF # Manufacturer specific data [3] 4C00 # Apple Inc [4] 0215 # ?? some 2-byte header
отсутствует в объявлении определение сервиса [5]. Я думаю, что протокол iBeacon сам по себе не имеет никакого отношения к обнаружению GATT и standard service. Если вы загрузите программу iBeacon RedBearLab, вы увидите, что они используют GATT для настройки параметров рекламы, но это, кажется, специфично для их реализации, а не часть спецификации. Программа AirLocate, похоже, не использует GATT для настройки, например, в соответствии с LightBlue и другими подобными программами, которые я пробовал.
ссылки:
- основные спецификации Bluetooth версии 4, Том 3, часть с, 11
- Том 3, Часть С, 18.1
- Том 3, Часть C, 18.11
- https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
- Том 3, Часть С, 18.2
если причина, по которой вы задаете этот вопрос, заключается в том, что вы хотите используйте ядро Bluetooth для рекламы в качестве iBeacon вместо того, чтобы использовать стандартный API, вы можете легко сделать это, рекламируя NSDictionary, такие как:
{ kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>; }
посмотреть ответ для получения дополнительной информации.
Это очень просто, он просто рекламирует строку, которая содержит несколько символов, соответствующих стандарту iBeacon от Apple. вы можете обратиться по ссылке http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/