macamにUSBVisionを追加してみました。
とりあえず一通りの処理が流せるだけで、まだいろいろ調整が必要です。
ディスクリプタに500mAとありますが、実質は130mAくらいです。古いデバイスなので、けっこう大きいです。バスパワーのハブにつなぐと上手く動かないので、セルフパワーのハブにつなぎました。
以前は見つからなかったような気がするのですがNT1003-1のデーターシートがネットで手に入りました。
このチップはコントロール用のパイプ(1)と転送用のアイソクロナスなパイプ(2)があります。アイソクロナスなパイプは9つのインターフェースがあり、それぞれ転送バイト数が違います。
コントロール用のパイプはレジスタへのアクセスになり設定やステータス確認に使います。アイソクロナスなパイプはフレームデーター受信用で、ホスト側でバッファを用意してコミットするとデバイスがデータを送り始めます。
SAA7111の設定はI2Cでおこない、I2Cもコントロール用のパイプを使って処理を行います。
hxrさんのGenericDriverを継承して作ります。
SAA7111からNT1003はYUV422で16ビットでデータが送られます。それをNT1003はYUV422,yuv420,Compressのフォーマットでホストに送ります。
SAA7111はいきなり初期化したりするとおかしな状態になって動かなくなりました。
これのデバッグはstatusレジスタ(0x1f)が正しく変化しているかで確認しました。NTSCが入っていれば、CODE,FIDTが1でHLCKが0になります。また入っていなければ逆になります。
あとNT1003のstatusレジスタ(5)は0が有効なのですが、確認するタイミングで1だったりして、ちょっと待つ必要があります。参考にしたLinuxのコードはstatusレジスタのチェックがバグっていました。&としなければいけないところが&&になってます。!=で判定するのもよくないです。
ミスオペでコードを一行消してしまって、動かなくなって半日くらい悩みました。動くようになったら、ともかくgit commitすることですね。
デバイス回りのプログラミングでは綺麗にしてからcommitしようとか考えると動かなくなってる事もよくあります。
これをやってて気がついたのですが、echoFXさんというアメリカの会社がこのデバイス用の以前は売り物だったソフトを、昨年末にフリーにされていました。
ページの写真をみるとまったく同じモジュールがターゲットのようです。いろいろなところでOEMされていたのかもしれません。
以前こちらがmacamに突っ込んだem28xxのソフトもあるようです。
なかなか動く動くようにならなくて、モジュールが壊れてるかとも思ったのですが、このソフトで動作確認できたので、結構助かりました。
おそらく最近のMacOSでは動かなくなっていたのでフリーにしたのかもしれません。またどうやら、会社をたたんだような感じです。
こちら同様に最近のAppleには愛想が尽きたのかもしれません。