2016-06-21 6 views
1

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 

答えて

2

(あなたも他のプロトコルを必要としない限り)PyUSBを使用しないでください。 HIDの管理は難しくありませんが、はるかに簡単な解決法があります。

HIDAPI is a C-libraryプロトコルを管理し、a Python wrapperも利用可能です。

また、接続時にHIDプロトコルを認識するオペレーティングシステムから制御を取り戻し、独自のドライバをインストールする必要がありません。

+0

ありがとうございます! あなたは正しいです:私はHIDだけが必要なので、PyUSBを実際に使用する必要はありません。 だから、私はhidapiを試してみます。 しかし、私はctrl_transferを使って適切にデータを送信するように管理しました。 – xquitz

+0

あなたはPyUSBを使うことができますが、余計な努力が必要です。私は私が教える大学でHIDAPIを使用しました。それはHIDを単なる形式にしています。 – jcoppens

関連する問題