LoginSignup
14
14

More than 5 years have passed since last update.

ibeacon 技術的詳細

Last updated at Posted at 2015-07-22

wikipediaの技術詳細には次のように書いてある。

hcitool -i hci0 cmd 0x08 0x0006 a0 00 a0 00 03 00 00 00 00 00 00 00 00 07 00
################################## 02 01 06 1a ff 4c 00 02 15  # Apple's fixed iBeacon advertising prefix
hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 FB 0B 57 A2 82 28 44 CD 91 3A 94 A1 22 BA 12 06 00 01 00 02 D1 00
hcitool -i hci0 cmd 0x08 0x000a 01

これをただコピーするだけでは猿並みだ…。せっかくなので hcitool の引数を分解していく。

まず -i hci0 は特に問題ない。hciconfigで見えるインターフェース一覧と同じで、hci0インターフェースに対して操作を行っている。

cmdhcitoolのサブコマンド。man pageにはこう書いてある。

cmd <ofg> <ocf> [parameters]
  Submit an arbitrary HCI command to local device.
  ogf, ocf and parameters are hexadecimal bytes.

ogf, ocf というのは、bluetooth仕様のCoreに書かれていて、今ならCore Version4.2 の vol. 2, part E, section 5.4.1 に書かれている。ogf = OpCode Group Field, ocf = OpCode Command Fieldということらしい。ogf 6bit, ocf 10bitの、合計16bitで決まる。

ogf 0x08 = LE Controller Commands になっている(vol. 2, part E, section 7.8)

ocf については次の通り

  • 0x0006 = HCI_LE_SET_Advertising_Parameters (vol. 2, part E, section 7.8.5)
  • 0x0008 = HCI_LE_SET_Advertising_Data (vol. 2, part E, section 7.8.7)
  • 0x000a = HCI_LE_Set_Advertise_Enable (vol. 2, part E, section 7.8.9)

その後ろのparametersに関しては、section 5.4.1のパケットフォーマットと突き合わせて逐一読んでいく。まず、parameter total length は、hcitool cmd が計算して埋めてくれる。その後ろのparametersはOpCodeごとに変わる。

advertising parameters

section 7.8.5 に従って、次の内容を分解してみる。

# hcitool -i hci0 cmd 0x08 0x0006 a0 00 a0 00 03 00 00 00 00 00 00 00 00 07 00
parameters hex meaning
Advertising_Interval_Min a0 00 0x00a0 * 0.625 msec = 100 msec
Advertising_Interval_Max a0 00 0x00a0 * 0.625 msec = 100 msec
Advertising_Type 03 Non connectable undirected advertising ADV_NONCONN_IND
Own_Address_Type 00 Public Device Address(default)
Peer_Address_Type 00 Public Device Address(default)
Peer_Address 00 00 00 00 00 00 address of the device to be connected = BDADDR_ANY
Advertising_Channel_Map 07 Default(all channels 37, 38, 39)
Advertising_Filter_Policy 00 Process scan adn connection requests from all devices(no white list in use)(default)

advertising data

section 7.8.7 に従って、次の内容を分解してみる

# hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 FB 0B 57 A2 82 28 44 CD 91 3A 94 A1 22 BA 12 06 00 01 00 02 D1 00
parameters hex meaning
Advertising_Data_Length 1E 30
Advertising_Data 残り全て vol. 3, part C, section 11に従って読む

vol. 3, part C, section 11によると、AD structureの配列になっている。AD TypeはGeneric Access Profileに定義がある。

ad_structure{
 Length = 02
 Data {
  AD Type = 01 ... <<Flags>>
  AD Data = 1A ... 謎
 }
}
ad_structure{
 Length = 1A (26)
 Data {
  AD Type = FF ... <<Manufacturer Specific Data>>
  AD Data {
   Company Identifier Code = 4C 00 ... Apple, Inc(0x004C)
   additional manufacturer specific data {
    type = 02 ... ibeacon AD indicator
    length = 15 (21)
    data {
     uuid = FB 0B 57 A2 82 28 44 CD 91 3A 94 A1 22 BA 12 06
     major = 00 01
     minor = 00 02
     power = D1
    }
    padding = 00
   }
  }
 }

Flags については CSS v5 では Reserved とされているビットを使っている。CSS v6 には定義があるかも。

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14