libusb10

もしかしたらドロップの原因が ugen + aio_read かもしれないなあと、libusb10/20のasync I/Oでの実装を試してみようとしたのだけど、。。。そもそもそこまでたどりつく前の、CONTROL_TRANSFERからうまくいかない。
ほんとは、nativeに近いだろうlibusb20で実装にしたいのだけど、サンプルコードが少なすぎて(src/usr.sbin/usbconfigくらいしかない?)、どうしていいのかさっぱり分からん。
というわけで、libusb互換のlibusb10を試してみる。が。
最初のCONTROL_TRANSFERは成功、2回目は失敗。LIBUSB_ERROR_BUSY?
libusb10のコードを追っかけていくと、結局libusb20のコードが呼び出されるのだけど、どうもlibusb20_tr_openしてるのにlibusb20_tr_closeしてないので、2回目がBUSY(is_opened==1)になってしまっているような気がする。
libusb10の中でlibusb20_tr_closeしているのは、libusb_clear_haltだけ。libusbでのサンプルを見ても、libusb_control_transferの後で、明示的にlibusb_clear_haltが必要とは思えないので、libusb10のバグでは?