概要
gatttoolのインタラクティブモードにコマンドを流し込み(=パイプを利用)、任意のタイミングで終了させる方法を試し、動作を確認した。
背景と目的
以前、gatttoolのインタラクティブモードに無理やりコマンドを流し込み(=パイプを利用)、ノンインタラクティブのように動かしたが、sleepで決まった秒数経った後に終了することしかできていなかった。そこで、任意のタイミングで終了させられるようにする。
詳細
1.方法
以前作成したgattcommand.shというスクリプトを改造。test_gatt.shは変更なし。
- まず、スイッチの役割をするファイルfile1を用意する。file1には、0か1が書き込まれるとする。
- 次に、gattcommand.shでは、file1に1を書き込む
- そして、file1の中身が1の間はwhileループでスリープをし続けるようにする。
- whileループを抜け、Bluetoothの接続を切り、インタラクティブモードから抜けるexitを出力する
としておく。こうすることで、任意のタイミングでfile1に0を書き込めば、gatttoolを終了させられる。
2.実装
gattcommand.shを改造した結果は、以下の通り。
echo "1" >switch sleep 1 echo connect while [ `cat switch` = "1" ] do sleep 1 done echo disconnect echo exit
3.動作確認
sudo bash test_gatt.sh &
でgatttoolのインタラクティブモードを起動。次に、任意のタイミングで、
echo "0" >file1
を実行。すると、インタラクティブモードが終了した。ということで、狙い通りの動きになった。
まとめ
gatttoolのインタラクティブモードにコマンドを流し込み(=パイプを利用)、任意のタイミングで終了させることができた。これを応用すれば、任意のタイミングで、任意のコマンドを流し込めそうだ。