def __init__(self, context, device_p): """ You should not instanciate this class directly. Call LibUSBContext methods to receive instances of this class. """ # Important: device_p refcount must be incremented before being given # to this constructor. This class will decrement refcount upon # destruction. self.__context = context self.device_p = device_p # Fetch device descriptor device_descriptor = libusb1.libusb_device_descriptor() result = libusb1.libusb_get_device_descriptor(device_p, byref(device_descriptor)) if result: raise libusb1.USBError(result) self.device_descriptor = device_descriptor # Fetch all configuration descriptors self.__configuration_descriptor_list = [] append = self.__configuration_descriptor_list.append for configuration_id in xrange(device_descriptor.bNumConfigurations): config = libusb1.libusb_config_descriptor_p() result = libusb1.libusb_get_config_descriptor(device_p, configuration_id, byref(config)) if result == libusb1.LIBUSB_ERROR_NOT_FOUND: # Some devices (ex windows' root hubs) tell they have one # configuration, but they have no configuration descriptor. continue if result: raise libusb1.USBError(result) append(config.contents)
def open_cp2130(): context = libusb1.libusb_context_p() deviceList = libusb1.libusb_device_p_p() deviceCount = 0 deviceDescriptor = libusb1.libusb_device_descriptor() device = libusb1.libusb_device_p() cp2130Handle = libusb1.libusb_device_handle_p() kernelAttached = 0 if libusb1.libusb_init(byref(context)) != 0: print('Could not initialize libusb!') exit_cp2130() deviceCount = libusb1.libusb_get_device_list(context, byref(deviceList)) if deviceCount <= 0: print('No devices found!') exit_cp2130() for i in range(0, deviceCount): if libusb1.libusb_get_device_descriptor(deviceList[i], byref(deviceDescriptor)) == 0: if (deviceDescriptor.idVendor == 0x10C4) and (deviceDescriptor.idProduct == 0x87A0): device = deviceList[i] break if device == None: print('CP2130 device not found!') exit_cp2130() if libusb1.libusb_open(device, byref(cp2130Handle)) != 0: print('Could not open device!') exit_cp2130() if libusb1.libusb_kernel_driver_active(cp2130Handle, 0) != 0: libusb1.libusb_detach_kernel_driver(cp2130Handle, 0) kernelAttached = 1 if libusb1.libusb_claim_interface(cp2130Handle, 0) != 0: print('Could not claim interface!') exit_cp2130() if cp2130_libusb_set_usb_config(cp2130Handle) == False: exit_cp2130() if cp2130_libusb_set_spi_word(cp2130Handle) == False: exit_cp2130() print('Successfully opened CP2130!') return cp2130Handle, kernelAttached, deviceList, context
def refreshBoards(self): dev_list = [] deviceCount = libusb1.libusb_get_device_list(self.context, byref(self.deviceList)) if deviceCount <= 0: print('No devices found!') for i in range(0, deviceCount): if libusb1.libusb_get_device_descriptor( self.deviceList[i], byref(self.deviceDescriptor)) == 0: if (self.deviceDescriptor.idVendor == 0x10C4) and (self.deviceDescriptor.idProduct == 0x87A0): dev_list.append(self.deviceList[i]) self.device = self.deviceList[i] # TODO: how to get device desciptor from libusb1? if dev_list: self.boardsChanged.emit(["cp2130"]) else: self.boardsChanged.emit([])
def __init__(self, context, device_p): self.context = context libusb1.libusb_ref_device(device_p) self.device_p = device_p # Fetch device descriptor device_descriptor = libusb1.libusb_device_descriptor() result = libusb1.libusb_get_device_descriptor(device_p, byref(device_descriptor)) if result: raise libusb1.USBError, result self.device_descriptor = device_descriptor # Fetch all configuration descriptors self.configuration_descriptor_list = [] append = self.configuration_descriptor_list.append for configuration_id in xrange(device_descriptor.bNumConfigurations): config = libusb1.libusb_config_descriptor_p() result = libusb1.libusb_get_config_descriptor(device_p, configuration_id, byref(config)) if result: raise libusb1.USBError, result append(config.contents)