2014年2月28日金曜日

引越し

今まで暮らしてきたボロアパートの取り壊しが決まったのが去年の10月頃だった。
この2月のあたまから引越しの手続きとか連絡とかで精神的に余裕がなくなっている。
それでも久しぶりにこうやって書けるくらいだから、今はかなりマシな方かな。
両親と猫三匹、計6名。

昨日は主に衣類を運んできた。
今日はPCとか本とかそのあたり運ぼうかな。あとお仕事関連の機材、コインディスペンサーとレシートプリンターか。

2014年2月5日水曜日

USB

ここ一週間くらい再び USB 熱が出ててそればっかりになっております。
主に discriptor の読み方と UVC の扱い方なんかを再び調べてました。
Standard な discriptor の方はかなりわかった気になって、順にオブジェクトを定義していた。 Configuration discriptor に付随してくる IAD, Interface, Endpoint Discriptor には関連、階層構造があるんだけど、その理解はまだコードには活かせていない。記憶あるうちにやらなければ。

しかし、 UVC のプロトコルは未だに概観がつかめてない。
根詰めてドキュメント読む必要があるのは確かだけど、そのドキュメントに一切コードが無いのが辛い。 Windows のコードでも擬似コードでもいいから、何かあればなぁとかいうのが今の心境。あと英語が難しい。
幸運にも libuvc という UVC のための libusb wrapper があった。これは助かる。オープンソースバンザイ。

今さっき散歩しながら思ったのは libusb-1.0 には isochronous transfer の synchronous な API が無いので、なんか理由があるんだろうかと家について TODO ファイル覗いたらそこに
isochronous sync I/O?
とあるではないか。なんなんだこの疑問符は。

UVC は一旦お預けで、synchronous な isochronous  transfer について考えてみようと思う。

しかし少し考えると、データが isochronous (等時) で送られてくるわけだから普通の GUI アプリケーションの場合、main スレッドもしくは UI スレッドでデータ転送してそのたびに一々ブロックしてたら用を成さないってのは分かる。
例えば UVC のストリーミングは bulk と isochronous によってサポートされているけど、毎秒30回(30fps)で webcam の映像を描画しようとした場合、 UI はカチコチに固まり描画どころじゃなくなってしまうだろう。
多分そんなわけで synchronous な API は後回しにされたんだろう。