日食撮像システム 2019年 Ver.
Nikon SDK Sampleの改造:手抜きの承
サンプルプログラムのコードから私でも分かる流れ
 フォルダS-SDKD7200-004BF-ALLIN\Module\Win\Sample Program\Type0017_CtrlSample_Win\winにあるVC++のプロジェクト・Type0017Sample.vcxprojを前のページでコンパイルして、build¥Type0017Ctrl_x64_DebugにType0017Ctrl.exeというアプリケーションが出来ることを確認したが、その間、何がどう動いているかを見てみると、

  1. int main()で117行のdoループで%sに文字型変数が入ってくるのを待つ。これを数字化してwSelに渡し、"1"を入力すると1か0を選ばせる。ulSrcID(デフォルトで0が入っている)が0より大きければSourceCommandLoop()というサブルーチンに行く。もしwSel = 0ならループを抜け、プログラムを終了します。
  2. BOOL SourceCommandLoop()ではやはり211行から始まるdoループでやはり次に行くところを選ばせる。なので”4”を入力するとSetShootingMenu()に行く。もしwSel = 0ならループを抜け、int main()に戻る。
  3. BOOL SetShootingMenu()で4.Sensitivityを選ぶと、SDKにある感度を設定するコマンドkNkMAIDCapability_Sensitivityを設定する所に行く。もしwSel = 0ならループを抜け、BOOL SourceCommandLoop()に戻る。
  4. 次にはmain.cppを離れ、Function.cppに移行する。1185行から始まるBOOL SetEnumPackedStringCapability()でずらっと並ぶ数字の内どれかを選ぶところ、1226行のコメントに始まり、1230行で新しい感度に相当する数字を%sに読み込み、wSelに数字として代入されます。ISO感度が1/3段ステップだと、狙うのはISO200(1/500秒で連射する時) = ”4”とISO800(多段階露光する時) = ”10“となります。数字を入れると感度が変わり、BOOL SetShootingMenu()に戻ります。
ではどうすればよいか?
 SDKの流れで、手動で数字+Enterをしている時、プログラムではwSelに数字が入ってことが進められ、wSelが0ならばdoループを外れてサブルーチンを出る、という仕掛けになっています。という事で、main.cppの128行では、ulSrcID = 1として、後のwSelに命令になる数字を各ルーチンでプリセットして入力してやればいい、ということになります。
 各ルーチンにある
  scanf( "%s", buf );
  wSel = atoi( buf );
 をコメントアウトして、
  //scanf( "%s", buf );
  //wSel = atoi( buf );
  wSel = 1
 のようにしていきました。
 そして、int main()、BOOL SourceCommandLoop()、BOOL SetShootingMenu()の各ルーチンで数字の入力を待つdoループの終わる
  } while
 の前に wSel = 0として、ルーチンを終了させていきました。

 BOOL SetEnumPackedStringCapability()で、1231行でwSelを4にするか10にするかで、D7200のISO感度を200か800にする2つのアプリケーション(exeファイル)が出来ました。これをISO200.exe、ISO800.exeと名付けて、NkdPTP.dll、Type0017.md3とともに同じフォルダに置いておきます。

 こういう解説は出来ますが…この程度弄るだけでは到底オリジナルのコードとは言えないですから、ニコンさんの著作権になるのでファイルをダウンロードするのは不可と考え、ダウンロードは勘弁、とさせていただきます。
8.Dec.'18製作
     
inserted by FC2 system