Apr 30, 2003
onlpara, Red Hat Linux 8.0 のシステムでのJavaRMIの実行
--- リモートマシンからの例題ソフトの実行 #4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(http://www-online.kek.jp/~inoue/para-CAMAC/
Work/CAMAC-JavaRMI4.html)
高エネルギー加速器研究機構
素粒子原子核研究所
物理、オンライングループ
井上 栄二
目的
JavaRMIとJNIを使って、リモートマシン onlpara から ターゲットマシン
onlsbc1上で例題ソフトを実行する。
(1). 構成
(2). 例題ソフトをサーバプログラムに組み込む
(3). 実行
--------------------------------------------------------------------
(1). 構成
テストに使用するマシンは onlpara と onlsbc1 である。 マシン onlpara は
DELL社製のPC, Dimension 4500 で、RedHat Linux 7.3 が動作している。 Java
のバージョンは1.4.1 である。 一方 onlsbc1 は、アドバンテク社のSBC、
PCM-9370である。 このSBCは、CAMACコントローラ上に装着されている。
SBC上で動作している OSは Red Hat Linux 8.0 で、コンパクトフラッシュ上に
構成してある。 Javaのバージョンは1.4.1_02 である。
(2). 例題ソフトをサーバプログラムに組み込む
CAMAC および トリガーロジックをテストするための例題ソフトは、すでに
安さんの手で作られている。 ここでは、この例題ソフトをサーバ側のJNIに
組み込んでリモートから実行できるようにする。
注.
現時点(Apr 28, 2003)ではまだデバッグ中のため、私の使用しているCAMACコン
トローラモジュールでは完全なCAMAC機能を利用できない。 したがって、ここ
でのテストはCAMACドライバは使用していない。 さらに、組み込んだ例題プロ
グラムおよびCAMACライブラリプログラムではドライバをコールしている部分は
コメントアウトしてある。 CAMACライブラリの一部の箇所では無条件にダミー
のデータを返すようにしてテストした。
(2-1). サーバ側、onlsbc1.kek.jp
(2-1-1). Javaのチェック
[inoue@onlsbc1 exam]$ java -version
java version "1.4.1_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06)
Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode)
[inoue@onlsbc1 exam]$
(2-1-2). 実行環境
[inoue@onlsbc1 exam]$ env
MANPATH=:/usr/java/man
HOSTNAME=onlsbc1.kek.jp
TERM=vt100
SHELL=/bin/bash
JLESSCHARSET=japanese
HISTSIZE=1000
SSH_CLIENT=130.87.153.116 32798 22
SSH_TTY=/dev/pts/0
USER=inoue
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;0
1:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.b
tm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:
*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*
.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;3
5:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
MAIL=/var/spool/mail/inoue
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/java/bin:/home/inoue/bin
INPUTRC=/etc/inputrc
PWD=/home/inoue/inoue/JavaRMI/camac/exam
LANG=ja_JP.eucJP
SHLVL=1
HOME=/home/inoue
LOGNAME=inoue
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/bin/env
OLDPWD=/home/inoue/inoue/JavaRMI/camac
[inoue@onlsbc1 exam]$
(2-1-3). コンパイル
[inoue@onlsbc1 exam]$ pwd
/home/inoue/inoue/JavaRMI/camac/exam
[inoue@onlsbc1 exam]$ ls -l
合計 108
-rw-rw-r-- 1 inoue inoue 233 4月 28 09:33 Client.java
-rw-r--r-- 1 inoue inoue 17456 4月 28 10:24 ClientImpl.java
-rw-rw-r-- 1 inoue inoue 1106 4月 28 09:52 Makefile
-rw-r--r-- 1 inoue inoue 296 4月 28 09:52 Server.java
-rw-r--r-- 1 inoue inoue 3058 4月 28 09:53 ServerImpl.java
-rw-rw-r-- 1 inoue inoue 46354 4月 28 10:10 cam.c
-rw-rw-r-- 1 inoue inoue 791 4月 28 10:15 cam.java
-rw-rw-r-- 1 inoue inoue 9096 4月 16 16:10 camac.c
-rw-r--r-- 1 inoue inoue 5425 4月 14 11:00 pcc.h
[inoue@onlsbc1 exam]$
(2-1-3a). Client.java
[inoue@onlsbc1 exam]$ cat Client.java
// File Name: Client.java
// Date: Apr 28, 2003
// Edited by: Eiji Inoue
public interface Client extends java.rmi.Remote {
public void camac_reply( int[] ia, int[] ib, int[] ic, int[] id, int ie)
throws java.rmi.RemoteException;
}
[inoue@onlsbc1 exam]$
(2-1-3b). ClientImpl.java
[inoue@onlsbc1 exam]$ cat ClientImpl.java
// File Name: ClientImpl.java
// Date: Apr 28, 2003
// Edited by: Eiji Inoue
import java.io.*;
import java.rmi.*;
import java.rmi.server.*;
class ClientImpl implements Client {
public static final int CMD_F16_A0_N3 = 0xE0030010;
public static final int CMD_F0_A0_N3 = 0xE0030000;
public static final char COM = ',';
public static final char QUIT = 'q';
public static final char EXAM = 'e';
public static final char STAR = 'g';
public static final char SIN = 's';
public static final char DMA = 'd';
public static int scmd[] = new int[100];
public static int sdat[] = new int[100];
static Server server;
public ClientImpl(String host) {
try{
UnicastRemoteObject.exportObject(this);
Server server = (Server)Naming.lookup("//"+host+"/Server");
server.register(this);
ClientImpl.server = server;
} catch ( Exception e ) {
System.err.println ("Failed to setup for RMI");
}
}
public void camac_exec( int l_count, int examN ) {
int[] s_cmd, s_dat;
int[] array_sizes = {4096*16};
int s_length;
int j;
try{
System.out.println(" RMI: Client side: ");
// to send int array
System.out.println(" RMI: Sent CAMAC command: array le
ngth =" + l_count );
for (int i = 0; i < l_count + 1; i++)
System.out.println(" ClientImpl.scmd[" + i + "]
= 0x" + Integer.toHexString( ClientImpl.scmd[i]) + ", ClientImpl.sdat[" + i + "
] = 0x" + Integer.toHexString( ClientImpl.sdat[i]));
ClientImpl.server.camac_cmd(ClientImpl.scmd, ClientImpl.
sdat, l_count, examN );
} catch ( Exception e ) {
System.err.println ("Failed to setup for RMI step2");
}
}
public void camac_reply( int[] c_reply, int[] d_reply, int[] rcmd_buf, i
nt[] rrpl_buf, int l_reply) throws RemoteException {
System.out.println();
System.out.println(" RMI: Received CAMAC reply: " + "array len
gth = " + l_reply);
for (int i = 0; i < l_reply + 1; i++) {
System.out.println(" c_reply[" + i + "] = 0x" + Integer
.toHexString(c_reply[i]) + ", d_reply[" + i + "] = 0x" + Integer.toHexString(d_r
eply[i]));
}
for (int i = 0; i < l_reply + 1; i += 2) {
System.out.println(" rcmd_buf[" + i + "] = 0x" + Intege
r.toHexString(rcmd_buf[i]) + ", rcmd_buf[" + ( i + 1 ) + "] = 0x" + Integer.toHe
xString(rcmd_buf[i+1]));
System.out.println(" rrpl_buf[" + i + "] = 0x" + Intege
r.toHexString(rrpl_buf[i]) + ", rrpl_buf[" + ( i + 1 ) + "] = 0x" + Integer.toHe
xString(rrpl_buf[i+1]));
}
keyincmd();
}
// TX
// +---------+-------+-------+-------+-------+---------------------------+
// | cmd | N | A | F | | 24-bit DATA |
// +---------+-------+-------+-------+-------+---------------------------+
//
// cmd Header pattern
// +-------------+---------+---------+---------+---------------+
// | | Packet | Packet | Packet | Single |
// | | Start | Period | End | Frame Packet |
// +-------------+---------+---------+---------+---------------+
// | CAMAC | | | | |
// | Operation | 0xC0 | 0x8C | 0xA0 | 0xE0 |
// +-------------+---------+---------+---------+---------------+
// | CAMAC | | | | |
// | LAM | -- | -- | -- | 0xE8 |
// +-------------+---------+---------+---------+---------------+
// | DAQ Trigger | | | | |
// | out | 0xD0 | 0x90 | 0xB0 | 0xF0 |
// +-------------+---------+---------+---------+---------------+
// | DAQ | | | | |
// | Interrupt | -- | -- | -- | 0xF8 |
// +-------------+---------+---------+---------+---------------+
//
// CAMAC N.
// 55 54 53 52 51 50 49 48 47 32
// +--------------------+----------------+-------------------+---------------+
// | - - - N16 | N8 N4 N2 N1 | | | | |
// +--------------------+----------------+-------------------+---------------+
//
// CAMAC A.
// 47 46 45 44 43 42 41 40 32
// +--------------------+-------------------+----------------+---------------+
// | - - - - | A8 A4 A2 A1 | | |
// +--------------------+-------------------+----------------+---------------+
//
// CAMAC F.
// 39 38 37 36 35 34 33 32
// +--------------------+----------------+------------------+----------------+
// | - - - F16 | F8 F4 F2 F1 |
// +--------------------+----------------+------------------+----------------+
//
public void cmdbld( int n, int a, int f, int l_count ){
// CAMAC Single action.
System.out.println ( " Make up CAMAC Command of Single action." );
System.out.println ( " Accepted data: n = " + n + ", a = " + a + ", f
= " + f + ", l_count = " + l_count );
a = a << 8;
n = n << 16;
ClientImpl.scmd [ l_count -1 ] = 0xE0000000 | ( 0x0000001F & f ) | ( 0x000
00F00 & a ) | ( 0x001F0000 & n );
System.out.println ( " ClientImpl.scmd [ " + ( l_count -1 ) + " ] = " +
ClientImpl.scmd [ l_count -1 ] + "(dec), " + "0x" + Integer.toHexString( ClientI
mpl.scmd [ l_count -1 ] ) + "(hex)" );
System.out.println ( " ClientImpl.sdat [ " + ( l_count -1 ) + " ] = " +
ClientImpl.sdat [ l_count -1 ] + "(dec), " + "0x" + Integer.toHexString( ClientI
mpl.sdat [ l_count -1 ] ) + "(hex)" );
// CAMAC LAM handling.
// CAMAC DMA action.
}
public void keyincmd() {
char cstr[] = new char[20];
char n[] = new char[4];
char a[] = new char[4];
char f[] = new char[4];
char kc[] = new char[4];
int c[] = new int[3];
int i, i2, count, loop, k_error;
int spoin, epoin;
int examN;
String cn = "0", ca = "0", cf = "0";
String tmp;
String nchk[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "
b", "c", "d", "e", "f" };
InputStream inStream = System.in;
InputStreamReader InData = new InputStreamReader ( inStream );
int s_flg = 0;
try{
spoin = 0;
epoin = 0;
loop = 2;
k_error = 0;
examN = 0;
System.out.println ( "" );
System.out.println ( " (1). Enter 'q' to quit." );
System.out.println ( " (2). Enter 'e' to execute an example program." )
;
System.out.println ( " (3). Enter 's' to set up Single action CAMAC com
mand");
// System.out.println ( " (4). Enter 'd' to set up DMA action CAMAC command");
System.out.println ( " (4). Enter 'g' to start up command execution." )
;
System.out.println ( "" );
while ( loop > 1 ) {
if ( k_error == 1 ) {
System.out.println ( "" );
k_error = 0;
}
// Execution command interpret.
System.out.print ( "Execution Command('q' or 'e' or 'g' or 's' or
'd') = ");
count = InData.read ( cstr, 0, 19 );
String str1 = new String ( cstr );
if ( QUIT == str1.charAt ( 0 ) ) {
s_flg = 2;
break;
} else if ( EXAM == str1.charAt ( 0 )) {
// example program execution;
System.out.println( " What's number of program which do you
want to execute ? --- default:[1] ");
System.out.println( " exam1:[1], exam2:[2], exam3:[3], exam4
:[4], exam5:[5], exam6:[6], exam21:[7], pio_write_read[8], read:[9], read_write:
[a], reg_dump:[b], write:[c], write_read:[d]");
System.out.print( " Number = " );
count = InData.read ( cstr, 0, 19 );
String str2 = new String ( cstr );
cn = str2.substring ( 0, 1 );
cn.getChars(0, 1, kc, 0);
try {
switch ( kc[0] ) {
case '1':
s_flg = 1;
examN = 1;
System.out.println( " Ok. Start up an example progr
am 1. " );
break;
case '2':
s_flg = 1;
examN = 2;
System.out.println( " Ok. Start up an example progr
am 2. " );
break;
case '3':
s_flg = 1;
examN = 3;
System.out.println( " Ok. Start up an example progr
am 3. " );
break;
case '4':
s_flg = 1;
examN = 4;
System.out.println( " Ok. Start up an example progr
am 4. " );
break;
case '5':
s_flg = 1;
examN = 5;
System.out.println( " Ok. Start up an example progr
am 5. " );
break;
case '6':
s_flg = 1;
examN = 6;
System.out.println( " Ok. Start up an example progr
am 6. " );
break;
case '7':
s_flg = 1;
examN = 7;
System.out.println( " Ok. Start up an example progr
am 21. " );
break;
case '8':
s_flg = 1;
examN = 8;
System.out.println( " Ok. Start up an example progr
am pio_write_read. " );
break;
case '9':
s_flg = 1;
examN = 9;
System.out.println( " Ok. Start up an example progr
am read. " );
break;
case 'a':
s_flg = 1;
examN = 0xa;
System.out.println( " Ok. Start up an example progr
am read_write.");
break;
case 'b':
s_flg = 1;
examN = 0xb;
System.out.println( " Ok. Start up an example progr
am reg_dump.");
break;
case 'c':
s_flg = 1;
examN = 0xc;
System.out.println( " Ok. Start up an example progr
am write.");
break;
case 'd':
s_flg = 1;
examN = 0xd;
System.out.println( " Ok. Start up an example progr
am write_read.");
break;
default:
break;
}
break;
} catch ( NumberFormatException e ) {
System.out.println( " NumberFormatExeception occurred !!
" );
System.out.println( "" );
}
} else if ( STAR == str1.charAt ( 0 )) {
if ( epoin == 0 ) {
s_flg = 5;
System.out.print ( " Command bufer is empty !!");
System.out.println ( "" );
continue;
} else {
// camacstart();
s_flg = 1;
examN = 0xe;
System.out.println( " Ok. Start up CAMAC execution. " );
break;
}
} else if ( SIN == str1.charAt ( 0 )) {
// Single action.
s_flg = 3;
} else if ( DMA == str1.charAt ( 0 )) {
// DNA action.
s_flg = 4;
System.out.println ( " DMA Action." );
} else {
s_flg = 5;
System.out.println ( " Unmanageable Action." );
continue;
}
tmp = str1.substring ( 0, count -1 );
System.out.println ( " Execution Command: " + tmp );
if ( s_flg == 4 ) {
// DMA mode & word count set up.
// Q stop, Q Ignore, Q request, Q scan.
System.out.println ( " DMA set up: " );
System.out.println ( " DMA set up: DMA mode: " );
System.out.println ( " DMA set up: DMA wor count: " );
}
// N,A,F CAMAC command set up.
System.out.print ( "CAMAC Command (N, A, F)(dec) = " );
count = InData.read ( cstr, 0, 19 );
String str = new String ( cstr );
// Single action set up.
i2 = 0;
for ( i = 0; i < str.length(); i++ ) {
if ( COM == str.charAt ( i ) ) {
c[ i2++ ] = i;
}
}
cn = str.substring ( 0, c[ 0 ] );
ca = str.substring ( c[ 0 ] +1, c[ 1 ] );
cf = str.substring ( c[ 1 ] +1, count-1 );
try{
int in = Integer.parseInt(cn, 10);
if ( ( in < 0 ) || ( in > 25 ) ) {
System.out.println ( " Command Error: Illegal value of N: O
ut of range !! " );
k_error = 1;
continue;
}
int ia = Integer.parseInt(ca, 10);
if ( ( ia < 0 ) || ( ia > 15 ) ) {
System.out.println ( " Command Error: Illegal value of A: O
ut of range !! " );
k_error = 1;
continue;
}
int inf = Integer.parseInt(cf, 10);
if ( ( inf < 0 ) || ( inf > 31 ) ) {
System.out.println ( " Command Error: Illegal value of F: O
ut of range !! " );
k_error = 1;
continue;
}
if ( ( inf >= 16 ) && ( inf <= 23 ) ) {
// データ入力要求
int datf = 0;
do {
System.out.print ( " Write Data(hex) = " );
count = InData.read ( cstr, 0, 19 );
str = new String ( cstr );
String cdat = str.substring ( 0, count -1 );
for ( i = 0; i < count -1; i++) {
String cdat1 = cdat.substring ( i, i + 1 );
// numerical check
for ( i2 = 0; i2 < 16; i2++ ) {
if ( cdat1.equals( nchk [ i2 ] ) ) {
datf = 0;
break;
}
datf = 1;
}
if ( datf == 1 ) {
System.out.println ( " Data error: Illegal character -
-- " + cdat1 + " !" );
System.out.println ( "" );
break;
}
}
if ( datf == 1) {
continue;
}
ClientImpl.sdat [ loop -1 ] = Integer.parseInt( cdat, 16);
System.out.println ( " 入力されたData: " + ClientImpl.sdat
[ loop -1 ] + "(dec), 0x" + Integer.toHexString( ClientImpl.sdat [ loop -1 ] ) +
"(hex)");
if ( ( ClientImpl.sdat [ loop -1 ] < 0 ) || ( ClientImpl.sdat
[ loop -1 ] > 0xffffff ) ) {
System.out.println ( " Data error: Out of range --- " +
ClientImpl.sdat [ loop -1 ] + " !" );
System.out.println ( "" );
datf = 1;
continue;
}
} while ( datf == 1 );
}
// CAMAC command set up.
cmdbld ( in, ia, inf, loop );
epoin++;
loop++;
System.out.println ( "" );
} catch (NumberFormatException e) {
System.out.println(" NumberFormatException occurred !!");
System.out.println ( "" );
}
}
// end of while loop
if ( s_flg == 1 ) {
camac_exec( loop -2, examN );
} else if ( s_flg == 2 ) {
System.out.println ( " Quited Program. Enter Ctl-C. " );
}
} catch ( IOException e ) {
System.out.println ( " IOException Error:" + e + " !");
}
}
public static void main(String argv[]) throws Exception{
String host = (argv.length == 1) ? argv[0] : "localhost";
ClientImpl obj = new ClientImpl(host);
obj.keyincmd();
}
}
[inoue@onlsbc1 exam]$
(2-1-3c). Server.java
[inoue@onlsbc1 exam]$ cat Server.java
// File Name: Server.java
// Date: Apr 28, 2003
// Edited by: Eiji Inoue
import java.rmi.*;
public interface Server extends java.rmi.Remote {
void register(Client aclient) throws java.rmi.RemoteException;
void camac_cmd(int[] ia, int[] ib, int ic, int id) throws RemoteExceptio
n;
}
[inoue@onlsbc1 exam]$
(2-1-3d). ServerImpl.java
[inoue@onlsbc1 exam]$ cat ServerImpl.java
// File Name: ServerImpl.java
// Date: Apr 28, 2003
// Edited by: Eiji Inoue
import java.rmi.*;
import java.rmi.server.*;
public class ServerImpl extends UnicastRemoteObject implements Server {
Client client;
static String serverName;
static int[] r_cmd, r_dat, cmd_buf, rpl_buf;
static int length;
static cam p;
static {
try {
serverName = java.net.InetAddress.getLocalHost().getHost
Name();
}catch(Exception e){
serverName = "localhost";
}
}
public ServerImpl() throws Exception {
super();
r_cmd = new int[4096*16];
r_dat = new int[4096*16];
cmd_buf = new int[4096*16];
rpl_buf = new int[4096*16];
p = new cam();
}
public void register (Client aclient) {
client = aclient;
}
public void camac_cmd(int[] cmd, int[] dat, int length, int examN) throw
s RemoteException{
System.out.println(" RMI: Server side: ");
System.out.println(" RMI: Received CAMAC command: " + "array length
= " + length);
for (int i = 0; i < length + 1; i++)
System.out.println(" cmd[" + i + "] = 0x" + Integer.toHexStr
ing(cmd[i]) + ", dat[" + i + "] = 0x" + Integer.toHexString(dat[i]));
ServerImpl.r_cmd = cmd;
ServerImpl.r_dat = dat;
ServerImpl.length = length;
//JNI
try{
System.out.println();
System.out.println(" JNI, Java side: before Native Call");
for (int i = 0; i < ServerImpl.length + 1; i++)
System.out.println(" ServerImpl.r_cmd[" + i + "] = 0x" + Integer.t
oHexString(ServerImpl.r_cmd[i]) + ", ServerImpl.r_dat[" + i + "] = 0x" + Integer
.toHexString(ServerImpl.r_dat[i]));
int sum = ServerImpl.p.cmdArray(ServerImpl.r_cmd, ServerImpl.r_dat, ServerIm
pl.cmd_buf, ServerImpl.rpl_buf, ServerImpl.length, examN);
// if ( examN != 0) {
ServerImpl.length = ServerImpl.cmd_buf[1] / 2;
// } else {
// ServerImpl.length = length;
// }
System.out.println();
System.out.println(" JNI, Java side: after Native Call" + " array length =
" + ServerImpl.length);
for (int i = 0; i < ServerImpl.length + 1; i++) {
// System.out.println(" ServerImpl.r_cmd[" + i + "] = 0x" + Integer
.toHexString(ServerImpl.r_cmd[i]) + ", ServerImpl.r_dat[" + i + "] = 0x" + Integ
er.toHexString(ServerImpl.r_dat[i]) + ", ServerImpl.cmd_buf[" + i + "] = 0x" + I
nteger.toHexString(ServerImpl.cmd_buf[i]) + ", ServerImpl.rpl_buf[" + i + "] = 0
x" + Integer.toHexString(ServerImpl.rpl_buf[i]));
}
client.camac_reply (ServerImpl.r_cmd, ServerImpl.r_dat, ServerImpl.cmd_b
uf, ServerImpl.rpl_buf, ServerImpl.length);
} catch ( Exception e ) {
System.err.println ("Failed to exec for camac");
}
//JNI end
}
public static void main(String argv[]) throws Exception {
//System.setSecurityManager(new RMISecurityManager());
ServerImpl obj = new ServerImpl();
Naming.bind("//"+serverName+"/Server", obj);
System.out.println("bind done");
}
}
[inoue@onlsbc1 exam]$
(2-1-3e). cam.java
[inoue@onlsbc1 exam]$ cat cam.java
// File name: cam.java
// Date: Apr 28, 2003
// Edited by: Eiji Inoue
//
//
// Parallel camac
// packet format of basic camac opeation
// TX
// +---------+-------+-------+-------+-------+---------------------------+
// | cmd | N | A | F | | 24-bit DATA |
// +---------+-------+-------+-------+-------+---------------------------+
//
// RX
// +---------+-------+-------+-------+-------+---------------------------+
// | rply | N | A | F | ST | 24-bit DATA |
// +---------+-------+-------+-------+-------+---------------------------+
public class cam {
public native int cmdArray(int j_cmd[], int j_dat[], int jrp_cmd[], int jrp_da
t[], int j_length, int j_examN);
static {
System.loadLibrary("MyImpOfcam");
}
}
[inoue@onlsbc1 exam]$
(2-1-3f). cam.c
[inoue@onlsbc1 exam]$ cat cam.c
// file name: cam.c
// Date: Apr 28, 2003
// Edited by: E.Inoue
//
// Parallel camac
// packet format of basic camac opeation
// TX
// +---------+-------+-------+-------+-------+---------------------------+
// | cmd | N | A | F | | 24-bit DATA |
// +---------+-------+-------+-------+-------+---------------------------+
//
// RX
// +---------+-------+-------+-------+-------+---------------------------+
// | rply | N | A | F | ST | 24-bit DATA |
// +---------+-------+-------+-------+-------+---------------------------+
#include
#include
#include
#include "cam.h"
// exam1.c, from here
#include
#include
#include
#include
#include
// #include
#include
#include
#include "pcc.h"
// to
#define BASE 0xE800
#define TX_DATA1REG BASE
#define TX_DATA2REG (BASE+4)
/* #define TX_STATUSREG (BASE+0x10) */
#define TX_STATUSREG (BASE+0x1c)
#define TXSTATUS_BUSY 0x10000
#define TXSTATUS_TIMEOUT 0x20000
#define RX_DATA1REG (BASE+0x20)
#define RX_DATA2REG (BASE+0x24)
/* #define RX_FIFOREG (BASE+0x30) */
#define RX_FIFOREG (BASE+0x3c)
#define CMD_F16_A0_N3 0xE0030010
#define CMD_F0_A0_N3 0xE0030000
// exam1.c, read.c, from here
//#define SWREG 4
#define SWREG 3
#define CC_READ 0
#define CC_WRITE 16
#define CC_COUNT 10
#define CC_COUNT1 20
#define BUF_LEN 1000*2
// to
int gen_command_packet(int *packet1, int *packet2, int n, int a, int f, int d
ata, int flag ) {
int packet = 0;
if( n >= 0 && (n <=23 | n==25) && a >= 0 && a <=15 && f >=0 && f <=31 ) {
packet = n;
packet <<= 8;
packet |= a;
packet <<=8;
packet += f;
switch (flag) {
case 0: // normal
packet |= 0x80000000;
break;
case 1: // start bit
packet |= 0xC0000000;
break;
case 2: // end bit
packet |= 0xA0000000;
break;
default:
packet |= 0xE0000000;
}
*packet1 = data & 0xFFFFFF;
*packet2 = packet;
} else
return -1;
return 0;
}
void dump_reg(struct pccreg *pccreg) {
// printf("Tx Data1 = %x\n", pccreg->TxData1);
// printf("Tx Data2 = %x\n", pccreg->TxData2);
printf("Tx Control = %x\n", pccreg->TxControl);
printf("Tx Status = %x\n", pccreg->TxStatus);
printf("Tx Address = %x\n", pccreg->TxAddress);
printf("Tx Preset Count = %x\n", pccreg->TxPresetCount);
printf("Tx Actual Count = %x\n", pccreg->TxActualCount);
printf("Tx Fifo Count = %x\n", pccreg->TxFifoCount);
// printf("Rx Data1 = %x\n", pccreg->RxData1);
// printf("Rx Data2 = %x\n", pccreg->RxData2);
printf("Rx Control = %x\n", pccreg->RxControl);
printf("Rx Status = %x\n", pccreg->RxStatus);
printf("Rx Address = %x\n", pccreg->RxAddress);
printf("Rx Preset Count = %x\n", pccreg->RxPresetCount);
printf("Rx Actual Count = %x\n", pccreg->RxActualCount);
printf("Rx Fifo Count = %x\n", pccreg->RxFifoCount);
printf("System = %x\n", pccreg->System);
}
int put_data( int fd, int *buf ) {
/* E.Inoue
if( ioctl(fd, PCCIOC_PUT_DATA, buf) == -1 ) {
printf("ioctl PCCIOC_PUT_DATA : error code = %d\n", errno);
return -1;
} else
*/
return 0;
}
int get_data( int fd, int *buf ) {
/* E.Inoue
if( ioctl(fd, PCCIOC_GET_DATA, buf) == -1 ) {
printf("ioctl PCCIOC_GET_DATA : error code = %d\n", errno);
return -1;
} else
*/
return 0;
}
JNIEXPORT jint JNICALL
Java_cam_cmdArray(JNIEnv *env, jobject obj, jintArray r_cmd, jintArray r_dat, ji
ntArray cmd_buf, jintArray rpl_buf, jint length1, jint examN)
{
int sum = 0;
jsize len1 = (*env)->GetArrayLength(env, r_cmd);
jint *c_cmd = (*env)->GetIntArrayElements(env, r_cmd, 0);
jsize len2 = (*env)->GetArrayLength(env, r_dat);
jint *c_dat = (*env)->GetIntArrayElements(env, r_dat, 0);
jsize len3 = (*env)->GetArrayLength(env, cmd_buf);
jint *ccmdbuf = (*env)->GetIntArrayElements(env, cmd_buf, 0);
jsize len4 = (*env)->GetArrayLength(env, rpl_buf);
jint *crplybuf = (*env)->GetIntArrayElements(env, rpl_buf, 0);
int loop1 = length1;
int ii, j, data, cmd, value;
int example = examN;
// exam1.c, exam2.c, exam21.c, exam3.c, exam4.c, exam5.c exam6.c, pio_write_read
.c, read.c, read_write.c from here
int fd, i, len;
int status, loop = 1;
int length = BUF_LEN;
int* cbuf = ccmdbuf + 2;
int* rbuf = crplybuf + 2;
int rply;
struct pccreg pccreg;
unsigned int i1, j1, k1;
int retlen;
int *w_buffer, *r_buffer;
int count, result;
int packet1, packet2;
struct pollfd pollfds;
int timeout = 5000;/* Timeout in msec. */
// to here.
printf ("\n JNI, C side: Received CAMAC command: ");
printf ("array length = %d\n", length1);
printf ("example number = %d\n", example);
switch ( example ) {
case 1:
// exam1.c, from here
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_cc_begin( ccmdbuf, 25, 0, 17, 0 )) == -1 ) { // Z
printf("gen_cc_begin error ...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 16, 0)) == -1 ) { // C
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 24, 0)) == -1 ) { // remove Inhibi
t
printf("gen_cc error...\n");
exit(0);
}
for ( i = 0; i < 10; i++ ) {
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0xFFFFFF);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0x555555);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0xAAAAAA);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
}
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, i);
status = gen_cc_end(ccmdbuf, SWREG, 0, CC_READ, 0);
if((status = cam_open( &fd, 0)) == -1) {
printf("cam_open error\n");
exit(0);
}
len = ccmdbuf[1];
// for(i = 0; i < len; i += 2)
for(i = 0; i < len; i += 2)
// printf("data = %x cmd = %x\n", cmdbuf[i+2], cmdbuf[i+3]);
printf("data = %x cmd = %x\n", ccmdbuf[i+2], ccmdbuf[i+3]);
for (i = 0; i < loop; i++)
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
cam_close( fd );
// length1 = ccmdbuf[1];
// to
break;
case 2:
// exam2.c, from here
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_cc_begin( ccmdbuf, 25, 0, 17, 0 )) == -1 ) { // Z
printf("gen_cc_begin error ...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 16, 0)) == -1 ) { // C
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 24, 0)) == -1 ) { // remove Inhibit
printf("gen_cc error...\n");
exit(0);
}
for ( i = 0; i < 10; i++ ) {
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0xFFFFFF);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0x555555);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0xAAAAAA);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
}
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, i);
status = gen_cc_end(ccmdbuf, SWREG, 0, CC_READ, 0);
if((status = cam_open( &fd, 0 )) == -1) {
printf("cam_open error\n");
exit(0);
}
len = ccmdbuf[1];
printf("len = %x\n", len);
// cbuf = cmdbuf+ 10;
rbuf = crplybuf+10;
// for(i = 0; i < len; i += 2)
// printf("data = %x cmd = %x\n", ccmdbuf[i+2], ccmdbuf[i+3]);
for(i = 0; i < len; i += 2)
printf("data = %x cmd = %x\n", ccmdbuf[i+2], ccmdbuf[i+3]);
for (i = 0; i < loop; i++) {
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = cam_exec_dma( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_dma error\n");
exit(0);
}
/* E.Inoue from here */
printf ("array length = %d\n", length1);
for( j = 0; j < len - 16; j +=16 ) {
printf("rbuf[%x] = %x\n", j, rbuf[j]&0xFFFFFF);
}
for( j = 0; j < 20; j +=1 ) {
printf("rbuf[%x] = %x\n", j, rbuf[j]&0xFFFFFF);
}
/* to here */
for( j = 0; j < len - 16; j +=16 ) {
if( (rbuf[j]&0xFFFFFF) != 0xFFFFFF) {
printf("j = %d : written data = %x read data = %x\n",
j, 0xFFFFFF, rbuf[j]&0xFFFFFF);
exit(0);
}
if( (rbuf[j+4]&0xFFFFFF) != 0) {
printf("j = %d : written data = %x read data = %x\n",
j, 0, rbuf[j]&0xFFFFFF);
exit(0);
}
if( (rbuf[j+8]&0xFFFFFF) != 0x555555) {
printf("j = %d : written data = %x read data = %x\n",
j, 0x555555, rbuf[j]&0xFFFFFF);
exit(0);
}
if( (rbuf[j+12]&0xFFFFFF) != 0xAAAAAA) {
printf("j = %d : written data = %x read data = %x\n",
j, 0xAAAAAA, rbuf[j]&0xFFFFFF);
exit(0);
}
}
}
cam_close( fd );
// to here.
break;
case 3:
// exam3.c, from here
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_cc_begin( ccmdbuf, 25, 0, 17, 0 )) == -1 ) { // Z
printf("gen_cc_begin error ...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 16, 0)) == -1 ) { // C
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 26, 0)) == -1 ) { // set Inhibit
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 24, 0)) == -1 ) { // remove Inhibit
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 1, 24, 0)) == -1 ) { // disable Interrup
t
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 1, 26, 0)) == -1 ) { // enable Interrupt
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 1, 16, 0xFFFFFF)) == -1 ) { // write int
errupt enable bits
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 1, 26, 0)) == -1 ) { // read interrupt e
nable bits
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 2, 26, 0)) == -1 ) { // set fast cycle
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc_end(ccmdbuf, 25, 2, 24, 0)) == -1 ) { // reset fast c
lcle
printf("gen_cc error...\n");
exit(0);
}
if((status = cam_open( &fd, 1 )) == -1) {
printf("cam_open error\n");
exit(0);
}
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
printf("number of reply frames : %d\n", crplybuf[1]/2);
printf("Z : data = %x rply = %x\n", rbuf[0], rbuf[1]);
printf("C : data = %x rply = %x\n", rbuf[2], rbuf[3]);
printf("set Inhibit : data = %x rply = %x\n", rbuf[4], rbuf[5]);
printf("remove Inhibit : data = %x rply = %x\n", rbuf[6], rbuf[7]);
printf("disable Interrupt : data = %x rply = %x\n", rbuf[8], rbuf[9]);
printf("enable Interrupt : data = %x rply = %x\n", rbuf[10], rbuf[11]);
printf("write Interrupt enable bits : data = %x rply = %x\n", rbuf[12], rb
uf[13]);
printf("read Interrupt enable bits : data = %x rply = %x\n", rbuf[14], rbu
f[15]);
printf("set fast cycle : data = %x rply = %x\n", rbuf[16], rbuf[17]);
printf("reset fast cyclc : data = %x rply = %x\n", rbuf[18], rbuf[19]);
cam_close( fd );
// to here.
break;
case 4:
// exam4.c, from here
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
if( (status = gen_daq_begin(ccmdbuf, DAQ_READ_STATUS)) == -1 ) { // read s
tatus
printf("gen_daq DAQ_READ_STATUS error...\n");
exit(0);
}
if( (status = gen_daq(ccmdbuf, DAQ_CLR_BUSYOUT)) == -1 ) { // clear busy o
ut
printf("gen_daq DAQ_CLR_BUSYOUT error...\n");
exit(0);
}
if( (status = gen_daq(ccmdbuf, DAQ_CLR_EVTCNT)) == -1 ) { // clear evnet c
ounter
printf("gen_daq DAQ_CLR_EVTCNT error...\n");
exit(0);
}
if( (status = gen_daq_end(ccmdbuf, DAQ_ENABLE_TRIGIN)) == -1 ) { // enable
trigger input
printf("gen_daq DAQ_ENABLE_TRIGIN error...\n");
exit(0);
}
if((status = cam_open( &fd, 1 )) == -1) {
printf("cam_open error\n");
exit(0);
}
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
printf("number of reply frames : %d\n", crplybuf[1]/2);
printf("read status : data = %x cmd = %x : data = %x rply = %x\n",
cbuf[0], cbuf[1], rbuf[0], rbuf[1]);
printf("clear busy out : data = %x cmd = %x : data = %x rply = %x\n",
cbuf[2], cbuf[3], rbuf[2], rbuf[3]);
printf("clear event counter : data = %x cmd = %x : data = %x rply = %x\n",
cbuf[4], cbuf[5], rbuf[4], rbuf[5]);
printf("enable trigger input : data = %x cmd = %x :data = %x rply = %x\n",
cbuf[6], cbuf[7], rbuf[6], rbuf[7]);
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
if( (status = gen_daq_packet( ccmdbuf, DAQ_CLR_BUSYOUT) ) == -1 ) {
printf("gen_daq_packet error ...\n");
exit(0);
}
for( i = 0; i < 10; i++) {
sleep(1);
if( (status = cam_read_pio( fd, &data, &rply )) < 0 ) {
printf("cam_read_pio error cod = %d\n", status);
exit(0);
}
printf("LAM frame : data = %x rply = %x\n", data, rply);
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
printf("Clear BusyOut : data = %x cmd = %x : data = %x rply = %x\n",
cbuf[0], cbuf[1], rbuf[0], rbuf[1]);
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
}
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
crplybuf[2] = crplybuf[3] = crplybuf[4] = crplybuf[5]= 0;
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
if( (status = gen_daq_begin( ccmdbuf, DAQ_READ_EVTCNT )) == -1 ) { // read
event counter
printf("gen_daq_begin error ...\n");
exit(0);
}
if( (status = gen_daq_end(ccmdbuf, DAQ_DISABLE_TRIGIN)) == -1 ) { // disab
le trigger input
printf("gen_daq_end DAQ_DISABLE_TRIGIN error...\n");
exit(0);
}
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
printf("number of reply frames : %d\n", crplybuf[1]/2);
printf("read event counter : data = %x cmd = %x : data = %x rply = %x\n",
cbuf[0], cbuf[1], rbuf[0], rbuf[1]);
printf("disable trigger input : data = %x cmd = %x : data = %x rply = %x\n
",
cbuf[2], cbuf[3], rbuf[2], rbuf[3]);
cam_close( fd );
// to here.
break;
case 5:
// exam5.c, from here
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_cc_begin( ccmdbuf, 25, 0, 17, 0 )) == -1 ) { // Z
printf("gen_cc_begin error ...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 16, 0)) == -1 ) { // C
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 24, 0)) == -1 ) { // remove Inhibit
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 1, 26, 0)) == -1 ) { // enable Interrupt
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 1, 16, 0xFFFFFF)) == -1 ) { // write int
errupt enable bits
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc_end(ccmdbuf, 25, 1, 0, 0)) == -1 ) { // read interrup
t enable bits
printf("gen_cc error...\n");
exit(0);
}
if((status = cam_open( &fd, 1 )) == -1) {
printf("cam_open error\n");
exit(0);
}
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
printf("number of reply frames : %d\n", crplybuf[1]/2);
printf("Z : data = %x rply = %x\n", rbuf[0], rbuf[1]);
printf("C : data = %x rply = %x\n", rbuf[2], rbuf[3]);
printf("remove Inhibit : data = %x rply = %x\n", rbuf[4], rbuf[5]);
printf("enable Interrupt : data = %x rply = %x\n", rbuf[6], rbuf[7]);
printf("write Interrupt enable bits : data = %x rply = %x\n", rbuf[8], rbu
f[9]);
printf("read Interrupt enable bits : data = %x rply = %x\n", rbuf[10], rbu
f[11]);
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_cc_packet( ccmdbuf, SWREG, 0, 26, 0 )) == -1 ) {
printf("gen_cc_begin error ...\n");
exit(0);
}
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
printf("number of reply frames : %d\n", crplybuf[1]/2);
printf("SW enable interrupt : data = %x rply = %x\n", rbuf[0], rbuf[1]);
for( i = 0; i < 10; i++ ){
sleep(1);
/* E.Inoue
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
dump_pccreg(&pccreg);
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_cc_packet( ccmdbuf, SWREG, 0, 14, 0 )) == -1 ) { // g
en interrupt
printf("gen_cc_begin error ...\n");
exit(0);
}
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
if( (status = cam_wait_lam( fd, crplybuf )) < 0 ) {
printf("cam_wait_lan error = %d \n", status );
exit(0);
}
printf("number of reply frames : %d\n", crplybuf[1]/2);
printf("LAM reply : data = %x rply = %x\n", rbuf[0], rbuf[1]);
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_cc_packet( ccmdbuf, SWREG, 0, 10, 0 )) == -1 ) { // c
lear interrupt
printf("gen_cc_begin error ...\n");
exit(0);
}
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
}
cam_close( fd );
// to here.
break;
case 6:
// exam6.c, from here
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
if( (status = gen_daq_end(ccmdbuf, DAQ_ENABLE_TRIGIN)) == -1 ) { // enable
trigger input
printf("gen_daq error...\n");
exit(0);
}
if((status = cam_open( &fd, 1 )) == -1) {
printf("cam_open error\n");
exit(0);
}
if( (status = cam_exec_pio( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_pio error\n");
exit(0);
}
printf("number of reply frames : %d\n", crplybuf[1]/2);
printf("enable trigger input : data = %x rply = %x\n", rbuf[8], rbuf[9]);
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_daq_init error...\n");
exit(0);
}
/* E.Inoue
if( ioctl( fd, PCCIOC_WAIT_TRIG, crplybuf ) < 0 ) {
printf("PCCIOC_WAIT_TRIG error code = %d\n", errno);
exit(0);
}
*/
cam_close( fd );
// to here.
break;
case 7:
// exam21.c, from here
if( (status = gen_init( length, ccmdbuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = gen_cc_begin( ccmdbuf, 25, 0, 17, 0 )) == -1 ) { // Z
printf("gen_cc_begin error ...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 16, 0)) == -1 ) { // C
printf("gen_cc error...\n");
exit(0);
}
if( (status = gen_cc(ccmdbuf, 25, 0, 24, 0)) == -1 ) { // remove Inhibit
printf("gen_cc error...\n");
exit(0);
}
for ( i = 0; i < 1; i++ ) {
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0xFFFFFF);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0x555555);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, 0xAAAAAA);
status = gen_cc(ccmdbuf, SWREG, 0, CC_READ, 0);
}
status = gen_cc(ccmdbuf, SWREG, 0, CC_WRITE, i);
status = gen_cc_end(ccmdbuf, SWREG, 0, CC_READ, 0);
if((status = cam_open( &fd, 0 )) == -1) {
printf("cam_open error\n");
exit(0);
}
len = ccmdbuf[1];
cbuf = ccmdbuf+ 10;
rbuf = crplybuf+10;
for (i = 0; i < loop; i++) {
// if((i%1000) == 0)
printf("loop = %d\n", i);
if( (status = gen_init( length, crplybuf )) == -1 ) {
printf("gen_cc_init error...\n");
exit(0);
}
if( (status = cam_exec_dma_seq( fd, ccmdbuf, crplybuf )) < 0 ) {
printf("cam_exec_dma error\n");
exit(0);
}
/*
for( j = 0; j < len - 20; j +=16 ) {
printf("data = %x %x %x %x\n",
rbuf[j], rbuf[j+1], rbuf[j+2], rbuf[j+3]);
printf("data = %x %x %x %x\n",
rbuf[j+4], rbuf[j+5], rbuf[j+6], rbuf[j+7]);
printf("data = %x %x %x %x\n",
rbuf[j+8], rbuf[j+9], rbuf[j+10], rbuf[j+11]);
printf("data = %x %x %x %x\n",
rbuf[j+12], rbuf[j+13], rbuf[j+14], rbuf[j+15]);
if( (rbuf[j]&0xFFFFFF) != 0xFFFFFF) {
printf("j = %d : written data = %x read data = %x\n",
j, 0xFFFFFF, rbuf[j]&0xFFFFFF);
exit(0);
}
if( (rbuf[j+4]&0xFFFFFF) != 0) {
printf("j = %d : written data = %x read data = %x\n",
j, 0, rbuf[j+4]&0xFFFFFF);
exit(0);
}
if( (rbuf[j+8]&0xFFFFFF) != 0x555555) {
printf("j = %d : written data = %x read data = %x\n",
j, 0x555555, rbuf[j+8]&0xFFFFFF);
exit(0);
}
if( (rbuf[j+12]&0xFFFFFE) != 0xAAAAAA) {
printf("j = %d : written data = %x read data = %x\n",
j, 0xAAAAAA, rbuf[j+12]&0xFFFFFF);
exit(0);
}
}
*/
}
cam_close( fd );
// to here.
break;
case 8:
// pio_write_read.c, from here.
count = CC_COUNT;
r_buffer = (int *)malloc(8);
w_buffer = (int *)malloc(8);
/* E.Inoue
fd = open("/dev/pcc0", O_RDWR);
if( fd == -1 ) {
printf("pcc: open error\n");
exit(0);
}
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
dump_reg(&pccreg);
for( i1 = 0; i1 < loop; i1++ ) {
j1 = i1&0xFFFFFF;
/* CC_WRITE*/
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, j1, -1)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[0] = packet1;
w_buffer[1] = packet2;
//printf("packet1 = %x packet2 = %x\n", packet1, packet2);
status = put_data(fd, w_buffer);
status = get_data(fd, r_buffer);
/* CC_READ */
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, -1)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[0] = packet1;
w_buffer[1] = packet2;
//printf("packet1 = %x packet2 = %x\n", packet1, packet2);
status = put_data(fd, w_buffer);
status = get_data(fd, r_buffer);
r_buffer[0] &= 0xFFFFFF;
/* E.Inoue
if( j1 != r_buffer[0] ) {
printf("loop = %x : written data = %x : read data = %x\n", i1, j1, r_
buffer[0]);
exit(0);
}
*/
}
/* E.Inoue
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
dump_reg(&pccreg);
/* E.Inoue
close(fd);
*/
// to here.
break;
case 9:
// read.c, from here.
count = CC_COUNT1;
r_buffer = (int *)malloc(100*8);
// r_buffer = (int *)malloc(count*8);
w_buffer = (int *)malloc(count*8);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, 0xFFFFFF, 1)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[0] = packet1;
w_buffer[1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[2] = packet1;
w_buffer[3] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
for ( i1 = 4 ; i1 < (CC_COUNT-2)*2; i1 += 4) {
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, i1, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1] = packet1;
w_buffer[i1+1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1+2] = packet1;
w_buffer[i1+3] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
}
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, 0x555555, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1] = packet1;
w_buffer[i1+1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 2)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1+2] = packet1;
w_buffer[i1+3] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
/* E.Inoue
fd = open("/dev/pcc0", O_RDWR);
if( fd == -1 ) {
printf("open error...\n");
exit(0);
}
*/
/*
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
// dump_reg(&pccreg);
length = count*8;
for(i1 = 0; i1 < loop; i1++) {
/* E.Inoue
retlen = read(fd, r_buffer, length);
*/
// printf("retlen = %d\n", retlen);
/*
for(j1 = 0; j1 < count*2; j1++) {
if( w_buffer[j1] != r_buffer[j1] ) {
printf("data error : loop = %d, i = %d\n", loop, i1);
printf("written data read data\n");
for(k1 = i1; k1 < 10; k1++)
printf("%x %x\n", w_buffer[k1], r_buffer[k1]);
free(r_buffer);
free(w_buffer);
close(fd);
exit(0);
}
r_buffer[i1] = 0;
}
*/
// for(k = 0; k < 20; k += 2)
// printf("written data : %x %x\n", w_buffer[k], w_buffer[k+1]);
// for(k = 0; k < 20; k += 2)
// printf("read data : %x %x\n", r_buffer[k], r_buffer[k+1]);
if(!(i1 % 10000))
printf("loop = %d\n", i1);
}
/*
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
// dump_reg(&pccreg);
/* E.Inoue
close(fd);
*/
// to here.
break;
case 0xa:
// read_write.c. from here
r_buffer = (int *)malloc(count*8);
w_buffer = (int *)malloc(count*8);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, 0xFFFFFF, 1)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[0] = packet1;
w_buffer[1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
w_buffer[2] = packet1;
w_buffer[3] = packet2;
for ( i1 = 4 ; i1 < (CC_COUNT-2)*2; i1 += 4) {
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, i1, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1] = packet1;
w_buffer[i1+1] = packet2;
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1+2] = packet1;
w_buffer[i1+3] = packet2;
}
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, 0x555555, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1] = packet1;
w_buffer[i1+1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 2)) < 0 ) {
printf("Command error...\n");
exit(0);
}
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
w_buffer[i1+2] = packet1;
w_buffer[i1+3] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
/* E.Inoue
// fd = open("/dev/pcc0", O_RDWR|O_NONBLOCK);
fd = open("/dev/pcc0", O_RDWR);
if( fd == -1 ) {
printf("open error...\n");
exit(0);
}
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
dump_reg(&pccreg);
pollfds.fd = fd;
pollfds.events = POLLIN;/* Wait for CAMAC read */
count = CC_COUNT;
length = count*8;
for(i1 = 0; i1 < loop; i1++) {
// retlen = read(fd, r_buffer, length);
/* E.Inoue
retlen = write(fd, w_buffer, length);
*/
printf("retlen of write = %d\n", retlen);
/* E.Inoue
result = poll (&pollfds, 1, timeout);
*/
switch (result) {
case 0:
printf ("timeout\n");
break;
case -1:
perror ("poll");
exit (1);
default:
for(j1 = 0; j1 < count*2; j1 += 2) {
if( (w_buffer[j1]&0xFFFFFF) != (r_buffer[j1]&0xFFFFFF) ) {
printf("data error : loop = %d, i = %d\n", loop, i1);
printf("written data read data\n");
for(k1 = j1; k1 < 10; k1++)
printf("%x %x\n", w_buffer[k1], r_buffer[k1]);
free(r_buffer);
free(w_buffer);
close(fd);
/* E.Inoue
exit(0);
*/
}
r_buffer[i1] = 0;
}
}
if(!(i1 % 10000))
printf("loop = %d\n", i1);
}
/* E.Inoue
close(fd);
*/
// to here.
break;
case 0xb:
// reg_dump.c, from here
/* E.Inoue
if( (fd = open("/dev/pcc0", O_RDWR)) == -1 ) {
printf("pcc0 open error,,,\n");
exit(0);
}
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
dump_reg(&pccreg);
/* E.Inoue
close(fd);
*/
// to here.
break;
case 0xc:
// write.c, from here
count = CC_COUNT1;
w_buffer = (int *)malloc(CC_COUNT1*8);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, 0xFFFFFF, 1)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[0] = packet1;
w_buffer[1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
w_buffer[2] = packet1;
w_buffer[3] = packet2;
for ( i1 = 4 ; i1 < (CC_COUNT1-2)*2; i1 += 4) {
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, i1, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1] = packet1;
w_buffer[i1+1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1+2] = packet1;
w_buffer[i1+3] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
}
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, 0x555555, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1] = packet1;
w_buffer[i1+1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 2)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1+2] = packet1;
w_buffer[i1+3] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
/* E.Inoue
if( (fd = open("/dev/pcc0", O_RDWR)) == -1 ) {
printf("pcc0 open error,,,\n");
exit(0);
}
*/
/*
if( ioctl(fd, PCCIOC_RESET) == -1 ) {
printf("ioctl PPCIIOC_RESET error...\n");
exit(0);
}
*/
/* E.Inoue
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
// dump_reg(&pccreg);
length = count*8;
for(i1 = 0; i1 < loop; i1++) {
/* E.Inoue
retlen = write(fd, w_buffer, length);
*/
// printf("retlen = %d\n", retlen);
}
/*
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
// dump_reg(&pccreg);
close(fd);
*/
// to here.
break;
case 0xd:
// write_read.c, from here
r_buffer = (int *)malloc(count*8);
w_buffer = (int *)malloc(count*8);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, 0xFFFFFF, 1)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[0] = packet1;
w_buffer[1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
w_buffer[2] = packet1;
w_buffer[3] = packet2;
for ( i1 = 4 ; i1 < (CC_COUNT-2)*2; i1 += 4) {
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, i1, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1] = packet1;
w_buffer[i1+1] = packet2;
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1+2] = packet1;
w_buffer[i1+3] = packet2;
}
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_WRITE, 0x555555, 0)) < 0 ) {
printf("Command error...\n");
exit(0);
}
w_buffer[i1] = packet1;
w_buffer[i1+1] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
if( (status = gen_command_packet(&packet1, &packet2,
SWREG, 0, CC_READ, 0, 2)) < 0 ) {
printf("Command error...\n");
exit(0);
}
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
w_buffer[i1+2] = packet1;
w_buffer[i1+3] = packet2;
printf("packet1 = %x packet2 = %x\n", packet1, packet2);
/* E.Inoue
fd = open("/dev/pcc0", O_RDWR);
if( fd == -1 ) {
printf("open error...\n");
exit(0);
}
if( ioctl(fd, PCCIOC_DUMP_REGISTERS, &pccreg) == -1 ) {
printf("ioctl PCCIOC_DUMP_REGISTERS error...\n");
exit(0);
}
*/
printf(" E.Inoue : check before dump_reg()\n");
dump_reg(&pccreg);
printf(" E.Inoue : check after dump_reg()\n");
count = CC_COUNT;
length = count*8;
for(i1 = 0; i1 < loop; i1++) {
/* E.Inoue
retlen = write(fd, w_buffer, length);
if( retlen < 0) {
printf("write error return code = %d...\n", errno);
return errno;
}
*/
/* E.Inoue
retlen = read(fd, r_buffer, length);
if( retlen < 0) {
printf("read error return code = %d...\n", errno);
return errno;
}
*/
/*
printf("retlen of write = %d\n", retlen);
for(j1 = 0; j1 < count*2; j1 += 2) {
if( (w_buffer[j1]&0xFFFFFF) != (r_buffer[j1]&0xFFFFFF) ) {
printf("data error : loop = %d, i = %d\n", loop, i1);
printf("written data read data\n");
for(k1 = j1; k1 < 10; k1++)
printf("%x %x\n", w_buffer[k1], r_buffer[k1]);
free(r_buffer);
free(w_buffer);
close(fd);
exit(0);
}
r_buffer[i1] = 0;
}
*/
if(!(i1 % 10000))
printf("loop = %d\n", i1);
}
/* E.Inoue
close(fd);
*/
// to here.
break;
case 0xe:
// camac Single action from remote machine, from here.
ccmdbuf[1] = length1 * 2;
for (i=1; i < length1 +2; i++) {
printf(" c_cmd[%d] = 0x%x, c_dat[%d] = 0x%x\n", i, c_cmd[i], i, c_
dat[i]);
}
if( iopl(3) ){
printf("can not change the privilege level\n");
exit(0);
}
printf("\n JNI, C side: CAMAC access\n");
for( i = 1; i < loop1 + 1; i++) {
switch (c_cmd[i] & 0x00000018) {
case 0x00000010 :
// CAMAC Write
// 送信可能状態になるまで待つ
value = inl(TX_STATUSREG);
while (value & TXSTATUS_BUSY) {
if (value & TXSTATUS_TIMEOUT) break;
value = inl(TX_STATUSREG);
}
// camac writeコマンド&データをセットして、PCIレジスタに書き込む
data = c_dat[i] & 0x00ffffff;
outl(data, TX_DATA1REG);
outl(CMD_F16_A0_N3, TX_DATA2REG);
printf(" camac write data: data = 0x%x\n", data);
// camac応答が読み出し可能状態になるまで待つ
value = 0;
do {
value = inl(RX_FIFOREG);
// for PCI ROM of new version
// value = value >> 24;
} while( value < 2 );
// camacからの受信用レジスタを読んで camacからの応答を得る
data = inl(RX_DATA1REG);
cmd = inl(RX_DATA2REG);
printf(" camac write command reply: cmd = 0x%x : data = %x\
n", cmd, data);
c_cmd[i] = cmd;
c_dat[i] = data;
break;
case 0x00000000 :
// CAMAC Read
// 送信可能状態になるまで待つ
value = inl(TX_STATUSREG);
while (value & TXSTATUS_BUSY) {
if (value & TXSTATUS_TIMEOUT) break;
value = inl(TX_STATUSREG);
}
// camac readコマンド&データをセットして、PCIレジスタに書き込む
outl(CMD_F0_A0_N3, TX_DATA2REG);
// camac応答が読み出し可能状態になるまで待つ
value = 0;
do {
value = inl(RX_FIFOREG);
// for PCI ROM of new version
// value = value >> 24;
} while( value < 2);
// camacからの受信用レジスタを読んで camacからの応答を得る
data = inl(RX_DATA1REG);
cmd = inl(RX_DATA2REG);
data = 0xffffff & data;
ii = 0xffffff & c_dat[i];
printf(" camac read command reply: cmd = 0x%x : data = 0x%x
\n", cmd, data);
c_cmd[i] = cmd;
c_dat[i] = data;
break;
default :
// Default
break;
}
}
break;
default:
break;
}
(*env)->ReleaseIntArrayElements(env, r_cmd, c_cmd, 0);
(*env)->ReleaseIntArrayElements(env, r_dat, c_dat, 0);
(*env)->ReleaseIntArrayElements(env, cmd_buf, ccmdbuf, 0);
(*env)->ReleaseIntArrayElements(env, rpl_buf, crplybuf, 0);
return sum;
}
[inoue@onlsbc1 exam]$
(2-1-3g). camac.c
[inoue@onlsbc1 exam]$ cat camac.c
/*
* camac.c
*
* Copyright 2003 (C) 2003 Yoshiji Yasu .
*
*/
#include
#include
#include
#include
#include
#include
#include
#include "pcc.h"
#define FAST
#define MAX_LENGTH 128*1024/4 // limited by maximum length of kernel buffer
#define MAX_FIFO 200
void dump_pccreg(struct pccreg *pccreg) {
printf("Tx Control = %x\n", pccreg->TxControl);
printf("Tx Status = %x\n", pccreg->TxStatus);
printf("Tx Address = %x\n", pccreg->TxAddress);
printf("Tx Preset Count = %x\n", pccreg->TxPresetCount);
printf("Tx Actual Count = %x\n", pccreg->TxActualCount);
printf("Tx Fifo Count = %x\n", pccreg->TxFifoCount);
printf("Rx Control = %x\n", pccreg->RxControl);
printf("Rx Status = %x\n", pccreg->RxStatus);
printf("Rx Address = %x\n", pccreg->RxAddress);
printf("Rx Preset Count = %x\n", pccreg->RxPresetCount);
printf("Rx Actual Count = %x\n", pccreg->RxActualCount);
printf("Rx Fifo Count = %x\n", pccreg->RxFifoCount);
printf("System = %x\n", pccreg->System);
}
int gen_cam_command(int *data1, int *data2, int n, int a, int f, int data, int f
lag ) {
int cmd = 0;
if( n >= 0 && (n <=23 | n==25) && a >= 0 && a <=15 && f >=0 && f <=31 ) {
cmd = n;
cmd <<= 8;
cmd |= a;
cmd <<=8;
cmd += f;
switch (flag) {
case 0: // normal
cmd |= 0x80000000;
break;
case 1: // start bit
cmd |= 0xC0000000;
break;
case 2: // end bit
cmd |= 0xA0000000;
break;
default:
cmd |= 0xE0000000;
}
*data1 = data & 0xFFFFFF;
*data2 = cmd;
} else
return -1;
return 0;
}
int gen_daq_command(int *data1, int *data2, int func, int flag ) {
int cmd = 0;
if( func < 0 | func > 4 )
return -1;
cmd = func << 16;
switch (flag) {
case 0: // normal
cmd |= 0x90000000;
break;
case 1: // start bit
cmd |= 0xD0000000;
break;
case 2: // end bit
cmd |= 0xB0000000;
break;
default:
cmd |= 0xF0000000;
}
*data1 = 0;
*data2 = cmd;
return 0;
}
int gen_init( int length, int* buf ) {
if( length <= 0 | length > MAX_LENGTH )
return -1;
buf[0] = length;
buf[1] = 0;
return 0;
}
int gen_cc_begin( int *buf, int n, int a, int f, int data ) {
int status;
if( buf[0] == buf[1] )
return -2;
if ((status = gen_cam_command(&buf[buf[1]+2],&buf[buf[1]+3], n, a, f, data, 1)
) == -1)
return status;
buf[1] += 2;
return status;
}
int gen_daq_begin( int* buf, int cmd ) {
int status;
if( buf[0] == buf[1] )
return -2;
if( (status = gen_daq_command(&buf[buf[1]+2],&buf[buf[1]+3], cmd, 1 ) ) == -1
)
return status;
buf[1] += 2;
return status;
}
int gen_cc_end( int *buf, int n, int a, int f, int data ) {
int status;
if ( buf[0] == buf[1] )
return -2;
if ( (status = gen_cam_command(&buf[buf[1]+2],&buf[buf[1]+3], n, a, f, data, 2
)) == -1 )
return status;
buf[1] += 2;
return status;
}
int gen_daq_end( int* buf, int cmd ) {
int status;
if( buf[0] == buf[1] )
return -2;
if( (status = gen_daq_command(&buf[buf[1]+2],&buf[buf[1]+3], cmd, 2 ) ) == -1
)
return status;
buf[1] += 2;
return status;
}
int gen_cc( int *buf, int n, int a, int f, int data ) {
int status;
if( buf[0] == buf[1] )
return -2;
if ( (status = gen_cam_command(&buf[buf[1]+2],&buf[buf[1]+3], n, a, f, data, 0
)) == -1 )
return status;
buf[1] += 2;
return status;
}
int gen_daq( int* buf, int cmd ) {
int status;
if( buf[0] == buf[1] )
return -2;
if( (status = gen_daq_command(&buf[buf[1]+2],&buf[buf[1]+3], cmd, 0 ) ) == -1
)
return status;
buf[1] += 2;
return status;
}
int gen_cc_packet( int *buf, int n, int a, int f, int data ) {
int status;
status = gen_cam_command(&buf[buf[1]+2],&buf[buf[1]+3], n, a, f, data, -1);
buf[1] += 2;
return status;
}
int gen_daq_packet( int* buf, int cmd ) {
int status;
status = gen_daq_command(&buf[buf[1]+2],&buf[buf[1]+3], cmd, -1);
buf[1] += 2;
return status;
}
int chk_cc( int *buf ) {
int i, length, n, a, f;
int data;
length = buf[0];
if( length <= 0 | length > MAX_LENGTH )
return -1;
if ( length%2 )
return -1;
for (i = 1; i < length + 1; i += 2 ) {
data = buf[i];
if( i == 1 )
if( !(data & 0xC000 ) )
return -1;
if ( i == (length -1) )
if ( !(data & 0xA000) )
return -1;
if( !(data & 0x8000) )
return -1;
}
f = data & 0xF;
a = (data>>8) & 0xF;
n = (data>>16) & 0xF;
if( n <= 0 | (n > 23 && n != 25) | a < 0 | a > 15 | f < 0 | f > 31 )
return -1;
return 0;
}
int cam_open( int* fd, int flag ) {
/* E.Inoue
if( flag )
*fd = open("/dev/pcc0", O_RDWR|O_NONBLOCK);
else
*fd = open("/dev/pcc0", O_RDWR);
if( fd < 0 )
return -1;
else
*/
return 0;
}
void cam_close( int fd ) {
/* E.Inoue
close(fd);
*/
}
int cam_read_pio( int fd, int* data, int* rply ) {
int buf[2], status;
/* E.Inoue
if( ioctl(fd, PCCIOC_GET_DATA, buf) < 0 ) {
// printf("ioctl-- get data error\n");
return errno;
}
*/
*data = buf[0];
*rply = buf[1];
return 0;
}
int cam_write_pio( int fd, int data, int cmd ) {
int buf[2], status;
buf[0] = data;
buf[1] = cmd;
/* E.Inoue
if( (status = ioctl(fd, PCCIOC_PUT_DATA, buf)) < 0 ) {
// printf("ioctl-- put data error fd = %d status = %d\n", fd, status);
return errno;
}
*/
}
int cam_exec_pio( int fd, int* cmdbuf, int* rplybuf ) {
int *cbuf = cmdbuf+2;
int *rbuf = rplybuf+2;
int length = cmdbuf[1];
int retlen = 0;
int i, j, status;
// printf("length = %d\n", length);
for ( i = 0; i < length; i += 2) {
/* E.Inoue
if( (status = ioctl(fd, PCCIOC_PUT_DATA, &cbuf[i])) < 0 ) {
// printf("ioctl-- put data error fd = %d status = %d\n", fd, status)
;
return errno;
}
// printf("cmdbuf : data = %x cmd = %x\n", cbuf[i], cbuf[i+1]);
if( ioctl(fd, PCCIOC_GET_DATA, &rbuf[i]) < 0 ) {
// printf("ioctl-- get data error\n");
rplybuf[1] = retlen;
return errno;
} else {
// printf("rplybuf : data = %x cmd = %xe\n", rbuf[i], rbuf[i+1]);
retlen += 2;
}
*/
}
rplybuf[1] = retlen;
return 0;
}
int cam_exec_dma( int fd, int* cmdbuf, int* rplybuf ) {
int *cbuf = cmdbuf+2;
int *rbuf = rplybuf+2;
int length = cmdbuf[1];
int retlen = 0;
int i, j, status;
retlen = length*4;
/* E.inoue
status = ioctl(fd, PCCIOC_KICK_READ, &retlen);
if (status < 0) {
// printf("ioctl-- PCCIOC_KICK_READ error fd = %d status = %d\n", fd, statu
s);
return errno;
}
// printf("cmdbuf : data = %x cmd = %x\n", cbuf[i], cbuf[i+1]);
// printf("writen length = %d\n", length*4);
retlen = write(fd, cbuf, length*4);
if( retlen < 0 ) {
printf("write error...\n");
return errno;
}
retlen = read(fd, rbuf, length*4);
if( retlen < 0 ) {
printf("read error return code = %d...\n", errno);
return errno;
}
*/
/* E.Inoue from here */
for (i = 2; i < length; i += 2) {
rbuf[i+2] = cbuf[i];
// printf("c_data = %x c_cmd = %x, r_data = %x r_cmd = %x\n", cbuf[i], cbu
f[i+1], rbuf[i], rbuf[i+1]);
}
/* to here */
/*
printf("read return length = %d\n", retlen);
for (i = 0; i < length; i += 2)
printf("data = %x cmd = %x\n", rbuf[i], rbuf[i+1]);
*/
rplybuf[1] = retlen/4;
return 0;
}
int cam_exec_dma_seq( int fd, int* cmdbuf, int* rplybuf ) {
int *cbuf = cmdbuf+2;
int *rbuf = rplybuf+2;
int length = cmdbuf[1];
int retlen = 0;
int i, j, status;
int cmdlen;
int amount, loop, remain;
retlen = length*4;
cmdlen = length/2;
loop = cmdlen/MAX_FIFO;
remain = cmdlen%MAX_FIFO;
amount = 0;
// printf("block count = %d remain = %d\n", loop, remain);
/* E.Inoue
if( loop ) {
for( i = 0; i < loop; i++ ) {
retlen = write(fd, cbuf, MAX_FIFO*8);
if( retlen < 0 ) {
printf("write error...\n");
return errno;
}
usleep(10000);
retlen = read(fd, rbuf, MAX_FIFO*8);
if( retlen < 0 ) {
printf("read error return code = %d...\n", errno);
return errno;
}
amount += retlen/4;
usleep(1);
}
}
if( remain ) {
retlen = write(fd, cbuf, remain*8);
if( retlen < 0 ) {
printf("write error...\n");
return errno;
}
usleep(10000);
retlen = read(fd, rbuf, remain*8);
amount += retlen/4;
if( retlen < 0 ) {
printf("read error return code = %d...\n", errno);
return errno;
}
usleep(10000);
}
// printf("block count = %d retlen/8 = %d\n", loop, amount/2);
*/
rplybuf[1] = amount;
return 0;
}
int cam_wait_lam( int fd, int* rplybuf ) {
/* E.Inoue
if( ioctl(fd, PCCIOC_WAIT_LAM, &rplybuf[2]) < 0 ) {
printf("PCCIOC_WAIT_LAM:error code = %d\n", errno);
return errno;
}
*/
return 0;
}
int cam_wait_trig( int fd, int* rplybuf ) {
/* E.Inoue
if( ioctl(fd, PCCIOC_WAIT_TRIG, &rplybuf[2]) < 0 ) {
printf("PCCIOC_WAIT_LAM:error code = %d\n", errno);
return errno;
}
*/
return 0;
}
[inoue@onlsbc1 exam]$
(2-1-3h). pcc.h
[inoue@onlsbc1 exam]$ cat pcc.h
/*
* File Name: pcc.h
*
* Copyright 2003 (C) 2003 Yoshiji Yasu .
*
* version: 0.1 04-DEC-2002, born
* 0.3 14-JAN-2003, add master mode function
* 0.35 31-JAN-2003, add symbols related to I/O registers
* 0.37 26-FEB-2003, redefined the symbols and put/get
* 0.4 28-FEB-2003, add concurrent process, wait lam and
* DAQ function
*/
#define PCI_VENDOR_ID_PCC 0x8642
#define PCI_DEVICE_ID_PCC 0x0630
#define PCC_MAJOR 70
#define CARD_NAME "pcc"
#define PCC_TIMEOUT 6000
#define PCCIOC_RESET _IOWR('c', 1, int)
#define PCCIOC_DUMP_REGISTERS _IOWR('c', 2, struct pccreg)
#define PCCIOC_CLEAR_TX_FIFO _IO('c', 3)
#define PCCIOC_CLEAR_RX_FIFO _IO('c', 4)
#define PCCIOC_PUT_DATA _IOWR('c', 5, int)
#define PCCIOC_GET_DATA _IOWR('c', 6, int)
#define PCCIOC_KICK_READ _IOWR('c', 7, int)
#define PCCIOC_WAIT_WRITE_COMPLETION _IOWR('c', 8, int)
#define PCCIOC_WAIT_LAM _IOWR('c', 9, int)
#define PCCIOC_WAIT_TRIG _IOWR('c', 10, int)
#define PCCIOC_TMP _IO('c', 11)
#define DAQ_READ_STATUS 0
#define DAQ_READ_EVTCNT 0
#define DAQ_CLR_BUSYOUT 1
#define DAQ_CLR_EVTCNT 2
#define DAQ_ENABLE_TRIGIN 3
#define DAQ_DISABLE_TRIGIN 4
#define FIFO_MAX_COUNT 120
struct pccreg {
unsigned int TxData1;
unsigned int TxData2;
unsigned int TxControl;
unsigned int TxStatus;
unsigned int TxAddress;
unsigned int TxPresetCount;
unsigned int TxActualCount;
unsigned int TxFifoCount;
unsigned int RxData1;
unsigned int RxData2;
unsigned int RxControl;
unsigned int RxStatus;
unsigned int RxAddress;
unsigned int RxPresetCount;
unsigned int RxActualCount;
unsigned int RxFifoCount;
unsigned int System;
};
#define TXDATA1 0
#define TXDATA2 4
#define TXCONTROL 8
#define TXSTATUS 0xC
#define TXADDRESS 0x10
#define TXPRESETCOUNT 0x14
#define TXACTUALCOUNT 0x18
#define TXFIFOCOUNT 0x1C
#define RXDATA1 0x20
#define RXDATA2 0x24
#define RXCONTROL 0x28
#define RXSTATUS 0x2C
#define RXADDRESS 0x30
#define RXPRESETCOUNT 0x34
#define RXACTUALCOUNT 0x38
#define RXFIFOCOUNT 0x3C
#define SYSTEM 0x40
#define TC_INT_ENABLE 0x07000000
#define TC_INT_ENABLE_FORCE_END 0x04000000
#define TC_INT_ENABLE_FULL_FIFO 0x02000000
#define TC_INT_ENABLE_PKT_END 0x01000000
#define TC_INT_CLR 0x00070000
#define TC_INT_CLR_FORCE_END 0x00040000
#define TC_INT_CLR_FULL_FIFO 0x00020000
#define TC_INT_CLR_PKT_END 0x00010000
#define TC_CLR_FIFO 0x00000002
#define TC_SRT_DMA 0x00000001
#define RC_INT_ENABLE 0x3F000000
#define RC_INT_ENABLE_FORCE_END 0x20000000
#define RC_INT_ENABLE_PRESET_FIFO 0x10000000
#define RC_INT_ENABLE_FULL_FIFO 0x08000000
#define RC_INT_ENABLE_HALFFULL_PKT 0x04000000
#define RC_INT_ENABLE_PKT_END 0x02000000
#define RC_INT_ENABLE_INPUT_FRAME 0x01000000
#define RC_INT_CLR 0x003F0000
#define RC_INT_CLR_FORCE_END 0x00200000
#define RC_INT_CLR_PRESET_FIFO 0x00100000
#define RC_INT_CLR_FULL_FIFO 0x00080000
#define RC_INT_CLR_HALFFULL_PKT 0x00040000
#define RC_INT_CLR_PKT_END 0x00020000
#define RC_INT_CLR_INPUT_FRAME 0x00010000
#define RC_CLR_FIFO 0x00000002
#define RC_SRT_DMA 0x00000001
#define TS_RX_INFO 0xF0000000
#define TS_RX_INFO3 0x80000000
#define TS_RX_INFO2 0x40000000
#define TS_RX_INFO1 0x20000000
#define TS_RX_INFO0 0x10000000
#define TS_TX_INFO 0x0F000000
#define TS_TX_INFO3 0x08000000
#define TS_TX_INFO2 0x04000000
#define TS_TX_INFO1 0x02000000
#define TS_TX_INFO0 0x01000000
#define TS_INT 0x00070000
#define TS_INT_FORCE_END 0x00040000
#define TS_INT_FULL_FIFO 0x00020000
#define TS_INT_PKT_END 0x00010000
#define TS_FULL_FIFO 0x00000400
#define TS_HALFFULL_FIFO 0x00000200
#define TS_EMPTY_FIFO 0x00000100
#define TS_TIMEOUT_PACKET 0x00000002
#define TS_COMPLETION_PACKET 0x00000001
#define RS_RX_INFO 0xF0000000
#define RS_RX_INFO3 0x80000000
#define RS_RX_INFO2 0x40000000
#define RS_RX_INFO1 0x20000000
#define RS_RX_INFO0 0x10000000
#define RS_TX_INFO 0x0F000000
#define RS_TX_INFO3 0x08000000
#define RS_TX_INFO2 0x04000000
#define RS_TX_INFO1 0x02000000
#define RS_TX_INFO0 0x01000000
#define RS_INT 0x003F0000
#define RS_INT_FORCE_END 0x00200000
#define RS_INT_PRESET_FIFO 0x00100000
#define RS_INT_FULL_FIFO 0x00080000
#define RS_INT_HALFFULL_PKT 0x00040000
#define RS_INT_PKT_END 0x00020000
#define RS_INT_INPUT_FRAME 0x00010000
#define RS_FULL_FIFO 0x00000400
#define RS_HALFFULL_FIFO 0x00000200
#define RS_EMPTY_FIFO 0x00000100
#define RS_TIMEOUT_PACKET 0x00000001
#define SYS_LED_ONOFF 0x80000000
#define SYS_RESET 0x40000000
#define SYS_CAMAC_FRAME_SIZE 0x03000000
[inoue@onlsbc1 exam]$
(2-1-3i). Makefile
[inoue@onlsbc1 exam]$ cat Makefile
# File Name: Makefile
# Date: Apr 28, 2003
# Edited by: Eiji Inoue
INCDIR = -I/usr/src/linux-2.4/include
VERSIONINC =
CFLAGS = -O2 -Wall -c -D__KERNEL__ -DMODULE -Wall $(INCDIR) $(VERSIONINC)
DRIVER = pcc
all : cam.class cam.h libMyImpOfcam.so Client.class ClientImpl.class Server.cla
ss ServerImpl.class ClientImpl_Skel.class ClientImpl_Stub.class ServerImpl_Skel.
class ServerImpl_Stub.class
#$(DRIVER).o: $(DRIVER).c $(DRIVER).h
# gcc $(CFLAGS) $(DRIVER).c
camac.o: camac.c $(DRIVER).h
gcc -c camac.c
cam.class: cam.java
javac cam.java
Client.class: Client.java
javac Client.java
ClientImpl.class: ClientImpl.java
javac ClientImpl.java
Server.class: Server.java
javac Server.java
ServerImpl.class: ServerImpl.java
javac ServerImpl.java
ClientImpl_Skel.class: ClientImpl.class
rmic ClientImpl
ServerImpl_Skel.class: ServerImpl.class
rmic ServerImpl
cam.h: cam.class
javah -jni cam
libMyImpOfcam.so: cam.c camac.o $(DRIVER).h
gcc -O -shared -I/usr/java/include -I/usr/java/include/linux cam.c camac
.o -o libMyImpOfcam.so
clean:
rm -f *.class cam.h libMyImpOfcam.so *.o core *~
[inoue@onlsbc1 exam]$
(2-1-3j). 上記のソースプログラムをコンパイルする
[inoue@onlsbc1 exam]$ pwd
/home/inoue/inoue/JavaRMI/camac/exam
[inoue@onlsbc1 exam]$ ls -l
合計 108
-rw-rw-r-- 1 inoue inoue 233 4月 28 09:33 Client.java
-rw-r--r-- 1 inoue inoue 17456 4月 28 10:24 ClientImpl.java
-rw-rw-r-- 1 inoue inoue 1106 4月 28 09:52 Makefile
-rw-r--r-- 1 inoue inoue 296 4月 28 09:52 Server.java
-rw-r--r-- 1 inoue inoue 3058 4月 28 09:53 ServerImpl.java
-rw-rw-r-- 1 inoue inoue 46354 4月 28 10:10 cam.c
-rw-rw-r-- 1 inoue inoue 791 4月 28 10:15 cam.java
-rw-rw-r-- 1 inoue inoue 9096 4月 16 16:10 camac.c
-rw-r--r-- 1 inoue inoue 5425 4月 14 11:00 pcc.h
[inoue@onlsbc1 exam]$ make clean
rm -f *.class cam.h libMyImpOfcam.so *.o core *~
[inoue@onlsbc1 exam]$ make
javac cam.java
javah -jni cam
gcc -c camac.c
gcc -O -shared -I/usr/java/include -I/usr/java/include/linux cam.c camac.o -o li
bMyImpOfcam.so
javac Client.java
javac ClientImpl.java
javac ServerImpl.java
rmic ClientImpl
rmic ServerImpl
[inoue@onlsbc1 exam]$
[inoue@onlsbc1 exam]$ ls -l
合計 192
-rw-rw-r-- 1 inoue inoue 206 4月 28 15:55 Client.class
-rw-rw-r-- 1 inoue inoue 233 4月 28 09:33 Client.java
-rw-rw-r-- 1 inoue inoue 8479 4月 28 15:55 ClientImpl.class
-rw-r--r-- 1 inoue inoue 17456 4月 28 10:24 ClientImpl.java
-rw-rw-r-- 1 inoue inoue 1735 4月 28 15:55 ClientImpl_Skel.class
-rw-rw-r-- 1 inoue inoue 3140 4月 28 15:55 ClientImpl_Stub.class
-rw-rw-r-- 1 inoue inoue 1106 4月 28 09:52 Makefile
-rw-rw-r-- 1 inoue inoue 244 4月 28 15:55 Server.class
-rw-r--r-- 1 inoue inoue 296 4月 28 09:52 Server.java
-rw-rw-r-- 1 inoue inoue 2523 4月 28 15:55 ServerImpl.class
-rw-r--r-- 1 inoue inoue 3058 4月 28 09:53 ServerImpl.java
-rw-rw-r-- 1 inoue inoue 1956 4月 28 15:55 ServerImpl_Skel.class
-rw-rw-r-- 1 inoue inoue 3510 4月 28 15:55 ServerImpl_Stub.class
-rw-rw-r-- 1 inoue inoue 46354 4月 28 10:10 cam.c
-rw-rw-r-- 1 inoue inoue 360 4月 28 15:55 cam.class
-rw-rw-r-- 1 inoue inoue 414 4月 28 15:55 cam.h
-rw-rw-r-- 1 inoue inoue 791 4月 28 10:15 cam.java
-rw-rw-r-- 1 inoue inoue 9096 4月 16 16:10 camac.c
-rw-rw-r-- 1 inoue inoue 4488 4月 28 15:55 camac.o
-rwxrwxr-x 1 inoue inoue 26514 4月 28 15:55 libMyImpOfcam.so
-rw-r--r-- 1 inoue inoue 5425 4月 14 11:00 pcc.h
[inoue@onlsbc1 exam]$
(2-2). クライアント側、onlpara.kek.jp
[inoue@onlpara exam]$ pwd
/home/inoue/JavaRMI/camac/exam
[inoue@onlpara exam]$ ls -l
合計 108
-rw-rw-r-- 1 inoue inoue 233 4月 28 09:33 Client.java
-rw-r--r-- 1 inoue inoue 17456 4月 28 10:24 ClientImpl.java
-rw-rw-r-- 1 inoue inoue 1106 4月 28 09:52 Makefile
-rw-r--r-- 1 inoue inoue 296 4月 28 09:52 Server.java
-rw-r--r-- 1 inoue inoue 3058 4月 28 09:53 ServerImpl.java
-rw-rw-r-- 1 inoue inoue 46354 4月 28 10:10 cam.c
-rw-rw-r-- 1 inoue inoue 791 4月 28 10:15 cam.java
-rw-rw-r-- 1 inoue inoue 9096 4月 16 16:10 camac.c
-rw-r--r-- 1 inoue inoue 5425 4月 14 11:00 pcc.h
[inoue@onlpara exam]$
(2-2-1). Javaのチェック
[inoue@onlpara exam]$ java -version
java version "1.4.1-rc"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-rc-b19)
Java HotSpot(TM) Client VM (build 1.4.1-rc-b19, mixed mode)
[inoue@onlpara exam]$
(2-2-2). 実行環境
[inoue@onlpara exam]$ env
PWD=/home/inoue/JavaRMI/camac/exam
HOSTNAME=onlpara.kek.jp
QTDIR=/usr/lib/qt3-gcc2.96
LESSOPEN=|/usr/bin/lesspipe.sh %s
USER=inoue
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;0
1:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.b
tm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:
*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*
.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;3
5:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
MAIL=/var/spool/mail/inoue
INPUTRC=/etc/inputrc
LANG=ja_JP.eucJP
SSH_CLIENT=130.87.153.2 3039 22
LOGNAME=inoue
SHLVL=1
SHELL=/bin/bash
HISTSIZE=1000
HOME=/home/inoue
TERM=vt100
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/java/bin:/home/inoue/bin
JLESSCHARSET=japanese
SSH_TTY=/dev/pts/5
_=/usr/bin/env
OLDPWD=/home/inoue/JavaRMI/camac
[inoue@onlpara exam]$
(2-2-3). コンパイル
[inoue@onlpara exam]$ pwd
/home/inoue/JavaRMI/camac/exam
[inoue@onlpara exam]$ ls -l
合計 108
-rw-rw-r-- 1 inoue inoue 233 4月 28 09:33 Client.java
-rw-r--r-- 1 inoue inoue 17456 4月 28 10:24 ClientImpl.java
-rw-rw-r-- 1 inoue inoue 1106 4月 28 09:52 Makefile
-rw-r--r-- 1 inoue inoue 296 4月 28 09:52 Server.java
-rw-r--r-- 1 inoue inoue 3058 4月 28 09:53 ServerImpl.java
-rw-rw-r-- 1 inoue inoue 46354 4月 28 10:10 cam.c
-rw-rw-r-- 1 inoue inoue 791 4月 28 10:15 cam.java
-rw-rw-r-- 1 inoue inoue 9096 4月 16 16:10 camac.c
-rw-r--r-- 1 inoue inoue 5425 4月 14 11:00 pcc.h
[inoue@onlpara exam]$
(2-2-3a). Client.java
上記の項目(2-1-3a)を参照。
(2-2-3b). ClientImpl.java
上記の項目(2-1-3b)を参照。
(2-2-3c). Server.java
上記の項目(2-1-3c)を参照。
(2-2-3d). ServerImpl.java
上記の項目(2-1-3d)を参照。
(2-2-3e). cam.java
上記の項目(2-1-3e)を参照。
(2-2-3f). cam.c
上記の項目(2-1-3f)を参照。
(2-2-3g). camac.c
上記の項目(2-1-3g)を参照。
(2-2-3h). pcc.h
上記の項目(2-1-3h)を参照。
(2-2-3i). Makefile
上記の項目(2-1-3i)を参照。
(2-2-3j). 上記のソースプログラムをコンパイルする
[inoue@onlpara exam]$ pwd
/home/inoue/JavaRMI/camac/exam
[inoue@onlpara exam]$ ls -l
合計 108
-rw-rw-r-- 1 inoue inoue 233 4月 28 09:33 Client.java
-rw-r--r-- 1 inoue inoue 17456 4月 28 10:24 ClientImpl.java
-rw-rw-r-- 1 inoue inoue 1106 4月 28 09:52 Makefile
-rw-r--r-- 1 inoue inoue 296 4月 28 09:52 Server.java
-rw-r--r-- 1 inoue inoue 3058 4月 28 09:53 ServerImpl.java
-rw-rw-r-- 1 inoue inoue 46354 4月 28 10:10 cam.c
-rw-rw-r-- 1 inoue inoue 791 4月 28 10:15 cam.java
-rw-rw-r-- 1 inoue inoue 9096 4月 16 16:10 camac.c
-rw-r--r-- 1 inoue inoue 5425 4月 14 11:00 pcc.h
[inoue@onlpara exam]$ make clean
rm -f *.class cam.h libMyImpOfcam.so *.o core *~
[inoue@onlpara exam]$ make
javac cam.java
javah -jni cam
gcc -c camac.c
gcc -O -shared -I/usr/java/include -I/usr/java/include/linux cam.c camac.o -o li
bMyImpOfcam.so
javac Client.java
javac ClientImpl.java
javac ServerImpl.java
rmic ClientImpl
rmic ServerImpl
[inoue@onlpara exam]$
(2-3). サーバ側のプログラムの起動
onlsbc1 のSBCからPCIへアクセスする前に、PCIのシステムレジスタに 1を書き
込んで CAMAC 用の FPGA をイニシャライズしないと CAMACにアクセスできない
ようになっている。 今回のテストに使用しているネイティブコードには、この
ための操作は含んでいない。 したがって、サーバ側のプログラムを起動する前
に手動でこの操作をする必要がある。 これは、以下の一行のコマンドで行う。
# ./w e840 1
[root@onlsbc1 exam]# pwd
/home/inoue/inoue/JavaRMI/camac/exam
[root@onlsbc1 exam]# export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
[root@onlsbc1 exam]# rmiregistry &
[1] 16958
[root@onlsbc1 exam]# java ServerImpl
bind done
(2-4). クライアント側のプログラムの起動
[inoue@onlpara exam]$ pwd
/home/inoue/JavaRMI/camac/exam
[inoue@onlpara exam]$ rmiregistry &
[1] 8253
[inoue@onlpara exam]$ java ClientImpl onlsbc1
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3). 実行
リモートからアクセスできる例題プログラムは以下の機能を持っている。
(3a). 入力したCAMACコマンドを実行し結果を表示する
リモートから入力したCAMACコマンドを、CAMACコントローラに送って
そのCAMACコマンドを実行する。 実行結果をリモート側へ送り返して
表示する。
(3b). 組み込んであるローカル例題プログラムを実行する
上記(2)で組み込んだローカル例題プログラムをCAMACコントローラ上で
実行する。
FPGAロジックをイニシャライズする。
[root@onlsbc1 camac]# pwd
/home/inoue/inoue/JavaRMI/camac
[root@onlsbc1 camac]# ls -l
合計 28
drwxrwxr-x 9 inoue inoue 4096 4月 28 09:33 backup
drwxrwxr-x 2 inoue inoue 4096 4月 15 16:40 camac
drwxrwxr-x 2 inoue inoue 4096 4月 28 17:26 exam
-rwxrwxr-x 1 inoue inoue 13935 4月 10 16:28 w
[root@onlsbc1 camac]# ./w e840 1
outl(0x1, 0x0000e840)
[root@onlsbc1 camac]#
(3-1). 上記(3a)の実行
入力したCAMACコマンドを実行し結果を表示する
(3-1-1). サーバ側の実行
[root@onlsbc1 exam]# pwd
/home/inoue/inoue/JavaRMI/camac/exam
[root@onlsbc1 exam]# ls
Client.class Server.class cam.class
Client.java Server.java cam.h
ClientImpl.class ServerImpl.class cam.java
ClientImpl.java ServerImpl.java camac.c
ClientImpl_Skel.class ServerImpl_Skel.class camac.o
ClientImpl_Stub.class ServerImpl_Stub.class libMyImpOfcam.so
Makefile cam.c pcc.h
[root@onlsbc1 exam]#
[root@onlsbc1 exam]# export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
[root@onlsbc1 exam]# rmiregistry &
[1] 17168
[root@onlsbc1 exam]# java ServerImpl
bind done
RMI: Server side:
RMI: Received CAMAC command: array length = 2
cmd[0] = 0x0, dat[0] = 0x0
cmd[1] = 0xe0030010, dat[1] = 0x5555
cmd[2] = 0xe0030000, dat[2] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
ServerImpl.r_cmd[1] = 0xe0030010, ServerImpl.r_dat[1] = 0x5555
ServerImpl.r_cmd[2] = 0xe0030000, ServerImpl.r_dat[2] = 0x0
JNI, C side: Received CAMAC command: array length = 2
example number = 14
c_cmd[1] = 0xe0030010, c_dat[1] = 0x5555
c_cmd[2] = 0xe0030000, c_dat[2] = 0x0
c_cmd[3] = 0x0, c_dat[3] = 0x0
JNI, C side: CAMAC access
camac write data: data = 0x5555
camac write command reply: cmd = 0xe0030010 : data = 23000000
camac read command reply: cmd = 0xe0030000 : data = 0x5555
JNI, Java side: after Native Call array length = 2
[root@onlsbc1 exam]#
(3-1-2). クライアント側の実行
[inoue@onlpara exam]$ pwd
/home/inoue/JavaRMI/camac/exam
[inoue@onlpara exam]$ ls
Client.class Server.class cam.class
Client.java Server.java cam.h
ClientImpl.class ServerImpl.class cam.java
ClientImpl.java ServerImpl.java camac.c
ClientImpl_Skel.class ServerImpl_Skel.class camac.o
ClientImpl_Stub.class ServerImpl_Stub.class libMyImpOfcam.so
Makefile cam.c pcc.h
[inoue@onlpara exam]$
[inoue@onlpara exam]$ rmiregistry &
[1] 13839
[inoue@onlpara exam]$ java ClientImpl onlsbc1
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = s
Execution Command: s
CAMAC Command (N, A, F)(dec) = 3,0,16
Write Data(hex) = 5555
入力されたData: 21845(dec), 0x5555(hex)
Make up CAMAC Command of Single action.
Accepted data: n = 3, a = 0, f = 16, l_count = 2
ClientImpl.scmd [ 1 ] = -536674288(dec), 0xe0030010(hex)
ClientImpl.sdat [ 1 ] = 21845(dec), 0x5555(hex)
Execution Command('q' or 'e' or 'g' or 's' or 'd') = s
Execution Command: s
CAMAC Command (N, A, F)(dec) = 3,0,0
Make up CAMAC Command of Single action.
Accepted data: n = 3, a = 0, f = 0, l_count = 3
ClientImpl.scmd [ 2 ] = -536674304(dec), 0xe0030000(hex)
ClientImpl.sdat [ 2 ] = 0(dec), 0x0(hex)
Execution Command('q' or 'e' or 'g' or 's' or 'd') = g
Ok. Start up CAMAC execution.
RMI: Client side:
RMI: Sent CAMAC command: array length =2
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
ClientImpl.scmd[1] = 0xe0030010, ClientImpl.sdat[1] = 0x5555
ClientImpl.scmd[2] = 0xe0030000, ClientImpl.sdat[2] = 0x0
RMI: Received CAMAC reply: array length = 2
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0xe0030010, d_reply[1] = 0x23000000
c_reply[2] = 0xe0030000, d_reply[2] = 0x5555
rcmd_buf[0] = 0x0, rcmd_buf[1] = 0x4
rrpl_buf[0] = 0x0, rrpl_buf[1] = 0x0
rcmd_buf[2] = 0x0, rcmd_buf[3] = 0x0
rrpl_buf[2] = 0x0, rrpl_buf[3] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = q
Quited Program. Enter Ctl-C.
[inoue@onlpara exam]$
(3-2). 上記(3b)の実行
組み込んであるローカル例題プログラムを実行する
(3-2-1). ローカル例題プログラム、exam1の実行
これは、CAMACライブラリ関数の内、cam_exec_pio関数をテストするための例題
プログラムである。 cam_exec_pio関数は内部ではioctl()システムコールで
PCCIOC_PUT_DATA,PCCIO_GET_DATAを使ってCAMACアクセスを行っている。
(3-2-1a). サーバ側の実行
[root@onlsbc1 exam]# export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
[root@onlsbc1 exam]# rmiregistry &
[1] 17211
[root@onlsbc1 exam]# java ServerImpl
bind done
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 1
data = 0 cmd = c0190011
data = 0 cmd = 80190010
data = 0 cmd = 80190018
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030010
data = 555555 cmd = 80030010
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = 0 cmd = 80030000
data = a cmd = 80030010
data = 0 cmd = a0030000
JNI, Java side: after Native Call array length = 85
(3-2-1b). クライアント側の実行
[inoue@onlpara exam]$ rmiregistry &
[1] 14154
[inoue@onlpara exam]$ java ClientImpl onlsbc1
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 1
:
:
c_reply[79] = 0x0, d_reply[79] = 0x0
c_reply[80] = 0x0, d_reply[80] = 0x0
c_reply[81] = 0x0, d_reply[81] = 0x0
c_reply[82] = 0x0, d_reply[82] = 0x0
c_reply[83] = 0x0, d_reply[83] = 0x0
c_reply[84] = 0x0, d_reply[84] = 0x0
c_reply[85] = 0x0, d_reply[85] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0xaa
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0x0
rcmd_buf[2] = 0x0, rcmd_buf[3] = 0xc0190011
rrpl_buf[2] = 0x0, rrpl_buf[3] = 0x0
rcmd_buf[4] = 0x0, rcmd_buf[5] = 0x80190010
rrpl_buf[4] = 0x0, rrpl_buf[5] = 0x0
rcmd_buf[6] = 0x0, rcmd_buf[7] = 0x80190018
rrpl_buf[6] = 0x0, rrpl_buf[7] = 0x0
rcmd_buf[8] = 0xffffff, rcmd_buf[9] = 0x80030010
rrpl_buf[8] = 0x0, rrpl_buf[9] = 0x0
rcmd_buf[10] = 0x0, rcmd_buf[11] = 0x80030010
rrpl_buf[10] = 0x0, rrpl_buf[11] = 0x0
rcmd_buf[12] = 0x555555, rcmd_buf[13] = 0x80030010
rrpl_buf[12] = 0x0, rrpl_buf[13] = 0x0
rcmd_buf[14] = 0xaaaaaa, rcmd_buf[15] = 0x80030010
rrpl_buf[14] = 0x0, rrpl_buf[15] = 0x0
rcmd_buf[16] = 0x0, rcmd_buf[17] = 0x80030000
rrpl_buf[16] = 0x0, rrpl_buf[17] = 0x0
rcmd_buf[18] = 0x0, rcmd_buf[19] = 0x80030000
rrpl_buf[18] = 0x0, rrpl_buf[19] = 0x0
rcmd_buf[20] = 0x0, rcmd_buf[21] = 0x80030000
rrpl_buf[20] = 0x0, rrpl_buf[21] = 0x0
rcmd_buf[22] = 0x0, rcmd_buf[23] = 0x80030000
rrpl_buf[22] = 0x0, rrpl_buf[23] = 0x0
rcmd_buf[24] = 0xffffff, rcmd_buf[25] = 0x80030010
rrpl_buf[24] = 0x0, rrpl_buf[25] = 0x0
rcmd_buf[26] = 0x0, rcmd_buf[27] = 0x80030010
rrpl_buf[26] = 0x0, rrpl_buf[27] = 0x0
rcmd_buf[28] = 0x555555, rcmd_buf[29] = 0x80030010
rrpl_buf[28] = 0x0, rrpl_buf[29] = 0x0
rcmd_buf[30] = 0xaaaaaa, rcmd_buf[31] = 0x80030010
rrpl_buf[30] = 0x0, rrpl_buf[31] = 0x0
rcmd_buf[32] = 0x0, rcmd_buf[33] = 0x80030000
rrpl_buf[32] = 0x0, rrpl_buf[33] = 0x0
rcmd_buf[34] = 0x0, rcmd_buf[35] = 0x80030000
rrpl_buf[34] = 0x0, rrpl_buf[35] = 0x0
rcmd_buf[36] = 0x0, rcmd_buf[37] = 0x80030000
rrpl_buf[36] = 0x0, rrpl_buf[37] = 0x0
rcmd_buf[38] = 0x0, rcmd_buf[39] = 0x80030000
rrpl_buf[38] = 0x0, rrpl_buf[39] = 0x0
rcmd_buf[40] = 0xffffff, rcmd_buf[41] = 0x80030010
rrpl_buf[40] = 0x0, rrpl_buf[41] = 0x0
rcmd_buf[42] = 0x0, rcmd_buf[43] = 0x80030010
rrpl_buf[42] = 0x0, rrpl_buf[43] = 0x0
rcmd_buf[44] = 0x555555, rcmd_buf[45] = 0x80030010
rrpl_buf[44] = 0x0, rrpl_buf[45] = 0x0
rcmd_buf[46] = 0xaaaaaa, rcmd_buf[47] = 0x80030010
rrpl_buf[46] = 0x0, rrpl_buf[47] = 0x0
rcmd_buf[48] = 0x0, rcmd_buf[49] = 0x80030000
rrpl_buf[48] = 0x0, rrpl_buf[49] = 0x0
rcmd_buf[50] = 0x0, rcmd_buf[51] = 0x80030000
rrpl_buf[50] = 0x0, rrpl_buf[51] = 0x0
rcmd_buf[52] = 0x0, rcmd_buf[53] = 0x80030000
rrpl_buf[52] = 0x0, rrpl_buf[53] = 0x0
rcmd_buf[54] = 0x0, rcmd_buf[55] = 0x80030000
rrpl_buf[54] = 0x0, rrpl_buf[55] = 0x0
rcmd_buf[56] = 0xffffff, rcmd_buf[57] = 0x80030010
rrpl_buf[56] = 0x0, rrpl_buf[57] = 0x0
rcmd_buf[58] = 0x0, rcmd_buf[59] = 0x80030010
rrpl_buf[58] = 0x0, rrpl_buf[59] = 0x0
rcmd_buf[60] = 0x555555, rcmd_buf[61] = 0x80030010
rrpl_buf[60] = 0x0, rrpl_buf[61] = 0x0
rcmd_buf[62] = 0xaaaaaa, rcmd_buf[63] = 0x80030010
rrpl_buf[62] = 0x0, rrpl_buf[63] = 0x0
rcmd_buf[64] = 0x0, rcmd_buf[65] = 0x80030000
rrpl_buf[64] = 0x0, rrpl_buf[65] = 0x0
rcmd_buf[66] = 0x0, rcmd_buf[67] = 0x80030000
rrpl_buf[66] = 0x0, rrpl_buf[67] = 0x0
rcmd_buf[68] = 0x0, rcmd_buf[69] = 0x80030000
rrpl_buf[68] = 0x0, rrpl_buf[69] = 0x0
rcmd_buf[70] = 0x0, rcmd_buf[71] = 0x80030000
rrpl_buf[70] = 0x0, rrpl_buf[71] = 0x0
rcmd_buf[72] = 0xffffff, rcmd_buf[73] = 0x80030010
rrpl_buf[72] = 0x0, rrpl_buf[73] = 0x0
rcmd_buf[74] = 0x0, rcmd_buf[75] = 0x80030010
rrpl_buf[74] = 0x0, rrpl_buf[75] = 0x0
rcmd_buf[76] = 0x555555, rcmd_buf[77] = 0x80030010
rrpl_buf[76] = 0x0, rrpl_buf[77] = 0x0
rcmd_buf[78] = 0xaaaaaa, rcmd_buf[79] = 0x80030010
rrpl_buf[78] = 0x0, rrpl_buf[79] = 0x0
rcmd_buf[80] = 0x0, rcmd_buf[81] = 0x80030000
rrpl_buf[80] = 0x0, rrpl_buf[81] = 0x0
rcmd_buf[82] = 0x0, rcmd_buf[83] = 0x80030000
rrpl_buf[82] = 0x0, rrpl_buf[83] = 0x0
rcmd_buf[84] = 0x0, rcmd_buf[85] = 0x80030000
rrpl_buf[84] = 0x0, rrpl_buf[85] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-2). ローカル例題プログラム、exam2の実行
これは、CAMACライブラリ関数の内、cam_exec_dma関数をテストするための例題
プログラムである。 cam_exec_dma関数は内部ではioctl()システムコールで
PCCIOC_KICK_READ,およびwrite()、read()システムコールを使ってCAMACアクセ
スを行っている。
(3-2-2a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 2
len = aa
data = 0 cmd = c0190011
data = 0 cmd = 80190010
data = 0 cmd = 80190018
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = ffffff cmd = 80030010
data = 0 cmd = 80030000
data = 0 cmd = 80030010
data = 0 cmd = 80030000
data = 555555 cmd = 80030010
data = 0 cmd = 80030000
data = aaaaaa cmd = 80030010
data = 0 cmd = 80030000
data = a cmd = 80030010
data = 0 cmd = a0030000
array length = 0
rbuf[0] = ffffff
rbuf[10] = ffffff
rbuf[20] = ffffff
rbuf[30] = ffffff
rbuf[40] = ffffff
rbuf[50] = ffffff
rbuf[60] = ffffff
rbuf[70] = ffffff
rbuf[80] = ffffff
rbuf[90] = ffffff
rbuf[0] = ffffff
rbuf[1] = 0
rbuf[2] = 0
rbuf[3] = 0
rbuf[4] = 0
rbuf[5] = 0
rbuf[6] = 0
rbuf[7] = 0
rbuf[8] = 555555
rbuf[9] = 0
rbuf[a] = 0
rbuf[b] = 0
rbuf[c] = aaaaaa
rbuf[d] = 0
rbuf[e] = 0
rbuf[f] = 0
rbuf[10] = ffffff
rbuf[11] = 0
rbuf[12] = 0
rbuf[13] = 0
JNI, Java side: after Native Call array length = 85
(3-2-2b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 2
Ok. Start up an example program 2.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 85
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0x0, d_reply[1] = 0x0
c_reply[2] = 0x0, d_reply[2] = 0x0
c_reply[3] = 0x0, d_reply[3] = 0x0
c_reply[4] = 0x0, d_reply[4] = 0x0
c_reply[5] = 0x0, d_reply[5] = 0x0
c_reply[6] = 0x0, d_reply[6] = 0x0
c_reply[7] = 0x0, d_reply[7] = 0x0
c_reply[8] = 0x0, d_reply[8] = 0x0
c_reply[9] = 0x0, d_reply[9] = 0x0
c_reply[10] = 0x0, d_reply[10] = 0x0
c_reply[11] = 0x0, d_reply[11] = 0x0
c_reply[12] = 0x0, d_reply[12] = 0x0
c_reply[13] = 0x0, d_reply[13] = 0x0
c_reply[14] = 0x0, d_reply[14] = 0x0
c_reply[15] = 0x0, d_reply[15] = 0x0
c_reply[16] = 0x0, d_reply[16] = 0x0
c_reply[17] = 0x0, d_reply[17] = 0x0
c_reply[18] = 0x0, d_reply[18] = 0x0
c_reply[19] = 0x0, d_reply[19] = 0x0
c_reply[20] = 0x0, d_reply[20] = 0x0
c_reply[21] = 0x0, d_reply[21] = 0x0
c_reply[22] = 0x0, d_reply[22] = 0x0
c_reply[23] = 0x0, d_reply[23] = 0x0
c_reply[24] = 0x0, d_reply[24] = 0x0
c_reply[25] = 0x0, d_reply[25] = 0x0
c_reply[26] = 0x0, d_reply[26] = 0x0
c_reply[27] = 0x0, d_reply[27] = 0x0
c_reply[28] = 0x0, d_reply[28] = 0x0
c_reply[29] = 0x0, d_reply[29] = 0x0
c_reply[30] = 0x0, d_reply[30] = 0x0
c_reply[31] = 0x0, d_reply[31] = 0x0
c_reply[32] = 0x0, d_reply[32] = 0x0
c_reply[33] = 0x0, d_reply[33] = 0x0
c_reply[34] = 0x0, d_reply[34] = 0x0
c_reply[35] = 0x0, d_reply[35] = 0x0
c_reply[36] = 0x0, d_reply[36] = 0x0
c_reply[37] = 0x0, d_reply[37] = 0x0
c_reply[38] = 0x0, d_reply[38] = 0x0
c_reply[39] = 0x0, d_reply[39] = 0x0
c_reply[40] = 0x0, d_reply[40] = 0x0
c_reply[41] = 0x0, d_reply[41] = 0x0
c_reply[42] = 0x0, d_reply[42] = 0x0
c_reply[43] = 0x0, d_reply[43] = 0x0
c_reply[44] = 0x0, d_reply[44] = 0x0
c_reply[45] = 0x0, d_reply[45] = 0x0
c_reply[46] = 0x0, d_reply[46] = 0x0
c_reply[47] = 0x0, d_reply[47] = 0x0
c_reply[48] = 0x0, d_reply[48] = 0x0
c_reply[49] = 0x0, d_reply[49] = 0x0
c_reply[50] = 0x0, d_reply[50] = 0x0
c_reply[51] = 0x0, d_reply[51] = 0x0
c_reply[52] = 0x0, d_reply[52] = 0x0
c_reply[53] = 0x0, d_reply[53] = 0x0
c_reply[54] = 0x0, d_reply[54] = 0x0
c_reply[55] = 0x0, d_reply[55] = 0x0
c_reply[56] = 0x0, d_reply[56] = 0x0
c_reply[57] = 0x0, d_reply[57] = 0x0
c_reply[58] = 0x0, d_reply[58] = 0x0
c_reply[59] = 0x0, d_reply[59] = 0x0
c_reply[60] = 0x0, d_reply[60] = 0x0
c_reply[61] = 0x0, d_reply[61] = 0x0
c_reply[62] = 0x0, d_reply[62] = 0x0
c_reply[63] = 0x0, d_reply[63] = 0x0
c_reply[64] = 0x0, d_reply[64] = 0x0
c_reply[65] = 0x0, d_reply[65] = 0x0
c_reply[66] = 0x0, d_reply[66] = 0x0
c_reply[67] = 0x0, d_reply[67] = 0x0
c_reply[68] = 0x0, d_reply[68] = 0x0
c_reply[69] = 0x0, d_reply[69] = 0x0
c_reply[70] = 0x0, d_reply[70] = 0x0
c_reply[71] = 0x0, d_reply[71] = 0x0
c_reply[72] = 0x0, d_reply[72] = 0x0
c_reply[73] = 0x0, d_reply[73] = 0x0
c_reply[74] = 0x0, d_reply[74] = 0x0
c_reply[75] = 0x0, d_reply[75] = 0x0
c_reply[76] = 0x0, d_reply[76] = 0x0
c_reply[77] = 0x0, d_reply[77] = 0x0
c_reply[78] = 0x0, d_reply[78] = 0x0
c_reply[79] = 0x0, d_reply[79] = 0x0
c_reply[80] = 0x0, d_reply[80] = 0x0
c_reply[81] = 0x0, d_reply[81] = 0x0
c_reply[82] = 0x0, d_reply[82] = 0x0
c_reply[83] = 0x0, d_reply[83] = 0x0
c_reply[84] = 0x0, d_reply[84] = 0x0
c_reply[85] = 0x0, d_reply[85] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0xaa
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0xaa
rcmd_buf[2] = 0x0, rcmd_buf[3] = 0xc0190011
rrpl_buf[2] = 0x0, rrpl_buf[3] = 0x0
rcmd_buf[4] = 0x0, rcmd_buf[5] = 0x80190010
rrpl_buf[4] = 0x0, rrpl_buf[5] = 0x0
rcmd_buf[6] = 0x0, rcmd_buf[7] = 0x80190018
rrpl_buf[6] = 0x0, rrpl_buf[7] = 0x0
rcmd_buf[8] = 0xffffff, rcmd_buf[9] = 0x80030010
rrpl_buf[8] = 0x0, rrpl_buf[9] = 0x0
rcmd_buf[10] = 0x0, rcmd_buf[11] = 0x80030000
rrpl_buf[10] = 0xffffff, rrpl_buf[11] = 0x0
rcmd_buf[12] = 0x0, rcmd_buf[13] = 0x80030010
rrpl_buf[12] = 0x0, rrpl_buf[13] = 0x0
rcmd_buf[14] = 0x0, rcmd_buf[15] = 0x80030000
rrpl_buf[14] = 0x0, rrpl_buf[15] = 0x0
rcmd_buf[16] = 0x555555, rcmd_buf[17] = 0x80030010
rrpl_buf[16] = 0x0, rrpl_buf[17] = 0x0
rcmd_buf[18] = 0x0, rcmd_buf[19] = 0x80030000
rrpl_buf[18] = 0x555555, rrpl_buf[19] = 0x0
rcmd_buf[20] = 0xaaaaaa, rcmd_buf[21] = 0x80030010
rrpl_buf[20] = 0x0, rrpl_buf[21] = 0x0
rcmd_buf[22] = 0x0, rcmd_buf[23] = 0x80030000
rrpl_buf[22] = 0xaaaaaa, rrpl_buf[23] = 0x0
rcmd_buf[24] = 0xffffff, rcmd_buf[25] = 0x80030010
rrpl_buf[24] = 0x0, rrpl_buf[25] = 0x0
rcmd_buf[26] = 0x0, rcmd_buf[27] = 0x80030000
rrpl_buf[26] = 0xffffff, rrpl_buf[27] = 0x0
rcmd_buf[28] = 0x0, rcmd_buf[29] = 0x80030010
rrpl_buf[28] = 0x0, rrpl_buf[29] = 0x0
rcmd_buf[30] = 0x0, rcmd_buf[31] = 0x80030000
rrpl_buf[30] = 0x0, rrpl_buf[31] = 0x0
rcmd_buf[32] = 0x555555, rcmd_buf[33] = 0x80030010
rrpl_buf[32] = 0x0, rrpl_buf[33] = 0x0
rcmd_buf[34] = 0x0, rcmd_buf[35] = 0x80030000
rrpl_buf[34] = 0x555555, rrpl_buf[35] = 0x0
rcmd_buf[36] = 0xaaaaaa, rcmd_buf[37] = 0x80030010
rrpl_buf[36] = 0x0, rrpl_buf[37] = 0x0
rcmd_buf[38] = 0x0, rcmd_buf[39] = 0x80030000
rrpl_buf[38] = 0xaaaaaa, rrpl_buf[39] = 0x0
rcmd_buf[40] = 0xffffff, rcmd_buf[41] = 0x80030010
rrpl_buf[40] = 0x0, rrpl_buf[41] = 0x0
rcmd_buf[42] = 0x0, rcmd_buf[43] = 0x80030000
rrpl_buf[42] = 0xffffff, rrpl_buf[43] = 0x0
rcmd_buf[44] = 0x0, rcmd_buf[45] = 0x80030010
rrpl_buf[44] = 0x0, rrpl_buf[45] = 0x0
rcmd_buf[46] = 0x0, rcmd_buf[47] = 0x80030000
rrpl_buf[46] = 0x0, rrpl_buf[47] = 0x0
rcmd_buf[48] = 0x555555, rcmd_buf[49] = 0x80030010
rrpl_buf[48] = 0x0, rrpl_buf[49] = 0x0
rcmd_buf[50] = 0x0, rcmd_buf[51] = 0x80030000
rrpl_buf[50] = 0x555555, rrpl_buf[51] = 0x0
rcmd_buf[52] = 0xaaaaaa, rcmd_buf[53] = 0x80030010
rrpl_buf[52] = 0x0, rrpl_buf[53] = 0x0
rcmd_buf[54] = 0x0, rcmd_buf[55] = 0x80030000
rrpl_buf[54] = 0xaaaaaa, rrpl_buf[55] = 0x0
rcmd_buf[56] = 0xffffff, rcmd_buf[57] = 0x80030010
rrpl_buf[56] = 0x0, rrpl_buf[57] = 0x0
rcmd_buf[58] = 0x0, rcmd_buf[59] = 0x80030000
rrpl_buf[58] = 0xffffff, rrpl_buf[59] = 0x0
rcmd_buf[60] = 0x0, rcmd_buf[61] = 0x80030010
rrpl_buf[60] = 0x0, rrpl_buf[61] = 0x0
rcmd_buf[62] = 0x0, rcmd_buf[63] = 0x80030000
rrpl_buf[62] = 0x0, rrpl_buf[63] = 0x0
rcmd_buf[64] = 0x555555, rcmd_buf[65] = 0x80030010
rrpl_buf[64] = 0x0, rrpl_buf[65] = 0x0
rcmd_buf[66] = 0x0, rcmd_buf[67] = 0x80030000
rrpl_buf[66] = 0x555555, rrpl_buf[67] = 0x0
rcmd_buf[68] = 0xaaaaaa, rcmd_buf[69] = 0x80030010
rrpl_buf[68] = 0x0, rrpl_buf[69] = 0x0
rcmd_buf[70] = 0x0, rcmd_buf[71] = 0x80030000
rrpl_buf[70] = 0xaaaaaa, rrpl_buf[71] = 0x0
rcmd_buf[72] = 0xffffff, rcmd_buf[73] = 0x80030010
rrpl_buf[72] = 0x0, rrpl_buf[73] = 0x0
rcmd_buf[74] = 0x0, rcmd_buf[75] = 0x80030000
rrpl_buf[74] = 0xffffff, rrpl_buf[75] = 0x0
rcmd_buf[76] = 0x0, rcmd_buf[77] = 0x80030010
rrpl_buf[76] = 0x0, rrpl_buf[77] = 0x0
rcmd_buf[78] = 0x0, rcmd_buf[79] = 0x80030000
rrpl_buf[78] = 0x0, rrpl_buf[79] = 0x0
rcmd_buf[80] = 0x555555, rcmd_buf[81] = 0x80030010
rrpl_buf[80] = 0x0, rrpl_buf[81] = 0x0
rcmd_buf[82] = 0x0, rcmd_buf[83] = 0x80030000
rrpl_buf[82] = 0x555555, rrpl_buf[83] = 0x0
rcmd_buf[84] = 0xaaaaaa, rcmd_buf[85] = 0x80030010
rrpl_buf[84] = 0x0, rrpl_buf[85] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-3). ローカル例題プログラム、exam3の実行
これは、CAMACライブラリ関数の内、cam_exec_pio関数を使ってCAMACからの
割り込みのenable、disableをテストするための例題プログラムである。
(3-2-3a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 3
number of reply frames : 0
Z : data = 0 rply = 0
C : data = 0 rply = 0
set Inhibit : data = 0 rply = 0
remove Inhibit : data = 0 rply = 0
disable Interrupt : data = ffffff rply = 0
enable Interrupt : data = 0 rply = 0
write Interrupt enable bits : data = 0 rply = 0
read Interrupt enable bits : data = 0 rply = 0
set fast cycle : data = 555555 rply = 0
reset fast cyclc : data = 0 rply = 0
JNI, Java side: after Native Call array length = 10
(3-2-3b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 3
Ok. Start up an example program 3.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 10
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0x0, d_reply[1] = 0x0
c_reply[2] = 0x0, d_reply[2] = 0x0
c_reply[3] = 0x0, d_reply[3] = 0x0
c_reply[4] = 0x0, d_reply[4] = 0x0
c_reply[5] = 0x0, d_reply[5] = 0x0
c_reply[6] = 0x0, d_reply[6] = 0x0
c_reply[7] = 0x0, d_reply[7] = 0x0
c_reply[8] = 0x0, d_reply[8] = 0x0
c_reply[9] = 0x0, d_reply[9] = 0x0
c_reply[10] = 0x0, d_reply[10] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0x14
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0x0
rcmd_buf[2] = 0x0, rcmd_buf[3] = 0xc0190011
rrpl_buf[2] = 0x0, rrpl_buf[3] = 0x0
rcmd_buf[4] = 0x0, rcmd_buf[5] = 0x80190010
rrpl_buf[4] = 0x0, rrpl_buf[5] = 0x0
rcmd_buf[6] = 0x0, rcmd_buf[7] = 0x8019001a
rrpl_buf[6] = 0x0, rrpl_buf[7] = 0x0
rcmd_buf[8] = 0x0, rcmd_buf[9] = 0x80190018
rrpl_buf[8] = 0x0, rrpl_buf[9] = 0x0
rcmd_buf[10] = 0x0, rcmd_buf[11] = 0x80190118
rrpl_buf[10] = 0xffffff, rrpl_buf[11] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-4). ローカル例題プログラム、exam4の実行
これは、CAMACライブラリ関数の内、cam_exec_pio関数を使ってトリガ入力の
enable、disableを行い、イベント・カウンタの読み出しテストするための例題
プログラムである。
(3-2-4a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 3
number of reply frames : 0
Z : data = 0 rply = 0
C : data = 0 rply = 0
set Inhibit : data = 0 rply = 0
remove Inhibit : data = 0 rply = 0
disable Interrupt : data = ffffff rply = 0
enable Interrupt : data = 0 rply = 0
write Interrupt enable bits : data = 0 rply = 0
read Interrupt enable bits : data = 0 rply = 0
set fast cycle : data = 555555 rply = 0
reset fast cyclc : data = 0 rply = 0
JNI, Java side: after Native Call array length = 10
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 4
number of reply frames : 0
read status : data = 0 cmd = d0000000 : data = 0 rply = 0
clear busy out : data = 0 cmd = 90010000 : data = 0 rply = 0
clear event counter : data = 0 cmd = 90020000 : data = 0 rply = 0
enable trigger input : data = 0 cmd = b0030000 :data = 0 rply = 0
LAM frame : data = 0 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 1 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 2 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 3 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 4 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 5 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 6 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 7 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 8 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
LAM frame : data = 9 rply = 0
Clear BusyOut : data = 0 cmd = f0010000 : data = 0 rply = 0
number of reply frames : 0
read event counter : data = 0 cmd = d0000000 : data = 0 rply = 0
disable trigger input : data = 0 cmd = b0040000 : data = 0 rply = 0
JNI, Java side: after Native Call array length = 2
(3-2-4b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 4
Ok. Start up an example program 4.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 2
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0x0, d_reply[1] = 0x0
c_reply[2] = 0x0, d_reply[2] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0x4
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0x0
rcmd_buf[2] = 0x0, rcmd_buf[3] = 0xd0000000
rrpl_buf[2] = 0x0, rrpl_buf[3] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-5). ローカル例題プログラム、exam5の実行
これは、CAMACライブラリ関数の内、cam_exec_pio関数を使ってCAMACからの
割り込みのenable、disableを行い、CAMACスイッチ・レジスタからのLAMをテス
トするための例題プログラムである。
(3-2-5a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 5
number of reply frames : 0
Z : data = 0 rply = 0
C : data = 0 rply = 0
remove Inhibit : data = 0 rply = 0
enable Interrupt : data = 0 rply = 0
write Interrupt enable bits : data = ffffff rply = 0
read Interrupt enable bits : data = 0 rply = 0
number of reply frames : 0
SW enable interrupt : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
Tx Control = 0
Tx Status = bd5fed6c
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bd5fedb8
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bd5fed94
System = 4001f2da
number of reply frames : 0
LAM reply : data = 0 rply = 0
JNI, Java side: after Native Call array length = 1
(3-2-5b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 5
Ok. Start up an example program 5.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 1
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0x0, d_reply[1] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0x2
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-6). ローカル例題プログラム、exam6の実行
これは、CAMACライブラリ関数の内、cam_exec_pio関数を使ってenableトリガ
入力を実行後ioctl()でPCCIOC_WAIT_TRIGを行う例題プログラムである。
(3-2-6a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 6
number of reply frames : 0
enable trigger input : data = ffffff rply = 0
JNI, Java side: after Native Call array length = 1
(3-2-6b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 6
Ok. Start up an example program 6.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 1
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0x0, d_reply[1] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0x2
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-7). ローカル例題プログラム、exam21の実行
これは、CAMACライブラリ関数の内、cam_exec_dma_seq関数をテストするための
例題プログラムである。
(3-2-7a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 7
loop = 0
JNI, Java side: after Native Call array length = 13
(3-2-7b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 7
Ok. Start up an example program 21.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 13
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0x0, d_reply[1] = 0x0
c_reply[2] = 0x0, d_reply[2] = 0x0
c_reply[3] = 0x0, d_reply[3] = 0x0
c_reply[4] = 0x0, d_reply[4] = 0x0
c_reply[5] = 0x0, d_reply[5] = 0x0
c_reply[6] = 0x0, d_reply[6] = 0x0
c_reply[7] = 0x0, d_reply[7] = 0x0
c_reply[8] = 0x0, d_reply[8] = 0x0
c_reply[9] = 0x0, d_reply[9] = 0x0
c_reply[10] = 0x0, d_reply[10] = 0x0
c_reply[11] = 0x0, d_reply[11] = 0x0
c_reply[12] = 0x0, d_reply[12] = 0x0
c_reply[13] = 0x0, d_reply[13] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0x1a
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0x0
rcmd_buf[2] = 0x0, rcmd_buf[3] = 0xc0190011
rrpl_buf[2] = 0x0, rrpl_buf[3] = 0x0
rcmd_buf[4] = 0x0, rcmd_buf[5] = 0x80190010
rrpl_buf[4] = 0x0, rrpl_buf[5] = 0x0
rcmd_buf[6] = 0x0, rcmd_buf[7] = 0x80190018
rrpl_buf[6] = 0x0, rrpl_buf[7] = 0x0
rcmd_buf[8] = 0xffffff, rcmd_buf[9] = 0x80030010
rrpl_buf[8] = 0x0, rrpl_buf[9] = 0x0
rcmd_buf[10] = 0x0, rcmd_buf[11] = 0x80030000
rrpl_buf[10] = 0xffffff, rrpl_buf[11] = 0x0
rcmd_buf[12] = 0x0, rcmd_buf[13] = 0x80030010
rrpl_buf[12] = 0x0, rrpl_buf[13] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-8). ローカル例題プログラム、pio_write_readの実行
これは、ドライバに対してioctl()関数でPCCIOC_PUT_DATA,PCCIO_GET_DATAを
使ってCAMACアクセスをするための例題プログラムである。
(3-2-8a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 8
Tx Control = 0
Tx Status = bcfff0f8
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bcfff14c
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bcfff128
System = 4001f2da
Tx Control = 0
Tx Status = bcfff0f8
Tx Address = 4001f2da
Tx Preset Count = b1
Tx Actual Count = 482cfde3
Tx Fifo Count = bcfff14c
Rx Control = 42171560
Rx Status = 2c
Rx Address = 482cb040
Rx Preset Count = 1
Rx Actual Count = 0
Rx Fifo Count = bcfff128
System = 4001f2da
JNI, Java side: after Native Call array length = 13
(3-2-8b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 8
Ok. Start up an example program pio_write_read.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 13
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0x0, d_reply[1] = 0x0
c_reply[2] = 0x0, d_reply[2] = 0x0
c_reply[3] = 0x0, d_reply[3] = 0x0
c_reply[4] = 0x0, d_reply[4] = 0x0
c_reply[5] = 0x0, d_reply[5] = 0x0
c_reply[6] = 0x0, d_reply[6] = 0x0
c_reply[7] = 0x0, d_reply[7] = 0x0
c_reply[8] = 0x0, d_reply[8] = 0x0
c_reply[9] = 0x0, d_reply[9] = 0x0
c_reply[10] = 0x0, d_reply[10] = 0x0
c_reply[11] = 0x0, d_reply[11] = 0x0
c_reply[12] = 0x0, d_reply[12] = 0x0
c_reply[13] = 0x0, d_reply[13] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0x1a
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0x0
rcmd_buf[2] = 0x0, rcmd_buf[3] = 0xc0190011
rrpl_buf[2] = 0x0, rrpl_buf[3] = 0x0
rcmd_buf[4] = 0x0, rcmd_buf[5] = 0x80190010
rrpl_buf[4] = 0x0, rrpl_buf[5] = 0x0
rcmd_buf[6] = 0x0, rcmd_buf[7] = 0x80190018
rrpl_buf[6] = 0x0, rrpl_buf[7] = 0x0
rcmd_buf[8] = 0xffffff, rcmd_buf[9] = 0x80030010
rrpl_buf[8] = 0x0, rrpl_buf[9] = 0x0
rcmd_buf[10] = 0x0, rcmd_buf[11] = 0x80030000
rrpl_buf[10] = 0xffffff, rrpl_buf[11] = 0x0
rcmd_buf[12] = 0x0, rcmd_buf[13] = 0x80030010
rrpl_buf[12] = 0x0, rrpl_buf[13] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-9). ローカル例題プログラム、readの実行
これは、ドライバのreadシステムコールを使ってCAMAC読み出しを行うための
例題プログラムである。
(3-2-9a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 9
packet1 = ffffff packet2 = c0030010
packet1 = 0 packet2 = 80030000
packet1 = 4 packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 8 packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = c packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 555555 packet2 = 80030010
packet1 = 0 packet2 = a0030000
loop = 0
JNI, Java side: after Native Call array length = 13
(3-2-9b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = 9
Ok. Start up an example program read.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 13
c_reply[0] = 0x0, d_reply[0] = 0x0
c_reply[1] = 0x0, d_reply[1] = 0x0
c_reply[2] = 0x0, d_reply[2] = 0x0
c_reply[3] = 0x0, d_reply[3] = 0x0
c_reply[4] = 0x0, d_reply[4] = 0x0
c_reply[5] = 0x0, d_reply[5] = 0x0
c_reply[6] = 0x0, d_reply[6] = 0x0
c_reply[7] = 0x0, d_reply[7] = 0x0
c_reply[8] = 0x0, d_reply[8] = 0x0
c_reply[9] = 0x0, d_reply[9] = 0x0
c_reply[10] = 0x0, d_reply[10] = 0x0
c_reply[11] = 0x0, d_reply[11] = 0x0
c_reply[12] = 0x0, d_reply[12] = 0x0
c_reply[13] = 0x0, d_reply[13] = 0x0
rcmd_buf[0] = 0x7d0, rcmd_buf[1] = 0x1a
rrpl_buf[0] = 0x7d0, rrpl_buf[1] = 0x0
rcmd_buf[2] = 0x0, rcmd_buf[3] = 0xc0190011
rrpl_buf[2] = 0x0, rrpl_buf[3] = 0x0
rcmd_buf[4] = 0x0, rcmd_buf[5] = 0x80190010
rrpl_buf[4] = 0x0, rrpl_buf[5] = 0x0
rcmd_buf[6] = 0x0, rcmd_buf[7] = 0x80190018
rrpl_buf[6] = 0x0, rrpl_buf[7] = 0x0
rcmd_buf[8] = 0xffffff, rcmd_buf[9] = 0x80030010
rrpl_buf[8] = 0x0, rrpl_buf[9] = 0x0
rcmd_buf[10] = 0x0, rcmd_buf[11] = 0x80030000
rrpl_buf[10] = 0xffffff, rrpl_buf[11] = 0x0
rcmd_buf[12] = 0x0, rcmd_buf[13] = 0x80030010
rrpl_buf[12] = 0x0, rrpl_buf[13] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-10). ローカル例題プログラム、read_writeの実行
これは、ドライバのwriteシステムコールおよびpollシステムコールを使って
CAMAC読み出しを行うための例題プログラムである。
(3-2-10a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 10
packet1 = ffffff packet2 = c0030010
packet1 = 0 packet2 = 80030000
packet1 = 555555 packet2 = 80030010
packet1 = 0 packet2 = a0030000
packet1 = 0 packet2 = a0030000
Tx Control = 4065a080
Tx Status = 80feab4
Tx Address = 7
Tx Preset Count = 1
Tx Actual Count = 7
Tx Fifo Count = 80fe6c4
Rx Control = 80fe650
Rx Status = 80fe65c
Rx Address = 80fea48
Rx Preset Count = 4065a140
Rx Actual Count = 4ab33334
Rx Fifo Count = 1
System = 1d
retlen of write = 1079447936
data error : loop = 1, i = 0
written data read data
ffffff 40163654
c0030010 40163654
0 442a0f18
80030000 442a0fc0
4 442a0e70
80030010 442a0ff8
0 442a0ea8
80030000 442a0f50
8 442a0ee0
80030010 442a0f88
data error : loop = 1, i = 0
written data read data
0 442a0f18
80030000 442a0fc0
4 442a0e70
80030010 442a0ff8
0 442a0ea8
80030000 442a0f50
8 442a0ee0
80030010 442a0f88
data error : loop = 1, i = 0
written data read data
4 442a0e70
80030010 442a0ff8
0 442a0ea8
80030000 442a0f50
8 442a0ee0
80030010 442a0f88
data error : loop = 1, i = 0
written data read data
0 442a0ea8
80030000 442a0f50
8 442a0ee0
80030010 442a0f88
data error : loop = 1, i = 0
written data read data
8 442a0ee0
80030010 442a0f88
data error : loop = 1, i = 0
written data read data
data error : loop = 1, i = 0
written data read data
data error : loop = 1, i = 0
written data read data
data error : loop = 1, i = 0
written data read data
data error : loop = 1, i = 0
written data read data
loop = 0
JNI, Java side: after Native Call array length = 0
(3-2-10b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = a
Ok. Start up an example program read_write.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 0
c_reply[0] = 0x0, d_reply[0] = 0x0
rcmd_buf[0] = 0x0, rcmd_buf[1] = 0x0
rrpl_buf[0] = 0x0, rrpl_buf[1] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-11). ローカル例題プログラム、reg_dumpの実行
これは、ドライバに対してioctl()システムコールでPCCIOC_DUMP_REGISTERSを
使ってPCIレジスタをアクセスをするための例題プログラムである。
(3-2-11a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 11
Tx Control = 4065a080
Tx Status = 80feab4
Tx Address = 7
Tx Preset Count = 1
Tx Actual Count = 7
Tx Fifo Count = 80fe6c4
Rx Control = 80fe650
Rx Status = 80fe65c
Rx Address = 80fea48
Rx Preset Count = 4065a140
Rx Actual Count = 4ab33334
Rx Fifo Count = 1
System = 1d
JNI, Java side: after Native Call array length = 0
(3-2-11b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = b
Ok. Start up an example program reg_dump.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 0
c_reply[0] = 0x0, d_reply[0] = 0x0
rcmd_buf[0] = 0x0, rcmd_buf[1] = 0x0
rrpl_buf[0] = 0x0, rrpl_buf[1] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-12). ローカル例題プログラム、writeの実行
これは、ドライバのwriteシステムコールを使ってCAMAC書き込みを行うための
例題プログラムである。
(3-2-12a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 12
packet1 = ffffff packet2 = c0030010
packet1 = 0 packet2 = 80030000
packet1 = 4 packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 8 packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = c packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 10 packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 14 packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 18 packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 1c packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 20 packet2 = 80030010
packet1 = 0 packet2 = 80030000
packet1 = 555555 packet2 = 80030010
packet1 = 0 packet2 = a0030000
JNI, Java side: after Native Call array length = 0
(3-2-12b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = c
Ok. Start up an example program write.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 0
c_reply[0] = 0x0, d_reply[0] = 0x0
rcmd_buf[0] = 0x0, rcmd_buf[1] = 0x0
rrpl_buf[0] = 0x0, rrpl_buf[1] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') =
(3-2-13). ローカル例題プログラム、write_readの実行
これは、ドライバのwriteシステムコールおよびreadシステムコールを使って
CAMAC読み書きを行うための例題プログラムである。
(3-2-13a). サーバ側の実行
RMI: Server side:
RMI: Received CAMAC command: array length = 0
cmd[0] = 0x0, dat[0] = 0x0
JNI, Java side: before Native Call
ServerImpl.r_cmd[0] = 0x0, ServerImpl.r_dat[0] = 0x0
JNI, C side: Received CAMAC command: array length = 0
example number = 13
packet1 = ffffff packet2 = c0030010
packet1 = 0 packet2 = 80030000
packet1 = 555555 packet2 = 80030010
packet1 = 0 packet2 = a0030000
packet1 = 0 packet2 = a0030000
Tx Control = 4065a080
Tx Status = 80feaac
Tx Address = 7
Tx Preset Count = 1
Tx Actual Count = 7
Tx Fifo Count = 80fe6bc
Rx Control = 80fe648
Rx Status = 80fe654
Rx Address = 80fea40
Rx Preset Count = 4065a140
Rx Actual Count = 4ab33334
Rx Fifo Count = 1
System = 1d
loop = 0
JNI, Java side: after Native Call array length = 0
[root@onlsbc1 exam]#
(3-2-13b). クライアント側の実行
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = e
What's number of program which do you want to execute ? --- default:[1]
exam1:[1], exam2:[2], exam3:[3], exam4:[4], exam5:[5], exam6:[6], exam21:[7],
pio_write_read[8], read:[9], read_write:[a], reg_dump:[b], write:[c], write_rea
d:[d]
Number = d
Ok. Start up an example program write_read.
RMI: Client side:
RMI: Sent CAMAC command: array length =0
ClientImpl.scmd[0] = 0x0, ClientImpl.sdat[0] = 0x0
RMI: Received CAMAC reply: array length = 0
c_reply[0] = 0x0, d_reply[0] = 0x0
rcmd_buf[0] = 0x0, rcmd_buf[1] = 0x0
rrpl_buf[0] = 0x0, rrpl_buf[1] = 0x0
(1). Enter 'q' to quit.
(2). Enter 'e' to execute an example program.
(3). Enter 's' to set up Single action CAMAC command
(4). Enter 'g' to start up command execution.
Execution Command('q' or 'e' or 'g' or 's' or 'd') = q
Quited Program. Enter Ctl-C.
[inoue@onlpara exam]$
ok. ダミーのCAMACライブラリーを使っての、リモートマシン onlpara から
ターゲットマシンonlsbc1上での例題ソフトの実行は正常に実行できた。
---xxxx