Please copy the mailing list.

You clearly cannot do irp.setComplete() and then try to submit it.
What are you trying to accomplish by trying to do that?

If you want to re-use irps, you need to reset the fields before
re-submitting it (and obviously you have to be sure the irp is
complete before trying to re-submit).  See the pipe and irp
documentation.

The easiest thing for you to do it just create a new irp each time you
want to submit one.  The Java GC and memory manager is really quite
good so you might as well just do this.

On Feb 17, 2008 6:25 PM, Christoph Ott <[EMAIL PROTECTED]> wrote:
> Now I got another Problem :(
>
> I have to send a Packet which give the device the Information that a new
> Packet will come (bytesToSend2) - I have to send it twice (dont know why
> but It works with the second one *G*)
>
> after that I get from the device a Packet that It will be ready to
> receive(bytesToRead2)
>
> Now I want to send the Packet with the Product_Request but I get this
> Exception:
>
> javax.usb.UsbException: UsbIrp cannot be used while isComplete() is
> true.
>         at com.ibm.jusb.UsbIrpImp.checkUsbIrp(UsbIrpImp.java:160)
>         at
> com.ibm.jusb.UsbPipeImp.usbIrpToUsbIrpImp(UsbPipeImp.java:435)
>         at com.ibm.jusb.UsbPipeImp.asyncSubmit(UsbPipeImp.java:208)
>         at USBLister.IODevices(USBLister.java:191)
>         at USBLister.main(USBLister.java:239)
>
>
> I tried isComplete, WaitUntilComplete and I closed it and re-open the
> UsbIrp.
>
> Here is my Code:
> --------------------------------------------------------------------------------
> public void IODevices(UsbDevice device){
> try{
>         device.getActiveUsbConfiguration();
>         UsbConfiguration config = device.getActiveUsbConfiguration();
>         UsbInterface interf = config.getUsbInterface((byte)0);
>         interf.claim(new UsbInterfacePolicy() {
>                 public boolean forceClaim(UsbInterface usbInterface) {
>                         return true;
>                 }
>         });
>         List totalEndpoints = interf.getUsbEndpoints();
>         UsbEndpoint ep = null;
>
>         //Endpoints
>         UsbEndpoint pipeInEndP = (UsbEndpoint) totalEndpoints.get(0);
>         UsbEndpoint pipeOutEndP = (UsbEndpoint) totalEndpoints.get(2);
>         UsbEndpoint pipeInterruptP = (UsbEndpoint) totalEndpoints.get(1);
>
>         //Pipes
>         UsbPipe pipeIn = pipeInEndP.getUsbPipe();
>         pipeIn.open();
>         UsbPipe pipeOut = pipeOutEndP.getUsbPipe();
>         pipeOut.open();
>         UsbPipe pipeInterrupt = pipeInterruptP.getUsbPipe();
>         pipeInterrupt.open();
>
>
>         byte[] bytesToSend = new byte[12];
>         //Application
>         bytesToSend[0] = (byte) 0x00;
>         //Reserved
>         bytesToSend[1] = (byte) 0x00;
>         bytesToSend[2] = (byte) 0x00;
>         bytesToSend[3] = (byte) 0x00;
>         //PacketId
>         short s = (byte) 0x05;
>         bytesToSend[4] = (byte) (((byte) s) & 0xff);
>         bytesToSend[5] = (byte) ((((byte) s) & 0xff00) >> 8);
>         //Reserved2
>         bytesToSend[6] = (byte) 0x00;
>         bytesToSend[7] = (byte) 0x00;
>         //DataSize
>         int i = 0;
>         bytesToSend[8] = (byte) (i & 0xff);
>         bytesToSend[9] = (byte) ((i & 0xff00) >> 8);
>         bytesToSend[10] = (byte) ((i & 0xff0000) >> 16);
>         bytesToSend[11] = (byte) ((i & 0xff000000) >> 24);
>
>         byte[] bytesToSend2 = new byte[12];
>         //Application
>         bytesToSend2[0] = (byte) 0x14;
>         //Reserved
>         bytesToSend2[1] = (byte) 0x00;
>         bytesToSend2[2] = (byte) 0x00;
>         bytesToSend2[3] = (byte) 0x00;
>         //PacketId
>         short s2 = (byte) 0xfe;
>         bytesToSend2[4] = (byte) (((byte) s2) & 0xff);
>         bytesToSend2[5] = (byte) ((((byte) s2) & 0xff00) >> 8);
>         //Reserved2
>         bytesToSend2[6] = (byte) 0x00;
>         bytesToSend2[7] = (byte) 0x00;
>         //DataSize
>         int i2 = 0;
>         bytesToSend2[8] = (byte) (i2 & 0xff);
>         bytesToSend2[9] = (byte) ((i2 & 0xff00) >> 8);
>         bytesToSend2[10] = (byte) ((i2 & 0xff0000) >> 16);
>         bytesToSend2[11] = (byte) ((i2 & 0xff000000) >> 24);
>
>         //I have to send the Datapacket twice
>         UsbIrp irpSend = pipeOut.createUsbIrp();
>         irpSend.setData(bytesToSend);
>         pipeOut.asyncSubmit(irpSend);
>         irpSend.isComplete();
>         pipeOut.asyncSubmit(irpSend);
>
>         byte[] bytesToRead2 = new byte[255];
>
>         UsbIrp irpInterrupt = pipeInterrupt.createUsbIrp();
>         irpInterrupt.setData(bytesToRead2);
>         pipeInterrupt.asyncSubmit(irpInterrupt);
>         irpInterrupt.waitUntilComplete(1000);
>
>         System.out.println("Interrupt-Bulk");
>         System.out.println("-----------------------");
>         for (int x = 0; x < 20; x++){
>                 System.out.print(bytesToRead2[x]+" ");
>         }
>         System.out.println();
>
>         irpSend.setData(bytesToSend2);
>         pipeOut.asyncSubmit(irpSend); //Here is the Error
>         irpSend.isComplete();
>
>         byte[] bytesToRead = new byte[255];
>
>         UsbIrp irpRead = pipeIn.createUsbIrp();
>         irpRead.setData(bytesToRead2);
>         pipeIn.asyncSubmit(irpRead);
>         irpRead.waitUntilComplete(1000);
>
>         System.out.println("In-Bulk: ");
>         System.out.println("-----------------------");
>         for (int x = 0; x < 255; x++){
>                 System.out.print(bytesToRead[x]+" ");
>         }
>         System.out.println();
>
>         pipeIn.abortAllSubmissions();
>         pipeOut.abortAllSubmissions();
>         pipeInterrupt.abortAllSubmissions();
>         pipeIn.close();
>         pipeOut.close();
>         pipeInterrupt.close();
>         interf.release();
>
> }catch(Exception ex){
>         ex.printStackTrace();
> }
>
> }
>
>
>
> ----------------------------------------------------------------------------------------------------------
>
>
> Am Donnerstag, den 14.02.2008, 17:19 -0500 schrieb Dan Streetman:
>
> > According to the brief part of the spec I read, you have to listen on
> > the interrupt pipe also as the device can send responses on either
> > pipe.  You should either asynchronously submit multiple IRPs on the
> > interrupt-in pipe and have the pipe listener handle and then resubmit
> > each one, or you should create a dedicated thread to just manage IRPs
> > on the interrupt-in pipe.  In any case you need to listen to it.
> >
> > As far as if you are sending the right commands to the device or not,
> > i don't have the time to get into the garmin spec to tell you if you
> > are or not...
> >
> > On Thu, Feb 14, 2008 at 7:51 AM, Christoph Ott <[EMAIL PROTECTED]> wrote:
> > > Hi maybe anyone can read he garmin sdk :
> > >  http://www8.garmin.com/support/pdf/IOSDK.zip
> > >
> > >  I don't know what I do wrong but I only get zeros :(
> > >
> > >  Here is my Code:
> > >
> > >  public void IODevices(UsbDevice device){
> > >         try{
> > >                 device.getActiveUsbConfiguration();
> > >                 UsbConfiguration config = 
> > > device.getActiveUsbConfiguration();
> > >                 UsbInterface interf = config.getUsbInterface((byte)0);
> > >                 interf.claim(new UsbInterfacePolicy() {
> > >                         public boolean forceClaim(UsbInterface 
> > > usbInterface) {
> > >                                 return true;
> > >                         }
> > >                 });
> > >                 List totalEndpoints = interf.getUsbEndpoints();
> > >                 UsbEndpoint ep = null;
> > >  //Endpoints
> > >                 UsbEndpoint pipeInEndP = (UsbEndpoint) 
> > > totalEndpoints.get(0);
> > >                 UsbEndpoint pipeOutEndP = (UsbEndpoint) 
> > > totalEndpoints.get(2);
> > >
> > >                 //Pipes
> > >                 UsbPipe pipeIn = pipeInEndP.getUsbPipe();
> > >                 pipeIn.open();
> > >                 UsbPipe pipeOut = pipeOutEndP.getUsbPipe();
> > >                 pipeOut.open();
> > >
> > >                 short mReserved2 = 0;
> > >                 short mPacketId = 254;
> > >                 int mDataSize = 0;
> > >                 byte[] bytesToSend = new byte[12];
> > >                 bytesToSend[0] = 20;
> > >                 bytesToSend[1] = 0;
> > >                 bytesToSend[2] = (byte) (mReserved2 & 0xFF); //Short to 
> > > Byte
> > >                 bytesToSend[3] = (byte) ((mReserved2 & 0xff00 ) >> 8); 
> > > //Short to Byte
> > >                 bytesToSend[4] = (byte) (mPacketId & 0xFF); //Short to 
> > > Byte
> > >                 bytesToSend[5] = (byte) ((mPacketId & 0xff00 ) >> 8); 
> > > //Short to Byte
> > >                 bytesToSend[6] = (byte) (mReserved2 & 0xFF); //Short to 
> > > Byte
> > >                 bytesToSend[7] = (byte) ((mReserved2 & 0xff00 ) >> 8); 
> > > //Short to Byte
> > >                 bytesToSend[8] = (byte) (mDataSize >>24); //unsigned long 
> > > to Byte
> > >                 BytesToSend[9] = (byte) ((mDataSize << 8) >> 24);
> > >                 BytesToSend[10] = (byte) ((mDataSize << 16) >> 24);
> > >                 bytesToSend[11] = (byte) ((mDataSize << 24) >> 24);
> > >
> > >                 UsbIrp irpSend = pipeOut.createUsbIrp();
> > >                 IrpSend.setData(bytesToSend);
> > >                 pipeOut.asyncSubmit(irpSend);
> > >                 irpSend.waitUntilComplete(1000);
> > >
> > >                 byte[] bytesToRead = new byte[255];
> > >                 UsbIrp irpRead = pipeIn.createUsbIrp();
> > >                 irpRead.setData(bytesToRead);
> > >                 pipeIn.asyncSubmit(irpRead);
> > >                 irpRead.waitUntilComplete(1000);
> > >                 pipeIn.abortAllSubmissions();
> > >                 pipeOut.abortAllSubmissions();
> > >                 pipeIn.close();
> > >                 pipeOut.close();
> > >                 interf.release();
> > >
> > >                 int pid,sv;
> > >                 pid =(bytesToRead[0] & 0xff);
> > >                 sv =(bytesToRead[1] & 0xff);
> > >                 pid= bytes_to_int(bytesToRead);
> > >                 sv= bytes_to_int(bytesToRead, 4);
> > >                 System.out.println("pid: " + pid + "; sv: " + sv);
> > >
> > >                 System.out.println(bytesToRead);
> > >         }catch(Exception ex){
> > >                 ex.printStackTrace();
> > >         }
> > >  }
> > >
> > >  int bytes_to_int(byte b[], int start) {
> > >         int i = ((b[start + 3] & 0xff) << 24) + ((b[start + 2] & 0xff) << 
> > > 16) +
> > >  ((b[start + 1] & 0xff) << 8) + (b[start] & 0xff);
> > >                    return i;
> > >  }
> > >  int bytes_to_int(byte b[]) {
> > >                     /* as above, but start == 0 */
> > >                     return bytes_to_int(b, 0);
> > >  }
> > >
> > >
> > >  -------------------------------------------------------------------------
> > >  This SF.net email is sponsored by: Microsoft
> > >  Defy all challenges. Microsoft(R) Visual Studio 2008.
> > >  http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> > >  _______________________________________________
> > >  javax-usb-devel mailing list
> > >  javax-usb-devel@lists.sourceforge.net
> > >  https://lists.sourceforge.net/lists/listinfo/javax-usb-devel
> > >
>
>

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
javax-usb-devel mailing list
javax-usb-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/javax-usb-devel

Reply via email to