pyusb 读取操作总是返回 '1'

Posted

技术标签:

【中文标题】pyusb 读取操作总是返回 \'1\'【英文标题】:pyusb reading operation always return '1'pyusb 读取操作总是返回 '1' 【发布时间】:2019-08-13 03:27:43 【问题描述】:

我正在尝试使用pyusb为我的代码创建USB驱动对象,并且读取操作的返回总是返回'1',我在网上搜索了一段时间,我找不到任何解决方案,请尝试帮助我了解我做错了什么。

环境特性: 在 Windows 10 上使用 python 3.7 和 pycharm。 在安装 pyusb 模块之后,当然导入了所有必要的包(usb.core、usb.util)。

我正在尝试构建的对象:

class UsbDev:
    def __init__(self, VID, PID):
        self.output_ep = None
        self.input_ep = None
        self.VID = VID
        self.PID = PID
        self.dev = usb.core.find(idVendor = self.VID, idProduct = self.PID)
        if self.dev is None:
            raise AttributeError('USB device is not connected...')

    def check_device(self, dev_name=None):
        if dev_name is None:
            raise ValueError("device name provided is None")
        if self.dev.product != dev_name:
            raise ValueError('Wrong type of product connected to host')

    def config_device(self):
        self.dev.set_configuration()
        cfg = self.dev.get_active_configuration()
        self.output_ep = usb.util.find_descriptor(cfg[(0, 0)], custom_match=lambda e:
            usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)
        self.input_ep = usb.util.find_descriptor(cfg[(0, 0)], custom_match=lambda e:
            usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN)

    def read_string(self):
        if self.input_ep is not None:
            ret_array = self.dev.read(self.input_ep.bEndpointAddress,
                                      self.input_ep.wMaxPacketSize)
            self.dev.clear_halt(self.input_ep)
            return ''.join([chr(x) for x in ret_array])  # always returns 1

测试用例:

driver = ud(0x0403, 0xed72)  # HAMEG HO720 Serial Port
driver.check_device('HAMEG HO720')
driver.config_device()
driver.send("*IDN?")    
print(driver.read_string())

预期输出:

HAMEG,HMP4040,055310003,HW50020001/SW2.41

【问题讨论】:

【参考方案1】:

几天后,我自己解决了这个问题。 似乎某些 USB 设备需要终止字符(在我的情况下是换行符'\n'),因此在发送带有换行符的消息时,设备开始回复。

希望我的案例对你们有帮助。

【讨论】:

以上是关于pyusb 读取操作总是返回 '1'的主要内容,如果未能解决你的问题,请参考以下文章

PyUSB 设备已声明,detach_kernel_driver 返回未找到实体

PyUSB:从 USB 设备读取

Java读取ZIP文件ZipEntry.getsize()总是返回-1?

QT 使用QDomDocument::setContent()读XML文件总是返回false

PyUSB怎么理解? [关闭]

PyUSB 1.0:NotImplementedError:此平台上不支持或未实现的操作