PyUSB как указать тип и размер буфера конечной точки - PullRequest
0 голосов
/ 05 июня 2018

Существует четыре различных способа отправки данных через USB: управление, прерывание, групповое и изохронное. book ref 1 Из книги book ref 1 page 330:

... Массовые конечные точки передают большие объемы данных.Эти конечные точки обычно намного больше (они могут содержать больше символов одновременно), что прерывают конечные точки....

когда я получаю данные своей конечной точки, я использую следующую команду.

import usb.core
import usb.util
dev = usb.core.find(idVendor=0x0683, idProduct=0x4108)

if dev is None:
    raise ValueError('Device not found')

dev.reset()
dev.set_configuration()
cfg = dev.get_active_configuration()
intf = cfg[(0,0)]    

epi = usb.util.find_descriptor(
                              intf,
                              # match the first IN endpoint
                              custom_match = \
                              lambda e: \
                              usb.util.endpoint_direction(e.bEndpointAddress) ==\
                              usb.util.ENDPOINT_IN)

Я пытался добавить, но это выдает мою синтаксическую ошибку, которую я не могуполностью понимаю:

usb.util.endpoint_type()== \
                              usb.util.ENDPOINT_TYPE_BULK

enter image description here

Вот еще один очень хороший источник о том, как работать с USB ссылка 1

Похоже, что конечные точки usb имеют параметры, которые можно указать в python

enter image description here

, где bEndpointAddress указывает, какую конечную точку описывает этот дескриптор.

bmAttributes указывает тип передачи.Это может быть контроль, прерывание, изохронный или массовый перевод.Если указана изохронная конечная точка, можно выбрать дополнительные атрибуты, такие как типы синхронизации и использования.

wMaxPacketSize указывает максимальный размер полезной нагрузки для этой конечной точки.

bInterval используется для указания интервала опроса определенных передач.Единицы измерения выражены в кадрах, таким образом, это равняется либо 1 мс для устройств с низкой / полной скоростью, либо 125 мс для устройств с высокой скоростью.

Я пытался:

epi.wMaxPacketSize = 72000000 #to make the buffer large
epi.bmAttributes = 3 # 3 = 10 in binary. to change the mode to bulk

Мои вопросы:

Где мне указать, какую конечную точку я использую для Windows и (или) Linux и как это сделать?и как я могу изменить размер буфера на каждой конечной точке?

1 Ответ

0 голосов
/ 19 февраля 2019

Попробуйте:

epi = usb.util.find_descriptor(intf,
                               custom_match = \
                                 lambda e: \
                                   usb.util.endpoint_direction(e.bEndpointAddress) == \
                                   usb.util.ENDPOINT_IN \
                                   and \
                                   usb.util.endpoint_type(e.bmAttributes) == \
                                   usb.util.ENDPOINT_TYPE_BULK )

Но вы неправильно поняли часть о параметрах. bmAttributes и wMaxPacketSize определяются аппаратным обеспечением USB и не должны изменяться Python.

...