Hi.

<offtopic>
Sorry, this message is not properly threaded: I just happened to find the 
original thread in archives, and I cannot find a way to get relevant mail 
headers.
I hope this mail will catch original poster's attention.
</offtopic>

Nice to see someone using my python-libusb1 for isochronous with (some) 
success ! I must admit I haven't tested isochronous transfers support properly 
myself.

I have some comments on the python script from original post which might help 
improving the situation, if that's still relevant:
- You are creating one transfer object per actual transfer. You should
  probably reuse them instead by calling "newxfer.submit()" in
  SubmitThread.createDataThread. In turn, you should remove the infinite loop
  in SubmitThread.run, so that you only create a fixed amount of transfers,
  submit them, and do nothing (actually just looping over handleEvents()).
  In turn, this means you don't need to have 2 threads for creating transfers
  and handling events: just do that sequentially.
- You are creating one throw-away thread per completed transfer. I'm afraid
  this has quite some overhead, with little benefit because of the python GIL.
  I would instead immediately handle data in transfer callback (if processing
  is fast enough and you have enough submited transfers to always have some
  still submited) or otherwise pipe them to another thread/process.

Resulting code would look like:

import usb1

def handleData(transfer):
    # Fetch data from transfer here, check status to see if you should really
    # re-submit (you probably don't want to if status shows an error).
    transfer.submit()
    # Do some data handling/piping here.
    print "We phoned home."

def main():
    context=usb1.LibUSBContext()
    context.setDebug(3)
    fx2=self.context.openByVendorIDAndProductID(0x04b4,0x1004)
    fx2.claimInterface(0)
    for _ in xrange(10): # Tweak this magic "10"
        transfer_object1=fx2.getTransfer(500)
        transfer_object1.setIsochronous(endpoint=0x82,buffer_or_len=(1024*500),
          callback=handleData)
        transfer_object1.submit()
    while True:
        context.handleEvents()

if __name__ == '__main__':
    main()

Regards,
-- 
Vincent Pelletier

------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Fx2lib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fx2lib-devel

Reply via email to