next up previous contents
Next: CAMAC ブロック転送(ライト) Up: USB-CAMAC デバイスドライバの動作 Previous: CAMAC シングルアクション(ライト)

CAMAC ブロック転送(リード)

USB-CAMAC ライブラリから CAMAC 16ビットデータをブロック転送で読み込むために cdmaw() 関数をコールした後デバイスドライバでどのように処 理が行なわれるかを説明する. 例としてステーション #2 のスイッチレジスタ・モジュールを読 む場合を取り上げる. CAMAC NAF は (n,a,f) = (2,1,0) とする. またブロック 転送のモードは Q-Stop, Q-Ignore, Q-Repeat, Q-Scan を選択できる.

  1. アプリケーションから USB-CAMAC ライブラリの cdmaw(mode, naf, &buf, len, &retlen) をコールする.

  2. cdmaw() は コマンドに BLOCKW を指定してドライバの ioctl() 関数をコールする.
  3. ioctl() 関数では内部にある BLOCKW 処理ブロックへとぶ.
  4. BLOCKW 処理ブロックでは CAMAC NAF の F に依存した処理を行なう. この場合は f=0 なのでCAMAC データ読み込みブロックへとぶ.
  5. CAMAC データ読み込みブロックではデータ長を(len 2)バイトに 指定して scsi_read() 関数をよぶ.
  6. scsi_read() では send_cdb() により SCSI CDB を 3929 へ送る.
  7. 3929 からlen で指定したデータ長に達するまでデータ転送が行なわれ recv_data() により 3929 からデータを取得する.
  8. データおよび転送を行なったデータ長を cdmaw() の buf, retlen に返 す.


Kazuo Nakayoshi
Wed Jun 27 22:15:09 JST 2001