前回と前々回に紹介したAndroidのUSBホストAPI。
これを使っていつものごとく日本が世界の誇るタカラトミー社製のチョロQ ハイブリッド
今回はそれのまとめ記事です。
ソースはGithub上でライブラリ化したものとサンプルソースで公開してます。
使用方法は、これまでに紹介したとおりAndroid 3.1以上が必要です。
自分はOptimus Padでのみテストしてますが、おそらく他のタブレットでもいけると信じてます。
ライブラリの方はまだ詰めが甘いのでUSBのパーミッション取得用のBroadcastReceiverを正しく開放できていない状態です。
また、シリアル通信のボーレートの計算方法がいまいちわかっていないので今の所9600で固定値になっています。
APIにはsetBaudrate()は実装しているのですが、中身は見てもらってもわかるとおり空っぽです。
ライブラリの使い方はgithub上のUSB_Lib_sampleがわかりやすいかと思ってます。
UsbSerialManagerを使ってUSBシリアル通信ができるデバイスの一覧をgetList()を使って取得します。
取得してデバイスの一番最初のデバイスの使用許可を要求します。
要求すると、要求ダイアログがでます。
public void onStart() {
super.onStart();
Log.d(TAG, "onStart");
manager = new UsbSerialManager(this);
if (serial == null) {
List list = manager.getList();
if (list.size() > 0) {
Log.d(TAG, "Device count=" + String.valueOf(list.size()));
UsbDevice dev = list.get(0);
manager.requestPermission(dev, listener);
} else {
Log.e(TAG, "USB Serial Device not found");
}
} else {
Log.e(TAG, "USB Serial Device has already got instance.");
}
}
要求が承認されるとコールバックが呼ばれるので、あとは、UsbDeviceからUsbSerialを生成して、オープンしてあげます。
この辺はちょっと苦肉の策を使っています。
/** USBシリアル通信デバイスを使用するパーミッションを取得した際のコールバックリスナー */
UsbSerialManager.OnGetPermissionListener listener = new UsbSerialManager.OnGetPermissionListener() {
@Override
public void onGetPermission(UsbSerial device) {
Log.d(TAG, "onGetPermission");
UsbDevice dev = device.getDevice();
Log.d(TAG, "DeviceName=" + dev.getDeviceName());
Log.d(TAG, "id=" + String.valueOf(dev.getDeviceId()));
serial = device;
try {
serial.open();
} catch (IOException e) {
e.printStackTrace();
}
threadStart();
}
};
オープンすれば、あとはread()、write()で読み書きができます。
本当はストリームで実装しようと思ったのですが、ちょっとオーバーヘッドが大きかったので、手抜きしました。
今後はボーレートの計算とか調べようかと思います。
#以下アフィリエイト用の広告です
こんにちは。
返信削除以前Androidマーケットに公開されていた、ラジコン操縦アプリを再度公開していただけないでしょうか?
TPIP2ボードを使った実験を行なっているので、再度公開していただけるとありがたいです。