OS X用GigE Visionカメラドライバ - その28 [OS X用GigE Vision]
抄訳の続き。訳はこれで終わり。やってて、めちゃフラストレーションが溜まった。次回からそのフラストレーションを解放することにして、とりあえずここでひと段落させる。
.....DCAM(IIDC)カメラを使うつもりは無いのでこの部分は省略。......
もしトランスポートレイヤが最大のチャンクの長さや特別なアラインメント(クォドレット幅=4バイトなど)に制限があるとき、トランスポート例やの実装は最大の長さを持つチャンクの複数の呼び出しに分解したり、必要なアラインメントにあうように詰め物をするIPortインターフェイスをエミュレートする必要がある。
あるタイプのクォドレットベースのインターフェイスをサポートするために、<SwapEndianess>エレメントが導入されている。それがtrueの場合は、IPortインターフェイスを通じてGenICamにデータを渡すときにクォドレットをスワップしなければならない。
PortノードはNodeノードのエレメントとアトリビュートを継承している。さらに<ChunkID>エレメントを持つことができて、それはバッファの中のデータの塊(chunk)を特定するのに使う。このチャンクは仮想ポートに対応して、それは現実のデバイスへのアクセスではなく、メモリに存在するデータへのアクセスを与える。
チャンクポートは二つの64ビット整数の仮想レジスタを定義する。チャンクの先頭のメモリアドレスを示すINT_64MAXにあるCHUNK_BASE_ADDRESS_REGISTERである。INT64_MAX-15にあるCHUNK_LENGTH_REGISTERはトレイラ以外のチャンクの長さを示している。
チャンクポートはチャンクの後ろからのオフセットと解釈できるような負のアドレスも扱うことができる。レジスタノードがチャンクポートに対応していてチャンクが存在するとき、GetAddress()メソッドはチャンクの先頭からのアドレスを常に返す。
チャンクポートは<CacheChunkData>エレメントを持つことができて、それはYesかNoの値をとる。もしチャンクデータのキャッシュが有効であるとき、対応するバッファがなくなってもチャンクデータのコピーが保持される。
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();
2015-03-07 21:12
nice!(0)
コメント(0)
トラックバック(0)
コメント 0