I'm playing with Android ADK and have strange problem with my Galaxy Tab 2.
After opening accessory i create inputand output stream and start reading from input stream.
On the first inStream.available() invocation i have exception:
---
java.io.IOException: ioctl failed: EINVAL (Invalid argument)
at libcore.io.IoBridge.available(IoBridge.java:68)
at java.io.FileInputStream.available(FileInputStream.java:110)
at name.antonsmirnov.firmata.serial.StreamingSerialAdapter$ReadingThread.run(StreamingSerialAdapter.java:81)
Caused by: libcore.io.ErrnoException: ioctl failed: EINVAL (Invalid argument)
at libcore.io.Posix.ioctlInt(Native Method)
at libcore.io.ForwardingOs.ioctlInt(ForwardingOs.java:75)
at libcore.io.IoBridge.available(IoBridge.java:52)
... 2 more
---
The sources are:
public class UsbAccessorySerialAdapter extends StreamingSerialAdapter {
private UsbManager manager;
private UsbAccessory accessory;
private ParcelFileDescriptor parcelFileDescriptor;
public UsbAccessorySerialAdapter(UsbManager manager, UsbAccessory accessory) {
this.manager = manager;
this.accessory = accessory;
}
@Override
public void start() throws SerialException {
try {
parcelFileDescriptor = manager.openAccessory(accessory);
if (parcelFileDescriptor == null)
throw new RuntimeException("Failed to open USB accessory");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
setInStream(new FileInputStream(fileDescriptor));
setOutStream(new FileOutputStream(fileDescriptor));
} catch (Exception e) {
throw new SerialException(e);
}
super.start();
}
@Override
public void stop() throws SerialException {
setStopReading();
try {
if (parcelFileDescriptor != null)
parcelFileDescriptor.close();
} catch (Exception e) {
throw new SerialException(e);
}
super.stop();
}
}
---
reading thread code:
/**
* Threads, that reads InputStream
*/
private class ReadingThread extends Thread implements Thread.UncaughtExceptionHandler{
public ReadingThread() {
setUncaughtExceptionHandler(this);
}
public void uncaughtException(Thread t, Throwable e) {
handleException(e);
}
private void handleException(Throwable e) {
if (!shouldStop.get())
for (ISerialListener eachListener : listeners)
eachListener.onException(e);
}
@Override
public void run() {
while (!shouldStop.get()) {
try {
if (inStream.available() > 0) // exception here!
for (ISerialListener eachListener : listeners)
eachListener.onDataReceived(StreamingSerialAdapter.this);
} catch (IOException e) {
handleException(e);
break;
}
}
try {
inStream.close();
} catch (IOException e) {}
}
}
Is it hardware or Android OS problem? It seems that writing to outStream is okay, since writing-only code works. Any thoughts?
-- You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
No comments:
Post a Comment