USB 経由でボードから devicersa にメッセージを送信するときに問題が発生します。
ハードウェア:
- Arduino ADK 2011
- サムスンギャラクシー S3、アンドロイド 4.1.2
問題は、Android アプリの read メソッドが終了せず、スレッドが動かなくなることです。
mFileDescriptor = mUsbManager.openAccessory(accessory);
if (mFileDescriptor != null) {
mAccessory = accessory;
FileDescriptor fd = mFileDescriptor.getFileDescriptor();
Log.d(TAG, "openAccessory(): FileDescriptor instanciated. valid " + fd.valid());
mInputStream = new FileInputStream(fd);
mOutputStream = new FileOutputStream(fd);
new Thread(null, new Runnable() {
@Override
public void run() {
int ret = 0;
byte[] buffer = new byte[255];
while (ret >= 0 && mInputStream != null) {
try {
// never terminates
ret = mInputStream.read(buffer);
} catch (IOException e) {
Log.e(TAG, "openAccessory(): Could not read inputStream: " + e);
e.printStackTrace();
break;
}
} ...
特別な USB ライブラリを使用しているため、接続は正常に機能します。デバイスを接続すると、アプリが自動的に非常にうまく開きます。しかし、ログを使用すると、読み取りコマンドが渡されないことがわかります。また、Arduinioモニターは次のように述べています。
Device addressed... Requesting device descriptor.
found possible device. swithcing to serial mode
device supports protcol 1 or above
found android acessory device
config desc
interface desc
interface desc
2
4
Sending message...
Done
disconnect
ADK はループ内のデバイスにメッセージを送信します (1 回):
sntmsg[0] = COMMAND_TEXT;
sntmsg[1] = TARGET_DEFAULT;
sntmsg[2] = 25;
for (int i = 0; i < 25; i++) {
sntmsg[3 + i] = hello[i];
}
// schreiben (buffer, length)
Serial.println("Sending message...");
acc.write(sntmsg, 3 + 25);
Serial.println("Done");
done = true;
delay(250);