2015/02/22

[libusb]Enumerationができていなかったのは、私が悪かった

前回、USB_NODE_CONNECTION_INFORMATION_EXのメモリ確保について書いたが、よくよく考えるとそれが原因ではないと思う。
もしメモリが足りないのだったら、APIがエラーを返すべきなのだ。
メモリが足りない→APIは未接続で返す、ということにはならないだろう。

 

デバッグ出力を追加して見ていったのだが、どうもNoDeviceConnectedで返しているときはVIDやPIDが0x0000になっていて、usbviewでNoDeviceConnectedを返しているタイミングと同じようだ。
libusb_open()で失敗しているのはこんな深いレベルじゃなくて、単に判定のしかたが足りてないだけか?
うわっ・・・私のEnumeration、甘過ぎ・・・?

 

こんな順番で、対象の機器を探していた。

  1. libusb_init()
  2. libusb_get_device_list()
  3. libusb_get_device_descriptor()
    1. VIDとPIDが一致するまで、ぐるぐる回す
    2. break
  4. libusb_open()

この4番でopenに失敗するとみなしていた。
しかし今回のデバイスは、デバイスマネージャーで見ると同じ名前で複数出てくる。
zadigでも、Interface0、Interface1、みたいに出てきていた。
だからかわからないが、最初にVIDとPIDが一致しただけで判断するのではだめなようだ。

  1. libusb_init()
  2. libusb_get_device_list()
  3. libusb_get_device_descriptor()
    1. VIDとPIDが一致するまで、ぐるぐる回す
      1. libusb_open()
      2. 成功したらbreak

こんな感じで、できた。
libusb、疑ってすまんかった。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。