5

Мне нужно иметь возможность отправлять короткий набор байтов на USB-устройство, но не знаю как.
Я знаю идентификатор поставщика и продукта, а также строку сообщения (но мне нужна помощь, чтобы выяснить, является ли это строкой ASCII или шестнадцатеричной строкой).

Есть часть программного обеспечения под названием usb_modeswitch, которая, кажется, делает это, но это только Linux.
Я где-то видел поток, где люди скомпилировали его с помощью mingw, но не предоставили свои двоичные файлы, и мне самому неудобно пробовать его.

Кто-то упоминал об использовании WinUSB, который был бы идеальным, учитывая его встроенное включение, но я не знаю интерфейса.
У меня есть / можно получить Visual Studio, но мне нужна помощь, чтобы выяснить, что использовать из материалов, которые я вижу в Интернете.

Хорошей альтернативой кажется PyUSB с libusb-win32 (порт, который использует usb_modeswitch).
Который может быть использован , как это вместо того, чтобы с написанием вместо чтения, но мне еще нужно знать , нужно ли отправить только строку или попытаться преобразовать в байты из шестнадцатеричного представления перед вызовом write()

Это информация:

DefaultVendor=046d
DefaultProduct=c261
MessageEndpoint=01
ResponseEndpoint=01
TargetClass=0x03
MessageContent="0f00010142"

контекст
Если это поможет.

У меня есть Logitech G920, который отказывается распознаваться как устройство на моей машине.

Скриншот устройства и принтеры

Не нужно удалять драйверы, пробовать другие USB-слоты, подключать без питания, удалять LGS. Но как ни странно, он все еще работает на моем ноутбуке и на самом xbox.

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

Конечно же:

скриншот диспетчера устройств

Вот где я нашел этот пост. Некоторые умные люди исправили эту проблему для себя в Linux, используя программное обеспечение, созданное для того, чтобы попросить эти USB-модемы переключаться между их режимами установки драйвера-флэш-накопителя и режима интернет-подачи модема.
Приведенная выше информация пришла оттуда, и я не знаю значения '%b/%k' , я надеюсь, что это особенность usb_modeswitch, которая не нужна.

Теперь мне просто нужно, чтобы он работал в Windows.
Спасибо за любую помощь.

2 ответа2

2

ДА!

В итоге я выбрал pyusb, и потому что колесо - это HID-устройство, вам нужно перезаписать драйвер с помощью Zadig (libusb-win32 была единственной, которая работала). После получения библиотек динамической компоновки libusb-win32 и libusb1.0 для python (я не знаю, какие именно, я много чего пробовал), этот код сработал:

import usb.core
import usb.util
import usb.backend.libusb1
import sys

VENDOR_ID = 0x046D
PRODUCT_ID = 0xC261

BACKEND = usb.backend.libusb1.get_backend(find_library=lambda x: "libusb-1.0.dll")


dev = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID, backend=BACKEND)

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

dev.write(1, '0f00010142'.decode("hex"))

успех

0

Я наткнулся на другой ответ. Если у вас есть Linux-машина VirtualBox, вы можете подключить USB-устройство через VirtualBox к компьютеру, а затем запустить usb_modeswitch . "Запоминающее устройство", содержащее драйверы, исчезнет, а само устройство появится в Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .