def close(self): """ Close usb device. Arguments: None Return: None """ ret = usb.release_interface(self.libusb_handle,self.interface_nr) ret = usb.close(self.libusb_handle) return
def __init__(self, usb_vendor_id, usb_product_id, usb_bulkout_ep_address, usb_bulkin_ep_address, usb_buffer_out_size, usb_buffer_in_size, usb_serial_number=None): self.bulkout_ep_address = usb_bulkout_ep_address self.bulkin_ep_address = usb_bulkin_ep_address self.buffer_out_size = usb_buffer_out_size self.buffer_in_size = usb_buffer_in_size """ Open and initialize usb device. Arguments: None Return: None. """ usb.init() # Get usb busses if not usb.get_busses(): usb.find_busses() usb.find_devices() busses = usb.get_busses() # Find device by IDs found = False dev_list = [] for bus in busses: for dev in bus.devices: if (dev.descriptor.idVendor == usb_vendor_id and dev.descriptor.idProduct == usb_product_id): dev_list.append(dev) found = True if not found: raise RuntimeError("Cannot find device.") if usb_serial_number == None: # No serial number specified - take first device dev = dev_list[0] self.libusb_handle = usb.open(dev) self.dev = dev else: # Try and find device with specified serial number found = False for dev in dev_list: self.dev = dev self.libusb_handle = usb.open(dev) sn = self.get_serial_number() if sn == usb_serial_number: found = True break else: ret = usb.close(self.libusb_handle) if not found: raise RuntimeError("Cannot find device w/ serial number %s."%(usb_serial_number,)) self.interface_nr = 0 if hasattr(usb,'get_driver_np'): # non-portable libusb function available name = usb.get_driver_np(self.libusb_handle,self.interface_nr) if name != '': debug_print("attached to kernel driver '%s', detaching."%name ) usb.detach_kernel_driver_np(self.libusb_handle,self.interface_nr) if dev.descriptor.bNumConfigurations > 1: debug_print("WARNING: more than one configuration, choosing first") usb.set_configuration(self.libusb_handle, self.dev.config[0].bConfigurationValue) usb.claim_interface(self.libusb_handle, self.interface_nr) self.output_buffer = ctypes.create_string_buffer(usb_buffer_out_size) self.input_buffer = ctypes.create_string_buffer(usb_buffer_in_size) for i in range(usb_buffer_in_size): self.input_buffer[i] = chr(0x00) for i in range(usb_buffer_out_size): self.output_buffer[i] = chr(0x00) # Clear any possible halt on the endpoints ret = usb.clear_halt(self.libusb_handle,usb_bulkout_ep_address) ret = usb.clear_halt(self.libusb_handle,usb_bulkin_ep_address) # Buffer position marker for reading from and writing to buffer self.output_buffer_pos = 0 self.input_buffer_pos = 0 # Set bref function based on python version if get_python_vnum() >= BYREF_EXISTS_VNUM: self.byref = ctypes.byref else: self.byref = byref_via_pointer