Como enviar uma mensagem para um dispositivo USB

3

Eu preciso enviar um pequeno conjunto de bytes para um dispositivo USB, mas não sei como. Conheço o fornecedor e o ID do produto e a sequência de mensagens (mas preciso de ajuda para determinar se é uma cadeia ASCII ou hexadecimal).

Existe um software chamado usb_modeswitch que parece fazer isso, mas é apenas linux.
Eu vi um segmento em algum lugar onde as pessoas compilaram com o mingw, mas não o fizeram t fornecer seus binários e eu não estou confortável tentando isso sozinho.

Alguém mencionado usando WinUSB que seria ideal devido à sua inclusão nativa, mas eu não conheço a interface.
Eu tenho / posso obter o Visual Studio, mas eu preciso de ajuda para descobrir o que usar de coisas que eu vejo online .

Uma boa alternativa parece ser PyUSB com libusb-win32 (uma porta do que o usb_modeswitch usa).
Que poderia ser usado assim ao invés de escrever em vez de ler, mas eu ainda preciso saber se devo enviar apenas uma string ou tente converter em bytes de uma representação hexadecimal antes de chamar write() .

Esta é a informação:

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

Contexto em Se isso ajudar.

Eu tenho um Logitech G920 que está agindo, ele se recusa a ser reconhecido como dispositivo na minha máquina.

Nenhumaquantidadededriversdedesinstalação,tentandooutrosslotsusb,conectandosemenergia,removendotrabalhosLGS.Mas,porestranhoquepareça,aindafuncionanomeulaptopenopróprioxbox.

Estouprestesadesistirereformatarminhamáquinaquandomedeparocom este tópico :

Comcerteza:

Éondeeuencontrei este post . Algumas pessoas inteligentes corrigiram este problema para si próprios no linux, usando software feito para pedir a esses modems usb que alternassem entre seus modos de instalação de drivers, flashdrive e internet-modem. As informações acima vieram de lá e não sei o significado do '%b/%k' , espero que seja uma coisa específica do usb_modeswitch que não seja necessária.

Agora só preciso que funcione no Windows.
Obrigado por qualquer ajuda.

    
por Hashbrown 11.02.2017 / 10:08

1 resposta

1

SIM!

Acabei indo com pyusb, e como a roda é um dispositivo HID, você precisa sobrescrever o driver usando Zadig ( libusb-win32 foi o único que funcionou). Depois de obter os dois libusb-win32 e libusb1.0 bibliotecas de link dinâmico para o python usar (não sei qual, eu estava tentando muitas coisas) este é o código que funcionou:

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"))

    
por 11.02.2017 / 16:06