ブログ

hcitoolでのアドバタイズパケットの制御方法

at_yuma.arakawa
2017年2月27日 14時37分

hcitoolでHCI(Host Controller Interface)のコマンドをBluetoothモジュールへ発行することにより、Bluetoothモジュールの設定を変更できます。本記事では例として、アドバタイズパケットの送信周期を変更してみます。

以下のようにhcitoolコマンドを実行することで、任意のHCIコマンドをBluetoothモジュールへ送信できます。

[armadillo]# hcitool cmd <ogf> <ocf> [parameters]

"cmd"に続く各パラメータは、Bluetoothのコア仕様に記載されています。 各パラメータの意味は以下のとおりです。

  • <ogf>: OGF(Opecode Group Field)。HCIのコマンドはオペコード(命令コード)に対応する。このパラメータはオペコードのグループを示す。
  • <ocf>: OCF(Opecode Command Field)。オペコードのコマンドを指定する。
  • [parameters]: コマンドがパラメータを取る場合に指定する。

例えば、アドバタイズのパラメータを変更するコマンドは以下のとおりです。ここでは送信周期を100msへ設定しています。

[armadillo]# hcitool cmd 0x08 0x0006 a0 00 a0 00 03 00 00 00 00 00 00 00 00 07 00

上記のコマンドの意味については、コア仕様を参照して下さい。

"Vol 2: Core System Package"の"Part E: Host Controller Interface Functional Specification"の"7 HCI Commands and Events"に、 各HCIコマンドの説明が記載されています。

"OGF 0x08"は、"7.8 LE Controller Commands"です。 そして、"OCF 0x0006"は"7.8.5 LE Set Advertising Parameters Command"です。

"7.8.5"を下へスクロールしていくと、"Command Parameters:"という項目があります。 "[parameters]"のバイト列のバイト(オクテット)毎の意味は"Command Parameters:"に記載されています。

参考までに、"[parameters]"の冒頭について説明します。 "a0 00"の2オクテットが"Advertising_Interval_Min"という項目で、「アドバタイズ周期の最小値」を示しています。 なお、バイトオーダーはリトルエンディアンなので、値としては0x00a0です。 「設定値 × 0.625ms」が周期(ms)となるので、この場合「160(0x00a0) × 0.625ms」なので、100msを設定していることになります。

なお、この次の2オクテット"a0 00"は、"Advertising_Interval_Max"で、パラメータの意味は同じです。 そのため、アドバタイズ周期の最小と最大を共に100msに設定していることになります。 以降のパラメータについても同様に、コア仕様から意味を確認してみて下さい。