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に設定していることになります。 以降のパラメータについても同様に、コア仕様から意味を確認してみて下さい。