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

Annotation of /quicklook/dataToXML/Data/compilationInfo/src/INFN/SCM_Manager_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: SCM_Manager_INFN.c,v 1.54 2005/03/23 10:24:12 sebastiani Exp $
4     * $Revision: 1.54 $
5     * $Date: 2005/03/23 10:24:12 $
6     * $RCSfile: SCM_Manager_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: SCM_Manager_INFN.c,v $
17     * Revision 1.54 2005/03/23 10:24:12 sebastiani
18     * more logging in PowerOffOn
19     *
20     * Revision 1.53 2005/03/20 18:26:20 sebastiani
21     * status = PWR_InitBoard_twice();
22     *
23     * Revision 1.52 2005/03/13 18:24:47 sebastiani
24     * *** empty log message ***
25     *
26     * Revision 1.51 2005/03/06 14:54:46 sebastiani
27     * version running on 06 03 2005
28     *
29     * Revision 1.50 2005/02/24 17:50:18 sebastiani
30     * different PRH_VAR_POWER_MODE manages in SCM_Manager_INFN task main as a switch (2) PRH_VAR_ND_OK in custom mode get the same value as PRH_VAR_S4_OK and PRH_TAB_CONF[PRH_VAR_CONF_SEL][5]
31     *
32     * Revision 1.49 2005/02/21 14:26:01 sebastiani
33     * TSB bugfixes.
34     *
35     * Revision 1.48 2005/02/21 08:58:29 sebastiani
36     * all log comments completed
37     *
38     * Revision 1.47 2005/02/19 10:19:38 sebastiani
39     * ALM_S4_CALIB_00_HARD,ALM_S4_CALIB_00_SOFT,ALM_S4_128TRIGGER_0 added
40     *
41     * Revision 1.46 2005/01/26 18:46:48 sebastiani
42     * new bug fixes for WS
43     *
44     * Revision 1.45 2004/12/23 13:54:34 faber
45     * PWR_HVSetting() introduced
46     *
47     * Revision 1.44 2004/12/20 14:02:04 faber
48     * @LOG entry introduced in all ALM_WriteLog occurrences
49     *
50     * Revision 1.43 2004/12/15 09:32:47 sebastiani
51     * invocation of PWR_TRBSetting() moved into invocation of PWR_TRB_On()
52     *
53     * Revision 1.42 2004/11/30 11:51:53 faber
54     * AC+AC2 software moved into AC_1 AC_2
55     * new calibration and initialization for AC
56     * first version,never run
57     *
58     * Revision 1.41 2004/11/25 09:20:17 sebastiani
59     * *** empty log message ***
60     *
61     * Revision 1.40 2004/11/23 22:54:06 sebastiani
62     * *** empty log message ***
63     *
64     * Revision 1.39 2004/11/19 15:14:52 sebastiani
65     * PRH_EXTERN_{VAR,ARR,TABLE} removed and put them on the autogenerated parameter heeader file
66     *
67     * Revision 1.38 2004/11/18 16:02:34 sebastiani
68     * GAS/TRD removed
69     *
70     * Revision 1.37 2004/11/05 09:36:35 sebastiani
71     * first version of the PM state machine. tried but not deeply tested
72     *
73     * Revision 1.36 2004/11/02 15:41:39 faber
74     * *** empty log message ***
75     *
76     * Revision 1.35 2004/10/22 16:05:06 sebastiani
77     * *** empty log message ***
78     *
79     * Revision 1.34 2004/10/19 16:59:27 sebastiani
80     * first text for IPM/ciclyc
81     *
82     * Revision 1.33 2004/10/18 10:43:02 faber
83     * Power check new fligh mode
84     *
85     * Revision 1.32 2004/09/30 09:56:52 alfarano
86     * thermistors check funcs
87     *
88     * Revision 1.31 2004/09/28 15:34:30 alfarano
89     * *** empty log message ***
90     *
91     * Revision 1.30 2004/09/28 15:10:51 alfarano
92     * little bug
93     *
94     * Revision 1.28 2004/09/27 15:42:43 alfarano
95     * tracker sensor board functions
96     *
97     * Revision 1.27 2004/09/22 15:54:54 alfarano
98     * S4 functions
99     *
100     * Revision 1.26 2004/09/17 15:01:00 faber
101     * LU_INFN_LOG flags fixing
102     *
103     * Revision 1.25 2004/09/14 13:05:37 alfarano
104     * update TM constants and definitions
105     *
106     * Revision 1.23 2004/09/10 15:27:28 sebastiani
107     * added PWR dcdc procedures
108     *
109     * Revision 1.22 2004/08/30 07:08:18 sebastiani
110     * little modify
111     *
112     * Revision 1.21 2004/08/27 13:13:49 alfarano
113     * High voltage functions
114     *
115     * Revision 1.20 2004/08/26 16:54:34 sebastiani
116     * version work fine
117     *
118     * Revision 1.19 2004/08/05 16:19:07 sebastiani
119     * fix close run
120     * add cal handler error
121     * fix tmtc
122     * ok protocol betwen pm-rm-scm
123     *
124     * Revision 1.18 2004/08/02 15:49:47 alfarano
125     * alarm handling , scm & pm communication rewrite
126     *
127     * Revision 1.17 2004/08/02 12:16:06 sebastiani
128     * little fix
129     *
130     * Revision 1.16 2004/07/27 10:13:48 faber
131     * LU_ALARM macro introduced,
132     * LU_XXXX bit field "logtype" redefined.
133     * HistoryArea 5 now log a 32 bit word as "info1"
134     * and logging is reformatted.
135     *
136     * Revision 1.15 2004/07/15 10:50:28 sebastiani
137     * *** empty log message ***
138     *
139     * Revision 1.14 2004/07/13 14:35:54 alfarano
140     * *** empty log message ***
141     *
142     * Revision 1.13 2004/07/12 09:19:33 sebastiani
143     * some fixing about alamrs
144     *
145     * Revision 1.12 2004/06/15 08:24:37 sebastiani
146     * *** empty log message ***
147     *
148     * Revision 1.11 2004/04/29 14:31:46 sebastiani
149     * SAVETM bugfix
150     *
151     * Revision 1.10 2004/04/20 14:54:13 faber
152     * work before Brussel
153     *
154     * Revision 1.9 2004/03/09 19:07:22 faber
155     * introduced timer cancelling when disable sampling/storing of TMTC
156     *
157     * Revision 1.8 2004/03/09 15:10:29 faber
158     * HK_DoCyclicAcquisition takes a void *all_values_ptr param
159     * removed check cycle in the TMTC Module
160     *
161     * Revision 1.7 2004/03/08 15:49:09 alfarano
162     * improved handling functions for FE
163     *
164     * Revision 1.6 2004/02/27 15:40:46 tassa
165     * TMTC function moved in SCM MANAGER
166     * add function blocking to send FE command in HK MANAGER
167     *
168     * Revision 1.5 2003/12/06 08:32:38 faber
169     * startup procedure tuned. TMTC sampling storing at startup
170     *
171     * Revision 1.4 2003/12/05 17:14:34 alfarano
172     * update
173     *
174     * Revision 1.3 2003/12/04 17:16:08 sebastiani
175     * GS debug/tests, and other
176     *
177     * Revision 1.2 2003/11/27 17:53:23 faber
178     * -Power management poweron procedure done and some tested in the simulator
179     * -history entry 5 now takes OBT
180     *
181     * Revision 1.1 2003/11/19 15:47:03 faber
182     * System Control Manager (SCM) and Power Handler (PWR) modules introduced
183     *
184     * Revision 1.1 2003/10/03 16:12:26 faber
185     * *** empty log message ***
186     *
187     *
188     *****************************************************************************/
189    
190    
191    
192     /*============================= Include File ================================*/
193    
194     #include <src/INFN/LU_SourceFileID_INFN.h>
195     #define __FILEID__ _SCM_Manager_INFN__c
196     #include <src/INFN/PRH_ParamHandler_INFN.h>
197     #include <src/INFN/LU_LogUtility_INFN.h>
198     #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
199     LU_DECL_MASK();
200    
201     #include <src/INFN/SCM_Manager_INFN.h>
202     #include <src/TM_TCManager/TMTCManager/TM_TMTCManager_op.h>
203     #include <src/INFN/HK_Manager_INFN.h>
204     #include <src/INFN/HB_HKBuffer_INFN.h>
205     #include <src/INFN/KHB_Driver_INFN.h>
206     #include <src/INFN/PWR_PowerHandler_INFN.h>
207     #include <src/INFN/GS_Gas_INFN.h>
208     #include <src/INFN/PM_PamManager_INFN.h>
209     #include <src/INFN/MH_ModeHandler_INFN.h>
210     #include <src/INFN/ALM_Alarm_INFN.h>
211     #include <src/INFN/TRK_Tracker_INFN.h>
212     #include <src/INFN/OS_rtems_INFN_p.h>
213    
214    
215     #define SCM_IPM_CHECK(var,ipm) (var & (1 << ipm))
216    
217    
218     //static BOOL SCM_Therm_Alarm,SCM_Pamela_OffOn,SCM_Pamela_OnOff,SCM_IPM_Alarm,SCM_Switch_OffAll,SCM_KHB_Alarm,SCM_IDAQ_Alarm;
219    
220     static UINT32 SCM_TMValues[TM_MAX_TELEMETRY];
221    
222     #define SCM_SAMPLED 30
223     #define SCM_SAMPLE_UNDEFINED 0xFFFFFFFF
224     static UINT32 SCM_SampleTMValues_Index;
225     static UINT32 SCM_SampleTMVAlues[SCM_SAMPLED][TM_MAX_TELEMETRY];
226     static UINT32 SCM_SampleAverage[TM_MAX_TELEMETRY];
227     static UINT32 SCM_TM_Reference[TM_MAX_TELEMETRY];
228     static UINT16 SCM_TM_Therm_Count[TM_THERMISTOR_COUNT];
229     static BOOL SCM_SampleIsFull;
230     static BOOL SCM_EnableCyclicCheck;
231     static BOOL SCM_do_skip_detectors;
232     static UINT32 SCM_count_failed_power_on=0;
233     static UINT32 SCM_pamela_switched_off_therm=0;
234    
235     /* task status: */
236     SCM_ACTION SCM_Action=SCM_NO_ACTION;
237     /*****************************************************************************/
238     /*============================= Object variables ============================*/
239    
240    
241     /*****************************************************************************/
242    
243     /* P a y l o a d s O P E R A T I O N A L F U N C T I O N S */
244    
245     /*****************************************************************************/
246     /* @Function: SCM_InitHKManager */
247     /* @Purpose : */
248     /* Initialialization function of the HK component. */
249     /* */
250     /* @@ */
251     /* @Parameter Name @Mode @Description */
252     /* status_code OUT Return code */
253     /* @@ */
254     /*****************************************************************************/
255    
256     status_code SCM_InitSCManager (void)
257     {
258     status_code status;
259     void * p;
260     unsigned short * pR;
261     unsigned int OldPriority;
262    
263     // Task initialization
264    
265     if ((status=OS_piTaskReady_INFN(SCM_INFN_TASK,SCM_tkSCManager)) != SUCCESSFUL)
266     {
267     /*@LOG Task is not correctly started - status */
268     LU_INFN_LOG (LU_FATAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
269     status = UNSATISFIED;
270     }
271    
272     if ( (status=OS_piTaskPriority_INFN(SCM_INFN_TASK, SCM_MANAGER_PRIORITY, &OldPriority)) != SUCCESSFUL)
273     {
274     /*@LOG Task priority is not correctly updated - status */
275     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
276     status = UNSATISFIED;
277     }
278     SCM_InitSampledValues();
279     SCM_do_skip_detectors=0;
280     SCM_count_failed_power_on=0;
281     return (status);
282     }
283    
284    
285     status_code SCM_SendCode(SCM_ACTION action) {
286     MsgTsk SndMsg;
287     SndMsg.Code = action;
288     return SCM_SndMsgSCManager(&SndMsg);
289     }
290    
291    
292     status_code SCM_SndMsgSCManager(MsgTsk* SndMsg)
293     {
294     status_code status;
295     status = OS_piMsgQueueSend_INFN(SCM_INFN_MAILBOX, (void *) SndMsg, sizeof(MsgTsk));
296     if(status != SUCCESSFUL)
297     /*@LOG Failed sending message to SCM - status */
298     LU_INFN_LOG (LU_FATAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
299     return (status);
300     }
301    
302    
303     void SCM_SetCyclicCheck(BOOL b) {
304     SCM_EnableCyclicCheck=b;
305     }
306    
307     SCM_ACTION SCM_GetCurrentAction() {
308     UINT32 level;
309     SCM_ACTION action;
310     OS_PROTECTED_INT(level,action=SCM_Action);
311     return action;
312     }
313    
314    
315     task SCM_tkSCManager (task_argument unused)
316     {
317     status_code status;
318     MsgTsk RxMsg,SndMsg;
319     unsigned int MsgSize;
320     unsigned int no_cyclic=0;
321     UINT32 level;
322    
323     while (FOREVER)
324     {
325     if ((status = OS_piMsgQueueReceive_INFN(SCM_INFN_MAILBOX,(void *)&RxMsg,&MsgSize,WAIT,NO_TIMEOUT)) == SUCCESSFUL) {
326     OS_PROTECTED_INT(level,SCM_Action=(SCM_ACTION)RxMsg.Code);
327     switch (SCM_Action) {
328     case SCM_SAVE_TMTC_VALUES:
329     status = HK_SaveTMTCValues();
330     if (status != CM_RC_SUCCESSFUL)
331     /*@LOG Error saving TMTC Values - status */
332     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
333     break;
334     case SCM_CYCLIC_ACQUISITION:
335    
336     /*
337     if(RxMsg.Info[0])
338     {
339     SCM_InitSampledValues();
340     no_cyclic=0;
341     }
342     */
343     no_cyclic++;
344     status = HK_DoCyclicAcquisition((void*)SCM_TMValues);
345     if(status != CM_RC_SUCCESSFUL)
346     status = CM_RC_DO_STOP_WAIT;
347     else {
348     SCM_StoreSampledTMValues();
349    
350     if(PRH_VAR_SCM_TM_DO_CHECK_VALUES_FREQ &&
351     no_cyclic >= PRH_VAR_SCM_TM_DO_CHECK_VALUES_FREQ &&
352     SCM_EnableCyclicCheck)
353     {
354     status = SCM_CyclicChecks();
355     if(status)
356     /*@LOG SCM_CyclicChecks return unsuccessfull - status */
357     LU_INFN_LOG (LU_DEBUG_TRACE|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
358     no_cyclic=0;
359     }
360     }
361     break;
362     case SCM_POWER_ON:
363     {
364    
365     PRH_VAR_PAMELA_ON = 0;
366     SCM_pamela_switched_off_therm=0;
367    
368     PWR_IPM_WaitOK();
369     status = PWR_PowerCheck(TRUE);
370     /*@LOG SCM_POWER_ON : PWR_PowerCheck(TRUE) - status */
371     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
372    
373     if (status)
374     {
375     // status==CM_RC_DO_STOP_WAIT and called dcdcOFF(true)
376     status = CM_RC_DO_STOP_WAIT;
377     }
378     else
379     {
380     status = PWR_DcdcON();
381     /*@LOG SCM_POWER_ON: PWR_DcdcON - status */
382     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
383    
384     if (status == CM_RC_SUCCESSFUL)
385     {
386     PRH_VAR_N_CALIB = 0;
387     PRH_VAR_PAMELA_ON = 1;
388    
389     if(PRH_VAR_TRB_OK) {
390     status = PWR_TRB_On();
391     /*@LOG SCM_POWER_ON: PWR_TRB_On(); - status */
392     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
393     }
394    
395     if(status == CM_RC_SUCCESSFUL/**/){
396     if(PRH_ARR_TSB_BOARD_OK[0] || PRH_ARR_TSB_BOARD_OK[1]) {
397     status = PWR_CMD2PSB(PRH_ARR_PSB_COMMANDS[PWR_PSB_TRACKER_SENSOR_ON],TM_PSB_ALARM,CM_OFF,
398     ALM_TRK_TRKSNS_1,ALM_TRK_TRKSNS_2,PWR_PSB_STANDARD_ANSWER);
399     if(status)
400     /*@LOG SCM_POWER_ON: TSB Switch on error - status */
401     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
402     else
403     OS_piTaskSuspend(TRK_SENSORS_WAIT);
404    
405     status = PWR_InitBoard_twice();
406     if(status != CM_RC_SUCCESSFUL){
407     /*@LOG PWR_DcdcON - KHB INIT BOARD at end of function: - status */
408     LU_INFN_LOG(LU_DEBUG_TRACE|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
409     status=CM_RC_DO_POWER_OFF_ON;
410     }
411     }
412    
413     if(status==CM_RC_SUCCESSFUL && PRH_VAR_HV_OK) {
414     status = PWR_HVSetting();
415     /*@LOG SCM_POWER_ON: PWR_HVSetting() - status */
416     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
417     }
418    
419     if(status == CM_RC_SUCCESSFUL)
420     switch(PRH_VAR_PULSER_ACTION) {
421     case 1:
422     status=PWR_SendTC(TM_PULSER_RESET);
423     /*@LOG SCM_POWER_ON: Reset Pulser - status */
424     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,status);
425     break;
426     case 2:
427     status=PWR_SendTC(TM_PULSER_025);
428     /*@LOG SCM_POWER_ON: Set Pulser 0.25 - status */
429     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,status);
430     break;
431     case 3:
432     status=PWR_SendTC(TM_PULSER_100);
433     /*@LOG SCM_POWER_ON: Set Pulser 100 - status */
434     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,status);
435     break;
436     }
437     }
438     else
439     status=CM_RC_DO_POWER_OFF_ON;
440     }
441     else{ // CM_RC_DO_POWER_OFF_ON;
442     /*@LOG PWR_DcdcON returns unsuccessfull: goto CM_RC_DO_POWER_OFF_ON */
443     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
444     }
445     }
446     /* if startup terminates with CM_RC_DO_POWER_OFF_ON, is not usefull to skip detectors in
447     SCM_PowerOffOn() */
448     SCM_do_skip_detectors=(status!=CM_RC_DO_POWER_OFF_ON);
449     if(status==CM_RC_SUCCESSFUL)
450     SCM_count_failed_power_on=0;
451     }
452     break;
453     case SCM_POWEROFF_ON:
454     status = SCM_PowerOffOn();
455     break;
456     case SCM_POWEROFFSHUTDOWN:
457     PWR_DcdcOFF(TRUE);
458     status = CM_RC_SUCCESSFUL;
459     break;
460     case SCM_POWEROFF:
461     PWR_DcdcOFF(FALSE);
462     status = CM_RC_SUCCESSFUL;
463     break;
464     case SCM_TSB_T_CHECK:
465     if(PRH_VAR_TSB_T_OK)
466     status = TRK_CheckTSensors();
467     else
468     status = CM_RC_SUCCESSFUL;
469     if(status != CM_RC_SUCCESSFUL) {
470     /*@LOG SCM_TSB_T_CHECK error : - status */
471     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
472     status = CM_RC_DO_POWER_OFF_ON;
473     }
474     break;
475     case SCM_TSB_B_CHECK:
476     if(PRH_VAR_TSB_B_OK)
477     status = TRK_CheckBSensors();
478     else
479     status = CM_RC_SUCCESSFUL;
480     if(status != CM_RC_SUCCESSFUL) {
481     /*@LOG SCM_TSB_B_CHECK error : - status */
482     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
483     status = CM_RC_DO_POWER_OFF_ON;
484     }
485     break;
486     default:
487     /*@LOG SCM error operation code - status */
488     LU_INFN_LOG (LU_INTERNAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
489     break;
490     }
491     SCM_BC2PM((SCM_ACTION)RxMsg.Code,status);
492     OS_PROTECTED_INT(level,SCM_Action = SCM_NO_ACTION);
493     }
494     }
495     }
496    
497    
498     status_code SCM_InitSampledValues() {
499     int i,j;
500     SCM_SampleTMValues_Index=0;
501     SCM_SampleIsFull = FALSE;
502    
503     for(i=0;i<SCM_SAMPLED;i++)
504     for(j=0;j<TM_MAX_TELEMETRY;j++)
505     SCM_SampleTMVAlues[i][j]=SCM_SAMPLE_UNDEFINED;
506    
507     for(i=0; i < TM_THERMISTOR_COUNT; i++)
508     SCM_TM_Therm_Count[i]=0;
509    
510     }
511    
512     status_code SCM_StoreSampledTMValues()
513     {
514     int i,j;
515     unsigned int loc_mask;
516    
517     if(SCM_SampleTMValues_Index >= SCM_SAMPLED)
518     {
519     SCM_SampleIsFull = TRUE;
520     SCM_SampleTMValues_Index=0;
521     }
522    
523     memcpy(SCM_SampleTMVAlues[SCM_SampleTMValues_Index],
524     SCM_TMValues,
525     sizeof(SCM_TMValues));
526    
527     SCM_SampleTMValues_Index++;
528    
529     return(CM_RC_SUCCESSFUL);
530     }
531    
532    
533     status_code SCM_ComputeSampleAverage()
534     {
535     status_code status=CM_RC_SUCCESSFUL;
536     UINT32 i,j;
537     BOOL termfault=FALSE;
538     if(SCM_SampleIsFull == TRUE) {
539    
540     /* TH_ANA: */
541     for(j=TM_TH_ANA_1;j<=TM_TH_ANA_16;j++) {
542     SCM_SampleAverage[j]=0;
543     termfault=FALSE;
544     for(i=0;i<SCM_SAMPLED && !termfault; i++){
545     if(SCM_SampleTMVAlues[i][j] >= SCM_THERM_FAULTVALUE)
546     termfault=TRUE;
547     SCM_SampleAverage[j]+=SCM_SampleTMVAlues[i][j];
548     }
549     if(termfault)
550     SCM_SampleAverage[j]=SCM_THERM_FAULTVALUE;
551     else
552     SCM_SampleAverage[j]/=SCM_SAMPLED;
553     }
554     }
555     else
556     status=CM_RC_NOINFO;
557    
558     return status;
559     }
560    
561     status_code SCM_TM_Thermistors_Check()
562     {
563     status_code status = CM_RC_SUCCESSFUL;
564     int i,j,loc_mask;
565     BOOL can_switch = TRUE;
566    
567     for(j=TM_TH_ANA_1,loc_mask=1;j <= TM_TH_ANA_16;j++,loc_mask<<=1)
568     {
569     if ( (loc_mask & PRH_VAR_THERM_MASK) && SCM_SampleAverage[j]!= SCM_THERM_FAULTVALUE)
570     {
571     if (SCM_SampleAverage[j] < PRH_ARR_THERM_LOW[j-TM_TH_ANA_1]) // too high temperature
572     {
573     /*@LOG TM_Thermistors_Check() : temperature too high ! */
574     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,j);
575     /*@LOG TM_Thermistors_Check() : temperature too high ! */
576     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,SCM_SampleAverage[j]);
577     if(PRH_VAR_PAMELA_ON) {
578     SCM_pamela_switched_off_therm++;
579     return CM_RC_DO_STOP_WAIT; // some temperature is too high and pamela is on: swith off
580     }
581     else
582     return CM_RC_SUCCESSFUL; // some tempetarure is too high but pamela already off: do nothing
583     }
584     if (SCM_SampleAverage[j] < PRH_ARR_THERM_HIGH[j-TM_TH_ANA_1]) // some temperature still not in the range
585     can_switch = FALSE;
586     }
587     }
588    
589     if (PRH_VAR_PAMELA_ON == 0 && can_switch && SCM_pamela_switched_off_therm)
590     {
591    
592     /*
593     All temperatures are fine we can power on and last pamela_swith off was because therm.
594     PAMELA can be switched on if and only if the last power off was due a temperature too high.
595     if PAMELA had been swithed on because of some other reason, SCM_pamela_switched_off_therm is zeroed.
596     */
597    
598     /*@LOG TM_Thermistors_Check() : all temperature go back to granted values: switch on pamela! */
599     LU_INFN_LOG (LU_WARNING|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,0xBE11E);
600     status=CM_RC_DO_POWER_ON;
601     }
602     return status;
603     }
604    
605     status_code SCM_IPM_Voltages_Check()
606     {
607     return PWR_PowerCheck(FALSE);
608     }
609    
610     status_code SCM_KHB_IDAQ_Error_Check()
611     {
612     unsigned int idaqcc=0,khbcc=0;
613     status_code s;
614     CM_HOT_COLD hc;
615    
616     s = HK_KHB_GetHotCold(&hc);
617     if(s == CM_RC_SUCCESSFUL){
618     if(hc==CM_HOT){
619     idaqcc = SCM_TMValues[TM_IDAQ_HOT_ALARM];
620     khbcc = SCM_TMValues[TM_KHB_HOT_LATCHUP];
621     }
622     else{
623     idaqcc = SCM_TMValues[TM_IDAQ_COLD_ALARM];
624     khbcc = SCM_TMValues[TM_KHB_COLD_LATCHUP];
625     }
626     }
627     if(s!=CM_RC_SUCCESSFUL){
628     /*@LOG Idaq Error Check: error retriving HOT/COLD status. Bug!! - status */
629     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,s);
630     return CM_RC_DO_POWER_OFF_ON;// ??
631     }
632     if(khbcc)
633     {
634     /*@LOG khbcc not zero goto POWER_OFF_ON - khbcc */
635     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,khbcc);
636     return CM_RC_DO_POWER_OFF_ON;
637     }
638     if(idaqcc)
639     {
640     /*@LOG idaqcc not zero goto POWER_OFF_ON - idaqcc */
641     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,idaqcc);
642     return CM_RC_DO_POWER_OFF_ON;
643     }
644     return CM_RC_SUCCESSFUL;
645     }
646    
647     status_code SCM_PowerOffOn()
648     {
649     status_code status;
650    
651     if (PRH_VAR_OFF < PRH_VAR_NOFF)
652     {
653     PRH_VAR_OFF++;
654    
655     /*@LOG PowerOffOn: number of switched off - PRH_VAR_OFF */
656     ALM_WriteLog(ALM_OFF,PRH_VAR_OFF);
657     /*@LOG PowerOffOn: number of reset - PRH_VAR_RES */
658     ALM_WriteLog(ALM_RES,PRH_VAR_RES);
659     PWR_DcdcOFF(FALSE);
660     status = CM_RC_DO_POWER_ON;
661     }
662     else
663     {
664    
665     /*@LOG PowerOffOn: number of switched off (PRH_VAR_OFF) exceedes NOFF (PRH_VAR_NOFF) - PRH_VAR_OFF */
666     LU_INFN_LOG (LU_WARNING|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,PRH_VAR_OFF);
667    
668     switch(PRH_VAR_POWER_MODE) {
669     case 1:
670     case 2:
671     PRH_VAR_POWER_MODE++;
672     PWR_DcdcOFF(FALSE);
673     status = CM_RC_DO_POWER_ON;
674     break;
675     case 3:
676     {
677    
678     PWR_DcdcOFF(FALSE);
679     status = CM_RC_DO_POWER_ON;
680    
681    
682     if(!SCM_do_skip_detectors) {
683     if(SCM_count_failed_power_on++ > PRH_VAR_NFAILED_POWER_ON) {
684     /* if numerb of failed pwoer_on > PRH_VAR_NFAILED_POWER_ON, do nothing and STOP&WAIT */
685    
686     /*@LOG PowerOffOn: maximum number of power off/on - SCM_count_failed_power_on */
687     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,SCM_count_failed_power_on);
688    
689     status = CM_RC_DO_STOP_WAIT;
690     return status;
691     }
692     }
693     else{
694     if (PRH_VAR_CONFOK < 2)
695     {
696     if(PRH_VAR_CONF_SEL < 5) {
697    
698     /*@LOG PowerOffOn: remove some FE - PRH_VAR_CONF_SEL */
699     LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__,PRH_VAR_CONF_SEL);
700    
701     PRH_VAR_CAL_OK = PRH_TAB_CONF[PRH_VAR_CONF_SEL][0];
702     PRH_VAR_TRK_OK = PRH_TAB_CONF[PRH_VAR_CONF_SEL][1];
703     PRH_VAR_TOF_OK = PRH_TAB_CONF[PRH_VAR_CONF_SEL][2];
704     PRH_VAR_AC_1_OK = PRH_TAB_CONF[PRH_VAR_CONF_SEL][3];
705     PRH_VAR_AC_2_OK = PRH_TAB_CONF[PRH_VAR_CONF_SEL][4];
706     PRH_VAR_ND_OK = PRH_VAR_S4_OK = PRH_TAB_CONF[PRH_VAR_CONF_SEL][5];
707    
708     if (PRH_VAR_CONFOK == 1)
709     PRH_VAR_CONF_SEL++;
710    
711     }else{
712     status = CM_RC_DO_STOP_WAIT;
713     }
714     /*@LOG PowerOffOn: PRH_VAR_CONFOK < 2 */
715     ALM_WriteLog(ALM_CONFOK,PRH_VAR_CONFOK);
716     /*@LOG PowerOffOn: PRH_VAR_CONFOK < 2 */
717     ALM_WriteLog(ALM_CONF,PRH_VAR_CONF_SEL);
718     PRH_VAR_OFF = 0;
719     PRH_VAR_RES = 0;
720     }
721     }
722     }
723     }
724     }
725     return status;
726     }
727    
728    
729     status_code SCM_BC2PM(SCM_ACTION opcode,status_code code)
730     {
731     status_code status;
732     MsgTsk SndMsg;
733     unsigned char *pc;
734    
735     SndMsg.Code = PM_INFN_SCMMANAGER_MSG;
736    
737     pc = SndMsg.Info;
738     *(SCM_ACTION*)pc = opcode; pc += sizeof(SCM_ACTION);
739     *(status_code*)pc = code; //pc += sizeof(status_code);
740    
741     SndMsg.LlInfo = sizeof(SCM_ACTION) + sizeof(status_code);
742    
743     status=PM_SndMsgPamManager_INFN(&SndMsg);
744     return status;
745     }
746    
747     status_code SCM_CyclicChecks()
748     {
749     status_code status=CM_RC_SUCCESSFUL,ret=CM_RC_SUCCESSFUL;
750     BOOL go_on;
751     unsigned int ipm;
752    
753    
754     if(SCM_ComputeSampleAverage() == CM_RC_SUCCESSFUL)
755     if (PRH_VAR_THERMISTORS_CHECK) {
756     status = SCM_TM_Thermistors_Check();
757     if(status != CM_RC_SUCCESSFUL) {
758     return status;
759     }
760     }
761    
762     if (PRH_VAR_PAMELA_ON)
763     {
764     if (PRH_VAR_IPM_VOLTAGES_CHECK)
765     status = SCM_IPM_Voltages_Check();
766    
767     if(status != CM_RC_SUCCESSFUL)
768     return CM_RC_DO_POWER_OFF_ON;
769    
770     if (PRH_VAR_KHB_IDAQ_CHECK)
771     return SCM_KHB_IDAQ_Error_Check();
772    
773     }
774     return CM_RC_SUCCESSFUL;
775     }

  ViewVC Help
Powered by ViewVC 1.1.23