30#define CAMST CAM_OFF+30
31#define CAM16I CAM_OFF+29
32#define CAM24I CAM_OFF+28
33#define CAM16I_Q CAM_OFF+27
34#define CAM24I_Q CAM_OFF+26
35#define CAM16I_R CAM_OFF+25
36#define CAM24I_R CAM_OFF+24
37#define CAM16I_RQ CAM_OFF+23
38#define CAM24I_RQ CAM_OFF+22
39#define CAM16I_SA CAM_OFF+21
40#define CAM24I_SA CAM_OFF+20
41#define CAM16I_SN CAM_OFF+19
42#define CAM24I_SN CAM_OFF+18
44#define CAM16O CAM_OFF+17
45#define CAM24O CAM_OFF+16
46#define CAM16O_Q CAM_OFF+15
47#define CAM24O_Q CAM_OFF+14
48#define CAM16O_R CAM_OFF+13
49#define CAM24O_R CAM_OFF+12
51#define CAMC CAM_OFF+11
52#define CAMC_Q CAM_OFF+10
53#define CAMC_SA CAM_OFF+9
54#define CAMC_SN CAM_OFF+8
56#define CAM_LAM_ENABLE CAM_OFF+7
57#define CAM_LAM_READ CAM_OFF+6
58#define CAM_LAM_DISABLE CAM_OFF+5
59#define CAM_LAM_CLEAR CAM_OFF+4
60#define CAM_INHIBIT_CLEAR CAM_OFF+3
61#define CAM_INHIBIT_SET CAM_OFF+2
62#define CAM_CRATE_CLEAR CAM_OFF+1
63#define CAM_CRATE_ZINIT CAM_OFF+0
67 "CAM_CRATE_ZINIT",
"CAM_CRATE_CLEAR",
"CAM_INHIBIT_SET",
"CAM_INHIBIT_CLEAR",
68 "CAM_LAM_CLEAR",
"CAM_LAM_DISABLE",
"CAM_LAM_READ",
"CAM_LAM_ENABLE",
69 "CAMC_SN",
"CAMC_SA",
"CAMC_Q",
"CAMC",
70 "CAM24O_R",
"CAM16O_R",
"CAM24O_Q",
"CAM16O_Q",
"CAM24O",
"CAM16O",
71 "CAM24I_SN",
"CAM16I_SN",
"CAM24I_SA",
"CAM16I_SA",
72 "CAM24I_RQ",
"CAM16I_RQ",
"CAM24I_R",
"CAM16I_R",
73 "CAM24I_Q",
"CAM16I_Q",
"CAM24I",
"CAM16I",
"CAMST",
""
94CAMAC Prompt[2] = { {24, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0},
119 if (p->
a == 9 && p->
f == 24)
121 else if (p->
a == 9 && p->
f == 26)
123 else if (p->
a >= 0 && p->
a < 8 && p->
f == 1)
125 else if (p->
a >= 13 && p->
f == 17)
127 else if (p->
a >= 12 && p->
f == 17)
131 }
else if (p->
n == 28 && (p->
a == 8 || p->
a == 9)) {
132 if (p->
a == 8 && p->
f == 26)
134 else if (p->
a == 9 && p->
f == 26)
136 }
else if (p->
m == 24)
185 printf(
"cam_lam_enable:C%i-N%i\n", p->
c, p->
n);
189 printf(
"cam_lam_disable:C%i-N%i\n", p->
c, p->
n);
193 printf(
"cam_lam_read:C%i-> 0x%x\n", p->
c,
lam);
197 printf(
"cam_lam_clear:C%i \n", p->
c);
201 printf(
"cam_inhibit_set:C%i\n", p->
c);
205 printf(
"cam_inhibit_clear:C%i\n", p->
c);
209 printf(
"cam_crate_clear:C%i\n", p->
c);
213 printf(
"cam_crate_zinit:C%i\n", p->
c);
219 printf(
"camc:[R%i]-C%i-N%i-A%i-F%i\n", ++
i, p->
c, p->
n, p->
a, p->
f);
225 printf(
"camc_q:[R%i]-C%i-N%i-A%i-F%i -Q:%i\n", ++
i, p->
c, p->
n, p->
a, p->
f,
231 printf(
"camc_sa:C%i-N%i-A%i-F%i\n", p->
c, p->
n, p->
a, p->
f);
235 printf(
"camc_sn:C%i-N%i-A%i-F%i\n", p->
c, p->
n, p->
a, p->
f);
241 printf(
"cam16o:[R%i]-C%i-N%i-A%i-F%i <- 0x%x\n", ++
i, p->
c, p->
n, p->
a, p->
f,
248 printf(
"cam24o:[R%i]-C%i-N%i-A%i-F%i <- 0x%x\n", ++
i, p->
c, p->
n, p->
a, p->
f,
255 printf(
"cam16o_q:[R%i]-C%i-N%i-A%i-F%i <- 0x%x X:%i-Q:%i\n", ++
i, p->
c, p->
n,
256 p->
a, p->
f, p->
d16, p->
x, p->
q);
262 printf(
"cam24o_q:[R%i]-C%i-N%i-A%i-F%i <- 0x%x X:%i-Q:%i\n", ++
i, p->
c, p->
n,
263 p->
a, p->
f, p->
d24, p->
x, p->
q);
268 printf(
"cam16o_r:C%i-N%i-A%i-F%i <- 0x%x\n", p->
c, p->
n, p->
a, p->
f, p->
d16);
272 printf(
"cam24o_r:C%i-N%i-A%i-F%i <- 0x%x\n", p->
c, p->
n, p->
a, p->
f, p->
d24);
278 printf(
"cam16i:[R%i]-C%i-N%i-A%i-F%i-> 0x%4.4x\n", ++
i, p->
c, p->
n, p->
a,
285 printf(
"cam24i:[R%i]-C%i-N%i-A%i-F%i-> 0x%6.6x\n", ++
i, p->
c, p->
n, p->
a,
292 printf(
"cam16i_q:[R%i]-C%i-N%i-A%i-F%i-> 0x%4.4x X:%i-Q:%i\n", ++
i, p->
c,
293 p->
n, p->
a, p->
f, p->
d16, p->
x, p->
q);
299 printf(
"cam24i_q:[R%i]-C%i-N%i-A%i-F%i-> 0x%6.6x X:%i-Q:%i\n", ++
i, p->
c,
300 p->
n, p->
a, p->
f, p->
d24, p->
x, p->
q);
306 for (
i = 0;
i < p->
r;
i++)
307 printf(
"cam16i_r:[R%i]-C%i-N%i-A%i-F%i-> 0x%4.4x\n",
i + 1, p->
c, p->
n, p->
a,
313 for (
i = 0;
i < p->
r;
i++)
314 printf(
"cam24i_r:[R%i]-C%i-N%i-A%i-F%i-> 0x%6.6x\n",
i + 1, p->
c, p->
n, p->
a,
320 for (
i = 0;
i < p->
r;
i++)
321 printf(
"cam16i_rq:[R%i]-C%i-N%i-A%i-F%i-> 0x%4.4x\n",
i + 1, p->
c, p->
n, p->
a,
327 for (
i = 0;
i < p->
r;
i++)
328 printf(
"cam24i_rq:[R%i]-C%i-N%i-A%i-F%i-> 0x%6.6x\n",
i + 1, p->
c, p->
n,
334 for (
i = 0;
i < p->
r;
i++)
335 printf(
"cam16i_sa:[R%i]-C%i-N%i-A%i-F%i-> 0x%4.4x\n",
i + 1, p->
c, p->
n,
341 for (
i = 0;
i < p->
r;
i++)
342 printf(
"cam24i_sa:[R%i]-C%i-N%i-A%i-F%i-> 0x%6.6x\n",
i + 1, p->
c, p->
n,
348 for (
i = 0;
i < p->
r;
i++)
349 printf(
"cam16i_sn:[R%i]-C%i-N%i-A%i-F%i-> 0x%x\n",
i + 1, p->
c, p->
n +
i,
355 for (
i = 0;
i < p->
r;
i++)
356 printf(
"cam24i_sn:[R%i]-C%i-N%i-A%i-F%i-> 0x%x\n",
i + 1, p->
c, p->
n +
i,
379 sprintf(
saddr,
"B%01dC%01dN%02dA%02dF%02d [%d/0x%06x Q%01dX%01d] R%dW%dM%2d",
380 p->
b, p->
c, p->
n, p->
a, p->
f, p->
d24, p->
d24, p->
q, p->
x, p->
r, p->
w,
383 sprintf(
saddr,
"B%01dC%01dN%02dA%02dF%02d [%d/0x%04x Q%01dX%01d] R%dW%dM%2d",
384 p->
b, p->
c, p->
n, p->
a, p->
f, p->
d16, p->
d16, p->
q, p->
x, p->
r, p->
w,
387 sprintf(
saddr,
"B%01dC%01dN%02dA%02dF%02d [%d/0x%06x] R%d", p->
b, p->
c, p->
n,
442 char str[128], line[128];
484 strcpy(line, &
str[1]);
493 for (
j = 0;
j <
P->r;
j++) {
499 if (p->
n == 28 || p->
n == 29 || p->
n == 30)
501 else if (p->
m == 24) {
564 char empty[17] = {
" " };
566 char pp[128], *p, *s, *
ps;
587 if ((*s ==
'B') || (*s ==
'C') ||
588 (*s ==
'N') || (*s ==
'A') ||
589 (*s ==
'F') || (*s ==
'C') ||
590 (*s ==
'R') || (*s ==
'W') ||
591 (*s ==
'G') || (*s ==
'H') || (*s ==
'E') || (*s ==
'Q'))
593 else if ((*s ==
'X') || (*s ==
'D') || (*s ==
'O')) {
626 if (
tmp <= 0xffffff) {
630 printf(
"mcnaf-E- Data out of range 0x0:0xffffff\n");
637 printf(
"mcnaf-E- Data out of range 0x0:0xffff\n");
647 if (
tmp <= 077777777) {
651 printf(
"mcnaf-E- Data out of range O0:O77777777\n");
654 if (
tmp <= 0177777) {
658 printf(
"mcnaf-E- Data out of range O0:O177777\n");
668 if (
tmp <= 0xffffff) {
672 printf(
"mcnaf-E- Data out of range 0:16777215\n");
679 printf(
"mcnaf-E- Data out of range 0:65535\n");
684 if ((cmd =
strchr(p,
'B'))) {
692 printf(
"mcnaf-E- B out of range 0:7\n");
695 if ((cmd =
strchr(p,
'C'))) {
703 printf(
"mcnaf-E- C out of range 0:7\n");
706 if ((cmd =
strchr(p,
'N'))) {
714 printf(
"mcnaf-E- N out of range 0:31\n");
717 if ((cmd =
strchr(p,
'A'))) {
725 printf(
"mcnaf-E- A out of range 0:15\n");
728 if ((cmd =
strchr(p,
'F'))) {
736 printf(
"mcnaf-E- F out of range 0:31\n");
739 if ((cmd =
strchr(p,
'R'))) {
748 printf(
"mcnaf-E- R out of range 1:1000\n");
751 if ((cmd =
strchr(p,
'W'))) {
758 printf(
"mcnaf-E- W out of range 0:10000\n");
761 if ((cmd =
strchr(p,
'M'))) {
768 printf(
"mcnaf-E- M out of range 16,24\n");
783 printf(
" Interactive Midas CAMAC command\n");
784 printf(
" ===============================\n");
785 printf(
" Output : Data [dec/hex X=0/1 - Q=0/1 ]\n");
786 printf(
" Inputs : Bx : Branch [0 - 7] Cx : Crate [0 - 7]\n");
787 printf(
" Nx : Slot [1 - 31] Ax : SubAdd. [0 - 15]\n");
788 printf(
" Fx : Function [0 - 31] Mx : Access mode [16,24]\n");
789 printf(
" H : HELP on CNAF E/Q: Exit/Quit from CNAF\n");
790 printf(
" Rx : Repetition counter [1 - 999]\n");
791 printf(
" Wx : Delay between command (ms) [0 - 10000]\n");
792 printf(
" P : Switch to MCStd CAMAC operation\n");
793 printf(
" J : Perform JOB (command list from file )\n");
794 printf(
" Same syntax as in interactive session\n");
795 printf(
" G : PERFORM ACTION of predefine set-up\n");
796 printf(
" D : Decimal Data [0 - max data_size]\n");
797 printf(
" O : Octal Data [0 - max data_size]\n");
798 printf(
" X : Hexadecimal Data [0 - max data_size]\n");
800 printf(
">>>>>>>>>> Data has to be given LAST if needed in the command string <<<<<\n");
802 printf(
" The commands below are following the ESONE standard for a A2 controller\n");
803 printf(
" N30A9F24 : Crate clear inhibit N30A9F26 : Crate set inhibit\n");
804 printf(
" N28A8F26 : Z crate N28A9F26 : C crate\n");
805 printf(
" N30A13F17: CC Lam enable N30A12F17: CC Lam disable\n");
806 printf(
" N30A0-7F1: CC read Lam\n");
809 printf(
">mcnaf -cl\"triggerFE\" -h local -e myexpt\n");
810 printf(
" CNAF> [B0C1N30A00F00 [0/0x000000 Q0X0] R1W0M24] :n30a9f24\n");
811 printf(
" CNAF> [B0C1N06A00F24 [0/0x000000 Q1X1] R1W0M24] :n6f9a0\n");
814 printf(
" Interactive MCStd CAMAC command\n");
815 printf(
"The action taken is dependent on the driver implementation\n");
816 printf(
"[Q/E] : Exit this level\n");
817 printf(
"[G] <function> : Issue the given function on preset CAMAC address\n");
818 printf(
"Possible functions are:\n");
819 printf(
"cam16/24i : 16/24bit input\n");
820 printf(
"cam16/24i_q : 16/24bit input with Q response\n");
821 printf(
"cam16/24i_r : 16/24bit input repeat until R reached (max 100)\n");
822 printf(
"cam16/24i_rq : 16/24bit input repeat until NoQ or R reached (max 100)\n");
823 printf(
"cam16/24i_sa : 16/24bit input scan R times over A\n");
824 printf(
"cam16/24i_sn : 16/24bit input scan R times over N\n");
825 printf(
"cam16/24o : 16/24bit output\n");
826 printf(
"cam16/24o_q : 16/24bit output with Q response\n");
827 printf(
"cam16/24o_r : 16/24bit output repeat R times\n");
828 printf(
"camc : 16bit command \n");
829 printf(
"camc_q : 16bit command with Q response\n");
830 printf(
"camc_sa : 16bit command scan R times over A\n");
831 printf(
"camc_sn : 16bit command scan R times over N\n");
832 printf(
"cam_lam_enable : Enable lam in Crate controller ONLY\n");
833 printf(
"cam_lam_disable : Disable lam in Crate controlled ONLY\n");
834 printf(
"cam_lam_read : Read lam from Crate controller\n");
835 printf(
"cam_inhibit_clear: Reset Inhibit line in crate\n");
836 printf(
"cam_inhibit_set : Set Inhibit line in crate\n");
837 printf(
"cam_crate_clear : Generate a Clear cycle to the crate\n");
838 printf(
"cam_crate_zinit : Generate a Z cycle to the crate\n");
865 else if (
argv[
i][0] ==
'-') {
876 else if (
argv[
i][1] ==
'c') {
878 printf(
"error: command line too long (>256).\n");
881 strcpy(cmd,
argv[++
i]);
885 printf(
"usage: mcnaf [-f Frontend] [-h Hostname] [-e Experiment] [-s RPC server]\n");
886 printf(
" [-c Command] [-c @CommandFile] \n\n");
INT cm_get_environment(char *host_name, int host_name_size, char *exp_name, int exp_name_size)
const char * cm_get_revision()
EXTERNAL void EXPRT cam24o_q(const int c, const int n, const int a, const int f, DWORD d, int *x, int *q)
EXTERNAL void EXPRT cam16i_q(const int c, const int n, const int a, const int f, WORD *d, int *x, int *q)
EXTERNAL void EXPRT camc_q(const int c, const int n, const int a, const int f, int *q)
EXTERNAL void EXPRT cam16i(const int c, const int n, const int a, const int f, WORD *d)
EXTERNAL void EXPRT cam_lam_enable(const int c, const int n)
EXTERNAL void EXPRT cam_inhibit_set(const int c)
EXTERNAL int EXPRT cam_init(void)
EXTERNAL void EXPRT cam24i_q(const int c, const int n, const int a, const int f, DWORD *d, int *x, int *q)
EXTERNAL void EXPRT cam_lam_clear(const int c, const int n)
EXTERNAL void EXPRT cam_inhibit_clear(const int c)
EXTERNAL int EXPRT cam_init_rpc(const char *host_name, const char *exp_name, const char *fe_name, const char *client_name, const char *rpc_server)
EXTERNAL void EXPRT cam24i_sa(const int c, const int n, const int a, const int f, DWORD **d, const int r)
EXTERNAL void EXPRT cam24i(const int c, const int n, const int a, const int f, DWORD *d)
EXTERNAL void EXPRT cam16o_q(const int c, const int n, const int a, const int f, WORD d, int *x, int *q)
EXTERNAL void cam_lam_read(const int c, DWORD *lam)
EXTERNAL void EXPRT cam16o_r(const int c, const int n, const int a, const int f, WORD *d, const int r)
EXTERNAL void EXPRT cam_op()
EXTERNAL void EXPRT cam_lam_disable(const int c, const int n)
EXTERNAL void EXPRT cam16o(const int c, const int n, const int a, const int f, WORD d)
EXTERNAL void EXPRT cam24o_r(const int c, const int n, const int a, const int f, DWORD *d, const int r)
EXTERNAL void EXPRT cam24i_r(const int c, const int n, const int a, const int f, DWORD **d, const int r)
EXTERNAL void EXPRT cam16i_sa(const int c, const int n, const int a, const int f, WORD **d, const int r)
EXTERNAL void EXPRT cam24i_sn(const int c, const int n, const int a, const int f, DWORD **d, const int r)
EXTERNAL void EXPRT cam24o(const int c, const int n, const int a, const int f, DWORD d)
EXTERNAL void EXPRT cam_exit(void)
EXTERNAL void EXPRT cam_crate_clear(const int c)
EXTERNAL void EXPRT cam16i_rq(const int c, const int n, const int a, const int f, WORD **d, const int r)
EXTERNAL void EXPRT camc(const int c, const int n, const int a, const int f)
EXTERNAL void EXPRT cam24i_rq(const int c, const int n, const int a, const int f, DWORD **d, const int r)
EXTERNAL void EXPRT cam_crate_zinit(const int c)
EXTERNAL void EXPRT cam16i_r(const int c, const int n, const int a, const int f, WORD **d, const int r)
INT ss_sleep(INT millisec)
char * ss_gets(char *string, int size)
char exp_name[NAME_LENGTH]
BOOL debug
debug printouts
char host_name[HOST_NAME_LENGTH]
INT cnafsub(BOOL, char *)
void help_page(INT which)
void cc_services(CAMAC *p)
INT read_job_file(FILE *pF, INT action, CAMAC **job, char *name)
#define CAM_INHIBIT_CLEAR
INT decode_line(CAMAC *p, char *str)
void make_display_string(int from, CAMAC *p, char *saddr)
void mcstd_func(CAMAC *PP)
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
#define P(a, b, c, d, e, f, g, h, x, K)