UPDATEPyUSBは私が適切にデータを送信するために、それを管理HIDレポート
を送ります。
data=[0x00, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0x00, 0x00]
result=dev.ctrl_transfer(0x21, 0x9, wValue=0x200, wIndex=0x00, data_or_wLength=data)
(これは、ここに掲載の回答に基づいています: link )同じ問題に遭遇したか、誰のために、私は次のコードを使用
しかし、私は詳細に理解していない、なぜ私は使用する必要があります
bmRequestType=0x21
bRequest=0x9
wValue=0x200
誰かが詳細に説明することができれば、私は感謝します。私はただ学びたい。
初期要求:
私は必死にPyUSBを使用してHIDデバイスへの簡単なレポートを送信しようとしています。
「SimpleHIDwrite」を使用して、デバイスが期待どおりに動作することを確認しました。私はこのデータを送信したい:
レポートID:00
データ:[00、04、04、FF、FF、FF、00、00]
sending data using SimpleHIDwrite
私は非常にPythonとUSBには新しく、私はdev.ctrl_transferやdev.writeを使ってこれを行う方法を理解することができません。
また、HIDデバイスにデータを送信する方法についていくつかの記事がありますが、問題の解決方法を理解できませんでした。
誰かがちょうど正しい方向に私を指すように親切にしてくださいできますか?
ありがとうございました!
# based on https://github.com/walac/pyusb/blob/master/docs/tutorial.rst
import usb.core
import usb.util
# find our device
# dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001)
dev = usb.core.find(idVendor=0x1781, idProduct=0x8c0)
# was it found?
if dev is None:
raise ValueError('Device not found')
dev.set_configuration()
cfg=dev[0]
intf=cfg[(0,0)]
ep=intf[0]
# dev.write(ep.bEndpointAddress, [0x00, 0x00,0x04,0x04,0xFF,0xFF,0xFF,0x00, 0x00], 1000)
# dev.ctrl_transfer(bmRequestType, bRequest, wValue=0, wIndex=0, data_or_wLength=None, timeout=None)
print("print ep")
print(ep)
print("print cfg")
print(cfg)
print("print intf")
print(intf)
そして、上記のスクリプトの結果はこれです::ここで
は、いくつかのより多くの詳細がある
print ep
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x8 (8 bytes)
bInterval : 0xa
print cfg
CONFIGURATION 1: 100 mA ==================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x2 Configuration
wTotalLength : 0x22 (34 bytes)
bNumInterfaces : 0x1
bConfigurationValue : 0x1
iConfiguration : 0x0
bmAttributes : 0x80 Bus Powered
bMaxPower : 0x32 (100 mA)
INTERFACE 0: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x1
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x0
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x8 (8 bytes)
bInterval : 0xa
print intf
INTERFACE 0: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x1
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x0
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x8 (8 bytes)
bInterval : 0xa
Process finished with exit code 0
ありがとうございます! あなたは正しいです:私はHIDだけが必要なので、PyUSBを実際に使用する必要はありません。 だから、私はhidapiを試してみます。 しかし、私はctrl_transferを使って適切にデータを送信するように管理しました。 – xquitz
あなたはPyUSBを使うことができますが、余計な努力が必要です。私は私が教える大学でHIDAPIを使用しました。それはHIDを単なる形式にしています。 – jcoppens