ioctl ファンクション

で述べたように、 速度を要求されない CAMAC オペレーション (LAM の enable/disable、バスの初期化等)は、 /dev/dc に ioctl コマンドを 発行する事によって行なわれます。 実際のプログラムのテンプレートとしては、 以下のようなものになります。

      #include <fcntl.h>
      #include <sys/types.h>
      #include <sys/wait.h>
      #include <unistd.h>
      #include "dc.h"

      int      fd , result ;
       ....
      fd = open ( "/dev/dc" , O_RDWR ) ;
      result = ioctl ( fd , DC_<func> , <arg> );
       ....
      close ( fd ) ;
DC_<func> に指定可能なシンボルは "dc.h" の中で 定義されています。 各々のコマンドの機能と <arg> の説明を以下に示します。 DC_INITIAL と DC_I を例外として、 <arg> にはポインタを渡す事に注意してください。
DC_INITIAL
CC/7x00 のクレートの選択と初期化を行ないます。 操作対象とするクレートの ディップスイッチ設定を予め確認し、 <arg> にクレート番号を入れて 呼び出してください (値参照です)。 指定できる値は、 CC/7000 の場合 0〜3、 CC/7700 の場合 0〜7 です。 マルチクレートの配線は少々厄介ですから、 通常は 0 で使う事しか無いと思います。 戻り値は 0 (ONLINE) または -1 (OFFLINE) です。
DC_Z
CAMAC バスに初期化信号 (Z) を送出します。 戻り値は 0 (success) または -1 (time out) です。 <arg> は参照しません。
DC_C
CAMAC バスにクリア信号 (C) を送出します。 戻り値は 0 (success) または -1 (time out) です。 <arg> は参照しません。
DC_I
CAMAC バスのインヒビット信号 (I) を ON (<arg>≠0) または OFF (<arg>=0) します (<arg> は参照です)。
DC_L_P
全モジュールの LAM 状況のビットパターンを、 long*<arg> に返します。 ビット 0 はステーションナンバー 1 のモジュールに対応します。
DC_L_E
LAM が立っているモジュールの中、 ステーションナンバーの最も小さいものの値を long*<arg> に返します。 LAM の立っているモジュールが無い時は 0 を返します。
DC_CYCLE
CAMAC ファンクションを実行します。 <arg> として渡されるのは、 camac.h の中で定義されている DCCycle という構造型の変数です。 例えば
       DCCycle  dcc ;
       ....
       dcc.n = 8 ; dcc.a = 0 ; dcc.f = 16 ;
       dcc.data = 0xffff ;
       result = ioctl ( fd , DC_CYCLE , &dcc ) ;
       
N=8, A=00xFFFF の値を書き込むオペレーションです。 戻り値は 0 (success) または -1 (failure) です。
DC_INTTST
動作テストのために割り込みルーチンをコールします。 <arg> は参照しません。
DC_INTON
割り込みを許可 (データ収集を開始) し、 割り込みカウンタを 0 にセットします。 割り込みカウンタは割り込み発生の度に +1 されます。 <arg> は参照しません。 データ収集の開始時に行うべき諸々の処理 (LAM の enable、output register 出力など) を与える dc_int_on() という 関数を呼び出します。 dc_int_on() は 割り込みルーチン記述ファイル "dc_int.c" で定義されますが、 詳しくは割り込みルーチンの説明を参照してください。
DC_INTOFF
割り込みを禁止 (データ収集を停止) します。 <arg> は参照しません。 データ収集の停止時に行うべき処理 (LAM の disable、output register 出力など) を与える dc_int_off() という 関数を呼び出します。 dc_int_off() は 割り込みルーチン記述ファイル "dc_int.c" で定義されますが、 詳しくは割り込みルーチンの説明を参照してください。
DC_INTCLR
割り込みカウンタやバッファポインタを全て 0 にセットします。 <arg> は参照しません。 通常は DC_INTON の前に実行するのが望まれます。
DC_INTCNT
割り込みカウンタの値を long*<arg> に返します。
DC_INTLOS
バッファに取り込まれなかった割り込みの回数を long*<arg> に返します (割り込みの発生頻度が非常に高くバッファが溢れる場合には、 割り込み処理がスキップされます)。
DC_INTEOF
バッファにデータの終了を示す区切り子 (0xFFFF) を書き込み、 データ待ちのプロセスが有ればフラッシュします。 データ書き込みプロセスにファイルクローズを合図するために使います。 <arg> は参照しません。

戻る