###前提・実現したいこと
ある機器とAndroid端末とでBluetoothを介して通信を行うプログラムを開発しようとしています。
その機器は画面は持っておらず、決められたメッセージに対して応答を行います。
現段階では、通信の確認を行うため、サンプルのBluetoothChatをSPPで通信するように改造したプログラムを使用しています。
Bluetooth2.1からSniff Subratingという機能が追加されているようですが、
今回のアプリではこの機能を使わないようにしたいです。
しかし、この機能を制御する関数等が見つけられず困っております。
ご存じの方おられましたら、ご教示の程、よろしくお願い致します。
###発生している問題・エラーメッセージ
機器に組み込まれたBluetoothモジュールのSniffモードが、
Android端末とのやり取りによって有効になっているようです。
(この機器はPCともやり取りを行うようですが、その際にはSniffモードには入らなかったそうです)
###試したこと
Sniffモードの切り替えはHCIコマンドによって行われるという情報を得たので、
Androidの開発者向けオプションにある「Bluetooth HCIスヌープログ」を有効にし、ログを取得しました。
Frame 58: 8 bytes on wire (64 bits), 8 bytes captured (64 bits) Bluetooth Bluetooth HCI H4 [Direction: Sent (0x00)] HCI Packet Type: HCI Command (0x01) Bluetooth HCI Command - Write Link Policy Settings Command Opcode: Write Link Policy Settings (0x080d) Parameter Total Length: 4 Connection Handle: 0x000c .... .... .... ...1 = Enable Master Slave Switch: true (1) .... .... .... ..0. = Enable Hold Mode: false (0) .... .... .... .1.. = Enable Sniff Mode: true (1) .... .... .... 0... = Enable Park Mode: false (0) [Response in frame: 59] [Command-Response Delta: 0.478 ms]
Frame 160: 8 bytes on wire (64 bits), 8 bytes captured (64 bits) Bluetooth Bluetooth HCI H4 [Direction: Rcvd (0x01)] HCI Packet Type: HCI Event (0x04) Bluetooth HCI Event - Number of Completed Packets No. Time Source Destination Protocol Length Info 161 602.660037 host controller HCI_CMD 14 Sent Sniff Mode
Frame 163: 9 bytes on wire (72 bits), 9 bytes captured (72 bits) Bluetooth Bluetooth HCI H4 [Direction: Rcvd (0x01)] HCI Packet Type: HCI Event (0x04) Bluetooth HCI Event - Mode Change No. Time Source Destination Protocol Length Info 164 1563.870128 host controller HCI_CMD 6 Sent Exit Sniff Mode
プログラムをステップ実行しながらログを確認すれば、どこでモードが切り替えられているかわかると思ったのですが、
サンプルプログラム(BluetoothChat)ではそういった箇所が見受けられず、
InputStream.read等、ライブラリ関数が呼び出されている最中に切り替わっているようです。
そもそも、これはhost→controllerなので、Android端末自体のSniffモードの話でしょうか?
###補足情報(言語/FW/ツール等のバージョンなど)
開発言語:Java
開発環境:Android Studio2.1.3
Bluetooth:Ver2.1+EDR
あなたの回答
tips
プレビュー