Low-Energy Muon (LEM) Experiment  0.5.1
scs900_scfe.c
Go to the documentation of this file.
1 /********************************************************************\
2 
3  Name: scs900_scfe.c
4  Created by: Andreas Suter
5 
6  Contents: Midas Slowcontrol Frontend to readout the SCS900 (ADC/DAC)
7  and SCS400 (thermo coupler)
8 
9 
10 \********************************************************************/
11 
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 #include <math.h>
16 
17 #include "midas.h"
18 #include "class/multi.h"
19 #include "scs900.h"
20 #include "scs400.h"
21 #include "bus/null.h"
22 
23 //-- Globals -------------------------------------------------------
24 
26 char *frontend_name = "SCS900 SC";
28 char *frontend_file_name = __FILE__;
29 
31 BOOL frontend_call_loop = TRUE;
32 
34 INT display_period = 1000;
35 
37 INT max_event_size = 10000;
38 
40 INT max_event_size_frag = 5*1024*1024;
41 
43 INT event_buffer_size = 10*10000;
44 
45 //-- Equipment list ------------------------------------------------
46 
48 /*
49 DEVICE_DRIVER scs900_driver[] = {
50  { "SCS900_1_ADC", scs900_in, 8, null, DF_INPUT | DF_MULTITHREAD },
51  { "SCS900_1_DAC", scs900_out, 8, null, DF_OUTPUT | DF_MULTITHREAD },
52  { "SCS900_2_ADC", scs900_in, 8, null, DF_INPUT | DF_MULTITHREAD },
53  { "SCS900_2_DAC", scs900_out, 8, null, DF_OUTPUT | DF_MULTITHREAD },
54  { "SCS900_3_ADC", scs900_in, 8, null, DF_INPUT | DF_MULTITHREAD },
55  { "SCS900_3_DAC", scs900_out, 8, null, DF_OUTPUT | DF_MULTITHREAD },
56  { "SCS900_4_ADC", scs900_in, 8, null, DF_INPUT | DF_MULTITHREAD },
57  { "SCS900_4_DAC", scs900_out, 8, null, DF_OUTPUT | DF_MULTITHREAD },
58  { "" }
59 };
60 */
61 DEVICE_DRIVER scs900_driver[] = {
62  { "SCS900_1_ADC", scs900_in, 8, null, DF_INPUT },
63  { "SCS900_1_DAC", scs900_out, 8, null, DF_OUTPUT },
64  { "SCS900_2_ADC", scs900_in, 8, null, DF_INPUT },
65  { "SCS900_2_DAC", scs900_out, 8, null, DF_OUTPUT },
66  { "SCS900_3_ADC", scs900_in, 8, null, DF_INPUT },
67  { "SCS900_3_DAC", scs900_out, 8, null, DF_OUTPUT },
68  { "SCS900_4_ADC", scs900_in, 8, null, DF_INPUT },
69  { "SCS900_4_DAC", scs900_out, 8, null, DF_OUTPUT },
70  { "" }
71 };
72 
74 /*
75 DEVICE_DRIVER scs400_driver[] = {
76  { "SCS400IN", scs400_in, 24, null, DF_INPUT | DF_MULTITHREAD },
77  { "SCS400OUT", scs400_out, 33, null, DF_OUTPUT | DF_MULTITHREAD },
78  { "" }
79 };
80 */
81 DEVICE_DRIVER scs400_driver[] = {
82  { "SCS400IN", scs400_in, 24, null, DF_INPUT },
83  { "SCS400OUT", scs400_out, 33, null, DF_OUTPUT },
84  { "" }
85 };
86 
87 
89 EQUIPMENT equipment[] = {
90 
91  { "SCS900", // equipment name
92  {51, 0, // event ID, trigger mask
93  "SYSTEM", // event buffer
94  EQ_SLOW, // equipment type
95  0, // event source
96  "FIXED", // format
97  TRUE, // enabled
98  RO_RUNNING |
99  RO_TRANSITIONS, // read when running and on transitions
100  30000, // read every 30 sec
101  0, // stop run after this event limit
102  0, // number of sub events
103  1, // log history every event
104  "", "", "",},
105  cd_multi_read, // readout routine
106  cd_multi, // class driver main routine
107  scs900_driver, // device driver list
108  NULL, // init string
109  },
110 
111  { "SCS400", // equipment name
112  {60, 0, // event ID, trigger mask
113  "SYSTEM", // event buffer
114  EQ_SLOW, // equipment type
115  0, // event source
116  "FIXED", // format
117  TRUE, // enabled
118  RO_RUNNING |
119  RO_TRANSITIONS, // read when running and on transitions
120  30000, // read every 30 sec
121  0, // stop run after this event limit
122  0, // number of sub events
123  1, // log history every event
124  "", "", "",},
125  cd_multi_read, // readout routine
126  cd_multi, // class driver main routine
127  scs400_driver, // device driver list
128  NULL, // init string
129  },
130 
131  { "" }
132 };
133 
134 
135 
136 //-- Dummy routines ------------------------------------------------
137 
138 INT poll_event(INT source[], INT count, BOOL test) {return 1;};
139 INT interrupt_configure(INT cmd, INT source[], PTYPE adr) {return 1;};
140 
141 //-- Frontend Init -------------------------------------------------
147 {
148  // de-register run-transition notifications
149  cm_deregister_transition(TR_START);
150  cm_deregister_transition(TR_STOP);
151  cm_deregister_transition(TR_PAUSE);
152  cm_deregister_transition(TR_RESUME);
153 
154  return CM_SUCCESS;
155 }
156 
157 //-- Frontend Exit -------------------------------------------------
163 {
164  return CM_SUCCESS;
165 }
166 
167 //-- Frontend Loop -------------------------------------------------
173 {
174  return CM_SUCCESS;
175 }
176 
177 //-- Begin of Run --------------------------------------------------
182 INT begin_of_run(INT run_number, char *error)
183 {
184  return CM_SUCCESS;
185 }
186 
187 //-- End of Run ----------------------------------------------------
192 INT end_of_run(INT run_number, char *error)
193 {
194  return CM_SUCCESS;
195 }
196 
197 //-- Pause Run -----------------------------------------------------
202 INT pause_run(INT run_number, char *error)
203 {
204  return CM_SUCCESS;
205 }
206 
207 //-- Resume Run ----------------------------------------------------
212 INT resume_run(INT run_number, char *error)
213 {
214  return CM_SUCCESS;
215 }
216 
217 //------------------------------------------------------------------
INT interrupt_configure(INT cmd, INT source, PTYPE adr)
Definition: vme_fe.c:2119
char * frontend_name
experiment specific ODB structures
Definition: vme_fe.c:159
EQUIPMENT equipment[]
Definition: vme_fe.c:326
INT max_event_size_frag
maximum event size for fragmented events (EQ_FRAGMENTED)
Definition: vme_fe.c:174
INT scs900_in(INT cmd,...)
Definition: scs900.c:475
INT end_of_run(INT run_number, char *error)
Definition: vme_fe.c:858
INT scs400_out(INT cmd,...)
Definition: scs400.c:655
INT frontend_init()
Definition: vme_fe.c:416
INT frontend_loop()
Definition: vme_fe.c:949
INT scs900_out(INT cmd,...)
Definition: scs900.c:527
BOOL frontend_call_loop
frontend_loop is called periodically if this variable is TRUE
Definition: vme_fe.c:165
INT max_event_size
maximum event size produced by this frontend
Definition: vme_fe.c:171
INT pause_run(INT run_number, char *error)
Definition: vme_fe.c:886
INT frontend_exit()
Definition: vme_fe.c:557
INT event_buffer_size
buffer size to hold events
Definition: vme_fe.c:177
char * frontend_file_name
The frontend file name, don&#39;t change it.
Definition: vme_fe.c:162
INT poll_event(INT source, INT count, BOOL test)
Definition: vme_fe.c:2102
INT scs400_in(INT cmd,...)
Definition: scs400.c:604
DEVICE_DRIVER scs900_driver[]
device driver list for the SCS900 ADC/DAC modules
Definition: scs900_scfe.c:61
INT begin_of_run(INT run_number, char *error)
Definition: vme_fe.c:589
DEVICE_DRIVER scs400_driver[]
device driver list for the SCS400 thermo coupler module
Definition: scs900_scfe.c:81
INT display_period
a frontend status page is displayed with this frequency in ms
Definition: vme_fe.c:168
INT resume_run(INT run_number, char *error)
Definition: vme_fe.c:893