Hi,

I'm new in development using javax-usb and I've got a problem which I don't 
understand.
I'm using javax-usb to connect a card reader to a printer.

Here is my code to claim my UsbInterface and to open an UsbPipe

    protected void init() throws UsbException {
        UsbConfiguration config = device.getActiveUsbConfiguration();

        UsbEndpoint endptIn = null;
        UsbEndpoint ep = null;

        if (config != null) {
            interf = config.getUsbInterface((byte) 0);
        }

        /** Claim the UsbInterface. */
        try {
            if (!interf.isClaimed()) {
                interf.claim();
            }
        } catch (UsbClaimException e) {
           e.printStackTrace();
        } catch (UsbNotActiveException e) {
           e.printStackTrace();
        } catch (UsbDisconnectedException e) {
           e.printStackTrace();
        }

        /** Get the endpoint. */
        List eps = interf.getUsbEndpoints();
        boolean foundEp = false;
        for (int j = 0; j < eps.size(); j++) {
            ep = (UsbEndpoint) eps.get(j);
            int t = ep.getType();
            Logs.debug(className, functionName, "endpointaddress: " + 
ep.getUsbEndpointDescriptor().bEndpointAddress());
            if (t == UsbConst.ENDPOINT_TYPE_INTERRUPT
                    && ep.getDirection() == UsbConst.ENDPOINT_DIRECTION_IN
                    && ep.getUsbEndpointDescriptor().bEndpointAddress() == 
SCHOMAKER_ENDPOINT_ADDR) {
                endptIn = ep;
                foundEp = true;
                break;
            }
        }
        if (!foundEp) {
            for (int j = 0; j < eps.size(); j++) {
                ep = (UsbEndpoint) eps.get(j);
                int t = ep.getType();
                if (t == UsbConst.ENDPOINT_TYPE_INTERRUPT
                        && ep.getDirection() == UsbConst.ENDPOINT_DIRECTION_IN) 
{
                    endptIn = ep;
                    foundEp = true;
                    break;
                }
            }
        }
        /** Get and open the UsbPipe. */
        pipe = endptIn.getUsbPipe();
       if (!pipe.isOpen()) {
            pipe.open();
        }
}


Here is how I'm reading the data:

    public void startReader() {
        /** We need to create the Thread-class in this method. */
        new Thread() {
            public void run() {
                stop_flag = true;
                while (stop_flag) {
                    try {
                            byte[] temp = new byte[buffer_size];

                            irpIn = pipe.createUsbIrp();
                            irpIn.setData(temp);
                            pipe.asyncSubmit(irpIn);
                            irpIn.waitUntilComplete();

                            byte[] buffer = new byte[irpIn.getActualLength()];

                             //reading the data
                          Thread.sleep(50);
                    } catch (Exception e) {
                        //in case of disconnect error occurs.
                        Logs.error(className, functionName, "exception of send 
command " + e);
                    }//end try catch
                }//end while
            }//end run()
        }.start();
    }



And when I'm trying to release:

    public void releaseUsbInterface() throws UsbException, 
UsbDisconnectedException {
        if (interf != null) {
             pipe.close();
             interf.release();
        }
    }

When I'm doing this, the code is blocked on the line interf.release() and I 
can't do anything.
I have to unplug manually the card reader.

Do you have any idea what is the problem?


Best regards,
Dara Mom
------------------------------------------------------------------------------
_______________________________________________
javax-usb-devel mailing list
javax-usb-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/javax-usb-devel

Reply via email to