序で述べたように、
速度を要求されない 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> にはポインタを渡す事に注意してください。
long
で *
<arg> に返します。
ビット 0 はステーションナンバー 1 のモジュールに対応します。
long
で *
<arg> に返します。
LAM の立っているモジュールが無い時は 0 を返します。
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=0
に
0xFFFF
の値を書き込むオペレーションです。
戻り値は 0 (success) または -1 (failure) です。
dc_int_on()
という
関数を呼び出します。
dc_int_on()
は
割り込みルーチン記述ファイル "dc_int.c"
で定義されますが、
詳しくは割り込みルーチンの説明を参照してください。
dc_int_off()
という
関数を呼び出します。
dc_int_off()
は
割り込みルーチン記述ファイル "dc_int.c"
で定義されますが、
詳しくは割り込みルーチンの説明を参照してください。
long
で
*
<arg> に返します。
long
で *
<arg> に返します
(割り込みの発生頻度が非常に高くバッファが溢れる場合には、
割り込み処理がスキップされます)。
(0xFFFF)
を書き込み、
データ待ちのプロセスが有ればフラッシュします。
データ書き込みプロセスにファイルクローズを合図するために使います。
<arg> は参照しません。