前回、USB_NODE_CONNECTION_INFORMATION_EXのメモリ確保について書いたが、よくよく考えるとそれが原因ではないと思う。
もしメモリが足りないのだったら、APIがエラーを返すべきなのだ。
メモリが足りない→APIは未接続で返す、ということにはならないだろう。
デバッグ出力を追加して見ていったのだが、どうもNoDeviceConnectedで返しているときはVIDやPIDが0x0000になっていて、usbviewでNoDeviceConnectedを返しているタイミングと同じようだ。
libusb_open()で失敗しているのはこんな深いレベルじゃなくて、単に判定のしかたが足りてないだけか?
うわっ・・・私のEnumeration、甘過ぎ・・・?
こんな順番で、対象の機器を探していた。
- libusb_init()
- libusb_get_device_list()
- libusb_get_device_descriptor()
- VIDとPIDが一致するまで、ぐるぐる回す
- break
- libusb_open()
この4番でopenに失敗するとみなしていた。
しかし今回のデバイスは、デバイスマネージャーで見ると同じ名前で複数出てくる。
zadigでも、Interface0、Interface1、みたいに出てきていた。
だからかわからないが、最初にVIDとPIDが一致しただけで判断するのではだめなようだ。
- libusb_init()
- libusb_get_device_list()
- libusb_get_device_descriptor()
- VIDとPIDが一致するまで、ぐるぐる回す
- libusb_open()
- 成功したらbreak
こんな感じで、できた。
libusb、疑ってすまんかった。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。