実家に帰る前にできるかなー、と思っていたが、間に合わなかった。
SmartQ5をUSBシリアルケーブルで接続し、PCと通信したいのだ。
接続
SmartQ5のUSB miniBポートに、USB Aメス-USB Aメスを接続し、その先にUSBシリアルケーブル(PL2303入)を接続し、その先をPCのシリアルポートに接続。
ソフトウェア構成
JNIで/dev/ttyUSB0へのオープン、クローズ、書き込み、読み込みを行い、Androidアプリ側でそれを呼び出す。
JNI
Android NDKに入っていたhello-jniサンプルと、JNI仕様と、Kuro'S RoomさんのJNI実験ページを参照しながら作る。
あんまり特殊なことはやってない。というよりも、JNI自体が特殊だと思うので、よくわからん。
シリアルポートのアクセスについては、実に普通。
Androidアプリ
オープンに成功したら、"ABC"と送信してクローズ。
オープンに失敗したら、ダイアログを出して終了。
そんだけ。
ダイアログ出すだけなのに、なんであんなにコードが面倒なんだろう…
SDK1.5になる前は、なんか楽だったような気がする。
はまったのは、hello-jniサンプルを余り読んでおらず、JNIで作成したライブラリを読み込む部分を作っていなかったこと。
まあ、自業自得ですな・・・
結果!
エミュレータでは、当然ながら動かず。
実機でも動かず・・・
ネットで検索すると、rootになれないとかなんとか、アクセス権が足りないとか何とか。
それは気にしていなかった・・・
一応言い訳しておくと、組込みLinuxでやってたときは rootでばんばん動かしていたのだ。
権限なんて必要ないマシンだったし。
で、/dev/ttyUSB0 を見てみると、「crw- --- ---」と、rootにしか権限がない。
おそらく、Androidアプリはroot権限では動作せず、それに付随するJNIも同じ権限で動くだろう。
よって、/dev/ttyUSB0はオープンできない。
QED
いや、証明を終わらせてどうする。
とにかく動かしてみたいので、chmod 0666してアクセス権を取得。
adb shellやtelnetからだとできるんだよな。
結果!
Androidアプリで書き込んだ文字列が、PC上のターミナルで取得できた。
よかろう。
課題
/dev/ttyUSB0を手動でchmodするのは、なんかいやだ。
いやだけど、ここは手が出せないよな。。。
まあ、こんな使い方をするのは開発側の人間だけだろうけど、ものすごく便利なデバイスができたときに売れないよなぁ。。。
あ、デバイスができても、デバイスドライバが必要になるか・・・
それ以上に困っているのは、うちのSmartQ5でフリッカー入力対応Wnnが動かなくなったことだ。
最初にインストールされていたものを、Android Marketのもので上書きしたのだ。
プリインストールものを上書きするとまずいのかなぁ。。。
最近のコメント