операция чтения pyusb всегда возвращает '1' - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь создать объект драйвера USB с использованием pyusb для моего кода, и операция возврата из чтения всегда возвращает '1', я некоторое время искал в Интернете и не смог найти никакого решения, пожалуйста, попробуйте Помоги мне понять, что я делаю не так.

Экологические свойства: Использование Python 3.7 с Pycharm на Windows 10. После установки модуля 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 Ответ

0 голосов
/ 28 марта 2019

Через несколько дней я решил проблему сам.Похоже, что некоторым USB-устройствам требуется символ завершения (в моем случае это был символ новой строки char '\ n'), поэтому после отправки сообщения с символом новой строки устройство начало отвечать.

Я надеюсь, что мой случай поможет вам, ребята.

...