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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

1 /****************************************************************************
2 * F i l e D a t a
3 * $Id: 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