BLEのHCIコマンドについて

BLEのHCIコマンドについて

Bluetoothの仕様書(4.0, 4.1, 4.2, 5.0, 5.1)から BLE single mode で使用するHCIコマンドについて、機能ごと、バージョンごとにまとめてみました。
(Supported Controllers が ALL か LE になっているコマンド＋α)

BLEの機能を実装する場合に、vol 2, Part E, 7.8 LE CONTROLLER COMMANDS で定義されるコマンド以外も使うことに注意しましょう。

実際には、もう少し使うHCIコマンドが増えるはずです。(HCI_Read_Local_Nameとか必要のような気がします。)

なんとなく各コマンドについて日本語の説明を書いてみましたが、間違っているかもしれません。

# 4.0
## Device Setup
* HCI_Reset リセット 一番はじめに行う

## Controller Flow Control
* HCI_Read_Buffer_Size HCIのバッファサイズ
* HCI_LE_Read_Buffer_Size LE用のHCIのバッファサイズ

## Controller Information
* HCI_Read_Local_Version_Information コントローラのバージョン情報を読む
* HCI_Read_Local_Supported_Commands コントローラのコマンドサポート情報を読む
* HCI_Read_Local_Supported_Features コントーローラの機能サポート情報を読む
* HCI_Read_BD_ADDR コントローラのBDアドレスを読む
* HCI_LE_Read_Local_Supported_Features コントローラのLE機能サポート情報を読む
* HCI_LE_Read_Supported_Status コントローラのLEサポート情報を読む

## Controller Configuration
* HCI_LE_Set_Advertise_Enable アドバタイズの開始・停止
* HCI_LE_Set_Advertisng_Data アドバタイズに含まれる中身を設定
* HCI_LE_Set_Advertisng_Parameters アドバタイズの間隔などのパラメータ設定
* HCI_LE_Set_Random_Address ランダムアドレスの設定
* HCI_LE_SET_Scan_Response_Data スキャンレスポンスに含まれる中身を設定
* HCI_Read_LE_Host_Support  HostのLEサポート情報を読む
* HCI_Write_LE_Host_Support HostのLEサポート情報を書く

## Device Discovery
* HCI_LE_Set_Scan_Enable スキャンの開始・停止
* HCI_LE_Set_Scan_Parameters スキャンの間隔などのパラメータ設定

## Connection Setup
* HCI_Disconnect コネクションの切断
* HCI_LE_Create_Connection_Cancel コネクション開始のキャンセル
* HCI_LE_Create_Connection コネクション開始

## Remote Information
* HCI_Read_Remote_Version_Information リモートのバージョン情報を読む
* HCI_LE_Read_Remote_Used_Features リモートのLEバージョン情報を読む

## Connection State
* HCI_LE_Connection_Update コネクションパラメータのアップデート

## Physical Links
* HCI_LE_Set_Host_Channel_Classification 使用可能なchannelの設定

## Host Flow Control
* HCI_Host_Buffer_Size ホストのバッファサイズ
* HCI_Set_Event_Mask イベントマスク
* HCI_Set_Controller_To_Host_Flow_Control コントローラからホストへのフロー制御設定
* HCI_Host_Number_Of_Completed_Packets completesパケットの数
* HCI_LE_Add_Device_From_White_List ホワイトリストにデバイスを追加
* HCI_LE_Set_Event_Mask LEのイベントマスク

## Link Information
* HCI_Read_Transmit_Power_Level 送信出力レベル
* HCI_Read_RSSI RSSI
* HCI_LE_Read_Advertising_Channel_Tx_Power アドバタイズの送信出力
* HCI_LE_Read_Channel_Map LEチャンネルマップ

## Authentication and Encryption
* HCI_LE_Encrypt LEの暗号化
* HCI_LE_Long_Term_Key_Request_Replay LEのLTKリクエストのリプライ
* HCI_LE_Long_Term_Key_Request_Negative_Reply LEのLTKリクエストのネガティブリプライ
* HCI_LE_Rand LEの乱数
* HCI_LE_Start_Encryption LEの暗号化開始

## Testing
* HCI_LE_Receiver_Test LE受信テスト
* HCI_LE_Transmitter_Test LE送信テスト
* HCI_LE_Test_End LEテスト停止

# 4.1
## Connection State
* HCI_LE_Remote_Connection_Parameter_Request_Reply リモートのコネクションパラメータリクエストのリプライ
* HCI_LE_Remote_Connection_Parameter_Request_Negative_Reply リモートのコネクションパラメータリクエストのネガティブリプライ

## Authentication and Encryption
* HCI_Write_Authenticated_Payload_Timeout Authペイロードタイムアウトの書き込み LE Pingで使う
* HCI_Read_Authenticated_Payload_Timeout Authペイロードタイムアウトの読出し LE Pingで使う

CSA3で追加されたコマンドは省略

# 4.2

