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