Pyusb:资源繁忙/USB条码扫描器
Pyusb: Ressource busy / USB bar code Scanner
我正在尝试从条形码扫描器中获取价值,这与 Ubuntu 上的 pyusb 一起使用。经过调查,我发现条码扫描仪需要接收激活数据才能扫描条码。我找到了这个数据,修改了我的 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)
我在另一台设备(打印机)上试过这段代码,它工作正常。
你对这个问题有什么想法吗?
我找到了解决方案。
问题是 usbhid 驱动程序直接使用设备。所以在停用驱动器后我可以使用它。
我正在尝试从条形码扫描器中获取价值,这与 Ubuntu 上的 pyusb 一起使用。经过调查,我发现条码扫描仪需要接收激活数据才能扫描条码。我找到了这个数据,修改了我的 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)
我在另一台设备(打印机)上试过这段代码,它工作正常。
你对这个问题有什么想法吗?
我找到了解决方案。
问题是 usbhid 驱动程序直接使用设备。所以在停用驱动器后我可以使用它。