2015/05/11

[bluez]gatttoolを切り離してビルド

直接BlueZとは関係が無いので、タイトルはいつものとは別にした。

pythonで書こうかと思っていたのだが、gatttoolのコンソール出力を使って判断する、というのがどうもしっくりこない。
ツールが出力するログが変わったら、ソースの修正が必要になるので、そうそう変わるものではないとわかってはいるのだが、やる気が出なくなってしまった。
お仕事だったらあきらめてやるのだけど、せっかく趣味でやってるだけなんだから、やりたくないことはやらないようにしよう。

gatttoolはinteractiveじゃないモードもあるから、それでやるならpythonでもよいかと思ったのだが、1回実行するごとにconnect→操作→disconnect、となるようなので、ちょっと期待と異なる。
connectしたら、しばらくはdisconnectしたくないのだ。
だからinteractiveモードを使うんだろうけど、今回はそれを使いたくない。
だったら、自分で作るしかない。

BlueZのtestディレクトリにpythonで書かれたものがあったが、あれはD-Busを使っているようだ。
D-Busがよくわかっていないから何とも言えないが、軽く調べた範囲ではC言語から使うのはめんどくさそうだ。
じゃあpythonでやろうかとも思ったのだが、Characteristicを操作するようなサンプルがない・・・。
ドキュメントにはgatt-api.txtというのがあり、API仕様っぽいものが書かれているのだけど、D-Busがわかっていないためか見てもさっぱりわからない。
ネットで検索しても、これを使っていそうなサンプルを見つけることが出来なかった。
「なら私が!」と思えれば良いのだけど、ちょっと厳しい。

じゃあ、やっぱりC言語でやるか。


どうせ個人用のツールなので、gatttoolを変更するだけで済ませようと思う。
まずは準備として、gatttoolをBlueZのmakeではなく自分のmakeで行えるようにする。

attribディレクトリを別の場所にコピーし、Makefileを自作して、makeするだけ。
Makefileを作るのに時間がかかったのと、gatt.cがbluetooth.hをうまくincludeしないようだったので明示的に書いた(書く場所を上の方にしておかないと、なぜか読み込んでいなかったようだ)。

ソースとbluetooth、readline、GLibのリンクだけで済むかと思ったら、BlueZビルド時にできるbluetool-internalとshared-glibもリンクしないといかんようだった。
できればBlueZをインストールするときにコピーされるライブラリだけで構成したいのだが、知識が足りないので今回はこのままにしておこう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。