Hi, I saw your thread on SourceFourge (http://sourceforge.net/p/pyusb/mailman/message/31969943/), but I don't have an account. I also have MTI RU-824 reader. I sniffed the USB communication in the Windows demo program and I saw that the header should be written backward. So rather than: HEADER = bytearray("MTIC") try: HEADER = bytearray("MTIC"[::-1]) I tested it and it works.
On Tuesday, 11 February 2014 06:55:03 UTC+1, Setia Budi wrote: > Hi fellows, > > I am facing difficulties in order to send USB commands to an RFID reader. > > This is the command reference of the device: > https://github.com/mti-rfid/RFID_Explorer > > > > I am working with the MTI RU-824 model. > > > > The manufacturer of the device only provide a driver for Windows (using > .Net), but we need to run the device on Linux. That's why I need to write few > lines of code in Python as a new "driver". > > > > I am using PyUSB for accessing the device, and this is few lines of my code: > > > > ============================================================================ > > > > import usb.core > > import usb.util > > import sys > > > > VENDOR_ID = 0x24e9 > > PRODUCT_ID = 0x0824 > > > > device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID) > > > > if device is None: > > sys.exit("Could not find Id System Barcode Reader.") > > else: > > print 'Device detected' > > > > device.set_configuration() > > > > cfg = device.get_active_configuration() > > interface_number = cfg[(0, 0)].bInterfaceNumber > > alternate_setting = usb.control.get_interface(device, interface_number) > > usb_interface = usb.util.find_descriptor( > > cfg, bInterfaceNumber=interface_number, > > bAlternateSetting=alternate_setting > > ) > > > > endpoint_out = usb.util.find_descriptor( > > usb_interface, > > # match the first OUT endpoint > > custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == > usb.util.ENDPOINT_OUT > > ) > > > > endpoint_in = usb.util.find_descriptor( > > usb_interface, > > # match the first IN endpoint > > custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == > usb.util.ENDPOINT_IN > > ) > > > > endpoint_out.write('0x01') > > print endpoint_in.read(len('0x01'), 1000) > > > > ============================================================================= > > My question is on the last 2 lines. > > I am using endpoint_out to send a command and endpoint_in to read data from > the reader. Am I correct? > > > > The problem is, when I run the code, there is an error message like this: > > usb.core.USBError: [Errno 110] Operation timed out > > > > Anyone can give a clue? > > Thank you. -- https://mail.python.org/mailman/listinfo/python-list