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 использует непосредственно устройство. Поэтому после деактивации накопителя я могу его использовать.

Другие вопросы по тегам