2020/03/20

[golang]gousbのSetAutoDetach()

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 件のコメント:

コメントを投稿

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

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