From 0ca3a7861fb2be03cfd5d49c079a5f4e22bf520d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 16 Jan 2007 22:02:34 +0000 Subject: [PATCH] Windows configuration bug should be fixed. --- src/libprs500/__init__.py | 5 +++++ src/libprs500/communicate.py | 11 ++--------- src/libprs500/libusb.py | 23 +++++++++-------------- 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/libprs500/__init__.py b/src/libprs500/__init__.py index f13f9185cb..a35510a8f1 100644 --- a/src/libprs500/__init__.py +++ b/src/libprs500/__init__.py @@ -36,6 +36,11 @@ the following rule in C{/etc/udev/rules.d/90-local.rules} :: You may have to adjust the GROUP and the location of the rules file to suit your distribution. """ + __version__ = "0.3.4" __docformat__ = "epytext" __author__ = "Kovid Goyal " + +import sys +iswindows = 'win32' in sys.platform.lower() +isosx = 'darwin' in sys.platform.lower() diff --git a/src/libprs500/communicate.py b/src/libprs500/communicate.py index 047be80e7e..900ce4b501 100755 --- a/src/libprs500/communicate.py +++ b/src/libprs500/communicate.py @@ -233,17 +233,10 @@ class PRS500Device(Device): raise DeviceError() try: self.handle = self.device.open() - configs = self.device.configurations - cfg = configs[0] - for config in configs: - if config.MaxPower > cfg.MaxPower: - cfg = config try: - self.handle.set_configuration(cfg) + self.handle.set_configuration(1) except USBError: - for config in configs: - if config.Value != cfg.Value: - self.handle.set_configuration(config) + self.handle.set_configuration(2) self.handle.claim_interface(self.INTERFACE_ID) except USBError, err: raise DeviceBusy(str(err)) diff --git a/src/libprs500/libusb.py b/src/libprs500/libusb.py index 4d751d2e56..dcdf974dc8 100644 --- a/src/libprs500/libusb.py +++ b/src/libprs500/libusb.py @@ -16,25 +16,24 @@ This module provides a thin ctypes based wrapper around libusb. """ -import sys from ctypes import cdll, POINTER, byref, pointer, Structure, \ c_ubyte, c_ushort, c_int, c_char, c_void_p, c_byte, c_uint from errno import EBUSY, ENOMEM -_iswindows = 'win32' in sys.platform.lower() -_isosx = 'darwin' in sys.platform.lower() +from libprs500 import iswindows, isosx + _libusb_name = 'libusb.so' -if _iswindows: +if iswindows: _libusb_name = 'libusb0' -elif _isosx: +elif isosx: _libusb_name = 'libusb.dylib' _libusb = cdll.LoadLibrary(_libusb_name) # TODO: Need to set this in a platform dependednt way (limits.h in linux) PATH_MAX = 4096 -if _iswindows: +if iswindows: PATH_MAX = 511 -if _isosx: +if isosx: PATH_MAX = 1024 class DeviceDescriptor(Structure): @@ -91,7 +90,7 @@ class Interface(Structure): ('num_altsetting', c_int)\ ] -class ConfigDescriptor(Structure): +class ConfigDescriptor(Structure): _fields_ = [\ ('Length', c_ubyte), \ ('DescriptorType', c_ubyte), \ @@ -102,7 +101,7 @@ class ConfigDescriptor(Structure): ('Attributes', c_ubyte), \ ('MaxPower', c_ubyte), \ ('interface', POINTER(Interface)), \ - ('extra', POINTER(c_char)), \ + ('extra', POINTER(c_ubyte)), \ ('extralen', c_int) \ ] @@ -131,7 +130,6 @@ class Device(Structure): doc = """ List of device configurations. See L{ConfigDescriptor} """ def fget(self): ans = [] - ans.append(self.config_descriptor.contents) for config in range(self.device_descriptor.NumConfigurations): ans.append(self.config_descriptor[config]) return tuple(ans) @@ -306,8 +304,6 @@ Device._fields_ = [ \ ('children', POINTER(POINTER(Device))) ] - - _libusb.usb_get_busses.restype = POINTER(Bus) _libusb.usb_open.restype = POINTER(DeviceHandle) _libusb.usb_open.argtypes = [POINTER(Device)] @@ -342,11 +338,10 @@ def busses(): def get_device_by_id(idVendor, idProduct): """ Return a L{Device} by vendor and prduct ids """ - ans = [] buslist = busses() for bus in buslist: devices = bus.device_list for dev in devices: if dev.device_descriptor.idVendor == idVendor and \ dev.device_descriptor.idProduct == idProduct: - return dev + return dev \ No newline at end of file