154 votes

Quel est le profil Bluetooth d'iBeacon?

J'aimerais créer mon propre iBeacon avec certaines bluetooth low energy dev kits. Apple n'a pas encore communiqué un cahier des charges pour les iBeacons, cependant un peu de matériel, les développeurs ont l'Ingénierie inverse de l'iBeacon de la AirLocate Exemple de code et a commencé à vendre iBeacon dev kits.

Quel est donc le iBeacon Profil Bluetooth?

Bluetooth Low Energy utilise GATT pour LE profil de découverte de service. Donc, je pense que nous avons besoin de savoir l'Attribut de la Poignée, Type d'Attribut, la Valeur de l'Attribut, et peut-être l'Attribut d'Autorisations de l'iBeacon d'attribut. Donc, pour un iBeacon avec un UUID de E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 une valeur de 1 et un mineur de valeur 1, ce qui serait le Bluetooth GATT de service de profil?

Heres certaines hypothèses que j'ai fait à partir de la discussion sur les forums et par le biais de la documentation.

  1. Vous avez seulement besoin de voir le profil de service (GATT) d'un périphérique Bluetooth pour savoir qu'il est un iBeacon.

  2. Le Majeur et Mineur sont codés quelque part dans ce service de profil

Heres quelques compagnies avec iBeacon Dev Kits qui semblent avoir cette figure déjà:

J'espère que dans le temps, nous aurons un profil affiché sur Bluetooth.org comme celles-ci: https://www.bluetooth.org/en-us/specification/adopted-specifications

232voto

davidgyoung Points 14271

Pour un iBeacon avec ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, les principaux 0, mineur 0, calibrée et la Puissance Tx de -59 RSSI, la transmission de BLE publicité paquet ressemble à ceci:

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

Ce paquet peut être décomposé comme suit:

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

La partie clé de ce paquet est le Bluetooth de la Publicité, qui peut être ventilé comme suit:

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 dispositif peut être configuré pour envoyer une annonce spécifique peut générer le dessus du paquet. J'ai configuré un ordinateur Linux en utilisant Bluez pour envoyer cette annonce et iOS7 appareils exécutant Apple AirLocate code de test ramasser comme un iBeacon avec les champs spécifiés ci-dessus. Voir: Utilisation BlueZ La Pile En Tant Que Périphérique (Annonceur)

Ce blog a plein de détails sur le processus d'ingénierie inverse.

47voto

sandeepmistry Points 795

Il semble basé sur la publicité des données, notamment les données du fabricant:

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>
  • La Société Apple Identifiant (Little Endian), 0x004c
  • type de données, 0x02 => iBeacon
  • la longueur des données, 0x15 = 21
  • uuid: 585CDE931B0142CC9A1325009BEDC65E
  • majeur: 0000
  • mineur: 0000
  • meaured la puissance à 1 mètre: 0xc5 = -59

J'ai ce node.js le script fonctionne sous Linux avec l'exemple de AirLocate application exemple.

20voto

slackhappy Points 141

Juste pour concilier la différence entre sandeepmistry la réponse de davidgyoung de réponse:

02 01 1a 1a ff 4C 00

Fait partie de la publicité spécifications de format de données [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

Manquant à partir de l'ANNONCE est un Service [5] définition. Je pense que le iBeacon protocole en lui-même n'a pas de relation à l'accord général et de service standard de la découverte. Si vous téléchargez RedBearLab du iBeacon programme, vous verrez qu'ils se produisent à l'utilisation du GATT pour la configuration de la publicité des paramètres, mais cela semble être spécifique à leur mise en œuvre, et ne fait pas partie de la spécification. Le AirLocate programme ne semble pas utiliser le GATT pour la configuration, par exemple, selon LightBlue et ou d'autres programmes similaires, j'ai essayé.

Références:

  1. Core Bluetooth Spec v4, Vol 3, Partie C, 11
  2. Vol 3, Partie C, De 18,1
  3. Vol 3, Partie C, 18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. Vol 3, Partie C, 18.2

6voto

Senseful Points 11193

Si la raison pour laquelle vous posez cette question est que vous souhaitez utiliser Core Bluetooth pour faire de la publicité en tant qu'iBeacon plutôt que d'utiliser l'API standard, vous pouvez facilement le faire en annonçant un NSDictionary tel que:

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

Voir cette réponse pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X