概要

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のインタラクティブモードにコマンドを流し込み(=パイプを利用)、任意のタイミングで終了させることができた。これを応用すれば、任意のタイミングで、任意のコマンドを流し込めそうだ。