Что такое профиль Bluetooth iBeacon

Я хотел бы создать свой собственный iBeacon с некоторыми наборами устройств с низкой энергией bluetooth. Apple еще не выпустила спецификацию для iBeacons, однако некоторые разработчики аппаратного обеспечения обратились к iBeacon из кода AirLocate Sample и начали продавать комплекты iBeacon dev.

Итак, что такое профиль Bluetooth iBeacon?

Bluetooth Low Energy использует GATT для поиска службы профиля LE. Поэтому я думаю, нам нужно знать дескриптор атрибута, тип атрибута, значение атрибута и, возможно, разрешения атрибута атрибута iBeacon. Таким образом, для iBeacon с UUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 основным значением 1 и незначительным значением 1 будет то, что будет иметь профиль профиля Bluetooth GATT?

Вот некоторые предположения, которые я сделал из обсуждения на форумах Apple и через документы.

  • Вам нужно только увидеть службу профиля (GATT) периферии Bluetooth, чтобы знать, что это iBeacon.

  • Основные и младшие ключи закодированы где-то в этой службе профиля

Вот некоторые компании с iBeacon Dev Kits, которые, похоже, уже имеют эту цифру:

Надеемся, что вовремя у нас будет профиль, размещенный на Bluetooth.org следующим образом: https://www.bluetooth.org/en-us/specification/adopted-specifications

Ответ 1

Для iBeacon с ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, основным 0, minor 0 и откалиброванной Tx Power -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 complement of the calibrated Tx Power

Любое устройство Bluetooth LE, которое может быть настроено для отправки определенного объявления, может генерировать вышеупомянутый пакет. Я настроил Linux-компьютер с помощью Bluez для отправки этого объявления, а устройства iOS7, работающие с тестовым кодом Apple AirLocate, забирают его как iBeacon с указанными выше полями. Смотрите: Использовать стек BlueZ как периферийное устройство (рекламодатель)

Этот блог содержит полную информацию об обратном процессе разработки.

Ответ 2

Кажется, что это основано на рекламных данных, особенно данных производителя:

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
  • minor: 0000
  • измеряемая мощность на расстоянии 1 метр: 0xc5 = -59

У меня есть node.js script, работающий в Linux с примером примера приложения AirLocate.

Ответ 3

Просто чтобы согласовать разницу между ответом на 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

Отсутствует AD, является определением Service [5]. Я думаю, что сам протокол iBeacon не имеет отношения к GATT и стандартным службам. Если вы загрузите программу RedBearLab iBeacon, вы увидите, что они используют GATT для настройки параметров рекламы, но это, по-видимому, характерно для их реализации, а не для части спецификации. Программа AirLocate, похоже, не использует GATT для настройки, например, в соответствии с LightBlue и другими аналогичными программами, которые я пробовал.

Литература:

Ответ 4

Если причина, по которой вы задаете этот вопрос, заключается в том, что вы хотите использовать Core Bluetooth для рекламы в качестве iBeacon вместо использования стандартного API, вы можете легко сделать это реклама NSDictionary, например:

{
    kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>;
}

Подробнее см. этот ответ.

Ответ 5

Это очень просто, он просто рекламирует строку, содержащую несколько символов, соответствующих стандарту Apple iBeacon. вы можете ссылаться на ссылку    http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/