/[PAMELA software]/quicklook/dataToXML/Data/compilationInfo/src/INFN/RM_RunManager_INFN.c
ViewVC logotype

Contents of /quicklook/dataToXML/Data/compilationInfo/src/INFN/RM_RunManager_INFN.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Tue Apr 25 09:00:20 2006 UTC (19 years, 2 months ago) by kusanagi
Branch: MAIN
CVS Tags: dataToXML1_02/01, dataToXML1_02/00, dataToXML1_03/00, dataToXML1_03/01, dataToXML1_00/00, firstRelease, dataToXML1_01/00, dataToXML1_03_02, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
These program extract in an XML format the info contained into the ROOT files generated by YODA from the PAMELA data. To visualize the XML files in a more human readable format a collection of XSL files are given in the Data subfolder.

1 /****************************************************************************
2 * F i l e D a t a
3 * $Id: RM_RunManager_INFN.c,v 1.138 2005/03/23 10:22:56 sebastiani Exp $
4 * $Revision: 1.138 $
5 * $Date: 2005/03/23 10:22:56 $
6 * $RCSfile: RM_RunManager_INFN.c,v $
7 *
8 ****************************************************************************
9 * S W D e v e l o p m e n t E n v i r o n m e n t
10 *
11 * $Author: sebastiani $
12 * :
13 ****************************************************************************
14 * U p d a t i n g
15 *
16 * $Log: RM_RunManager_INFN.c,v $
17 * Revision 1.138 2005/03/23 10:22:56 sebastiani
18 * RM_Init_ParamBuffers called in RM_Init
19 *
20 * Revision 1.137 2005/03/21 13:46:49 faber
21 * TRIG_II software introeduces as emtpy commands.
22 * DNLK_TIM started at start downlink in order to be sure end of download.
23 *
24 * Revision 1.136 2005/03/20 18:25:59 sebastiani
25 * new formato of run header. better logging. PRH_VAR_TB_OK removed
26 *
27 * Revision 1.135 2005/03/15 17:28:55 faber
28 * TRIG_II level first introduced
29 *
30 * Revision 1.134 2005/03/14 16:12:58 sebastiani
31 * WS3 debugging:some fixes
32 *
33 * Revision 1.133 2005/03/13 18:13:38 sebastiani
34 * RM_OP_DOWNLOAD_HEADER operation introduced to write haader for the VRL (instead of mashroute)
35 *
36 * Revision 1.132 2005/03/06 14:54:46 sebastiani
37 * version running on 06 03 2005
38 *
39 * Revision 1.131 2005/02/22 18:09:25 sebastiani
40 * various bugfixes
41 *
42 * Revision 1.130 2005/02/21 08:58:29 sebastiani
43 * all log comments completed
44 *
45 * Revision 1.129 2005/02/19 10:19:38 sebastiani
46 * ALM_S4_CALIB_00_HARD,ALM_S4_CALIB_00_SOFT,ALM_S4_128TRIGGER_0 added
47 *
48 * Revision 1.127 2005/01/11 13:59:48 faber
49 * *** empty log message ***
50 *
51 * Revision 1.126 2005/01/10 14:02:13 faber
52 * TRG,AC_1,AC_2,TOF Error Handler reviewed
53 *
54 * Revision 1.125 2005/01/10 09:48:35 sebastiani
55 * fix warning
56 *
57 * Revision 1.124 2005/01/07 15:41:51 sebastiani
58 * fix alarm precedure
59 * add exp 64 delay patch
60 * removed unused sleep
61 *
62 * Revision 1.123 2004/12/21 17:44:55 faber
63 * CAL_DSP_MASK into RunHeader
64 *
65 * Revision 1.122 2004/12/21 16:35:54 faber
66 * DUMMY command introduced into ACQ command queue in case of ACQ_After_Calib
67 * and TRK_OK
68 *
69 * Revision 1.121 2004/12/21 14:14:16 sebastiani
70 * RM_TaskSuspendUnlessSINT bug fix if time is zero
71 *
72 * Revision 1.120 2004/12/21 11:14:09 faber
73 * {Var,Arr,Tab} not stored in mass memory re now dumped in the Flush procedure
74 *
75 * Revision 1.119 2004/12/20 14:02:04 faber
76 * @LOG entry introduced in all ALM_WriteLog occurrences
77 *
78 * Revision 1.118 2004/12/20 10:02:12 faber
79 * TRK initialization/calibration/acq procedure fixes
80 *
81 * Revision 1.117 2004/12/17 16:20:59 faber
82 * *** empty log message ***
83 *
84 * Revision 1.116 2004/12/17 12:46:40 faber
85 * ALARM REGISTER aligned to be 32 bit. memory aling core dump (should be) fixed
86 *
87 * Revision 1.115 2004/12/15 14:13:28 faber
88 * femask and acq_build_info introduced in Run header
89 *
90 * Revision 1.114 2004/12/15 09:29:43 sebastiani
91 * FT_piChangeAcqMode(SM_DAQSETUP); removed from Send_ForceIDAQ; '|0x0002' removed in khb_status=ALM_FE_Acquisition_Check() | 0x0002; new information in the run header
92 *
93 * Revision 1.113 2004/12/02 10:43:38 sebastiani
94 * fix AC
95 * fix CAL
96 * fix HK BUFTYPE
97 *
98 * Revision 1.112 2004/11/30 12:50:14 faber
99 * *** empty log message ***
100 *
101 * Revision 1.111 2004/11/30 11:51:53 faber
102 * AC+AC2 software moved into AC_1 AC_2
103 * new calibration and initialization for AC
104 * first version,never run
105 *
106 * Revision 1.110 2004/11/19 15:14:52 sebastiani
107 * PRH_EXTERN_{VAR,ARR,TABLE} removed and put them on the autogenerated parameter heeader file
108 *
109 * Revision 1.109 2004/11/10 17:00:00 sebastiani
110 * - GS_COMPILE directive introduced and be undef by default
111 * - automatic flush mechanism by run manager mailbox timeout
112 *
113 * Revision 1.108 2004/11/05 16:43:07 sebastiani
114 * *** empty log message ***
115 *
116 * Revision 1.107 2004/11/05 09:36:35 sebastiani
117 * first version of the PM state machine. tried but not deeply tested
118 *
119 * Revision 1.106 2004/11/02 15:41:39 faber
120 * *** empty log message ***
121 *
122 * Revision 1.105 2004/10/11 07:28:14 sebastiani
123 * *** empty log message ***
124 *
125 * Revision 1.104 2004/10/08 15:57:51 sebastiani
126 * fix power hot cold variables settings.
127 * fix ws
128 * added function to set khb hot or cold
129 *
130 * Revision 1.103 2004/10/04 15:57:05 faber
131 * Run Trailer
132 *
133 * Revision 1.102 2004/10/04 13:59:05 alfarano
134 * fixed some return code in run manager
135 *
136 * Revision 1.101 2004/10/01 09:20:23 alfarano
137 * AC2 and little bug fix on S4 return code
138 *
139 * Revision 1.100 2004/10/01 08:48:10 sebastiani
140 * TRD alarma renamed TRD_S4 - S4 Alarm renamed S4_POWER
141 * Callback function into DAQ_SendCmd2PIFWaitDAQReply_internal
142 *
143 * Revision 1.99 2004/09/28 15:36:25 sebastiani
144 * interrupt manager fix
145 *
146 * Revision 1.98 2004/09/22 15:54:54 alfarano
147 * S4 functions
148 *
149 * Revision 1.97 2004/09/17 15:01:00 faber
150 * LU_INFN_LOG flags fixing
151 *
152 * Revision 1.96 2004/09/13 14:16:53 faber
153 * ErrorHandler for TOF/TRG + Test function TOF/TRG
154 *
155 * Revision 1.95 2004/09/09 14:52:55 sebastiani
156 * using PreparePage to send cmd to idaq/FE
157 * added some test
158 * added trigger param
159 * added/tested Force Send KHB_to_FE
160 * added/tested Send Cmd to IDAQ/FE
161 *
162 * Revision 1.94 2004/09/08 10:39:12 faber
163 * *** empty log message ***
164 *
165 * Revision 1.93 2004/08/31 09:08:35 sebastiani
166 * fix warning
167 *
168 * Revision 1.92 2004/08/30 07:08:18 sebastiani
169 * little modify
170 *
171 * Revision 1.91 2004/08/26 16:54:34 sebastiani
172 * version work fine
173 *
174 * Revision 1.90 2004/08/13 14:42:19 sebastiani
175 * Add Neutron detector!
176 * need add file ND_READ_ACQ.dat on site ...
177 *
178 * Revision 1.89 2004/08/05 16:19:07 sebastiani
179 * fix close run
180 * add cal handler error
181 * fix tmtc
182 * ok protocol betwen pm-rm-scm
183 *
184 * Revision 1.88 2004/08/04 13:25:21 sebastiani
185 * first fix allarm procedure
186 *
187 * Revision 1.87 2004/08/02 15:49:47 alfarano
188 * alarm handling , scm & pm communication rewrite
189 *
190 * Revision 1.86 2004/08/02 09:28:29 faber
191 * Stamp management into SMH_SetParam
192 * TS_PamManger TM_RMTest moved respectively into PM and RM as PM_MCMDTest and
193 * RM_MCMDTEst. TS_Test_INFN.c will be deleted soon.
194 *
195 * Revision 1.85 2004/07/28 17:19:01 sebastiani
196 * better loggin status
197 *
198 * Revision 1.84 2004/07/28 09:03:36 sebastiani
199 * bufgix unmask khb mask all
200 *
201 * Revision 1.83 2004/07/27 17:30:17 faber
202 * OBT can be now in second or milliseconds, depending of the situazion.
203 * OBT_s is used for FM compatibility, OBT_ms basically for MM infos
204 *
205 * Revision 1.82 2004/07/27 08:35:42 sebastiani
206 * fix bug WS1
207 * add test CPU idle
208 * fix PADDING
209 *
210 * Revision 1.81 2004/07/26 15:04:54 faber
211 * CM_BIT_REVERSE and OS_PROTECTED_INT introduced
212 *
213 * Revision 1.80 2004/07/21 14:08:32 sebastiani
214 * Fix close RUN we wait a event to close the run
215 * PM send Sint and don't wait for SintOK
216 * Header'Trailer Initialization
217 * FixPacketCounter
218 *
219 * Revision 1.79 2004/07/20 14:36:26 sebastiani
220 * AC/CAL/TRK/TOF/TRG unmaksed all KHB alarms
221 * RM: Close Run before RunTrailer (send page 2)
222 *
223 * Revision 1.78 2004/07/15 10:50:28 sebastiani
224 * *** empty log message ***
225 *
226 * Revision 1.77 2004/07/15 10:39:42 faber
227 * *** empty log message ***
228 *
229 * Revision 1.76 2004/07/15 08:21:26 faber
230 * *** empty log message ***
231 *
232 * Revision 1.75 2004/07/14 13:02:35 alfarano
233 * update calorimeter func
234 *
235 * Revision 1.74 2004/07/12 09:51:49 faber
236 * external_data dir added with all commands inside. tgz creation rules remove.
237 * AUTO mode introduced:
238 *
239 * Revision 1.73 2004/07/08 16:23:41 sebastiani
240 * *** empty log message ***
241 *
242 * Revision 1.72 2004/07/02 09:47:42 alfarano
243 * modifiche antic
244 *
245 * Revision 1.71 2004/06/30 07:26:52 sebastiani
246 * TOF fixing,WS fixing
247 *
248 * Revision 1.70 2004/06/25 09:54:41 alfarano
249 * *** empty log message ***
250 *
251 * Revision 1.69 2004/06/24 16:32:50 alfarano
252 * TOF stuff
253 *
254 * Revision 1.68 2004/06/22 11:05:43 sebastiani
255 * *** empty log message ***
256 *
257 * Revision 1.67 2004/06/22 09:34:52 faber
258 * *** empty log message ***
259 *
260 * Revision 1.66 2004/06/22 08:57:01 sebastiani
261 * *** empty log message ***
262 *
263 * Revision 1.65 2004/06/15 16:48:27 sebastiani
264 * Check AC functions OK ( fix some little bugs)
265 * fix flows in RM
266 *
267 * Revision 1.64 2004/06/15 08:24:37 sebastiani
268 * *** empty log message ***
269 *
270 * Revision 1.63 2004/06/09 11:23:22 alfarano
271 * EEPROM Formatting/Checking/Reading/writing functions. not tested
272 *
273 * Revision 1.62 2004/06/04 14:24:38 sebastiani
274 * clear some files
275 *
276 * Revision 1.61 2004/06/01 16:41:19 sebastiani
277 * EventReceive ANY
278 *
279 * Revision 1.60 2004/05/28 07:07:10 sebastiani
280 * *** empty log message ***
281 *
282 * Revision 1.59 2004/05/27 17:50:40 sebastiani
283 * *** empty log message ***
284 *
285 * Revision 1.58 2004/05/26 17:48:25 sebastiani
286 * *** empty log message ***
287 *
288 * Revision 1.57 2004/05/26 15:31:54 sebastiani
289 * some fixing on CAL/TRK/ACQ
290 *
291 * Revision 1.56 2004/05/26 11:15:16 sebastiani
292 * SentTrigger() introduced; RM_TaskSuspendUnlessSINT() introduced
293 *
294 * Revision 1.55 2004/05/25 14:49:48 faber
295 * *** empty log message ***
296 *
297 * Revision 1.54 2004/05/25 14:07:18 faber
298 * *** empty log message ***
299 *
300 * Revision 1.53 2004/05/24 10:27:32 faber
301 * *** empty log message ***
302 *
303 * Revision 1.52 2004/05/20 16:03:52 faber
304 * ACQ flow dev continuing
305 *
306 * Revision 1.50 2004/05/19 08:44:38 sebastiani
307 * fix trk init and calib
308 *
309 * Revision 1.49 2004/05/17 10:01:37 faber
310 * *** empty log message ***
311 *
312 * Revision 1.48 2004/05/13 10:57:51 faber
313 * *** empty log message ***
314 *
315 * Revision 1.47 2004/05/13 10:47:17 faber
316 * hid the HB_Store funcion in favour of wrapped funcions
317 *
318 * Revision 1.46 2004/05/12 14:46:14 faber
319 * *** empty log message ***
320 *
321 * Revision 1.45 2004/05/06 15:51:16 faber
322 * devel goes on...
323 *
324 * Revision 1.44 2004/05/06 12:13:34 faber
325 * *** empty log message ***
326 *
327 * Revision 1.43 2004/05/06 08:52:24 faber
328 * development goes on..
329 *
330 * Revision 1.42 2004/05/04 17:20:51 sebastiani
331 * new GOM TEST mode introduced. Entry point in TS_RM_Test(c1,c2)
332 *
333 * Revision 1.41 2004/04/29 10:18:26 sebastiani
334 * *** empty log message ***
335 *
336 * Revision 1.40 2004/04/29 07:46:29 sebastiani
337 * compilation ok
338 *
339 * Revision 1.39 2004/04/29 07:13:04 faber
340 * Working schedule development goes on...
341 *
342 * Revision 1.38 2004/04/23 14:16:58 tassa
343 * - change for donwloading procedures vrl handling
344 * - fix little bug in error case in DoRun
345 * - add ForceBreakPoint selectmode
346 *
347 * Revision 1.37 2004/04/20 14:51:16 alfarano
348 * #ifdef temporaneo su TRK
349 *
350 * Revision 1.36 2004/03/03 11:17:50 tassa
351 * resolved merging conflict by hand
352 *
353 * Revision 1.35 2004/03/03 11:13:58 sebastiani
354 * gen_mcmd.pl bugfixes,other bugfixes
355 *
356 * Revision 1.34 2004/02/18 16:37:14 alfarano
357 * update calorimeter
358 *
359 * Revision 1.33 2004/02/17 12:34:51 faber
360 * USERDATA2BUF USERDATA2{ARR,TAB} introduced with CRC.
361 * Never tested.
362 * Some adjustment in Logging in SHM module
363 *
364 * Revision 1.32 2004/02/13 10:11:30 alfarano
365 * calorimeter initialization func and more
366 *
367 * Revision 1.31 2004/02/05 11:38:16 sebastiani
368 * RM_DoRun changed to work better
369 *
370 * Revision 1.30 2004/01/22 10:10:25 faber
371 * *** empty log message ***
372 *
373 * Revision 1.29 2004/01/13 15:07:35 tassa
374 * add send forced idaq cmd!
375 *
376 * Revision 1.28 2004/01/12 17:51:28 tassa
377 * manca solo la parte di invio e ricezione sulla/dalla IDAQ
378 *
379 * Revision 1.27 2004/01/09 17:29:34 tassa
380 * add the force command queue procedure
381 *
382 * Revision 1.26 2003/11/27 17:53:23 faber
383 * -Power management poweron procedure done and some tested in the simulator
384 * -history entry 5 now takes OBT
385 *
386 * Revision 1.25 2003/11/19 15:48:37 faber
387 * *** empty log message ***
388 *
389 * Revision 1.24 2003/11/13 16:13:55 sebastiani
390 * dump_parameters flag added to WriteHBInfos(); Important bugfixed and better management with ChangeAcqMode and SetNotifyTask_SKETCHBOARD()
391 *
392 * Revision 1.23 2003/11/10 16:24:09 faber
393 * bugfix HB_Store/Write2PIF
394 *
395 * Revision 1.22 2003/11/10 12:16:49 sebastiani
396 * new HB management / SetNotifyTask now put before the DoRun() invocation / some other bugfix around
397 *
398 * Revision 1.21 2003/11/06 10:27:12 faber
399 * HB_HKBuffer now implemented as multibuffer (as specified in the
400 * mass memory format). Only compilation, not tested
401 *
402 * Revision 1.20 2003/10/31 17:21:29 sebastiani
403 * bug fix on read and write function in TM_TMTCManager: added busy flag control on each read & write
404 * CRC functions updated in the SRAMPageManager
405 *
406 * Revision 1.19 2003/10/29 17:41:48 sebastiani
407 * *** empty log message ***
408 *
409 * Revision 1.18 2003/10/28 18:31:24 sebastiani
410 * Some fix about the KHB driver
411 *
412 * Revision 1.17 2003/10/27 18:58:52 sebastiani
413 * Enabling/Disabling sample/storing TMTC data
414 * BC2RM code fix
415 *
416 * Revision 1.16 2003/10/21 13:17:44 sebastiani
417 * more sofisticated tests (via test_debug SOM)
418 *
419 * Revision 1.15 2003/10/20 15:31:12 sebastiani
420 * MCMDS autogenerated
421 *
422 * Revision 1.14 2003/10/17 10:10:41 sebastiani
423 * SKETCHBOARD_FREE event introduced, better LOG
424 *
425 * Revision 1.13 2003/09/25 16:53:03 alfarano
426 * buffer 16K 128K added.
427 *
428 * Revision 1.12 2003/09/25 11:57:53 faber
429 * used MC_SetState instead of SM_AcqSetMode
430 *
431 * Revision 1.11 2003/09/25 08:57:55 faber
432 * *** empty log message ***
433 *
434 * Revision 1.10 2003/09/23 09:53:43 alfarano
435 * fixed a bug in calling CalibTracker
436 *
437 * Revision 1.8 2003/09/22 09:59:35 faber
438 * new select mode definitions
439 *
440 * Revision 1.7 2003/09/19 15:57:35 faber
441 * Large development update INFN software
442 *
443 * Revision 1.6 2003/09/12 16:34:59 alfarano
444 * Tracker files rewrite
445 *
446 * Revision 1.5 2003/09/10 16:15:52 faber
447 * PRH_EXTERN_VAR(XX_LOGMASK) removed (not needed any more)
448 *
449 * Revision 1.4 2003/09/10 11:55:07 faber
450 * LU_MASK introduced. Log mask for module is now an unique array (PRH_ARR_LOG_MASK) indexed by __FILEID__
451 *
452 * Revision 1.3 2003/09/10 10:32:37 faber
453 * Large implementation of PamManager/RunManager Pam Sowfare. (compiled,never rokun)
454 *
455 * Revision 1.2 2003/08/22 07:57:08 sebastiani
456 * *** empty log message ***
457 *
458 * Revision 1.1.1.1 2003/08/04 09:40:22 sebastiani
459 * Imported sources laben rel. 19.06.2003 integrated with pam2
460 *
461 * Revision 1.6 2003/07/17 11:15:52 sebastiani
462 * idaq manager
463 * new print for logging in minicom
464 *
465 * Revision 1.5 2003/07/10 07:05:14 sebastiani
466 * first IDAQ driver import
467 *
468 * Revision 1.4 2003/06/23 15:40:10 sebastiani
469 * Trakcer added: First Compilation of tracker
470 *
471 * Revision 1.3 2003/06/20 13:42:29 sebastiani
472 * Pam/Run manager first prototype release
473 *
474 * Revision 1.2 2003/06/18 16:53:20 sebastiani
475 * Pam/Run Manager development update. ExpSeq sequence is receiven from the RunManager (simulator mode)
476 *
477 * Revision 1.1 2003/06/16 08:08:28 sebastiani
478 * Moved RunManager's files in the RunManager dir
479 *
480 * Revision 1.2 2003/06/13 16:44:27 sebastiani
481 * new version updated. develop continuing
482 *
483 * Revision 1.1 2003/06/09 17:00:29 sebastiani
484 * Run Manager first scheleton
485 *
486 *
487 *****************************************************************************/
488
489
490 /*============================= Include File ================================*/
491
492 #include <src/INFN/LU_SourceFileID_INFN.h>
493 #define __FILEID__ _RM_RunManager_INFN__c
494
495 #include <src/INFN/LU_LogUtility_INFN.h>
496 #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
497 #include <src/INFN/PRH_ParamHandler_INFN_autopri.h>
498 #include <src/INFN/PM_PamManager_INFN.h>
499 LU_DECL_MASK();
500
501 #include <src/SRAMManager/SRAMPageManager/SM_SRAMPageManager_p.h>
502 #include <src/FileManager/MMSUManager/FT_MMSUManager_p.h>
503
504 #include <src/INFN/RM_RunManager_INFN.h>
505 #include <src/INFN/HB_HKBuffer_INFN.h>
506 #include <src/INFN/CH_CommandHandler_INFN.h>
507 #include <src/INFN/OS_rtems_INFN_p.h>
508 #include <src/INFN/WS_WorkingSchedule_INFN.h>
509 #include <src/INFN/DAQ_IDAQ_INFN.h>
510 #include <src/INFN/TRK_Tracker_INFN.h>
511 #include <src/INFN/CAL_Calorimeter_INFN.h>
512 #include <src/INFN/AC_Anticoincidence_INFN.h>
513 #include <src/INFN/S4_INFN.h>
514 #include <src/INFN/OS_rtems_INFN_p.h>
515 #include <src/INFN/KHB_Driver_INFN.h>
516 #include <src/INFN/HK_Manager_INFN.h>
517 #include <src/INFN/TRG_Trigger_INFN.h>
518 #include <src/INFN/TOF_TimeOfFlight_INFN.h>
519 #include <src/INFN/ALM_Alarm_INFN.h>
520 #include <src/INFN/PRH_ParamHandler_INFN.h>
521 #include <src/INFN/MH_ModeHandler_INFN.h>
522
523 /*============================ Global define ================================*/
524
525
526 /*============================== global types ==============================*/
527
528
529
530 /*****************************************************************************/
531 /*=========================== Structure define ==============================*/
532
533
534 /*****************************************************************************/
535 /*============================ Enumerate define =============================*/
536
537 typedef enum {
538 IPM1,
539 IPM2,
540 IPM3,
541 IPM4,
542 IPM5,
543 IPM6,
544 IPM_MAX
545 } IPM;
546
547
548
549 /*****************************************************************************/
550
551 /*=== RunManager P R O V I D E D I N T E R F A C E ==*/
552
553 /*****************************************************************************/
554
555 /* DAQ buffer */
556 DAQ_DECLBUF(RM_buf_cmd,SM_SRAMPAGESIZE);
557 DAQ_DECLBUF(RM_buf_misc,HB_BUF_MISC_SIZE);
558 DAQ_DECLBUF(RM_buf_data,SM_DAQPKTSIZE);
559 //DAQ_DECLBUF(RM_buf_cmd2,SM_SRAMPAGESIZE);
560 //DAQ_DECLBUF(RM_buf_cmd3,SM_SRAMPAGESIZE);
561 //DAQ_DECLBUF(RM_buf_cmd4,SM_SRAMPAGESIZE);
562 DAQ_DECLBUF(RM_128K_Buffer,SM_DAQPKTSIZE);
563
564
565 /* Force Idaq commands */
566 DAQ_DECLBUF(force_idaq_cmd_queue,SM_SRAMPAGESIZE);
567
568
569 /* Pre-Cooked commands */
570 DAQ_DECLBUF(nd_acq_buf,2);
571
572
573 /* the standard Make acquisition command : */
574 /*
575 DAQ_DECLBUF(PM_buf_make_acq_full,8);
576 DAQ_DECLBUF(PM_buf_make_acq_compress,100);
577 DAQ_DECLBUF(PM_buf_make_acq,1024);
578 DAQ_DECLBUF(PM_buf_init_run,1024);
579 DAQ_DECLBUF(PM_buf_data,1024);
580 */
581
582 /* this variables come from the calorimeter calibration */
583 extern PRH_VAR_TYPE CAL_DSP_MASK;
584 extern PRH_VAR_TYPE CAL_FE_MASK;
585
586
587 extern UINT32 TRK_ALARM_MASK[2];
588 #define TRK_MASK_BASE_ID CH_TRK_MASK_064
589 #define TRK_MASK_BASE_OFFSET 64
590
591
592 static RM_OPCODES RM_TaskStatus;
593
594 static BOOL RM_Run_Is_In_Progress;
595 static UINT32 RM_Initialization_Counter;
596 static BOOL RM_use_nd=TRUE;
597
598 /* this var counts the number of Run done after an ascending node.
599 the value is reset after an ascending node.
600 it have nothing to do with the calibration
601 */
602 static BOOL RM_Is_Run_After_Ascending_Node;
603
604 /* a counter of the number of run since the boot */
605 static UINT32 RM_Run_Counter;
606
607 /* a counter of number of run with no pkt since the boot */
608 static UINT32 RM_Init_Run_With_No_Pkt;
609 /* a counter of the number of calibrations since the boot */
610 static UINT32 RM_Calibration_Counter;
611
612 /* counters for events (OS_EVENT_XXX) and other pkt result of the run routine */
613 static UINT32 RM_PktReady_Counter;
614 static UINT32 RM_ETO_Counter;
615 static UINT32 RM_TIMEOUT_Counter;
616 static UINT32 RM_SINT_Counter;
617
618 static RM_ACQ_SETTING RM_Acq_setting_mode;
619 static TI_TIME RM_run_real_duration_ms;
620 static TI_TIME RM_end_of_run_obt_s;
621
622 static BOOL RM_Rate_meter_check;
623 static BOOL RM_Acq_After_Calib;
624 BOOL RM_Init_Before_Calib;
625 static UINT32 RM_Calibration_Counter;
626 static UINT32 RM_Acq_Cmd_Queue_len;
627
628 static BOOL RM_acqcheck_flag;
629
630 #ifdef DEBUG
631 static BOOL RM_storeram = DAQ_STORE_RAM;
632 #else
633 static BOOL RM_storeram = DAQ_NO_STORE_RAM;
634 #endif
635
636
637 static unsigned char RM_AcqExitIfError_FILEID;
638
639 static DAQ_CMD_BUF TRIG_II_INIT;
640 static DAQ_CMD_BUF TRIG_II_ACQ;
641
642
643 static DAQ_CMD_BUF IDAQ_DSP_SET;
644
645
646
647
648 void RM_Init_ParamBuffers() {
649 #warning DAQ_INIT_BUF_FROM_PARAMBUF(IDAQ_DSP_SET);
650 DAQ_INIT_BUF_FROM_PARAMBUF(TRIG_II_INIT);
651 DAQ_INIT_BUF_FROM_PARAMBUF(TRIG_II_ACQ);
652 }
653
654
655 /*****************************************************************************/
656 /* @Function: RM_piInitRunManager_INFN */
657 /* @Purpose : */
658 /* Provided Interface to initialize the RunManager object. */
659 /* */
660 /* @@ */
661 /* @Parameter Name @Mode @Description */
662 /* status_code OUT Return code */
663 /* @@ */
664 /*****************************************************************************/
665
666 status_code RM_Init_AtoEto() {
667 #warning ETO ATO TBD here !
668 CH_PARAMBUF_SET_ATO_ETO(IDAQ_DSP_SET,2,2);
669 #warning CH_SetAtoEto(CH_IDAQ_DSP_START_PROGRAM,2,2);
670 #warning CH_SetAtoEto(CH_IDAQ_DSP_DATA_READ,2,2);
671 return CM_RC_SUCCESSFUL;
672 }
673
674 status_code RM_InitRunManager_INFN(void) {
675 status_code status;
676 unsigned int OldPriority;
677
678 status =SUCCESSFUL;
679
680 /* Task initialization */
681 if ((status=OS_piTaskReady_INFN(RM_INFN_TASK,RM_tkRunManager_INFN)) != SUCCESSFUL)
682 {
683 /*@LOG Task is not correctly started */
684 LU_INFN_LOG(LU_FATAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
685 // HA_piLogHistoryEntry10(HA_E10_SW_MD,HA_E10_TSK_READY_ERR,status);
686 status =UNSATISFIED;
687 }
688 if ((status=OS_piTaskPriority_INFN(RM_INFN_TASK,RM_INFN_PRIORITY,&OldPriority)) != SUCCESSFUL)
689 {
690
691 // HA_piLogHistoryEntry10(HA_E10_SW_MD,HA_E10_TSK_PRIORITY_ERR,status);
692
693 /*@LOG Task priority is not correctly updated */
694 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
695 status =UNSATISFIED;
696 }
697
698 /* init all declared command buffers: */
699
700 RM_TaskStatus = RM_OP_IDLE;
701 RM_Run_Is_In_Progress = FALSE;
702 RM_Is_Run_After_Ascending_Node = FALSE;
703 RM_Run_Counter = 0;
704 RM_Calibration_Counter = 0;
705
706 RM_PktReady_Counter=0;
707 RM_ETO_Counter=0;
708 RM_SINT_Counter=0;
709 RM_Init_Run_With_No_Pkt=0;
710 RM_TIMEOUT_Counter=0;
711
712 RM_Acq_setting_mode=RM_ACQ_SETTING_NULL;
713 RM_run_real_duration_ms=0;
714
715 RM_Rate_meter_check=FALSE;
716 RM_Acq_After_Calib=FALSE;
717 RM_Calibration_Counter=0;
718 DAQ_BUFFER_INIT(RM_buf_cmd);
719 DAQ_BUFFER_INIT(RM_buf_misc);
720 DAQ_BUFFER_INIT(RM_128K_Buffer);
721 DAQ_BUFFER_INIT(RM_buf_data);
722
723 DAQ_BUFFER_INIT(nd_acq_buf);
724 nd_acq_buf.len=2;
725 nd_acq_buf.buf[0]=0;
726 nd_acq_buf.buf[1]=0;
727 nd_acq_buf.eto=2;
728 nd_acq_buf.ato=1;
729 RM_Init_ParamBuffers();
730 RM_Init_AtoEto();
731 return (status);
732 }
733
734
735
736 status_code RM_SendCodeRunManager(RM_OPCODES code) {
737 MsgTsk SndMsg;
738 SndMsg.Code = code;
739 return RM_SndMsgRunManager_INFN(&SndMsg);
740 }
741
742
743 status_code RM_SendTest(UINT32 code1,UINT32 code2,UINT32 code3) {
744 MsgTsk SndMsg;
745 BYTE *p=SndMsg.Info;
746 SndMsg.Code = RM_OP_TEST;
747 CM_WRITE_BE_UINT32(p,code1);
748 CM_WRITE_BE_UINT32(p,code2);
749 CM_WRITE_BE_UINT32(p,code3);
750 return RM_SndMsgRunManager_INFN(&SndMsg);
751 }
752
753
754 status_code RM_CancelACQTimers() {
755 OS_piCancelTimer_INFN(STOPACQ_TIM);
756 OS_piCancelTimer_INFN(RM_WS3_TIM);
757 return SUCCESSFUL;
758 }
759
760 status_code RM_SndMsgRunManager_INFN(MsgTsk* SndMsg) {
761 rtems_status_code status;
762
763
764 /* Send message to HouseKeeping Manager task mailbox */
765 status =OS_piMsgQueueSend_INFN(RM_INFN_MAILBOX,(void*)SndMsg,sizeof(MsgTsk));
766 if (status != SUCCESSFUL)
767 {
768 /*@LOG Error Sending message to Run Manager */
769 LU_INFN_LOG(LU_FATAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
770 //HA_piLogHistoryEntry10(HA_E10_SW_MD,HA_E10_SEND_MSG_ERR,status);
771 }
772 return (status);
773 }
774
775 status_code RM_SendSINT() {
776 status_code status;
777 if( (status = OS_piEventSend(RM_INFN_TASK,OS_EVENT_SINT)) != SUCCESSFUL) {
778 /*@LOG Error Sending Event SINT to Run Manager */
779 LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
780 return status;
781 }
782 if( (status = RM_SendCodeRunManager(RM_OP_SINT)) != SUCCESSFUL)
783 /*@LOG ErrorSending message SINT to Run Manager */
784 LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
785 return status;
786 }
787
788 status_code RM_SendHBStoreRequest() {
789 status_code status = SUCCESSFUL;
790
791 if( RM_RunIsInProgress() )
792 {
793 if( (status = OS_piEventSend(RM_INFN_TASK,OS_EVENT_FLUSH_HB)) != SUCCESSFUL) {
794 /*@LOG Error Sending Event FLUSH_HB to Run Manager */
795 LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
796 }
797 }else{
798 if( (status = RM_SendCodeRunManager(RM_OP_FLUSH_HB)) != SUCCESSFUL)
799 /*@LOG Error Sending Message FLUSH_HB to Run Manager */
800 LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
801 }
802 return status;
803 }
804
805 /* return true if a SINT had been received and clear the event
806 this function must be called only by the RunManager
807 */
808
809 BOOL RM_CheckSINT() {
810 rtems_event_set unused;
811 BOOL ret;
812 ret=OS_piEventReceive(OS_EVENT_SINT,RTEMS_NO_WAIT,0,&unused) == RTEMS_SUCCESSFUL;
813 if(ret)
814 RM_SINT_Counter++;
815 return ret;
816 }
817
818 /* suspend for a certain tics and return TIMEOUT. if a SINT event come meanwhile, returns CM_RC_SINT immediatelly */
819 status_code RM_TaskSuspendUnlessSINT(UINT32 timeout) {
820 status_code s;
821 rtems_event_set evout;
822 s=OS_piSuspendUnlessEvent(OS_EVENT_SINT,
823 timeout,
824 &evout );
825 if(s==SUCCESSFUL && (evout | OS_EVENT_SINT))
826 return CM_RC_SINT;
827 return CM_RC_SUCCESSFUL;
828 }
829
830
831 task RM_tkRunManager_INFN (task_argument unused) {
832
833 MsgTsk RxMsg;
834 BOOL flush_req;
835 status_code mboxstatus;
836 status_code op_ret_code;
837 unsigned int MsgSize;
838 UINT32 async_flush_req=0;
839 status_code status;
840
841 while(FOREVER) {
842 /* clear the SINT event: */
843 RM_CheckSINT();
844
845 RM_TaskStatus = RM_OP_IDLE;
846
847 mboxstatus = OS_piMsgQueueReceive_INFN (RM_INFN_MAILBOX,(void*)&RxMsg,
848 &MsgSize,WAIT,
849 PRH_VAR_RM_FLUSH_TIMEOUT ? PRH_VAR_RM_FLUSH_TIMEOUT : NO_TIMEOUT);
850
851 if (mboxstatus == SUCCESSFUL) {
852 RM_TaskStatus = RxMsg.Code;
853
854 if(MH_DownloadIsInProgress())
855 {
856 /*@LOG Command arrived while a downling */
857 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_TaskStatus);
858 MH_SetLastIgnoredOpDuringDownload(RM_TaskStatus);
859 // return a special exit code: this will be ignored by the PM state machine (PM_DecodeCode)
860 op_ret_code=CM_RC_DOWNLOAD_IS_IN_PROGRESS;
861 }
862 else
863 switch(RM_TaskStatus) {
864 case RM_OP_INITIALIZATION:
865 // MC_piSetState(MC_ACTIVE_STATE);
866 /*@LOG RUN Manager Initialization started */
867 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RxMsg.Code);
868 op_ret_code=RM_Initialization();
869 break;
870 case RM_OP_CALIBRATION:
871 /*@LOG RUN Manager Calibration started */
872 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RxMsg.Code);
873 op_ret_code=RM_Calibration();
874 break;
875 case RM_OP_ACQUISITION:
876 /*@LOG RUN Acquisition Initialization started */
877 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RxMsg.Code);
878 op_ret_code=RM_Acquisition();
879 break;
880 case RM_OP_DOWNLOAD_HEADER:
881 /*@LOG RUN Download Header write */
882 {
883 static BOOL first_time=1;
884 if(first_time){
885 first_time=0;
886 OS_piTaskSuspend(1000);
887 MC_piSetState(MC_ACTIVE_STATE);
888 OS_piTaskSuspend(1000);
889 DAQ_ResetPIF(DAQ_DEFAULT_ETO_TICS,DAQ_DEFAULT_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_RSV_RUN_MANAGER_INIT);
890 OS_piTaskSuspend(1000);
891 }
892 }
893 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RxMsg.Code);
894 op_ret_code=RM_WriteDownloadHeader(PRH_VAR_DOWNLOAD_HEADER++);
895 break;
896 case RM_OP_FLUSH_HB:
897 // do nothing here: is done at the end.
898 /*
899 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RxMsg.Code);
900 if( (op_ret_code=RM_WriteHBInfos(TRUE)) != SUCCESSFUL )
901 LU_INFN_LOG(LU_CRITICAL,LU_MASK(__FILEID__),__FILEID__,__LINE__,op_ret_code);
902 op_ret_code = CM_RC_SUCCESSFUL;
903 */
904 break;
905 case RM_OP_FORCE_IDAQCMD:
906 /*@LOG RUN Manager ForceIDAQCommand started */
907 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RxMsg.Code);
908 op_ret_code=RM_Send_ForceIdaqCmd();
909 if (op_ret_code)
910 /*@LOG RUN Manager SendForceIdaqCmd failed */
911 LU_INFN_LOG(LU_CRITICAL,LU_MASK(__FILEID__),__FILEID__,__LINE__,op_ret_code);
912 op_ret_code = CM_RC_SUCCESSFUL;
913 break;
914 case RM_OP_SINT:
915 /*@LOG Run Manager SINT received */
916 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RxMsg.Code);
917 /* must do nothing, only gets such a messages,
918 clear the SINT event, and notify a SINT_OK */
919 RM_CheckSINT();
920 op_ret_code = OS_piEventSend(PM_INFN_TASK,OS_EVENT_SINT_OK);
921 if(op_ret_code != SUCCESSFUL)
922 /*@LOG error sending event OS_EVENT_SINT_OK to Pam Manager*/
923 LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,op_ret_code);
924 op_ret_code = CM_RC_SUCCESSFUL;
925 break;
926 case RM_OP_TEST:
927 {
928 UINT32 value1,value2,value3;
929 BYTE tmp;
930 BYTE *p=RxMsg.Info;
931 CM_READ_BE_UINT32(p,value1,tmp);
932 CM_READ_BE_UINT32(p,value2,tmp);
933 CM_READ_BE_UINT32(p,value3,tmp);
934 #ifdef DEBUG
935 RM_MCMDTest(value1,value2,value3);
936 #endif
937 op_ret_code=CM_RC_SUCCESSFUL;
938 }
939 break;
940 default:
941 op_ret_code=CM_RC_SUCCESSFUL;
942 /* bad/unrecognized operation here. If a bad op comes here, it's internal error beacuse
943 the PamManager should check and filter the code before */
944 /*@LOG Bad operation */
945 LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,RxMsg.Code);
946 break;
947 }
948
949 RM_BC2PM(RM_TaskStatus,op_ret_code);
950 }
951
952 if(op_ret_code=HB_GetFlushRequestFlag(&flush_req) )
953 /*@LOG HB_GetFlushRequestFlag failed in Run Manager */
954 LU_INFN_LOG(LU_FATAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,op_ret_code);
955 if( (flush_req || RM_TaskStatus==RM_OP_FLUSH_HB || RM_TaskStatus == RM_OP_CALIBRATION)
956 && !MH_DownloadIsInProgress() ) {
957 async_flush_req++;
958 if( (op_ret_code=RM_WriteHBInfos( RM_TaskStatus == RM_OP_CALIBRATION ? TRUE : (PRH_VAR_RM_NO_FLUSH_PARAM_DUMP ? async_flush_req % PRH_VAR_RM_NO_FLUSH_PARAM_DUMP == 0 : FALSE ))) != SUCCESSFUL )
959 /*@LOG WriteHB Infos failed in Run Manager */
960 LU_INFN_LOG(LU_CRITICAL,LU_MASK(__FILEID__),__FILEID__,__LINE__,op_ret_code);
961 else {
962 HB_ResetFlushRequestCounter();
963 /*@LOG WriteHB Infos successfull in Run Manager */
964 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xAAAF1055);
965 }
966 }
967 /* do this in any case: both at end of operation or in a IDLE timeout */
968 }
969 }
970
971
972 /* this is the user routine of the WS3 Timer,
973
974 */
975 rtems_timer_service_routine RM_WS3_ISR(
976 rtems_id timer_id,
977 void *unused
978 ) {
979 RM_Rate_meter_check=TRUE;
980 }
981
982 rtems_timer_service_routine RM_StopAcq_ISR(
983 rtems_id timer_id,
984 void *run_counter
985 ) {
986 PM_SendCommand(PM_INFN_NEXTRUN);
987 }
988
989
990 rtems_timer_service_routine RM_AcqCheck_ISR(
991 rtems_id timer_id,
992 void *unused
993 ) {
994 RM_acqcheck_flag=TRUE;
995 }
996
997 status_code RM_WS3_ProgramTimer() {
998 RM_Rate_meter_check=FALSE;
999 /*@LOG WS3 programming timer*/
1000 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,PRH_VAR_RM_WS3_TIMER_FIRE_AFTER);
1001 OS_piStartTimer_INFN(RM_WS3_TIM,
1002 PRH_VAR_RM_WS3_TIMER_FIRE_AFTER,
1003 RM_WS3_ISR,
1004 NULL);
1005 }
1006
1007
1008 #define RM_EXIT_IFSINT() do { \
1009 if (RM_CheckSINT()) \
1010 return CM_RC_SINT; \
1011 } while(0)
1012
1013 void RM_Set_AcqExitIfError_FILEID(unsigned short fileid) {
1014 RM_AcqExitIfError_FILEID = fileid;
1015 }
1016
1017 status_code RM_AcqExitIfError(unsigned short line,status_code s)
1018 {
1019 if(s != CM_RC_SUCCESSFUL) {
1020 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(RM_AcqExitIfError_FILEID),RM_AcqExitIfError_FILEID,line,s);
1021 return s;
1022 }
1023 RM_EXIT_IFSINT();
1024 return CM_RC_SUCCESSFUL;
1025 }
1026
1027 status_code RM_InitExitError(unsigned short line,status_code s)
1028 {
1029 if(s != CM_RC_SUCCESSFUL) {
1030 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(RM_AcqExitIfError_FILEID),RM_AcqExitIfError_FILEID,line,s);
1031 return s;
1032 }
1033 RM_EXIT_IFSINT();
1034 return CM_RC_SUCCESSFUL;
1035 }
1036
1037
1038 status_code RM_AcqExitIfError_CallBack(unsigned short line,status_code s,status_code (*callback)() )
1039 {
1040 if(s != CM_RC_SUCCESSFUL) {
1041 callback();
1042 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(RM_AcqExitIfError_FILEID),RM_AcqExitIfError_FILEID,line,s);
1043 return s;
1044 }
1045 RM_EXIT_IFSINT();
1046 return CM_RC_SUCCESSFUL;
1047 }
1048
1049
1050 #define RM_ACQ_EXIT_IFERROR(status) RM_EXIT_IFERROR(status)
1051
1052 #define RM_INI_EXIT_IFETO(status) do\
1053 {\
1054 if(status=RM_AcqExitIfError_CallBack(__LINE__,status,RM_WriteInitializationTrailer)) \
1055 return(status);\
1056 } while (0)
1057
1058 #define RM_CAL_EXIT_IFETO(status) do\
1059 {\
1060 if(status=RM_AcqExitIfError_CallBack(__LINE__,status,RM_WriteCalibrationTrailer)) \
1061 return(status);\
1062 } while (0)
1063
1064
1065
1066 status_code RM_GetRateMeterS1(DAQ_CMD_BUF *buf,int *rate_meters_s1) {
1067 BYTE b1;
1068 BYTE b2;
1069 if(buf==NULL || rate_meters_s1==NULL)
1070 return CM_RC_INTERNAL_ERR;
1071 b1=buf->buf[SM_PKTHEADER_LEN];
1072 b2=buf->buf[SM_PKTHEADER_LEN+1];
1073 CM_BIT_REVERSE_8(b1);
1074 CM_BIT_REVERSE_8(b2);
1075 *rate_meters_s1=b1 | ((b2 & 0xF)<<8);
1076 return CM_RC_SUCCESSFUL;
1077 }
1078
1079 static status_code RM_DoRun(WS ws) {
1080 BOOL breakRun = FALSE;
1081 BOOL fullPIF = FALSE;
1082 UINT32 pkt_count=0;
1083 UINT32 etoCounter=0;
1084 SM_ACQMODE oldmode;
1085 status_code status = SUCCESSFUL;
1086 status_code ret = SUCCESSFUL;
1087 rtems_event_set evout;
1088 unsigned int intLevel;
1089 /* this variable is static because is used by the RM_StopFullAcq: */
1090 DAQ_CMD_BUF *buf;
1091 BOOL ws3_check,is_ws3=(ws==WS_3);
1092 int rate,rm_s1_reg;
1093 BOOL last_event=FALSE;
1094 UINT16 khb_status,khb_status_check;
1095 UINT32 counterleftold=0,counterleft,khb_alarm;
1096
1097 RM_Set_AcqExitIfError_FILEID(__FILEID__);
1098 RM_Run_Is_In_Progress = TRUE;
1099 RM_Run_Counter++;
1100
1101 RM_acqcheck_flag=TRUE;
1102
1103 /* "run" is the external loop */
1104
1105 // PM_pi_UseCalibrationPage(SM_CALEXP2);
1106
1107 // SD_piSetEventTimeout(PRH_VAR_RM_ACQ_PIF_EVENT_TIMEOUT);
1108
1109 /*
1110 OS_piInterDisable(&intLevel);
1111 SD_piClearInt(SD_DATA_TO | SD_PAGE_OVR | SD_EVT_TO);
1112 SD_piUnMaskInt(SD_DATA_TO | SD_PAGE_OVR | SD_EVT_TO);
1113 OS_piInterEnable(intLevel);
1114 */
1115
1116 khb_status=0;
1117 ret=CM_RC_SUCCESSFUL;
1118 while(!breakRun) {
1119
1120 OS_PROTECTED_INT(intLevel,ws3_check=is_ws3 && RM_Rate_meter_check);
1121 status = DAQ_SendCmd2PIFWaitDAQReply_NoSINT(SM_CALEXP1,
1122 DAQ_STORE_MM,&RM_128K_Buffer,ws3_check);
1123
1124 switch(status) {
1125 case CM_RC_SUCCESSFUL:
1126 pkt_count++;
1127 RM_PktReady_Counter++;
1128 OS_PROTECTED_INT(intLevel,PRH_VAR_TRIG=0);
1129 if(RM_CheckSINT()) {
1130 breakRun=TRUE;
1131 ret=CM_RC_SINT;
1132 RM_acqcheck_flag=TRUE;
1133 }
1134 if(RM_acqcheck_flag){
1135 RM_acqcheck_flag=FALSE;
1136 if((khb_status_check=khb_status=ALM_FE_Acquisition_Check()) && !breakRun) {
1137 #warning "modifica 28/2/2005"
1138 khb_status_check &= KHB_STATUS_ALL_FE_IDAQ ;
1139 if(khb_status_check == KHB_STS_ALARM_S4_ADC_AC_2) {
1140 status = HK_ReadKHBAlarmRegister(&khb_alarm);
1141 if(status == CM_RC_SUCCESSFUL)
1142 breakRun=
1143 (((khb_alarm & KHB_ALARM_S4_ADC)) && ( (PRH_VAR_S4_OK && (PRH_VAR_S4_WORKING || PRH_VAR_S4_ATTEMPT)))) ||
1144 (((khb_alarm & KHB_ALARM_AC_2)) && PRH_VAR_AC_2_OK);
1145 else
1146 breakRun=TRUE;
1147 }else
1148 breakRun=TRUE;
1149 }
1150 if(!breakRun)
1151 OS_piStartTimer_INFN(RM_ACQCHECK_TIM,
1152 PRH_VAR_RM_ACQCHECK_PERIOD,
1153 RM_AcqCheck_ISR,
1154 NULL);
1155 }
1156 if(!breakRun && ws3_check){
1157
1158 RM_GetRateMeterS1(&RM_128K_Buffer,&rm_s1_reg);
1159 rate=rm_s1_reg - (int)(PRH_ARR_RM_RATE_METER_S1_TRH[RM_Acq_setting_mode-1]);
1160 if((rate > 0 && RM_Acq_setting_mode == RM_ACQ_SETTING_A) ||
1161 (rate <=0 && RM_Acq_setting_mode == RM_ACQ_SETTING_B))
1162 {
1163 ret=CM_RC_DO_AGAINACQ;
1164 WS_3_SetNextAcqMode(RM_Acq_setting_mode == RM_ACQ_SETTING_B ? RM_ACQ_SETTING_A : RM_ACQ_SETTING_B);
1165 breakRun=TRUE;
1166 }
1167
1168 if(!breakRun)
1169 RM_WS3_ProgramTimer();
1170 }
1171 break;
1172 case CM_RC_UNCOMPLETED_CMDIF:
1173 khb_status=ALM_FE_Acquisition_Check();
1174 while(counterleftold!=(counterleft=SD_piGetCMDCounterLeft()))
1175 {
1176 OS_piTaskSuspend(1);
1177 counterleftold=counterleft;
1178 }
1179 if(counterleft)
1180 status=CM_RC_RUNTIMEOUT;
1181 else
1182 status=CM_RC_SUCCESSFUL;
1183 breakRun=TRUE;
1184 break;
1185 default:
1186 // ETO | TIMEOUT | STOREERROR | UNSATISFIED | uncompleted....
1187 breakRun=TRUE;
1188 }
1189 }
1190
1191 RM_Run_Is_In_Progress = FALSE;
1192
1193 if(status)
1194 {
1195 /*@LOG Run stops with error */
1196 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_EVENT_ACQ);
1197 if(status!=CM_RC_UNCOMPLETED_CMDIF)
1198 ret = ALM_Eto_Acquisition();
1199 }
1200 else{
1201
1202 DAQ_ResetPIF(DAQ_ACQ_ETO_TICS,DAQ_DEFAULT_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_PHYS_ENDRUN);
1203
1204 // PM_pi_SetPktType(HB_PKTTYPE_PHYS_ENDRUN);
1205 status = DAQ_SendCmd2PIFWaitDAQReply_NoSINT(SM_CALEXP2,
1206 DAQ_STORE_MM,NULL,FALSE);
1207 if(status == CM_RC_UNCOMPLETED_CMDIF){
1208 khb_status=ALM_FE_Acquisition_Check();
1209 status=CM_RC_SUCCESSFUL;
1210 }
1211 if(status){
1212 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_STOP_RUN);
1213 ret = ALM_Eto_Acquisition();
1214 }
1215 else{
1216 if(khb_status){
1217 /*@LOG alarm on KHB status register after END of RUN command queue */
1218 ALM_WriteLog(ALM_TRACE_ID,ALM_FE_ACQ_ERR);
1219 if(( ret = ALM_FE_AlarmAction(khb_status)) == CM_RC_SUCCESSFUL)
1220 ret = CM_RC_DO_AGAINACQ;
1221 }
1222 }
1223 }
1224
1225 if(status=RM_CloseRun(pkt_count))
1226 /*@LOG CloseRun return unsuccessful*/
1227 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1228 return (ret);
1229 }
1230
1231 status_code RM_AssembleCmd(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer,DAQ_FE link) {
1232 return DAQ_Format_Fe2Daq(idaqcmd,cmdbuffer,link);
1233 }
1234
1235 status_code RM_Acquisition() {
1236 status_code runcode;
1237
1238 TI_TIME duration_run,t; // duration of the run
1239 WS ws;
1240 status_code status;
1241
1242
1243 DAQ_CMD_BUF *p_tb_trigger_selection,*pbuf;
1244 DAQ_FE fe;
1245 UINT16 i,j;
1246 UINT32 cal_fe;
1247 UINT32 acq_build_info=0;
1248
1249 RM_Set_AcqExitIfError_FILEID(__FILEID__);
1250
1251 DAQ_ResetPIF(DAQ_ACQ_ETO_TICS,DAQ_DEFAULT_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_PHYS_PKT);
1252
1253 RM_Rate_meter_check=FALSE;
1254 WS_SetEffectiveWorkingSchedule(PRH_VAR_RM_TIME_MAX_RUN,&RM_Acq_setting_mode,&duration_run);
1255 ws=WS_Effective();
1256 switch(ws) {
1257 case WS_3:
1258 RM_WS3_ProgramTimer();
1259 // Other action TBD
1260 break;
1261 case WS_2:
1262
1263 break;
1264 case WS_1:
1265
1266 break;
1267 case WS_0:
1268
1269 break;
1270 default:
1271 /*@LOG bad working schedule. using WS0 */
1272 LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,ws);
1273 ws=WS_0;
1274 break;
1275 }
1276
1277
1278
1279 if(PRH_VAR_TRIG_II) {
1280 status=DAQ_StoreCmdQueue2PIF(SM_CALEXP3,&TRIG_II_INIT);
1281 RM_ACQ_EXIT_IFERROR(status);
1282 status=DAQ_SendCmdQueue2CMDIF(SM_CALEXP3);
1283 RM_ACQ_EXIT_IFERROR(status);
1284
1285 }
1286
1287
1288 DAQ_BUFFER_INIT(RM_buf_cmd);
1289
1290 switch(RM_Acq_setting_mode) {
1291 case RM_ACQ_SETTING_A:
1292 status=CH_GetBuf(CH_TB_SET_TRIGGER_CONF_01+PRH_VAR_TRIGGER_MODE_A-1,&p_tb_trigger_selection);
1293 break;
1294 case RM_ACQ_SETTING_B:
1295 status=CH_GetBuf(CH_TB_SET_TRIGGER_CONF_01+PRH_VAR_TRIGGER_MODE_B-1,&p_tb_trigger_selection);
1296 break;
1297 default:
1298 p_tb_trigger_selection = NULL;
1299 status=CM_RC_SUCCESSFUL;
1300 /*@LOG bad ACQSettintMode: do nothing*/
1301 LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,ws);
1302 break;
1303 }
1304
1305
1306 if(p_tb_trigger_selection != NULL) {
1307 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,p_tb_trigger_selection,
1308 DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1309 RM_ACQ_EXIT_IFERROR(status);
1310 }
1311
1312 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1313 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1314 RM_ACQ_EXIT_IFERROR(status);
1315
1316 status=CH_GetBuf(CH_TB_SET_BUSY_CONTROL_0+PRH_VAR_TRIGGER_BUSY_CONTROL,
1317 &p_tb_trigger_selection);
1318 RM_ACQ_EXIT_IFERROR(status);
1319
1320 if(p_tb_trigger_selection) {
1321 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,
1322 p_tb_trigger_selection,
1323 DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1324
1325 }
1326 RM_ACQ_EXIT_IFERROR(status);
1327
1328 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1329 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1330 RM_ACQ_EXIT_IFERROR(status);
1331
1332 if(PRH_VAR_TRK_OK) {
1333 for(i=1;i<=2;i++){
1334
1335 TRK_ALARM_MASK[i-1]|=0xc0;
1336 if(PRH_VAR_TB_LINK == 1 /* HOT */)
1337 TRK_ALARM_MASK[i-1] &= 0xBF;
1338 else
1339 TRK_ALARM_MASK[i-1] &= 0x7F;
1340 CH_GetBuf(TRK_MASK_BASE_ID-TRK_MASK_BASE_OFFSET+TRK_ALARM_MASK[i-1],&pbuf );
1341 fe = i==1 ? DAQ_FE_TRK_1 : DAQ_FE_TRK_2;
1342 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,fe);
1343 RM_ACQ_EXIT_IFERROR(status);
1344
1345 CH_GetBuf(CH_TRK_GENERAL_RESET,&pbuf);
1346 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,fe);
1347 RM_ACQ_EXIT_IFERROR(status);
1348
1349
1350 for(j=0;j<=5;j++)
1351 if(PRH_TAB_TRK_DSP_OK[i-1][j]) {
1352
1353 status=CH_GetBuf(CH_TRK_START_0+j,&pbuf);
1354 //fe = i==1 ? DAQ_FE_TRK_1 : DAQ_FE_TRK_2;
1355 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,fe);
1356 RM_ACQ_EXIT_IFERROR(status);
1357
1358 TRK_Get_TRK_NUMBER_DSP(i,j,&pbuf);
1359 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,fe);
1360 RM_ACQ_EXIT_IFERROR(status);
1361
1362 if(RM_Acq_After_Calib) {
1363 TRK_Get_TRK_OPMODE_SPEC(j,&pbuf);
1364 }else{
1365 TRK_Get_TRK_OPMODE_COMP(j,&pbuf);
1366 }
1367
1368 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,fe);
1369 RM_ACQ_EXIT_IFERROR(status);
1370 }
1371 }
1372 }
1373
1374
1375 if(RM_Acq_After_Calib) {
1376 CH_GetBuf(CH_CAL_FULL,&pbuf);
1377 }else{
1378 CH_GetBuf(CH_CAL_COMPRESS,&pbuf);
1379 }
1380
1381 if(PRH_VAR_CAL_OK) {
1382 cal_fe = 1;
1383 for(i=1;i<=4;i++) {
1384 if(cal_fe & CAL_DSP_MASK) {
1385 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_CAL(i));
1386 RM_ACQ_EXIT_IFERROR(status);
1387 }
1388 cal_fe <<= 1;
1389 }
1390 }
1391
1392
1393
1394
1395 // other detectors here ...
1396
1397 status=CH_GetBuf(CH_TB_START_ACQ,&pbuf);
1398 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1399 RM_ACQ_EXIT_IFERROR(status);
1400
1401 #if 0
1402 if(PRH_VAR_RM_IDAQONLYACQ) {
1403 /* write data into idaq , overwrite cmd queue */
1404 static UINT32 i;
1405 DAQ_BUFFER_INIT(RM_buf_data);
1406 DAQ_BUFFER_INIT(RM_128K_Buffer);
1407 RM_buf_data.eto=0;
1408 RM_buf_data.ato=0;
1409 RM_128K_Buffer.eto=0;
1410 RM_128K_Buffer.ato=0;
1411 DAQ_BUFFER_INIT(RM_buf_cmd);
1412 status |= DAQ_Format_Ram_SetAddress(&RM_buf_data,0);
1413 status |= DAQ_Format_Cmd2Ram(&RM_buf_cmd,&RM_buf_data);
1414
1415 for(i=0;i<PRH_VAR_RM_IDAQONLYACQ_BLOCKSIZE;i++,RM_128K_Buffer.buf[i]=i);
1416 RM_128K_Buffer.len=PRH_VAR_RM_IDAQONLYACQ_BLOCKSIZE;
1417
1418 status |= DAQ_Format_Ram_WriteData(&RM_buf_data,&RM_128K_Buffer);
1419 status |= DAQ_Format_Cmd2Ram(&RM_buf_cmd,&RM_buf_data);
1420 status |= DAQ_Format_Ram_EndBlock(&RM_buf_data);
1421 status |= DAQ_Format_Cmd2Ram(&RM_buf_cmd,&RM_buf_data);
1422 if(status)
1423 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1424 }
1425 #endif
1426
1427 status=DAQ_StoreCmdQueue2PIF(SM_CALEXP0,&RM_buf_cmd);
1428 RM_ACQ_EXIT_IFERROR(status);
1429
1430 if(
1431 (PRH_VAR_TRK_OK == 1 ||
1432 (CAL_DSP_MASK != 0 /* CAL in raw mode */ && PRH_VAR_CAL_OK == 1)
1433 )
1434 ) {
1435 status=DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP0,DAQ_NO_STORE_MM,&RM_buf_data,RM_storeram);
1436 }else{
1437 /* answer not expected from DAQ/IF */
1438 status=DAQ_SendCmdQueue2CMDIF(SM_CALEXP0);
1439 }
1440
1441 if (status)
1442 {
1443 /*@LOG EtoStartRun in Acquistion */
1444 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_START_RUN);
1445 status = ALM_Eto_Reset();
1446 RM_ACQ_EXIT_IFERROR(status);
1447 }
1448
1449 // START OF ACQUISITION CMD QUEUE
1450
1451 DAQ_BUFFER_INIT(RM_buf_cmd);
1452
1453 status=DAQ_Format_ReleaseBusy(&RM_buf_cmd);
1454
1455
1456 status=CH_GetBuf(CH_TB_READ_PMT_PLANE,&pbuf);
1457 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1458 RM_ACQ_EXIT_IFERROR(status);
1459
1460 status=CH_GetBuf(CH_TB_READ_EVENT_COUNT,&pbuf);
1461 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1462 RM_ACQ_EXIT_IFERROR(status);
1463
1464 status=CH_GetBuf(CH_TB_READ_TRIGGER_RATE,&pbuf);
1465 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1466 RM_ACQ_EXIT_IFERROR(status);
1467
1468 status=CH_GetBuf(CH_TB_READ_D_L_TIME,&pbuf);
1469 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1470 RM_ACQ_EXIT_IFERROR(status);
1471
1472 status=CH_GetBuf(CH_TB_READ_S4_CAL_COUNT,&pbuf);
1473 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1474 RM_ACQ_EXIT_IFERROR(status);
1475
1476 status=CH_GetBuf(CH_TB_READ_PMT_COUNT1,&pbuf);
1477 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1478 RM_ACQ_EXIT_IFERROR(status);
1479
1480 status=CH_GetBuf(CH_TB_READ_PMT_COUNT2,&pbuf);
1481 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1482 RM_ACQ_EXIT_IFERROR(status);
1483
1484 status=CH_GetBuf(CH_TB_READ_PATTERN_BUSY,&pbuf);
1485 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1486 RM_ACQ_EXIT_IFERROR(status);
1487
1488 status=CH_GetBuf(CH_TB_READ_PATTERN_TRIGGER,&pbuf);
1489 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1490 RM_ACQ_EXIT_IFERROR(status);
1491
1492 status=CH_GetBuf(CH_TB_READ_TRIGGER_CONF,&pbuf);
1493 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1494 RM_ACQ_EXIT_IFERROR(status);
1495
1496
1497
1498 if (PRH_VAR_TOF_OK){
1499
1500 if( PRH_ARR_TOF_PLAN[0] ) {
1501 CH_GetBuf(CH_TOF_FE_TDC_ACQ_1,&pbuf);
1502 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1503 RM_ACQ_EXIT_IFERROR(status);
1504 CH_GetBuf(CH_TOF_FE_TDC_ACQ_2,&pbuf);
1505 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1506 RM_ACQ_EXIT_IFERROR(status);
1507 CH_GetBuf(CH_TOF_FE_RESET_1,&pbuf);
1508 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1509 RM_ACQ_EXIT_IFERROR(status);
1510 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1511 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1512 RM_ACQ_EXIT_IFERROR(status);
1513 acq_build_info |= 1<<RM_ACQBI_TOF_PLAN_1;
1514 }
1515
1516 if( PRH_ARR_TOF_PLAN[1] ) {
1517 CH_GetBuf(CH_TOF_FE_TDC_ACQ_3,&pbuf);
1518 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1519 RM_ACQ_EXIT_IFERROR(status);
1520 CH_GetBuf(CH_TOF_FE_TDC_ACQ_4,&pbuf);
1521 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1522 RM_ACQ_EXIT_IFERROR(status);
1523 CH_GetBuf(CH_TOF_FE_RESET_2,&pbuf);
1524 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1525 RM_ACQ_EXIT_IFERROR(status);
1526 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1527 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1528 RM_ACQ_EXIT_IFERROR(status);
1529 acq_build_info |= 1<<RM_ACQBI_TOF_PLAN_2;
1530 }
1531
1532 if(PRH_ARR_TOF_PLAN[2]) {
1533 CH_GetBuf(CH_TOF_FE_TDC_ACQ_5,&pbuf);
1534 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1535 RM_ACQ_EXIT_IFERROR(status);
1536 CH_GetBuf(CH_TOF_FE_TDC_ACQ_6,&pbuf);
1537 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1538 RM_ACQ_EXIT_IFERROR(status);
1539 CH_GetBuf(CH_TOF_FE_RESET_3,&pbuf);
1540 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1541 RM_ACQ_EXIT_IFERROR(status);
1542 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1543 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1544 RM_ACQ_EXIT_IFERROR(status);
1545 acq_build_info |= 1<<RM_ACQBI_TOF_PLAN_3;
1546 }
1547
1548 if(PRH_ARR_TOF_PLAN[3]) {
1549 CH_GetBuf(CH_TOF_FE_TDC_ACQ_7,&pbuf);
1550 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1551 RM_ACQ_EXIT_IFERROR(status);
1552 CH_GetBuf(CH_TOF_FE_TDC_ACQ_8,&pbuf);
1553 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1554 RM_ACQ_EXIT_IFERROR(status);
1555 CH_GetBuf(CH_TOF_FE_RESET_4,&pbuf);
1556 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1557 RM_ACQ_EXIT_IFERROR(status);
1558 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1559 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1560 RM_ACQ_EXIT_IFERROR(status);
1561 acq_build_info |= 1<<RM_ACQBI_TOF_PLAN_4;
1562 }
1563
1564 if(PRH_ARR_TOF_PLAN[4]) {
1565 CH_GetBuf(CH_TOF_FE_TDC_ACQ_9,&pbuf);
1566 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1567 RM_ACQ_EXIT_IFERROR(status);
1568 CH_GetBuf(CH_TOF_FE_TDC_ACQ_10,&pbuf);
1569 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1570 RM_ACQ_EXIT_IFERROR(status);
1571 CH_GetBuf(CH_TOF_FE_RESET_5,&pbuf);
1572 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1573 RM_ACQ_EXIT_IFERROR(status);
1574 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1575 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1576 RM_ACQ_EXIT_IFERROR(status);
1577 acq_build_info |= 1<<RM_ACQBI_TOF_PLAN_5;
1578 }
1579
1580 if(PRH_ARR_TOF_PLAN[5]) {
1581 CH_GetBuf(CH_TOF_FE_TDC_ACQ_11,&pbuf);
1582 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1583 RM_ACQ_EXIT_IFERROR(status);
1584 CH_GetBuf(CH_TOF_FE_TDC_ACQ_12,&pbuf);
1585 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1586 RM_ACQ_EXIT_IFERROR(status);
1587 CH_GetBuf(CH_TOF_FE_RESET_6,&pbuf);
1588 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1589 RM_ACQ_EXIT_IFERROR(status);
1590 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1591 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1592 RM_ACQ_EXIT_IFERROR(status);
1593 acq_build_info |= 1<<RM_ACQBI_TOF_PLAN_6;
1594 }
1595
1596 CH_GetBuf(CH_TOF_FE_CLEAR,&pbuf);
1597 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_TOF);
1598 RM_ACQ_EXIT_IFERROR(status);
1599 }
1600
1601 if(PRH_VAR_AC_1_OK && (PRH_VAR_AC_1_ON || PRH_VAR_AC_1_CHECK)) {
1602 CH_GetBuf(CH_AC_READ_EVENT,&pbuf);
1603 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_AC_1);
1604 RM_ACQ_EXIT_IFERROR(status);
1605 acq_build_info |= 1<<RM_ACQBI_AC_1;
1606 }
1607
1608
1609 if(PRH_VAR_AC_2_OK && (PRH_VAR_AC_2_ON || PRH_VAR_AC_2_CHECK)) {
1610 CH_GetBuf(CH_AC_READ_EVENT,&pbuf);
1611 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_AC_2);
1612 RM_ACQ_EXIT_IFERROR(status);
1613 acq_build_info |= 1<<RM_ACQBI_AC_2;
1614 }
1615
1616 if(PRH_VAR_CAL_OK) {
1617 cal_fe = 1;
1618 #warning is this name correct? the flow chart only says CAL_READ_EVENT
1619 status=CH_GetBuf(CH_CAL_READ_EVENT_DATA,&pbuf);
1620 for(i=1;i<=4;i++) {
1621 if(cal_fe & (CAL_FE_MASK | PRH_VAR_CAL_CHECK_FE)) {
1622 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_CAL(i));
1623 RM_ACQ_EXIT_IFERROR(status);
1624 acq_build_info |= 1<<(RM_ACQBI_CAL_BASE+i-1);
1625 }
1626 cal_fe <<= 1;
1627 }
1628 }
1629
1630 if(PRH_VAR_TRK_OK) {
1631
1632 if(RM_Acq_After_Calib)
1633 {
1634 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1635 for(i=0;i<PRH_VAR_RM_NO_DUMMY_CMD_BEFORE_SPECIAL_TRK_ACQ;i++) {
1636 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1637 RM_ACQ_EXIT_IFERROR(status);
1638 }
1639 }
1640
1641
1642 for(i=1;i<=2;i++)
1643 for(j=0;j<=5;j++)
1644 if(PRH_TAB_TRK_DSP_OK[i-1][j]) {
1645 status=CH_GetBuf(CH_TRK_EVENT_ACQ_0+j,&pbuf);
1646 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRK(i));
1647 RM_ACQ_EXIT_IFERROR(status);
1648 acq_build_info |= 1<<(RM_ACQBI_TRK_BASE+(i-1)*6+j);
1649 }
1650 }
1651
1652 if (PRH_VAR_S4_OK && (PRH_VAR_S4_WORKING || PRH_VAR_S4_ATTEMPT))
1653 {
1654 status=CH_GetBuf(CH_S4_ACQUISITION,&pbuf);
1655 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_FE_S4);
1656 RM_ACQ_EXIT_IFERROR(status);
1657 acq_build_info |= 1<<RM_ACQBI_S4;
1658 }
1659
1660 if( PRH_VAR_ND_OK && (PRH_VAR_ND_ATTEMPT || RM_use_nd) ) {
1661 // status=CH_GetBuf(CH_ND_READ_ACQ,&pbuf);
1662 for(i=0;i<PRH_VAR_ND_CMDS;i++){
1663 status=RM_AssembleCmd(&RM_buf_cmd,&nd_acq_buf,DAQ_FE_ND);
1664 RM_ACQ_EXIT_IFERROR(status);
1665 acq_build_info |= 1<<RM_ACQBI_ND;
1666 }
1667 }
1668
1669 RM_ACQ_EXIT_IFERROR(status);
1670
1671 RM_Acq_Cmd_Queue_len=RM_buf_cmd.len;
1672
1673 if(PRH_VAR_TRIG_II) {
1674 status=DAQ_StoreCmdQueue2PIF(SM_CALEXP1,&TRIG_II_ACQ);
1675 }else{
1676 status=DAQ_StoreCmdQueue2PIF(SM_CALEXP1,&RM_buf_cmd);
1677 }
1678 RM_ACQ_EXIT_IFERROR(status);
1679
1680 // START OF "END OF RUN" CMD QUEUE
1681
1682 DAQ_BUFFER_INIT(RM_buf_cmd);
1683
1684 status=CH_GetBuf(CH_TB_STOP_ACQ,&pbuf);
1685 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1686 RM_ACQ_EXIT_IFERROR(status);
1687
1688 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1689 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1690 RM_ACQ_EXIT_IFERROR(status);
1691
1692 if(PRH_VAR_CAL_OK) {
1693 cal_fe = 1;
1694 for(i=1;i<=4;i++) {
1695 if(cal_fe & (CAL_FE_MASK | PRH_VAR_CAL_CHECK_FE)) {
1696 CH_GetBuf(CH_CAL_READ_HK,&pbuf);
1697 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_CAL(i));
1698 RM_ACQ_EXIT_IFERROR(status);
1699
1700 for(j=0; j < 7; j++)
1701 {
1702 status=CH_GetBuf(CAL_CAL_READ_FPGA_REG_BASE_ID+j,&pbuf);
1703 RM_ACQ_EXIT_IFERROR(status);
1704 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_CAL(i));
1705 RM_ACQ_EXIT_IFERROR(status);
1706 }
1707 }
1708 cal_fe <<= 1;
1709 }
1710 }
1711
1712
1713 RM_ACQ_EXIT_IFERROR(status);
1714
1715 CH_GetBuf(CH_TB_READ_ALARM_MASK,&pbuf);
1716 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1717 RM_ACQ_EXIT_IFERROR(status);
1718
1719 CH_GetBuf(CH_TB_READ_PMT_MASK,&pbuf);
1720 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1721 RM_ACQ_EXIT_IFERROR(status);
1722
1723 CH_GetBuf(CH_TB_READ_S4_CAL_MASK,&pbuf);
1724 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1725 RM_ACQ_EXIT_IFERROR(status);
1726
1727 CH_GetBuf(CH_TB_READ_BUSY_MASK,&pbuf);
1728 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1729 RM_ACQ_EXIT_IFERROR(status);
1730
1731 CH_GetBuf(CH_TB_READ_TRIGGER_CONF,&pbuf);
1732 status=RM_AssembleCmd(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1733 RM_ACQ_EXIT_IFERROR(status);
1734
1735 CH_GetBuf(CH_TB_GIVE_ME_TRIGGER,&pbuf);
1736 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
1737 RM_ACQ_EXIT_IFERROR(status);
1738
1739 CH_GetBuf(CH_DUMMY_COMMAND,&pbuf);
1740 status=DAQ_Format_Cmd2Fe(&RM_buf_cmd,pbuf,DAQ_FE_SPARE);
1741 RM_ACQ_EXIT_IFERROR(status);
1742
1743 status=DAQ_StoreCmdQueue2PIF(SM_CALEXP2,&RM_buf_cmd);
1744 RM_ACQ_EXIT_IFERROR(status);
1745
1746 status=RM_WriteRunHeader(acq_build_info);
1747 RM_ACQ_EXIT_IFERROR(status);
1748
1749 //pippo1();
1750 if(RM_Acq_After_Calib) {
1751 RM_Acq_After_Calib=FALSE;
1752 RM_run_real_duration_ms=PRH_VAR_RM_TIME_SPECIAL_RUN;
1753 }else{
1754 RM_run_real_duration_ms=duration_run;
1755 if(PRH_VAR_EXP64_MODE)
1756 DAQ_ResetPIF(DAQ_ACQ_ETO_TICS,DAQ_DEFAULT_DTO_TICS,SM_EXP64,HB_PKTTYPE_PHYS_PKT);
1757 }
1758 //pippo2();
1759 TI_piGetTimeInfo_s(&t);
1760 RM_end_of_run_obt_s = t + RM_run_real_duration_ms/1000;
1761 OS_piStartTimer_INFN(STOPACQ_TIM,
1762 RM_run_real_duration_ms,
1763 RM_StopAcq_ISR,
1764 NULL);
1765 //pippo3();
1766 RM_ACQ_EXIT_IFERROR(status);
1767 runcode=RM_DoRun(ws);
1768
1769 return runcode;
1770 }
1771
1772
1773 BOOL RM_RunIsInProgress() {
1774 return RM_Run_Is_In_Progress;
1775 }
1776
1777
1778
1779 /* this function enable the "RunAfterAscendingNode" flag, that means
1780 is the first run after the ascending node.
1781 this function should be called after an ascending node
1782 */
1783 status_code RM_EnableRunAfterAscendingNode() {
1784 RM_Is_Run_After_Ascending_Node = TRUE;
1785 }
1786
1787
1788 UINT32 RM_GetCalibrationCounter() {
1789 return RM_Calibration_Counter;
1790 }
1791
1792 void RM_LogStatus() {
1793 static UINT32 last_RM_PktReady_Counter=0;
1794 static TI_TIME ms1=0;
1795 TI_TIME ms2,diff,end_of_run_left_s,obt_s;
1796 UINT32 rate;
1797 WS ws;
1798 UINT32 npkt = RM_PktReady_Counter-last_RM_PktReady_Counter;
1799 TI_piGetTimeInfo_ms(&ms2);
1800 TI_piGetTimeInfo_s(&obt_s);
1801 diff=ms2-ms1;
1802 rate= (npkt*1000*100) / diff;
1803 if(RM_end_of_run_obt_s<obt_s)
1804 end_of_run_left_s=0;
1805 else
1806 end_of_run_left_s=RM_end_of_run_obt_s-obt_s;
1807 /*@LOG Run Manager Status */
1808 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_TaskStatus);
1809 /*@LOG Run is in progress flag */
1810 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_Run_Is_In_Progress);
1811 /*@LOG Run counter */
1812 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_Run_Counter);
1813 ws=WS_Favourite();
1814 /*@LOG Favourite WS */
1815 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,ws);
1816 ws=WS_Effective();
1817 /*@LOG Effective WS */
1818 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,ws);
1819 /*@LOG Acq setting */
1820 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_Acq_setting_mode);
1821 /*@LOG Real duration of the run (ms) */
1822 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_run_real_duration_ms);
1823 /*@LOG estimated OBT of the End of run (s) */
1824 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_end_of_run_obt_s);
1825 /*@LOG time left to the end of run (s) */
1826 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,end_of_run_left_s);
1827 /*@LOG ETO counter */
1828 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_ETO_Counter);
1829 /*@LOG Timeout counter */
1830 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_TIMEOUT_Counter);
1831 /*@LOG SINT counter */
1832 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_SINT_Counter);
1833 /*@LOG Is run after ascending node? (flag) */
1834 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_Is_Run_After_Ascending_Node);
1835 /*@LOG Physics Packets Counter since boot */
1836 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_PktReady_Counter);
1837 /*@LOG Physics Packet Counter in the previus LogStatus */
1838 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,last_RM_PktReady_Counter);
1839 /*@LOG Number of Physics Packet since previous LogStatus */
1840 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,npkt);
1841 /*@LOG Millisecons since previous LogStatus */
1842 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,diff);
1843 /*@LOG Rate since previous LogStatus - Hz * 100 */
1844 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,rate);
1845
1846 last_RM_PktReady_Counter=RM_PktReady_Counter;
1847 ms1=ms2;
1848 }
1849
1850 status_code RM_CloseRun(UINT32 pkt_count) {
1851 status_code status=CM_RC_SUCCESSFUL;
1852 status=RM_WriteRunTrailer(pkt_count);
1853 return status;
1854 }
1855
1856
1857 #define DUMMY32 0xCAFECAFE
1858
1859 status_code RM_WriteDownloadHeader(PRH_VAR_TYPE c) {
1860 BYTE i;
1861 DAQ_BUFFER_EMPTY(RM_buf_misc);
1862 for(i=0;i<HB_BUF_RAW_SIZE;i++)
1863 DAQ_WRITE_BE_UINT8(RM_buf_misc,c);
1864 HB_StoreRaw(&RM_buf_misc);
1865 return HB_WriteToPIF(HB_RAW);
1866 }
1867
1868 status_code RM_WriteInitializationHeader() {
1869 DAQ_BUFFER_EMPTY(RM_buf_misc);
1870 DAQ_WRITE_BE_UINT32(RM_buf_misc,DUMMY32);
1871 HB_StoreMisc(HB_PKTTYPE_INITHEADER,&RM_buf_misc);
1872 return RM_WriteHBInfos(FALSE);
1873 }
1874
1875 status_code RM_WriteInitializationTrailer() {
1876 DAQ_BUFFER_EMPTY(RM_buf_misc);
1877 DAQ_WRITE_BE_UINT32(RM_buf_misc,DUMMY32);
1878 HB_StoreMisc(HB_PKTTYPE_INITTRAILER,&RM_buf_misc);
1879 return RM_WriteHBInfos(FALSE);
1880 }
1881
1882
1883 status_code RM_WriteCalibrationHeader() {
1884 DAQ_BUFFER_EMPTY(RM_buf_misc);
1885 DAQ_WRITE_BE_UINT32(RM_buf_misc,DUMMY32);
1886 HB_StoreMisc(HB_PKTTYPE_CALIBHEADER,&RM_buf_misc);
1887 return RM_WriteHBInfos(FALSE);
1888 }
1889
1890 status_code RM_WriteCalibrationTrailer() {
1891 DAQ_BUFFER_EMPTY(RM_buf_misc);
1892 DAQ_WRITE_BE_UINT32(RM_buf_misc,DUMMY32);
1893 HB_StoreMisc(HB_PKTTYPE_CALIBTRAILER,&RM_buf_misc);
1894 return RM_WriteHBInfos(FALSE);
1895 }
1896
1897 status_code RM_WriteRunTrailer(UINT32 pkt_count) {
1898 status_code s;
1899 TI_TIME obt,ts;
1900 TI_piGetTimeSyncInfo_s(&obt,&ts);
1901 DAQ_BUFFER_EMPTY(RM_buf_misc);
1902 DAQ_WRITE_BE_UINT32(RM_buf_misc,pkt_count);
1903 DAQ_WRITE_BE_UINT32(RM_buf_misc,RM_PktReady_Counter);
1904 DAQ_WRITE_BE_UINT32(RM_buf_misc,obt);
1905 DAQ_WRITE_BE_UINT32(RM_buf_misc,ts);
1906 HB_StoreMisc(HB_PKTTYPE_RUNTRAILER,&RM_buf_misc);
1907 return RM_WriteHBInfos(FALSE);
1908 }
1909
1910 status_code RM_WriteRunHeader(UINT32 acq_build_info) {
1911 status_code s;
1912 TI_TIME obt,ts;
1913 UINT32 trk_calib_used;
1914 UINT16 acq_var_info=0;
1915 UINT32 compilestamp=LU_GetCompilationTimeStamp();
1916 BYTE ws;
1917 DAQ_BUFFER_EMPTY(RM_buf_misc);
1918 TRK_Get_CalibUsed(&trk_calib_used);
1919 // TI_piGetTimeInfo_ms(&obt);
1920 DAQ_WRITE_BE_UINT32(RM_buf_misc,compilestamp);
1921 DAQ_WRITE_BE_UINT8(RM_buf_misc,RM_Acq_setting_mode);
1922 TI_piGetTimeSyncInfo_s(&obt,&ts);
1923 DAQ_WRITE_BE_UINT32(RM_buf_misc,obt);
1924 DAQ_WRITE_BE_UINT32(RM_buf_misc,ts);
1925 ws=WS_Favourite();
1926 DAQ_WRITE_BE_UINT8(RM_buf_misc,ws);
1927 ws=WS_Effective();
1928 DAQ_WRITE_BE_UINT8(RM_buf_misc,ws);
1929 DAQ_WRITE_BE_UINT32(RM_buf_misc,PRH_VAR_TRIGGER_MODE_A);
1930 DAQ_WRITE_BE_UINT32(RM_buf_misc,PRH_VAR_TRIGGER_MODE_B);
1931 DAQ_WRITE_BE_UINT8(RM_buf_misc,RM_Acq_After_Calib);
1932 DAQ_WRITE_BE_UINT32(RM_buf_misc,trk_calib_used);
1933
1934
1935 acq_var_info =
1936 (PRH_VAR_TOF_OK ? 1<<0 : 0 ) |
1937 (PRH_VAR_AC_1_OK ? 1<<1 : 0 ) |
1938 (PRH_VAR_AC_2_OK ? 1<<2 : 0 ) |
1939 (PRH_VAR_CAL_OK ? 1<<3 : 0 ) |
1940 (PRH_VAR_TRK_OK ? 1<<4 : 0 ) |
1941 (PRH_VAR_S4_OK ? 1<<5 : 0 ) |
1942 (PRH_VAR_S4_WORKING ? 1<<6 : 0 ) |
1943 (PRH_VAR_S4_ATTEMPT ? 1<<7 : 0 ) |
1944 (PRH_VAR_ND_OK ? 1<<8 : 0 ) |
1945 (RM_use_nd ? 1<<9 : 0 ) |
1946 (PRH_VAR_ND_ATTEMPT ? 1<<10 : 0 ) |
1947 (PRH_VAR_POWER_KHB ? 1<<11 : 0 ) |
1948 (PRH_VAR_TB_LINK-1 ? 1<<12 : 0 ) |
1949 ((PRH_VAR_POWER_MODE & 0x3) <<13 )
1950 ;
1951
1952 DAQ_WRITE_BE_UINT32(RM_buf_misc,acq_build_info);
1953 DAQ_WRITE_BE_UINT16(RM_buf_misc,acq_var_info);
1954 DAQ_WRITE_BE_UINT8(RM_buf_misc,CAL_DSP_MASK);
1955 HB_StoreMisc(HB_PKTTYPE_RUNHEADER,&RM_buf_misc);
1956 return RM_WriteHBInfos(FALSE);
1957 }
1958
1959 /* write infos of HB into the PIF.
1960 This function doesnt change the ACQ mode of the PIF, assuming that is already correctly set */
1961 status_code RM_WriteHBInfos(BOOL dump_parameters) {
1962 status_code s,s2;
1963 BOOL mm;
1964 BYTE id;
1965
1966 #define all HB_SKETCHBOARD
1967
1968 /* compilation time control:
1969 check if the SKETCHSIZE cannot contain all the parameter dump infos: */
1970
1971 #if ((PRH_TOTAL_SIZE + PRH_VAR_MAX + PRH_ARR_MAX + PRH_TAB_MAX) > HB_SKETCHSIZE)
1972 #warning maybe the Parameter DUMP is too big for SKETCHSIZE ?
1973 #endif
1974
1975 s=HB_StoreSketchboard();
1976 if(dump_parameters) {
1977
1978 s=HB_StoreVarDump();
1979 if(s != SUCCESSFUL) {
1980 /*@LOG StoreVarDump error*/
1981 LU_INFN_LOG(LU_WARNING|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
1982 s2=HB_WriteToPIF(all);
1983 if(s2)
1984 /*@LOG Write error for Var Dump*/
1985 LU_INFN_LOG(LU_WARNING|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s2);
1986 }
1987
1988 s=HB_StoreArrDump();
1989 if( s != SUCCESSFUL) {
1990 /*@LOG StoreArrDump error*/
1991 LU_INFN_LOG(LU_WARNING|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
1992 s2=HB_WriteToPIF(all);
1993 if(s2)
1994 /*@LOG Write error for Arr Dump*/
1995 LU_INFN_LOG(LU_WARNING|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s2);
1996 }
1997
1998 s=HB_StoreTabDump();
1999 if( s != SUCCESSFUL) {
2000 /*@LOG StoreTabDump error*/
2001 LU_INFN_LOG(LU_WARNING|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
2002 s2=HB_WriteToPIF(all);
2003 if(s2)
2004 /*@LOG Write error for Tab Dump*/
2005 LU_INFN_LOG(LU_WARNING|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s2);
2006 }
2007
2008
2009
2010 }
2011
2012 s2=HB_WriteToPIF(all);
2013 if(s2)
2014 /*@LOG Write error for HB_Write2PIF */
2015 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,s2 );
2016
2017 if(dump_parameters)
2018 {
2019 /* Variabile Dump not stored in MM */
2020 if(PRH_VAR_RM_DUMP_ALL_PARAMS & HB_DUMP_ALL_PARAMS_VAR)
2021 for(id=0;id<PRH_VAR_MAX;id++)
2022 {
2023 if(PRH_int_var_is_in_mm(id,&mm) == CM_RC_SUCCESSFUL && !mm)
2024 {
2025 s=HB_StoreVar(id);
2026 if(s==CM_RC_SUCCESSFUL) {
2027 s2=HB_WriteToPIF(all);
2028 if(s2 != CM_RC_SUCCESSFUL) {
2029 /*@LOG HB_WriteToPIF Error for variables not stored in MM */
2030 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,s2);
2031 }
2032 }else{
2033 /*@LOG HB_StoreVar Error for variables not stored in MM - id */
2034 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,id);
2035 /*@LOG HB_StoreVar Error for variables not stored in MM - status */
2036 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
2037 }
2038 }
2039 }
2040
2041 /* Arrayes Dump not stored in MM */
2042 if(PRH_VAR_RM_DUMP_ALL_PARAMS & HB_DUMP_ALL_PARAMS_ARR)
2043 for(id=0;id<PRH_ARR_MAX;id++)
2044 {
2045 if(PRH_int_arr_is_in_mm(id,&mm) == CM_RC_SUCCESSFUL && !mm)
2046 {
2047 s=HB_StoreArr(id);
2048 if(s==CM_RC_SUCCESSFUL) {
2049 s2=HB_WriteToPIF(all);
2050 if(s2 != CM_RC_SUCCESSFUL) {
2051 /*@LOG HB_WriteToPIF Error for arrays not stored in MM */
2052 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,s2);
2053 }
2054 }else{
2055 /*@LOG HB_StoreArr Error for arrays not stored in MM - id */
2056 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,id);
2057 /*@LOG HB_StoreArr Error for arrays not stored in MM - status */
2058 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
2059 }
2060 }
2061 }
2062
2063 /* Tables Dump not stored in MM */
2064 if(PRH_VAR_RM_DUMP_ALL_PARAMS & HB_DUMP_ALL_PARAMS_TAB)
2065 for(id=0;id<PRH_TAB_MAX;id++)
2066 {
2067 if(PRH_int_tab_is_in_mm(id,&mm) == CM_RC_SUCCESSFUL && !mm)
2068 {
2069 s=HB_StoreVar(id);
2070 if(s==CM_RC_SUCCESSFUL) {
2071 s2=HB_WriteToPIF(all);
2072 if(s2 != CM_RC_SUCCESSFUL) {
2073 /*@LOG HB_WriteToPIF Error for tabs not stored in MM */
2074 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,s2);
2075 }
2076 }else{
2077 /*@LOG HB_StoreArr Error for tables not stored in MM - id */
2078 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,id);
2079 /*@LOG HB_StoreArr Error for tables not stored in MM - status */
2080 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
2081 }
2082 }
2083 }
2084
2085
2086 s=CM_RC_SUCCESSFUL;
2087
2088 }
2089 else
2090 s=s2;
2091
2092 return s;
2093 }
2094
2095 #undef all
2096
2097 status_code RM_ND_Initialization() {
2098 status_code status;
2099 UINT16 sw;
2100 DAQ_BUFFER_INIT(RM_buf_cmd);
2101 RM_Set_AcqExitIfError_FILEID(__FILEID__);
2102 status = DAQ_ResetPIF(DAQ_DEFAULT_ETO_TICS,DAQ_MAX_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_ND_INIT);
2103 RM_ACQ_EXIT_IFERROR(status);
2104
2105 RM_AssembleCmd(&RM_buf_cmd,&nd_acq_buf,DAQ_FE_ND);
2106 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP2,&RM_buf_cmd);
2107 RM_ACQ_EXIT_IFERROR(status);
2108 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP2,DAQ_STORE_MM,&RM_buf_data,DAQ_NO_STORE_RAM);
2109 if(status != CM_RC_SUCCESSFUL) {
2110 RM_use_nd=FALSE;
2111 // clear the idaq alarm:
2112 status=DAQ_ReadStatusWord(&sw);
2113 /*@LOG ND_Initialization read error / read IDAQ status word - idaq_st_word << 16 | status */
2114 LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,sw << 16 | status);
2115 RM_ACQ_EXIT_IFERROR(status);
2116 status=CM_RC_SUCCESSFUL;
2117 }
2118 return status;
2119 }
2120
2121 status_code RM_BC2PM(RM_OPCODES opcode,status_code code) {
2122 status_code status;
2123 MsgTsk SndMsg;
2124 unsigned char *pc;
2125 /* goes to idle because the RM is still not waiting in the queue, but wakes up the PamManager */
2126 SndMsg.Code = PM_INFN_RUNMANAGER_MSG;
2127
2128 pc = SndMsg.Info;
2129 *(RM_OPCODES*)pc = opcode; pc += sizeof(RM_OPCODES);
2130 *(status_code*)pc = code; pc += sizeof(status_code);
2131
2132 SndMsg.LlInfo = sizeof(RM_OPCODES) + sizeof(status_code);
2133 /*@LOG Send Code Back to Pam Manager - code */
2134 LU_INFN_LOG(LU_DEBUG_TRACE|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,code);
2135 status=PM_SndMsgPamManager_INFN(&SndMsg);
2136 return status;
2137 }
2138
2139 RM_OPCODES RM_WhatIsDoing() {
2140 return RM_TaskStatus;
2141 }
2142
2143 static status_code RM_InitIDAQ_TrigII() {
2144 // TBD
2145 return CM_RC_SUCCESSFUL;
2146 }
2147
2148
2149 status_code RM_Initialization(){
2150 status_code status = CM_RC_SUCCESSFUL,hs,ts;
2151 RM_Initialization_Counter++;
2152
2153 RM_Init_Before_Calib=FALSE;
2154 RM_Set_AcqExitIfError_FILEID(__FILEID__);
2155 status = HK_KHB_InitBoard();
2156
2157 if (status)
2158 {
2159 /*@LOG Initialization: Error Initializing do power off-on - status */
2160 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2161 return(CM_RC_DO_POWER_OFF_ON);
2162 }
2163
2164 DAQ_ResetPIF(DAQ_DEFAULT_ETO_TICS,DAQ_DEFAULT_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_RSV_RUN_MANAGER_INIT);
2165
2166 hs=RM_WriteInitializationHeader();
2167 #if 0
2168 #ifdef DEBUG
2169 {
2170 extern unsigned int IM_GetCalled(int);
2171 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,IM_GetCalled(11 /* IM_INT4 */ ));
2172 }
2173 #endif
2174 #endif
2175
2176
2177 if(PRH_VAR_TRIG_II) {
2178 status=RM_InitIDAQ_TrigII();
2179
2180 if (status)
2181 {
2182 /*@LOG IDAQ TRIG II mode Initialization failed */
2183 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_IDAQ_INIT);
2184 status = ALM_Eto_Reset();
2185 }
2186 else
2187 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_IDAQ,ALM_FE_IDAQ_INIT);
2188
2189 RM_INI_EXIT_IFETO(status);
2190 }
2191
2192
2193
2194 /*@LOG TRG Initialization ...*/
2195 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2196 status=TRG_Initialization();
2197
2198 if (status)
2199 {
2200 /*@LOG TRG Initialization failed */
2201 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_TRG_INIT);
2202 status = ALM_Eto_Reset();
2203 RM_INI_EXIT_IFETO(status);
2204 }
2205 else
2206 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_TRG,ALM_FE_TRG_INIT);
2207
2208 if(PRH_VAR_AC_1_OK && status == CM_RC_SUCCESSFUL)
2209 {
2210 /*@LOG AC 1 Initialization ...*/
2211 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2212
2213 status=AC_1_Initialization();
2214
2215 if (status)
2216 {
2217 /*@LOG AC 1 Initialization failed */
2218 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_AC_1_INIT);
2219 status = ALM_Eto_Reset();
2220 RM_INI_EXIT_IFETO(status);
2221 }
2222 else
2223 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_AC_1,ALM_FE_AC_1_INIT);
2224 }
2225
2226
2227 if(PRH_VAR_AC_2_OK && status == CM_RC_SUCCESSFUL)
2228 {
2229 /*@LOG AC 2 Initialization ...*/
2230 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2231 status=AC_2_Initialization();
2232
2233 if (status)
2234 {
2235 /*@LOG AC_2 Initialization failed */
2236 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_AC_2_INIT);
2237 status = ALM_Eto_Reset();
2238 RM_INI_EXIT_IFETO(status);
2239 }
2240 else
2241 status = ALM_FE_Alarm_Check_general(KHB_STS_ALARM_S4_ADC_AC_2,
2242 ALM_FE_AC_2_INIT,
2243 KHB_ALARM_AC_2
2244 );
2245 }
2246
2247
2248 if(PRH_VAR_CAL_OK && status == CM_RC_SUCCESSFUL)
2249 {
2250 /*@LOG CAL Initialization ...*/
2251 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2252
2253 status=CAL_Initialization();
2254 if (status)
2255 {
2256 /*@LOG CAL Initialization failed */
2257 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_CAL_INIT);
2258 status = ALM_Eto_Reset();
2259 RM_INI_EXIT_IFETO(status);
2260 }
2261 else
2262 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_CALO,ALM_FE_CAL_INIT);
2263 }
2264
2265 if(PRH_VAR_TRK_OK && status == CM_RC_SUCCESSFUL)
2266 {
2267 /*@LOG TRK Initialization ...*/
2268 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2269
2270 status=TRK_Initialization();
2271
2272 if (status)
2273 {
2274 /*@LOG TRK Initialization failed */
2275 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_TRK_INIT);
2276 status = ALM_Eto_Reset();
2277 RM_INI_EXIT_IFETO(status);
2278 }
2279 else
2280 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_TRK,ALM_FE_TRK_INIT);
2281 }
2282
2283
2284 if(PRH_VAR_TOF_OK && status == CM_RC_SUCCESSFUL)
2285 {
2286 /*@LOG TOF Initialization ...*/
2287 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2288
2289 status=TOF_Initialization();
2290
2291 if (status)
2292 {
2293 /*@LOG TOF Initialization failed */
2294 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_TOF_INIT);
2295 status = ALM_Eto_Reset();
2296 RM_INI_EXIT_IFETO(status);
2297 }
2298 else
2299 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_TOF,ALM_FE_TOF_INIT);
2300 }
2301
2302 RM_use_nd=TRUE;
2303
2304 if( PRH_VAR_ND_OK && status == CM_RC_SUCCESSFUL)
2305 {
2306 /*@LOG ND Initialization ...*/
2307 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2308
2309 status=RM_ND_Initialization();
2310
2311 if (status)
2312 {
2313 /*@LOG ND Initialization failed */
2314 ALM_WriteLog(ALM_TRACE_ID,ALM_FE_ND_INIT);
2315 status = ALM_Eto_Reset();
2316 RM_INI_EXIT_IFETO(status);
2317 }
2318 }
2319
2320 if( PRH_VAR_S4_OK && status == CM_RC_SUCCESSFUL)
2321 {
2322 /*@LOG S4 Initialization ...*/
2323 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2324
2325 status=S4_Initialization();
2326
2327 if (status)
2328 {
2329 if (status != CM_RC_DO_POWER_OFF_ON)
2330 {
2331 /*@LOG S4 Initialization failed */
2332 ALM_WriteLog(ALM_TRACE_ID,ALM_FE_S4_INIT);
2333 status = ALM_Eto_Reset();
2334 RM_INI_EXIT_IFETO(status);
2335 }
2336 }
2337 else
2338 status = ALM_FE_Alarm_Check_general(KHB_STS_ALARM_S4_ADC_AC_2,
2339 ALM_FE_S4_INIT,
2340 KHB_ALARM_S4_ADC);
2341 }
2342
2343 ts=RM_WriteInitializationTrailer();
2344
2345 if (ts)
2346 /*@LOG Write initialization header error - status*/
2347 LU_INFN_LOG(LU_CRITICAL,LU_MASK(__FILEID__),__FILEID__,__LINE__,ts);
2348
2349 return status;
2350 }
2351
2352 status_code RM_Calibration(){
2353 status_code status=CM_RC_SUCCESSFUL,cts;
2354 RM_Calibration_Counter++;
2355 RM_Init_Before_Calib = TRUE;
2356
2357 RM_Set_AcqExitIfError_FILEID(__FILEID__);
2358
2359 DAQ_ResetPIF(DAQ_DEFAULT_ETO_TICS,DAQ_DEFAULT_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_RSV_RUN_MANAGER_CALIB);
2360
2361 RM_WriteCalibrationHeader();
2362
2363
2364
2365 if(PRH_VAR_TRIG_II) {
2366 status=RM_InitIDAQ_TrigII();
2367
2368 if (status)
2369 {
2370 /*@LOG IDAQ TRIG II mode Initialization failed during calibration */
2371 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_IDAQ_INIT_CALIB);
2372 status = ALM_Eto_Reset();
2373 }
2374 else
2375 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_IDAQ,ALM_FE_IDAQ_INIT_CALIB);
2376
2377 RM_INI_EXIT_IFETO(status);
2378 }
2379
2380
2381 if(PRH_VAR_AC_1_OK || PRH_VAR_AC_2_OK) {
2382 if(PRH_VAR_AC_1_OK) {
2383 /*@LOG AC 1 Initialization ...*/
2384 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2385
2386 status=AC_1_Initialization();
2387 if (status)
2388 {
2389 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_AC_1_INIT_CALIB); /* AC_1 Initialization failed insiede calibration */
2390 status = ALM_Eto_Reset();
2391 RM_CAL_EXIT_IFETO(status);
2392 }
2393 }
2394 if(PRH_VAR_AC_2_OK) {
2395 /*@LOG AC 2 Initialization ...*/
2396 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2397
2398 status=AC_2_Initialization();
2399 if (status)
2400 {
2401 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_AC_2_INIT_CALIB); /* AC_2 Initialization failed inside calibration */
2402 status = ALM_Eto_Reset();
2403 RM_CAL_EXIT_IFETO(status);
2404 }
2405 }
2406 /*@LOG AC Calibration 1 ...*/
2407 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2408
2409 status=AC_Calibration1();
2410 if (status)
2411 {
2412 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_AC_CALIB1); /* AC_Calibration1 failed inside calibration */
2413 status = ALM_Eto_Reset();
2414 RM_CAL_EXIT_IFETO(status);
2415 }
2416 else
2417 status = ALM_FE_Alarm_Check_general(KHB_STS_ALARM_AC_1 | KHB_STS_ALARM_S4_ADC_AC_2 | KHB_STS_ALARM_IDAQ,
2418 ALM_FE_AC_CALIB,
2419 KHB_ALARM_AC_2);
2420 }
2421
2422 if(PRH_VAR_CAL_OK && status == CM_RC_SUCCESSFUL)
2423 {
2424 /*@LOG CAL Initialization ...*/
2425 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2426
2427 status=CAL_Initialization();
2428 if (status)
2429 {
2430 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_CAL_INIT_CALIB); /* CAL Initialization failed inside Calibration */
2431 status = ALM_Eto_Reset();
2432 RM_CAL_EXIT_IFETO(status);
2433 }
2434 /*@LOG CAL Calibration ...*/
2435 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2436
2437 status=CAL_Calibration();
2438 if (status)
2439 {
2440 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_CAL_CALIB); /* CAL Calibration failed inside Calibration */
2441 status = ALM_Eto_Reset();
2442 RM_CAL_EXIT_IFETO(status);
2443 }
2444 else
2445 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_CALO |
2446 KHB_STS_ALARM_IDAQ |
2447 KHB_STS_ALARM_TRG,
2448 ALM_FE_CAL_CALIB);
2449 }
2450
2451 if(PRH_VAR_TRK_OK && status == CM_RC_SUCCESSFUL)
2452 {
2453 /*@LOG TRK Initialization ...*/
2454 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2455
2456 status=TRK_Initialization();
2457 if (status)
2458 {
2459 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_TRK_INIT_CALIB); /* TRK Initialization failed inside Calibration */
2460 status = ALM_Eto_Reset();
2461 RM_CAL_EXIT_IFETO(status);
2462 }
2463 /*@LOG TRK Calibration ...*/
2464 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2465
2466 status=TRK_Calibration(PRH_VAR_TRK_CALIB_MODE);
2467 if (status)
2468 {
2469 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_TRK_CALIB); /* TRK Calibration failed inside Calibration */
2470 status = ALM_Eto_Reset();
2471 RM_CAL_EXIT_IFETO(status);
2472 }
2473 else
2474 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_TRK | KHB_STS_ALARM_IDAQ | KHB_STS_ALARM_TRG,ALM_FE_CAL_CALIB);
2475 }
2476
2477 if( (PRH_VAR_AC_1_OK || PRH_VAR_AC_2_OK) && status == CM_RC_SUCCESSFUL)
2478 {
2479 /*@LOG AC Calibration 2 ...*/
2480 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2481
2482 status=AC_Calibration2();
2483 if (status)
2484 {
2485 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_AC_CALIB2); /* AC Calibration2 failed inside Calibration */
2486 status = ALM_Eto_Reset();
2487 RM_CAL_EXIT_IFETO(status);
2488 }
2489 else
2490 status = ALM_FE_Alarm_Check(KHB_STS_ALARM_S4_ADC_AC_2 |
2491 KHB_STS_ALARM_AC_1 |
2492 KHB_STS_ALARM_IDAQ,ALM_FE_AC_CALIB2);
2493
2494
2495 }
2496
2497
2498 if(PRH_VAR_S4_OK && status == CM_RC_SUCCESSFUL)
2499 {
2500 /*@LOG S4 Initializtion ...*/
2501 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2502
2503 status = S4_Initialization();
2504
2505 if (status == CM_RC_SUCCESSFUL)
2506 {
2507 if (PRH_VAR_S4_WORKING || PRH_VAR_S4_ATTEMPT)
2508 {
2509 /*@LOG S4 Calibration ...*/
2510 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2511
2512 status = S4_Calibration();
2513
2514 if (status)
2515 {
2516 if (status != CM_RC_DO_POWER_OFF_ON)
2517 {
2518 /*@LOG S4 Calibration failed inside Calibration */
2519 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_S4_CALIB);
2520 status = ALM_Eto_Reset();
2521 RM_CAL_EXIT_IFETO(status);
2522 }
2523 }
2524 else {
2525 status = ALM_FE_Alarm_Check_general(KHB_STS_ALARM_S4_ADC_AC_2 | KHB_STS_ALARM_IDAQ,
2526 ALM_FE_S4_CALIB,
2527 KHB_ALARM_S4_ADC);
2528 if(status)
2529 /*@LOG S4 Calibration: AlarmCheck failed inside Calibration - status */
2530 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2531
2532 }
2533 }
2534 }
2535 else
2536 if (status != CM_RC_DO_POWER_OFF_ON)
2537 {
2538 /*@LOG S4 Initialization failed inside Calibration */
2539 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_S4_INIT_CALIB);
2540 status = ALM_Eto_Reset();
2541 RM_CAL_EXIT_IFETO(status);
2542 }
2543 }
2544
2545 if(PRH_VAR_ND_OK) {
2546 /*@LOG ND Initialization ...*/
2547 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xbabe);
2548
2549 status= RM_ND_Initialization() ;
2550 if (status)
2551 {
2552 /*@LOG ND Initialization failed inside Calibration */
2553 ALM_WriteLog(ALM_TRACE_ID,ALM_ETO_ND);
2554 status = ALM_Eto_Reset();
2555 RM_CAL_EXIT_IFETO(status);
2556 }
2557 }
2558
2559 cts=RM_WriteCalibrationTrailer();
2560 switch(status) {
2561 case CM_RC_SUCCESSFUL:
2562 RM_Calibration_Counter++;
2563 RM_Acq_After_Calib=TRUE;
2564 RM_Init_Before_Calib=FALSE;
2565 break;
2566 default:
2567
2568 }
2569
2570 if (cts)
2571 /*@LOG WriteCalibrationTrailer failed - status */
2572 LU_INFN_LOG(LU_CRITICAL,LU_MASK(__FILEID__),__FILEID__,__LINE__,cts);
2573
2574 return status;
2575 }
2576
2577
2578 status_code RM_Set_ForceIdaqCmd(HB_BUF bufid,UINT16 crc) {
2579 /* check if the buffer force_idaq_cmd_queue is available */
2580 if(RM_TaskStatus != RM_OP_FORCE_IDAQCMD) {
2581 DAQ_BUFFER_INIT(force_idaq_cmd_queue);
2582 return HB_Userdata2Buf(bufid,&force_idaq_cmd_queue,crc);
2583 }else
2584 return CM_RC_UNAVAILABLE_BUFFER;
2585
2586 }
2587
2588 status_code RM_Set_ForceFeCmd(HB_BUF bufid,UINT16 crc,BYTE eto,BYTE ato,DAQ_FE fe) {
2589 /* check if the buffer force_idaq_cmd_queue is available */
2590 status_code status;
2591 if(RM_TaskStatus != RM_OP_FORCE_IDAQCMD) {
2592 DAQ_BUFFER_INIT(force_idaq_cmd_queue);
2593 status = HB_Userdata2Buf(bufid,&RM_buf_cmd,crc);
2594 RM_buf_cmd.eto=eto;
2595 RM_buf_cmd.ato=ato;
2596 if(status==CM_RC_SUCCESSFUL)
2597 status = DAQ_Format_Fe2Daq(&force_idaq_cmd_queue,&RM_buf_cmd,fe);
2598 }else
2599 status = CM_RC_UNAVAILABLE_BUFFER;
2600 return status;
2601 }
2602
2603
2604 status_code RM_LogBuffer_128_DoLog(UINT32 offset,UINT32 count) {
2605 UINT32 i;
2606 /*@LOG Interal buffer dump : len*/
2607 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_128K_Buffer.len);
2608 for(i=0;i<count;i++)
2609 if(offset+i < RM_128K_Buffer.len)
2610 /*@LOG Interal buffer dump : data(offset+i)*/
2611 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,RM_128K_Buffer.buf[offset+i]);
2612 else {
2613 /*@LOG Interal buffer dump error: offset*/
2614 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,offset);
2615 /*@LOG Interal buffer dump error: i*/
2616 LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,i);
2617 return CM_RC_INVALID_BUFFER_SIZE;
2618 }
2619 return CM_RC_SUCCESSFUL;
2620 }
2621
2622 /*******************************
2623 * RM_Send_ForceIdaqCmd:
2624 * Do a acquisition sending a forced cmd-queue sent from ground (within a MCMD).
2625 *
2626 *******************************/
2627
2628 status_code RM_Send_ForceIdaqCmd()
2629 {
2630 SM_ACQMODE oldmode;
2631 status_code status = SUCCESSFUL;
2632 rtems_event_set evout;
2633 unsigned int intLevel;
2634 BOOL fullPIF = FALSE;
2635 static BOOL store_ram=1;
2636
2637 if(force_idaq_cmd_queue.len == 0) {
2638 /*@LOG ForceIdaqCMD command has zero lenght */
2639 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2640 return status;
2641 }
2642
2643 DAQ_ResetPIF(DAQ_MAX_ETO_TICS,DAQ_MAX_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_FORCED_FECMD);
2644
2645 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP0,&force_idaq_cmd_queue);
2646 if(status != SUCCESSFUL){
2647 /*@LOG SendForceIdaqCmd: error sending command - status*/
2648 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2649 return status;
2650 }
2651 RM_128K_Buffer.len=0;
2652 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP0,TRUE,&RM_128K_Buffer,store_ram);
2653
2654 return status;
2655 }
2656
2657 /*
2658 status_code ND_Init(){
2659 CH_SetAtoEto(CH_ND_READ_ACQ,1,2);
2660 return CM_RC_SUCCESSFUL;
2661 }
2662 */
2663 #if 0 // NOT USED
2664 status_code RM_SendMultipleCommand2CMDIF(SM_PAGEID page0,SM_PAGEID page1,SM_PAGEID page2,SM_PAGEID page3)
2665 {
2666 status_code status;
2667 SM_PAGEID last = SM_PAGEDUMMY;
2668 SM_PAGEID pages[4];
2669 int i;
2670
2671 pages[0] = page0; pages[1] = page1; pages[2] = page2; pages[3] = page3;
2672
2673 for(i = 0; i < 4; i++)
2674 if (pages[i] < SM_CALEXP0 || pages[i] > SM_CALEXP3)
2675 return(CM_RC_BADPAGE);
2676
2677 for(i = 0; i < 4; i++)
2678 if (pages[i] != SM_PAGEDUMMY)
2679 last = pages[i];
2680
2681 PM_pi_SetExpPktCpyFlag(TRUE);
2682
2683 for(i = 0; i < 4; i++)
2684 if (pages[i] != SM_PAGEDUMMY)
2685 {
2686 PM_pi_UseCalibrationPage(pages[i]);
2687 PM_piPreparePage((pages[i] == last) ? SM_WITHDAQ : SM_WITHNODAQ);
2688 }
2689
2690 return(CM_RC_SUCCESSFUL);
2691 }
2692 #endif // 0 NOT USED
2693
2694 #if DEBUG
2695 void RM_MCMDTest(UINT32 c1,UINT32 c2,UINT32 c3) {
2696 static UINT32 blen=64*1024;
2697 static UINT32 w=0;
2698 static UINT32 pattern=0xAA;
2699 status_code status,s;
2700 UINT32 i;
2701 UINT16 sw;
2702 SM_ACQMODE oldmode;
2703 DAQ_DECLBUF(hbuf,1024*64);
2704 switch(c1) {
2705 case 1:
2706 //oldmode = PM_pi_GetAcqMode();
2707 FT_piChangeAcqMode(SM_DIRECT);
2708 DAQ_BUFFER_INIT(hbuf);
2709 switch(w) {
2710 case 0:
2711 for(i=0;i<hbuf.size;i++)
2712 hbuf.buf[i]=(BYTE)(i & 0xff);
2713 hbuf.len=blen;
2714 break;
2715 case 1:
2716 for(i=0;i<hbuf.size/4;i++)
2717 ((unsigned int*)hbuf.buf) [i]= pattern;
2718 hbuf.len=blen;
2719 break;
2720 case 2:
2721 {
2722 static unsigned long rampacounter=0;
2723 *(unsigned long*)&(hbuf.buf[0])=rampacounter++;
2724 for(i=4;i<hbuf.size;i++)
2725 hbuf.buf[i]=(BYTE)(i & 0xff);
2726 hbuf.len=blen;
2727 }
2728 break;
2729 }
2730 status = DAQ_SaveBuffer2MM(&hbuf,FS_HK,1000);
2731 /*@LOG Trace:DAQ_SaveBuffer2MM: - status */
2732 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2733 //FT_piChangeAcqMode(oldmode);
2734 break;
2735 case 2:
2736 TRK_Initialization();
2737 break;
2738 case 3:
2739 TRK_Calibration(PRH_VAR_TRK_CALIB_INIT);
2740 break;
2741 case 4:
2742 {
2743 UINT32 value;
2744 HK_ReadKHBAlarmRegister(&value);
2745 /*@LOG KHB Alarm Register */
2746 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,value);
2747 }
2748 break;
2749 case 5:
2750 {
2751 UINT16 value;
2752 HK_ReadKHBStatusRegister(&value);
2753 /*@LOG KHB Status register */
2754 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,value);
2755 }
2756 break;
2757 case 6:
2758 CAL_Initialization();
2759 break;
2760 case 7:
2761 CAL_Calibration();
2762 break;
2763 case 8:
2764 TRG_Initialization();
2765 break;
2766 case 9:
2767 RM_LogBuffer_128_DoLog(c2,c3);
2768 break;
2769 case 10: // formatta eprom quando sto in default mode
2770 status = PRH_FormatEEPROM();
2771 /*@LOG Format EEPROM finisced - status*/
2772 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2773 break;
2774 case 11: // legge i valori correnti della eeprom e li mette in mem
2775 status = PRH_ReadCurrentParam();
2776 /*@LOG ReadCurrentParam - status */
2777 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2778 break;
2779 case 12:
2780 status = PRH_ReadDefaultParam();
2781 /*@LOG ReadDefaultParam - status */
2782 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2783 break;
2784 case 13:
2785 status = PRH_WriteCurrentParam();
2786 /*@LOG WriteCurrentParam (save) - status */
2787 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2788 break;
2789 case 15:
2790 status=DAQ_ReadStatusWord(&sw);
2791 if(status)
2792 /*@LOG error reading IDAQ status word - status */
2793 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2794 else
2795 /*@LOG IDAQ status word - status_word */
2796 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,sw);
2797 break;
2798 case 16:
2799 MC_piSetState(MC_ACTIVE_STATE);
2800 break;
2801 case 17:
2802 MC_piSetState(MC_MAINTENANCE_STATE);
2803 break;
2804 case 18:
2805 status = OS_piResourceRelease_INFN (TEST_RES);
2806 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2807 break;
2808 case 19:
2809 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,0xffff);
2810 status = OS_piResourceObtain_INFN(TEST_RES,WAIT,NO_TIMEOUT);
2811 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
2812 break;
2813 case 20:
2814 {
2815 UINT32 lev;
2816 OS_piInterDisable(&lev);
2817 ERC32_MEC.Control =0x1288801B;
2818 OS_piInterEnable(lev);
2819 }
2820 break;
2821 case 21:
2822 {
2823 status_code status = CM_RC_SUCCESSFUL;
2824 static int len21=1024*50;
2825 int j;
2826 DAQ_ResetPIF(DAQ_ACQ_ETO_TICS,DAQ_DEFAULT_DTO_TICS,SM_DAQSETUP,0xFF);
2827 SD_opSetCalibrationHeaderLength(0);
2828 SD_piSetSRAMRWAddress(0);
2829 for(j=0;j<len21;j++) {
2830 status=SD_piWriteSRAM( (j & 0xFF00 )>> 8);
2831 status=SD_piWriteSRAM( j & 0xFF );
2832 }
2833 while(!status && !RM_CheckSINT()){
2834 while(!PM_pi_ExpPageAvail()){
2835 {
2836 volatile UINT32 i;
2837 for(i=0;i<10000000/5489;i++); // 1ms = 10000000/5489
2838 }
2839 }
2840 status=PM_opPreparePage_dummy();
2841 status = FT_piSavePage(SM_CALPAGE, len21*2, FS_FILE1);
2842 /*
2843 {
2844 static valore_di_wait_dto=500*1000000;
2845 volatile UINT32 i;
2846 for(i=0;i<valore_di_wait_dto/5489;i++);
2847 }
2848 */
2849 }
2850 }
2851 break;
2852 case 22:
2853 {
2854 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,ERC32_MEC.Control);
2855 }
2856 break;
2857 default:
2858 break;
2859 }
2860 }
2861 #endif // DEBUG
2862
2863
2864
2865
2866
2867
2868
2869

  ViewVC Help
Powered by ViewVC 1.1.23