I've been having the same issue. Whenever fileinputstream.available() is used to read from the USB accessory, a java.io.IOException" ioctl failed: EINVAL (Invalid argument) is thrown. No problems with writing.
Did you find a solution for this? Thanks. On Saturday, July 21, 2012 4:22:29 AM UTC-5, 4ntoine wrote: > > Hi, evebody! > > 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+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en