SSブログ

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

とりあえず食中毒症状からは回復した。結局原因はよくわからない。わかったところでどうしようもないけど。

ということで抄訳の続き。あともうすこし。

2.8.7  Boolean

Booleanノードは<OnValue>エレメントにある整数を真に、<OffValue>エレメントにある整数を偽に設定する。BooleanノードはIBooleanインターフェイスを実装してNodeノードからエレメントとアトリビュートを継承する。次の例はこの機能をtriggerノードがGUIでチェックボックスとして表示できるようにするため使っている。
<Boolean Name="Trigger">
  <pValue>TriggerReg</pValue>
  <OnValue>1</OnValue>
  <OffValue>0</OffValue>
</Boolean>
<IntReg Name="TriggerReg">
  <Address>0x6789</Address>
  <Length>1</Length>
  <AccessMode>RW</AccessMode>
  <pPort>Device</pPort>
  <Sign>Unsigned</Sign>
  <Endianess>BigEndian</Endianess>
</IntReg>
Booleanノードの値は<pValue>エントリで参照される別のノードからか、あるいは<Value>エントリで初期化される定数からである。

2.8.8  Command

ICommandインターフェイスは、Executeメソッドを呼ぶことでコマンドを実行し、実行が終わったかどうかをIsDoneメソッドをポーリングすることで知る。

対応するCommandノードはNodeノードからエレメントとアトリビュートを継承する。
さらにCommandValueエレメントを持っていて、それは整定数を保持している。<pValue>エレメントで参照されるノードにそれを書き込む。コマンドの値を書き込むことがコマンドを実行することになる。IsDoneはコマンドの値を読んでコマンドの値と同じ値が返されない限り偽を返す。もそノードがWriteOnlyならIsDoneは常に真を返す。「フローティング」コマンドノードを可能にするためにpValueエレメントの代わりにValueエレメントも許される。CommandValueもpCommandValueを代わりにすることができる。コマンドがアクティブな間、ノードはPollingTimeの期限が切れるたびに無効化される。IsDoneの呼び出しでコマンドがアイドルになったことがわかればポーリングは停止する。コマンドが書き込みだけならポーリングはされない。

2.8.9  Float、FloatReg

IFloatインターフェイスはIInterfaceと似たような定義を持っている。ValueはMinimumとMaximumパラメータに制限されるが、整数と違ってIncrementはオプションとなっている。さらにIFloatは表示のためにUintを使用する。

FloatノードはIntegerノードと同じように制限パラメータとして<Value><Min><Max><Inc>かあるいは<pValue><pMin><pMax><pInc>を持つ。さらに<Representation>エレメントを持つことができ、その値はLinear、Logarithmic、PureNumberである。さらに文字列を保持する<Unit>エレメント、値としてAutomatic、Fixed、Scientificを持つ<DisplayNotation>エレメント、非負の<DisplayPrecision>を持つ。最後のふたつのエレメントはstdioアイテムに対応する。例を挙げる:
<Float Name="Exposure">
  <pValue>ExposureReg</pValue>
  <Min>0.02</Min>
  <Max>10.0</Max>
  <Unit>ms</Unit>
  <Representation>PureNumber</Representation>
  <DisplayNotation>Fixed</DisplayNotation>
  <DisplayPrecision>3</DisplayPrecision>
</Float>
Floatノードはマルチプレクサや値の表としても動作する。例を挙げる:
<Float Name="Multiplexer">
  <pIndex>Selector</pIndex>
  <pValueIndexed Index=”10”>SomeFloat1</pValue>
  <pValueIndexed Index=”20”>SomeFloat2</pValue>
  <ValueDefault>0</ ValueDefault>
</Float>

<Float Name="Table">
  <pIndex>Selector</pIndex>
  <ValueIndexed Index=”10”>100</Value>
  <ValueIndexed Index=”20”>200</Value>
  <pValueDefault>SomeNode</pValueDefault>
</Float>
<pIndex>エントリはIntegerノードを参照する。その値によってValueかあるいはpValueのように振る舞う<ValueIndexed><pValueIndexed>エントリが選択される。エントリを選択することはUnit、Representation、DisplayNotation、DisplayPrecisionのプロパティも転送されることに注意。

