SSブログ

OS X用GigE Visionカメラドライバ - その28 [OS X用GigE Vision]

抄訳の続き。訳はこれで終わり。やってて、めちゃフラストレーションが溜まった。次回からそのフラストレーションを解放することにして、とりあえずここでひと段落させる。

2.8.14  ConfRom、TextDesc、IntKey

1394カメラのDCAM規格はIEEE1212規格で決められたツリー風のデータ構造を持つ設定ROMを実装する。この主な目的はモデル名、ベンダ名。サポートされる標準版インターフェイス、DCAM標準のレジスタブロックのベースアドレスを知らせるためである。IEEE1212に準拠した設定ROMの特別なレイアウトに従って、これらのすべての情報にアクセスするためのConfRomノードを導入した。

.....DCAM(IIDC)カメラを使うつもりは無いのでこの部分は省略。......

2.8.15  DcamLockとSmartFeature

.....これもDCAM(IIDC)カメラ用なので省略。......

2.8.16  Port

Portオブジェクトはトランスポートレイヤに対して読み書きを投げるだけのプロキシである。しかし、PortプロキシはNodeのプロパティをすべて持っていることに注意。例えば「not present(存在しない)」ということもありえる。この場合は依存しているノードすべてに対してトランスポートレイヤのドライバがオープンされていないということを告げることになる。その結果、自動的に依存する機能はすべて存在しないということになる。他の例はユーザセットローダの実装である。ユーザセットがカメラ内部のフラッシュROMからロードされればノードグラフ内部のすべての機能が停止されなければならない。これは単にPortノードを停止するだけで実現される。ReadUserSetノードに接続された,Invalidatorを使って自動化できる。

もしトランスポートレイヤが最大のチャンクの長さや特別なアラインメント(クォドレット幅=4バイトなど)に制限があるとき、トランスポート例やの実装は最大の長さを持つチャンクの複数の呼び出しに分解したり、必要なアラインメントにあうように詰め物をするIPortインターフェイスをエミュレートする必要がある。

あるタイプのクォドレットベースのインターフェイスをサポートするために、<SwapEndianess>エレメントが導入されている。それがtrueの場合は、IPortインターフェイスを通じてGenICamにデータを渡すときにクォドレットをスワップしなければならない。

PortノードはNodeノードのエレメントとアトリビュートを継承している。さらに<ChunkID>エレメントを持つことができて、それはバッファの中のデータの塊(chunk)を特定するのに使う。このチャンクは仮想ポートに対応して、それは現実のデバイスへのアクセスではなく、メモリに存在するデータへのアクセスを与える。
<Port Name="Device" NameSpace="Standard">
  <ChunkID>4711</ChunkID>
</Port>
<ChunkID>エントリのなかでは<pChunkID>エントリを使ってChunkIDの値を他のノードから得ることができる。

チャンクポートは二つの64ビット整数の仮想レジスタを定義する。チャンクの先頭のメモリアドレスを示すINT_64MAXにあるCHUNK_BASE_ADDRESS_REGISTERである。INT64_MAX-15にあるCHUNK_LENGTH_REGISTERはトレイラ以外のチャンクの長さを示している。

チャンクポートはチャンクの後ろからのオフセットと解釈できるような負のアドレスも扱うことができる。レジスタノードがチャンクポートに対応していてチャンクが存在するとき、GetAddress()メソッドはチャンクの先頭からのアドレスを常に返す。

チャンクポートは<CacheChunkData>エレメントを持つことができて、それはYesかNoの値をとる。もしチャンクデータのキャッシュが有効であるとき、対応するバッファがなくなってもチャンクデータのコピーが保持される。

2.8.17  Group

<Group>エレメントは大きなカメラ設定ファイルを読みやすくする助けをする。このエレメントはノードのブロックをひとまとめにするのに使える。次の例のように。
<Category Name="Root">
  <pFeature>Analog</pFeature>
  <pFeature>Trigger</pFeature>
</Category>
<Group Comment="Analog section">
  <Category Name="Analog">
    <pFeature>Shutter</pFeature>
	<pFeature>Gain</pFeature>
	<pFeature>Offset</pFeature>
  </Category>
  <IntReg Name="Shutter">
    <!-- more elements -->
  </IntReg>
  <IntReg Name="Gain">
    <!-- more elements -->
  </IntReg>
  <IntReg Name="Offset">
    <!-- more elements -->
  </IntReg>
</Group>
<Group Comment="Trigger section">
  <!-- more elements -->
</Group>
典型的なXMLエディタはグループの内容を隠す(クロージャボタンで)ことができる。<Group>エレメントはCommentアトリビュートを持っていて、グループが閉じられているときにエディタに表示する。Groupはいくらでもネストすることができる。Groupはカメラの機能に対する意味を持っていない。カメラ設定ファイルが解釈されると、Groupは単に取り去られるだけである。

2.9  利用可能なインターフェイス

翻訳不要だが、それぞれのインターフェイスでどんな操作が可能なのかを疑似コードで書いてある。
明らかな間違いは直してある(規格書で放置するなよ。ありえんだろ、普通)。

2.9.1  IInteger

int64   GetValue();
void    SetValue(int64 newValue);
int64   GetMin();
int64   GetMax();
int64   GetInc();
ERepresentation getRepresentation();
string  GetUnit();
void    ImposeMin(int64 minValue);
void    ImposeMax(int64 maxValue);

2.9.2  IFloat

double  GetValue();
void    SetValue(double newValue);
double  GetMin();
double  GetMax();
bool    HasInc();
double  GetInc();
ERepresentation getRepresentation();
string  GetUnit();
void    ImposeMin(double minValue);
void    ImposeMax(double maxValue);

2.9.3  IString

string  GetValue();
void    SetValue(string newValue);
int64   GetMaxLength();

2.9.4  IEnumeration

string  GetStringValue();
void    SetStringValue(string newValue);
int64   GetIntValue();
void    SetIntValue(int64 newValue);
EnumEntryList GetEntries();

2.9.5  ICommand

void    Execute();
bool    IsDone();

2.9.6  IRegister

void    Get(uint8 *pBuffer, int64 Length);
void    Set(uint8 *pBuffer, int64 Length);
int64   GetAddress();
int64   GetLength();

2.9.7  ICategory

NodeList    GetFeatures();

2.9.8  IPort

void    Read(uint8 *pBuffer, int64 Address, int64 Length);
void    Write(uint8 *pBuffer, int64 Address, int64 Length);

2.9.9  ISelector

NodeList    GetSelectedFeatures();

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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