## Controller Information
* HCI_LE_Read_Maximum_Data_Length コントローラがサポートするLEの最大データ長

## Controller Configuration
* HCI_LE_Set_Resolvable_Private_Address_Timeout RPAタイムアウトの設定

## Connection Setup
* HCI_LE_Enhanced_Connection_Complete 拡張ConnectionComplete

## Connection State
* HCI_LE_Set_Data_Length LEデータ長の設定
* HCI_LE_Read_Suggested_Default_Data_Length 提案するデフォルトデータ長の読み出し
* HCI_LE_Write_Suggested_Default_Data_Length 提案するデフォルトデータ長の書き込み

## Host Flow Control
* HCI_LE_Add_Device_To_Resolving_List デバイスをResolvingListに追加
* HCI_LE_Remove_Device_From_Resolving_List デバイスをResolvingListから削除
* HCI_LE_Clear_Resolving_List ResolvingListを削除
* HCI_LE_Read_Resolving_List_Size ResolvingListのサイズ
* HCI_LE_Read_Peer_Resolvable_Address peerのRPAを読み出す
* HCI_LE_Read_Local_Resolvable_Address localのRPAを読み出す
* HCI_LE_Set_Address_Resolution_Enable Addres Resolutionの設定

## Authentication and Encryption
* HCI_LE_Read_Local_P-256_Public_Key P-256キー
* HCI_LE_Generate_DHKey DHkeyの生成

CSA4で追加されたコマンドは省略

# 5.0

## Advertise
* HCI_LE_Clear_Periodic_Advertiser_List_Command
* HCI_LE_Periodic_Advertising_Create_Sync_Command
* HCI_LE_Periodic_Advertising_Terminate_Sync_Command
* HCI_LE_Read_Maximum_Advertising_Data_Length_Command
* HCI_LE_Read_Number_of_Supported_Advertising_Sets_Command
* HCI_LE_Read_Periodic_Advertiser_List_Size_Command
* HCI_LE_Remove_Advertising_Set_Command
* HCI_LE_Set_Advertising_Set_Random_Address_Command
* HCI_LE_Set_Extended_Advertising_Data_Command
* HCI_LE_Set_Extended_Advertising_Enable_Command
* HCI_LE_Set_Extended_Advertising_Parameters_Command
* HCI_LE_Set_Periodic_Advertising_Data_Command
* HCI_LE_Set_Periodic_Advertising_Enable_Command
* HCI_LE_Set_Periodic_Advertising_Parameters_Command

## Scan
* HCI_LE_Set_Extended_Scan_Enable_Command
* HCI_LE_Set_Extended_Scan_Parameters_Command
* HCI_LE_Set_Extended_Scan_Response_Data_Command

## Phy
* HCI_LE_Read_PHY_Command
* HCI_LE_Set_Default_PHY_Command
* HCI_LE_Set_PHY_Command

## Test
* HCI_LE_Enhanced_Receiver_Test_Command
* HCI_LE_Enhanced_Transmitter_Test_Command

## RF
* HCI_LE_Read_RF_Path_Compensation_Command
* HCI_LE_Read_Transmit_Power_Command
* HCI_LE_Write_RF_Path_Compensation_Command

## Other
* HCI_LE_Set_Event_Mask_Command

# 5.1

コマンドの表記がcommand(全部小文字)になった。

* HCI_LE_Connection_CTE_Request_Enable_command
* HCI_LE_Connection_CTE_Response_Enable_command
* HCI_LE_Set_Connection_CTE_Receive_Parameters_command
* HCI_LE_Set_Connection_CTE_Transmit_Parameters_command
* HCI_LE_Set_Connectionless_CTE_Transmit_Enable_command
* HCI_LE_Set_Connectionless_CTE_Transmit_Parameters_command
* HCI_LE_Set_Connectionless_IQ_Sampling_Enable_command アドバタイズパケットに含まれるTCEのIQサンプリングを有効
* HCI_LE_Read_Antenna_Information_command AoAとAoDのためのアンテナスイッチング機能の有無を取得

## Advertise

* HCI_LE_Periodic_Advertising_Set_Info_Transfer_command
* HCI_LE_Periodic_Advertising_Sync_Transfer_command
* HCI_LE_Set_Default_Periodic_Advertising_Sync_Transfer_Parameters_command
* HCI_LE_Set_Default_Periodic_Advertising_Sync_Transfer_Parameters_command
* HCI_LE_Set_Periodic_Advertising_Sync_Transfer_Parameters command

## Other

* HCI_LE_Generate_DHKey_command DHKey生成コマンド 引数が増えたのとデバッグ用鍵生成をサポート
* HCI_LE_Modify_Sleep_Clock_Accuracy_command スリープクロックのaccuracyを変更


# 参考
 * Bluetooth Core Spec の Volume 2 , Part E, 3 Overview of Commands and Events
 * Bluetooth Core Spec の Volume 2 , Part E, 7 HCI Commands and Events