private void init(Interface intf) throws IOException { if (intf == null || intf.getNumEndpoints() != 2) throw new IllegalArgumentException(); // XXX presumably this handles the "multiple devfs claims" case; check. intf.claim(); this.intf = intf; try { for (int i = 0; i < intf.getNumEndpoints(); i++) { Endpoint ep = intf.getEndpoint(i); if (!"bulk".equals(ep.getType())) throw new IllegalArgumentException(); if (ep.isInput()) in = ep.getInputStream(); else out = ep.getOutputStream(); } if (in == null || out == null) throw new IllegalArgumentException(); } catch (IOException e) { try { close(); } catch (Exception x) { intf = null; } throw e; } catch (RuntimeException e) { try { close(); } catch (Exception x) { intf = null; } throw e; } }
private static void printInterface(int indent, Interface intf) throws IOException { indentLine( indent, "<" + intf.getInterfaceClassName() + " number='" + intf.getNumber() + "' alt='" + intf.getAlternateSetting() + "' endpoints='" + intf.getNumEndpoints() + "'"); indentLine( indent + 4, "class='" + intf.getInterfaceClass() + "' subclass='" + intf.getInterfaceSubClass() + "' protocol='" + intf.getInterfaceProtocol() + "'>"); indent += 2; maybePrintDescriptors(indent, intf.nextDescriptor()); for (int ep = 0; ep < intf.getNumEndpoints(); ep++) try { printEndpoint(indent, intf.getEndpoint(ep)); } catch (IOException e) { indentLine(indent, "<!-- CAN'T GET ENDPOINT: "); e.printStackTrace(System.out); indentLine(indent, "-->"); } // FIXME: can print interface class details indentLine(indent, "</" + intf.getInterfaceClassName() + ">"); }