序で述べたように、
速度を要求されない 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> は参照しません。