Open Nimelli opened 4 years ago
Any chance you could provide an example file for communicating with the device using the updates?
@ajoverhage I talked with my device using something like this:
api = WinUsbPy()
result = api.list_usb_devices(deviceinterface=True, present=True)
if result:
print(result)
if api.init_winusb_device(vid, pid):
interface_descriptor = api.query_interface_settings(0)
if interface_descriptor != None:
print("bLength: " + str(interface_descriptor.b_length))
print("bDescriptorType: " + str(interface_descriptor.b_descriptor_type))
print("bInterfaceNumber: " + str(interface_descriptor.b_interface_number))
print("bAlternateSetting: " + str(interface_descriptor.b_alternate_setting))
print("bNumEndpoints " + str(interface_descriptor.b_num_endpoints))
print("bInterfaceClass " + str(interface_descriptor.b_interface_class))
print("bInterfaceSubClass: " + str(interface_descriptor.b_interface_sub_class))
print("bInterfaceProtocol: " + str(interface_descriptor.b_interface_protocol))
print("iInterface: " + str(interface_descriptor.i_interface))
pipe_info_list = map(api.query_pipe, range(interface_descriptor.b_num_endpoints))
for item in pipe_info_list:
print("PipeType: " + str(item.pipe_type))
print("PipeId: " + str(item.pipe_id))
print("MaximumPacketSize: " + str(item.maximum_packet_size))
print("Interval: " + str(item.interval))
while True:
str_tx = input("TX: ")
if str_tx == "exit":
print("exiting...")
break
api.write(0x01, str_tx.encode('utf-8'))
raw_rx = api.read(0x81, 64)
str_rx = raw_rx.decode('utf-8')
print("RX: " + str_rx)
if api.close_winusb_device():
print('close correct')
This code is writing your input to endpoint 1 OUT (addr 0x01), and my USB device is echoing what is received to endpoint 1 IN (addr: 0x81)
I'm starting to use WinUsbPy high level API in a project and am running into the same bugs (fixed here... i.e. find_device not calling is_device properly).
Any status on pulling these fixes into the main branch?
Hi,
Thanks for this wrapper.
I had initially some issues connecting to my USB device using the high level API. Especially, init_winusb_device() required a 'name' field, which doesn't make sense IMHO.
Also, some high level API functions (as write, read, etc.) were throwing errors due to indexing the interface handle (self.handle_winusb[self._index] ???)
I propose the following changes then, which worked for me (and my device)
Platform: Windows 10, python 3.8.6 32bit USB test device: Custom STM32 USB device (CDC data, bulk transfert with 1 IN and 1 OUT endpoint)