ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
Bluetoothにおいて、コントローラーとホストの間で使われる通信プロトコル。
Bluetoothモジュールを制御したり、データを無線で送受信するために使う、一番最下層のインターフェイスである。
有線でも例えばEthernetならEthernetコントローラーICなどを使い、その上にEthernetのプロトコルから上を実装することになるが、Bluetoothのような無線でも同様にハードウェアとソフトウェアの分担があり、その境界となるのがHCIである。
HCIで使用する物理層は、Bluetoothチップとホストの都合に合わせて選択されるため、様々なものがある。
UART、USBなどが使われることが多いようで、規格上このレイヤーをHCI Transportレイヤーという。UARTの場合、速度は実装依存だが、いわゆるRS-232Cで、データ長8ビット・ストップビット1ビット・パリティチェックなしの「N81」で、フロー制御はS制御というのが一般的のようである。
数値データはリトルエンディアンで表現されている。
フレームは4種類存在する。
ホストがBluetoothを使うためには、Bluetoothコントローラーに対してHCIコマンドを発行する。
コントローラーは順次コマンドを実行するが、同時に複数のコマンドを実行でき、さらにコマンドの処理時間はコマンドごとに違う。したがって、コマンドを送った順に処理が完了するわけではない。
そこで、コマンドの終了通知はイベントとして発行される。
UARTの場合、フレームの種類を表わすオクテットがあり、続いて実際のデータがある。
indicatorは、フレームの種類(4種類)に応じて、次のように定義されている。
HCI packet部の詳細なフォーマットは後述されるが、例えばコマンドをモジュールに送る時は、まず0x01をUARTに送り、次いで16ビットのOpcodeを送り、さらにLength、そしてParameter、という形式になる。
USBの場合、フレームの種類はエンドポイントアドレスで表わす。
エンドポイントアドレスは、フレームの種類に応じて、次のように定義されている。
ACLデータは、USBのバルク転送に対応する。また他に、0x83/0x03を使うアイソクロナス転送も定義されている。
各接続ごとに持っている12ビットのユニークな値
L2CAPパケットの分割を示す2ビットの値
ブロードキャストかどうかを示す2ビットの値 (ホストとコントローラーの方向により若干意味が変わる)
ホスト→コントローラーの場合
コントローラー→ホストの場合
各接続ごとに持っている12ビットのユニークな値
0xFFはベンダー固有のデバッグイベント用、0xFEはBluetoothロゴテスト用として予約されている
コメントなどを投稿するフォームは、日本語対応時のみ表示されます