Pyusb: Ресурс занят / USB сканер штрих-кода
Я пытаюсь получить значение от сканера штрих-кода, это с помощью Pyusb на Ubuntu. После расследования я обнаружил, что сканер штрих-кода должен получить данные активации, чтобы иметь возможность сканировать штрих-код. Я нашел эти данные, изменил свой файл rules.d, чтобы обнаружить мое устройство, а затем запустил этот код для отправки данных через USB:
import usb.core
import usb.util
# find our device
dev = usb.core.find(idVendor=0x05f9, idProduct=0x1203)
# was it found?
if dev is None:
raise ValueError('Device not found')
# Attach and detach the usb
if dev.is_kernel_driver_active(0):
dev.detach_kernel_driver(0)
# set the active configuration. With no arguments, the first
# configuration will be the active one
dev.set_configuration()
# get an endpoint instance
cfg = dev.get_active_configuration()
intf = cfg[(0,0)]
ep = usb.util.find_descriptor(
intf,
# match the first OUT endpoint
custom_match = \
lambda e: \
usb.util.endpoint_direction(e.bEndpointAddress) == \
usb.util.ENDPOINT_OUT)
assert ep is not None
# write the data
ep.write('\x0b')
Я получаю следующую ошибку:
usb.core.USBError: [Errno 16] Resource busy
Но обычно следующий код должен сделать устройство доступным:
# Attach and detach the usb
if dev.is_kernel_driver_active(0):
dev.detach_kernel_driver(0)
Я попробовал этот код с другим устройством (принтером), и он работает.
Есть ли у вас какие-либо идеи относительно проблемы?
1 ответ
Решение
Я нашел решение.
Проблема заключалась в том, что драйвер usbhid использует непосредственно устройство. Поэтому после деактивации накопителя я могу его использовать.