Sorry, I misread your code - you can call isComplete() and then
submit.  But, you have to check and act on the result of isComplete()
- the method does not _do_ anything, just tells you status.  If it is
not complete you should not do anything with it, wait for it to
complete.

You also need to implement a pipe listener to get notification of all
these async-submitted irps coming back, or use a seperate thread.

On Feb 18, 2008 9:56 AM, Dan Streetman <[EMAIL PROTECTED]> wrote:
> 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