Send commands to USB device in Python

S

Setia Budi

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.
 
A

andre.miras

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,754
Messages
2,569,528
Members
45,000
Latest member
MurrayKeync

Latest Threads

Top