gousbに戻ろう。
デバイスのオープンをして、Endpointを探そうとしている。
lsusbサンプルを見て、forでぐるぐる回して探そうとしていた。
が、この方式だと取得できるのはConfigではなくConfigDesc、InterfaceではなくInterfaceDesc、そしてEndpointではなくEndpointDescなのだ。
そして、DescからDescではない値がどうしても取得できそうにない。
forでrangeでぐるぐる回しているので、Descからではなくループしたindexからであれば(*Device)Config(cfgNum)や(*Config)Interface(num, alt)などを使えば取得できそうな気がする。
気がするのだが、なんかInterfaceがうまく取得できないのだ。
なんだろうねぇ。。。
別サンプルのrawreadは、ぐるぐる回さずに値を直接指定してEndpointなどを取得している。
これを使うと、確かにちゃんと取得ができていた。
同じように自分のところを書いてみるけど、やはりうまくいかない。
ということは、何か私にできていないことがあるはず。。。
見比べると、rawreadサンプルではSetAutoDetach(true)を呼んでいた。
私も呼んでみると、うまくいくではないか。
(*Device) SetAutoDetach(autodetach)はInterfaceでattachしたい場合にkernelから自動的にdetachし、Interfaceが終わったら自動的にkernelにattachし直す、というものらしい。
Deviceのオープン直後はデフォルトではfalseになっているそうだ。
確かに、busyっぽいエラーになっていた気がする。
であれば、kernelがNFCデバイスを認識するようになっているようだし、trueにしておくのが無難だろう。
kernelが使っていなければ、元に戻すものもないだろうし。
昔つくっていたlibusbを使ったサンプルも、もしかしたら今だと動かないのかもなぁ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。