On Fri, Jan 27, 2012 at 9:58 PM, Xiaofan Chen <xiaof...@gmail.com> wrote: >>> It seems that this issue has been reported before. >>> http://comments.gmane.org/gmane.comp.python.pyusb.user/386 >>> > As mentioned in that thread, the problem is with > the enumeration codes. > > # implementation of libusb 0.1.x backend > class _LibUSB(usb.backend.IBackend): > @methodtrace(_logger) > def enumerate_devices(self): > _check(_lib.usb_find_busses()) > _check(_lib.usb_find_devices()) > bus = _lib.usb_get_busses() > while bool(bus): > dev = bus[0].devices > while bool(dev): > yield dev[0] > dev = dev[0].next > bus = bus[0].next > > The problem is that under Mac OS X, bool(bus) > returns False.
Hmm, that analysis is not correct. The issue is actually bool(dev) returns false. mymacmini:~ xiaofanc$ python Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import usb.core i>>> import usb.util >>> import usb.backend.libusb01 >>> usbe=usb.backend.libusb01.get_backend() >>> usbe <usb.backend.libusb01._LibUSB object at 0x103a04ed0> >>> libusb=usb.backend.libusb01._lib >>> libusb <CDLL '/usr/local/lib/libusb.dylib', handle 1037d6160 at 1039f85d0> >>> libusb.usb_find_busses() 2 >>> libusb.usb_find_devices() 12 >>> busses=libusb.usb_get_busses() >>> print busses <usb.backend.libusb01.LP__usb_bus object at 0x1039987a0> >>> print bool(busses) True >>> print busses.contents <usb.backend.libusb01._usb_bus object at 0x103998950> >>> dev=busses[0].devices >>> dev <usb.backend.libusb01.LP__usb_device object at 0x1039989e0> >>> print bool(dev) False >>> busses=busses[0].next >>> busses <usb.backend.libusb01.LP__usb_bus object at 0x103998c20> >>> print bool(busses) True >>> dev=busses[0].devices >>> print bool(dev) False >>> busses=busses[0].next >>> print bool(busses) False Under Ubuntu Linux 11.04, which uses libusb-0.1 legacy, it seems to work fine. mcuee@GX620Ubuntu:~/Desktop/build/pyusb/pyusb$ python Python 2.7.2+ (default, Oct 4 2011, 20:03:08) [GCC 4.6.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import usb.core >>> import usb.util >>> import usb.backend.libusb01 >>> usbe=usb.backend.libusb01.get_backend() >>> usbe <usb.backend.libusb01._LibUSB object at 0xb73a732c> >>> libusb=usb.backend.libusb01._lib >>> libusb <CDLL 'libusb-0.1.so.4', handle 9b8db78 at b73a418c> >>> libusb.usb_find_busses() 5 >>> libusb.usb_find_devices() 10 >>> busses=libusb.usb_get_busses() >>> print busses <usb.backend.libusb01.LP__usb_bus object at 0xb7431734> >>> print bool(busses) True >>> print busses.contents <usb.backend.libusb01._usb_bus object at 0xb743165c> >>> dev=busses[0].devices >>> print dev <usb.backend.libusb01.LP__usb_device object at 0xb74316ec> >>> print bool(dev) True -- Xiaofan ------------------------------------------------------------------------------ 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 _______________________________________________ pyusb-users mailing list pyusb-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pyusb-users