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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide 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 kusanagi 1.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