2

Pythonを使用して読み書きする方法を理解しようとしている、かなり単純なUSB HIDデバイスを持っています。PyWinUSB を使用して読み取ることができましたが、書き込もうとすると問題が発生します。それに書き込もうとすると、物事が爆発します。

例えば:

device = hid.HidDeviceFilter(vendor_id = 0x0003, product_id = 0x1001).get_devices()[0]

これはうまくいきます。次に、生データを読み取るために、これが今私が気にかけているすべてです (呪われたものに書き込む方法を理解できたら、それを処理します):

def readData(data):
    print(data)
    return None

これは問題なく動作します (実際、動作するのを見たときは非常に興奮しました)。したがって、次のようにデータ ハンドラーを割り当てます。

device.set_raw_data_handler(readData)

そして、ボタンを押すたびに、それは問題ありません。期待どおりにデータが送信されます。これは素晴らしいです!

デバイスに書き込みたいときに問題が発生します。サンプルの simple_send ファイルをテンプレートとして (これはおそらく最良の選択ではありませんでした)、次のようにします。

report = device.find_output_reports()[0]

これは、4 つのエントリを保持するディクショナリを含むレポート オブジェクトを返します。あれは正しいですか?output_reports オブジェクトを使用してデバイスに書き込みますか? レポート値をANYTHINGに設定してそうしようとしています:

report[<key>] = "pneumonoultramicroscopicvolcanoconiosis"
report.send()

これにより、解釈できない不快なエラーが返され続けます。

    Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    report.send()
  File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\core.py", line 1446, in send
    self.__prepare_raw_data()
  File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\core.py", line 1401, in __prepare_raw_data
    byref(self.__raw_data), self.__raw_report_size) )
  File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\winapi.py", line 382, in __init__
    raise helpers.HIDError("hidP error: %s" % self.error_message_dict[error_code])
HIDError: hidP error: data index not found

私は Windows 7 を使用しています。HID DLL エクスポート関数の参照を (最終的に) 見つけることができました。PyWinUSB ライブラリを使用する必要はありません (または、実際に使用したい場合もあります)。私はこれを機能させたいだけで、それほど難しいとは思われませんでしたが、そうでした.

誰かが私がここで間違っていたことを教えてもらえますか?

ありがとう。

また、エラー コールを追跡してみましたが、プログラムが終了する前にこれを作成しました。

4

2 に答える 2

3

これで動作させました

    buffer= [0xFF]*33 # 33 = report size + 1 byte (report id)
    buffer[0]=0x0 # report id
    buffer[1]=0xFE
    buffer[2]=0x00
    buffer[3]=0xFF
    out_report.set_raw_data(buffer)
    out_report.send()
    dev.close()
于 2013-01-21T18:29:14.240 に答える