Я использую PyUSB в Python, так как мне придется слушать USB-порт для извлечения данных с электронной карты. На данный момент я должен тренироваться, читая прямой ввод с небольшой клавиатуры (с USB-подключением), подключенной к малине-пи. Конечно, я не хочу читать типизированную строку, я ожидаю получить коды ASCII, например. Я просто не понимаю, как я могу читать ввод с моей USB-клавиатуры.Как я могу получить необработанные данные USB-клавиатуры с Python?
я уже нашел некоторые фрагменты:
import usb.core
import usb.util
VENDOR_ID = 0x0922
PRODUCT_ID = 0x8003
# find the USB device
device = usb.core.find(idVendor=VENDOR_ID,
idProduct=PRODUCT_ID)
# use the first/default configuration
device.set_configuration()
# first endpoint
endpoint = device[0][(0,0)][0]
# read a data packet
attempts = 10
data = None
while data is None and attempts > 0:
try:
data = device.read(endpoint.bEndpointAddress,
endpoint.wMaxPacketSize)
except usb.core.USBError as e:
data = None
if e.args == ('Operation timed out',):
attempts -= 1
continue
print data
Либо я получаю ошибку 16 «Устройство не занят» или вообще ничего, если я раскомментируйте следующую строку «device.set_configuration()», который вызывает «Device (я заменил VENDOR_ID и PRODUCT_ID на идентификаторы моей клавиатуры)
Устройство используется ОС в качестве устройства ввода. Вы не можете использовать его непосредственно тогда. Вы не указали какую-либо информацию о ОС. –
Есть ли способ отделить его от временного ядра, чтобы использовать его в моем приложении python? –
См. Методы 'is_kernel_driver_active' и' detach_kernel_driver' класса устройств USB. В документации libusb это немного обсуждается. – patthoyts