ふたつのエントリタイプは混合可能である。インデクス値がマッチしないときは、ValueDefault>|か\verbpValueDefault> - の値が使われる。

FloatRegノードはバイト境界のレジスタから浮動小数点数を抽出するのに使われる。FloatiRegノードはRegisterノードからエレメントを継承する。これは<Endianess>エレメントを持つ。Lengthは4バイト(単精度)あるいは8バイト(倍精度)である。数値フォーマットはIEEE754-1985である。

2.8.10  Enumeration、EnumEntry

Enumerationノードは名前をインデクス値に対応させ、IEnumerationインターフェイスを実装する。Enumerationノードは可能な{name,index}の組を表したEnumEntryのリストを保持する。EnumerationノードはエレメントとアトリビュートをNodeノードから継承する。さらに現在のインデクス値を表す<Value>エレメントとIIntegerインターフェイスに接続された<pValue>エレメントを追加で保持する。

次の例はカメラのカラーコード(色空間のことらしい)を表すEnumerationである。例えばColorCodeRegが1に設定されいると、カメラはMono16に設定される。
<Enumeration Name="ColorCode">
  <EnumEntry Name="Mono8">
    <Value>0</Value>
  </EnumEntry>
  <EnumEntry Name="Mono16">
    <Value>1</Value>
  </EnumEntry>
  <EnumEntry Name="YUV422">
    <Value>3</Value>
  </EnumEntry>
  <pValue>ColorCodeReg</pValue>
</Enumeration>

<IntReg Name="ColorCodeReg">
  <Address>0x1234</Address>
  <Length>1</Length>
  <AccessMode>RW</AccessMode>
  <pPort>Device</pPort>
  <Sign>Unsigned</Sign>
  <Endianess>BigEndian</Endianess>
</IntReg>
かなりしばしば、リストの中のEnumEntryのいくつかが一時的に利用不可で、従ってユーザに対して表示したくないことがある。これをGenICamで表すには、EnumEntryのサブノードとして、他のノードと一緒に<pIsImplemented><pIsAvailable>エレメントを持つことができる。

典型的には、実装としてはカメラ設定ファイルをプリプロセスしてEnumEntryごとに"EnumerationName_EnumEntryName"の名前を持つ独立したノードを作ることになる。EnumerationノードのなかでEnumEntryそのもののかわりに<pEnumEntry>エレメントに置き換えられる。もとのEnumEntryのオリジナルな名前は新しく作られた<EnumEntry>ノードの<Symbolic>エレメントにコピーされる。EnumEntryで表されたインデクス値はEnumEntryの<Value>エレメントにコピーされる。<pEnumEntry>エントリはマニュアルで設定されてはならない。

ときどき、EnumEntryのリストは数値のリストとして理解される。例えばEnumerationであるGinaListは{Low,Mean,High}の値を持つがこれは{1.0, 10.0 100.0}という値を持つFloatのエイリアスであるGainAbsを持つ。このことを表現するために、<EnumEntry>エレメントは対応する浮動小数点のエイリアスを保持した<NumericValue>エントリをサポートする。このエントリがない場合、デフォルトのNumericValueがEnumEntryの整数値である。EnumerationはXMLファイルの内部の浮動小数点ポインタ、すなわち<pValue>ポインタに参照されてもいい。現在のEnumEntryのNumericValueを読むとき検索される。

2.8.11  StringReg

string(たぶんNULL終端)はカメラのどこかのアドレス空間に置かれたASCII文字列である。stringはIStringインターフェイスを通じて表示される。下の例はStringRegノードを使ってカメラのモデル名を取得する方法である。
<StringReg Name="ModelName">
  <Address>0x1234</Address>
  <Length>128</Length>
  <AccessMode>RO</AccessMode>
  <pPort>Device</pPort>
</StringReg>
ModelNameはMULL文字を含めて最大で128バイトであると改訂している。IStringインターフェイスを通じして読み書きができる。

2.8.12  String (v1.1)

Stringノードは任意の文字列を保持するフローティングノードである。
<String Name="ModelName">
  <Value>This initializes the node’s value</Value>
</String>

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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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