SSブログ

Mac用USBデバイス-64 Cocoaクラス [Mac用USBデバイス工作]

今日から具体的な実装を始める。とりあえずトップレベルのCocoaクラスのヘッダを考える。

Cocoaクラスの実装

クラスの名前は「IIDC」をつけることにする。 順に実装を考えてみる。まずカメラのクラスから。

IIDCCamera

カメラを表すクラスのインターフェイスを考える。
@interface IIDCCamera : NSObject {
    io_service_t            iidcDevice;
    IOFireWireLibDeviceRef  deviceInterface;
    UInt32                  commandBase;
    
    UInt32                  isochChannel;
}
    
- (id)initWithDevice:(io_service_t)device;

- (BOOL)isSameDevice:(io_service_t)device;
....
io_iterator_tから返ってきたio_service_tをもらって初期化する。カメラのオブジェクトはそれを保持する。これからデバイスインターフェイスをとってくるのはこのクラスの仕事で、I/O Kitを呼ぶことになる。commandBaseは、コマンドレジスタへのオフセットで、isochChannelはアイソクロナスチャンネルの値を保持する。アイソクロナスチャンネルというのはFireWireでのアイソクロナス転送は送り元や受け取り先のアドレスがパケットに乗らないので転送元を区別するための6ビット幅のチャンネル番号をつけることになっている。受け取り側はアドレスではなくこのチャンネル番号を見て送り元を特定する。

IIDCCameraクラスのisochChannelはバス上に他のIIDCカメラがあったときに衝突しないように、クラススタティックな変数から作って保持する。どうせ他のFireWireデバイスのアイソクロナスチャンネルは0だろうから大きい目の数字を使うことにすればいい。

isSameDeviceメソッドは、デバイスが外れたときに確認できるようにするためのもの。

その他に
- (NSArray *)supportedFormatsAndModes;

- (NSString *)currentFormatAndMode;
- (Float32)currentFrameRate;

- (void)setFormatAndMode:(NSString *)formatAndMode andFrameRate:(Float32)fRate;

- (NSDictionary *)cameraProperties;
- (NSArray *)cameraFeatures;    //  array of NSString(CFStringRef)

- (void)boundaryMinimum:(UInt32 *)min
             andMaximum:(UInt32 *)max
             forFeature:(NSString *)feature;
なんかのフォーマットやフィーチャを制御するためのメソッドを作っておかないといけない。

supportedFormatsAndModesはカメラがサポートしているフォーマットとモードを文字列の配列で返す。現在のフォーマットとモードはその中の一つを返す。フォーマットとモードを設定するメソッドはsupportedFormatsAndModesが返した配列の要素を選んで設定する。

フィーチャも文字列の配列として返す。文字列はIIDCの仕様書に定義されたフィーチャの名前を使う。もちろん物理デバイスをアクセスして実装されているフィーチャだけを選んで配列にする。

フィーチャはたくさんあるのでこの実装は簡単だけどすごく面倒になる。フィーチャの値が変更されると通知をポストする。全部のフィーチャに対して通知する必要があるかどうかは疑問なのでそれは後で考えることにする。

それと
- (void)startIsochTransfer;
- (void)stopIsochTransfer;
が必要。これが呼ばれるとデータ転送を始めたり止めたりするためのレジスタをアクセスする。これは直接呼ばれないで、Faucetオブジェクトが呼ぶためのもの。

こんな感じだろう。
nice!(0)  コメント(2)  トラックバック(0) 

nice! 0

コメント 2

川合工房

可展面の勉強ではお世話になりました川合工房でございます。おかげさまで切り折り紙も学問的に一歩先にすすめることができました。

このたび以下のような問題を作ってみました。
http://moon.ap.teacup.com/applet/kiriorigami/20100211/archive

 decafishさまには簡単すぎるかと思いますが、遊んでいただけると幸いです。このようなコメント欄での連絡申し訳ありません。

by 川合工房 (2010-02-11 21:55) 

decafish

コメントありがとうございます。レスポンスが遅くなって申し訳ありませんでした。
川合工房さんは造形と紙のテクスチャが美しいので、いつもほれぼれと見ていました。
問題の解答はわかりました。でもそれに答えるだけならまるで子供のお使いのようなので、僕なりの興味を反映させた話題をまとめたいと思います。
明日、もう一度見に来てください。よろしくお願いします。
by decafish (2010-02-14 21:32) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立02/10献立02/15 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。