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

Contents of /quicklook/dataToXML/Data/compilationInfo/src/INFN/GS_Gas_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 /*============================= Include File ================================*/
2
3
4 #include <src/INFN/LU_SourceFileID_INFN.h>
5 #define __FILEID__ _GS_Gas_INFN__c
6 #include <src/INFN/PRH_ParamHandler_INFN.h>
7 #include <src/INFN/LU_LogUtility_INFN.h>
8 #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
9 LU_DECL_MASK();
10 #include <src/INFN/CM_Common_INFN.h>
11 #include <src/INFN/GS_Gas_INFN.h>
12 #include <src/INFN/CH_CommandHandler_INFN.h>
13 #include <src/INFN/RM_RunManager_INFN.h>
14 #include <src/INFN/HB_HKBuffer_INFN.h>
15 #include <src/INFN/HK_Manager_INFN.h>
16 #include <src/INFN/KHB_Driver_INFN.h>
17 /*============================ External define ================================*/
18 // dont compile GAS
19 #ifdef GS_COMPILE
20 /*============================ Global define ================================*/
21
22 static BYTE GS_GasType;
23
24 // HOT , COLD
25
26 static GS_GasStruct GS_GasParam[2] = {{TM_VCB_STANDBY_ON,TM_GAS_HOT_OFF},{TM_VCB_STANDBY_ON,TM_GAS_COLD_OFF}};
27
28 static GS_LOOKUP_RAW_STRUCT GS_LookUp[GS_MAXMODE] = {};
29
30 // save the last operative command sent to Gas
31 static GS_COMMAND GS_LastGasCommand;
32
33 // gas status mode
34 static GS_MODE GS_Mode;
35 static UINT16 GS_CCAGasMode;
36 static UINT32 GS_TaskSuspended;
37 static UINT32 GS_LocalCommandCounter;
38
39 PRH_EXTERN_VAR(GS_T0);
40 PRH_EXTERN_VAR(GS_T1);
41 PRH_EXTERN_VAR(GS_T2);
42 PRH_EXTERN_VAR(GS_TB);
43
44 status_code GS_Init()
45 {
46 GS_SetGasType(GS_HOT);
47 GS_InitGasManager();
48 //*(unsigned long long*)&GS_LastGasCommand = 0x000C07FF80000100LL;
49 *(unsigned long long*)&GS_LastGasCommand = 0xFFFFFFFFFFFFFFFFLL;
50 GS_Mode = GS_PARKING;
51 GS_CCAGasMode = 0;
52 GS_LocalCommandCounter = 0;
53
54 return CM_RC_SUCCESSFUL;
55 }
56
57 status_code GS_GasGetLookUp(GS_LOOKUP_RAW_STRUCT **raw)
58 {
59 *raw = &GS_LookUp[GS_Mode];
60 return CM_RC_SUCCESSFUL;
61 }
62
63 status_code GS_InitGasBoard()
64 {
65 status_code status;
66
67 status = GS_COMOptNewT0(PRH_VAR_GS_T0);
68 if (!status)
69 {
70 status = GS_COMOptNewT1(PRH_VAR_GS_T1);
71 if (!status)
72 {
73 status = GS_COMOptNewT2(PRH_VAR_GS_T2);
74 if (!status)
75 status = GS_COMOptNewB(PRH_VAR_GS_TB);
76 }
77 }
78 return status;
79 }
80
81 int ConvertToSec(int label)
82 {
83 int ret;
84
85 switch(label)
86 {
87 case GS_FRMIN15: ret = 15*60; break;
88 case GS_FRMIN30: ret = 30*60; break;
89 case GS_FRMIN60: ret = 60*60; break;
90 case GS_FRMIN90: ret = 90*60; break;
91 case GS_FRMIN120: ret = 120*60; break;
92 case GS_FRSEC70: ret = 70; break;
93 case GS_FRSEC120: ret = 120; break;
94 case GS_FRSEC180: ret = 180; break;
95 case GS_FRSEC300: ret = 300; break;
96 }
97
98 return(ret);
99 }
100
101 status_code GS_FormatGasCommand(GS_COMMAND *command,UINT32 root,UINT32 flag_root,UINT32 flag_com,UINT32 error_state)
102 {
103 command->root = root;
104 command->flag_root = flag_root;
105 command->flag_command = flag_com;
106 command->error_state = error_state;
107 command->notused = 0;
108
109 return CM_RC_SUCCESSFUL;
110 }
111
112 status_code GS_GasSendCommand(GS_COMMAND *combuf,GS_REPLY_STRUCT *reply)
113 {
114 rtems_event_set evout;
115 GS_REPLY_STRUCT outbuf;
116 UINT32 last_com;
117 status_code status;
118 int i,recover;
119
120 i = 0; recover = 0;
121
122 RETRY:
123
124 do
125 {
126 status = HK_KHB_Cmd2FE(KHB_GAS_SYSTEM,GS_COMMAND_SIZE,GS_REPLY_SIZE,(UINT16*)combuf,(UINT16*)&outbuf,GS_BOARD_TIMEOUT);
127
128 // in case of CM_RC_GS_BAD_COMMAND,CM_RC_GS_MISMATCH_COMMAND command is sent max 3 times
129
130 if (!status)
131 if (outbuf.valid == GS_GOOD_COMMAND)
132 {
133 if (reply != NULL)
134 *reply = outbuf;
135
136 if ((combuf->root != GS_REQUEST) && (combuf->root != GS_ABORT))
137 {
138 GS_LastGasCommand = *combuf;
139 GS_LocalCommandCounter++;
140 }
141
142 last_com = ((*(UINT32*)&GS_LastGasCommand) & 0x003FFFFF) >> 2;
143
144 if ((last_com != 0xfffff) && (outbuf.command != last_com))
145 status = CM_RC_GS_MISMATCH_COMMAND; /* executed command is not what is expected */
146
147 if (outbuf.cont > GS_LocalCommandCounter)
148 {
149 // TDB
150 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,(UINT16)outbuf.cont);
151 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,GS_LocalCommandCounter);
152 GS_LocalCommandCounter = outbuf.cont; /* temporaneo */
153 }
154
155 if (outbuf.err_fpga) /* err_fpga bit is set */
156 {
157 // TDB
158 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
159 }
160 }
161 else
162 status = CM_RC_GS_BAD_COMMAND; /* Bad command from Gas System FPGA */
163
164 i++;
165
166 } while ((i < 3) && status);
167
168 if ((i == 3) && status)
169 {
170 i = 0;
171 switch(recover)
172 {
173 case 0:
174 //status = HK_KHB_SoftReset(RST_GAS_SYSTEM); /* first attempt : reset FE */
175 GS_LocalCommandCounter = 0;
176 break;
177 case 1:
178 HK_KHB_HardReset();
179 //status = HK_KHB_SoftReset(RST_GAS_SYSTEM); /* second attempt : reset Kayser and reset FE */
180 GS_LocalCommandCounter = 0;
181 break;
182 case 2:
183 break;
184 case 3:
185 break;
186 }
187
188 recover++;
189 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
190 }
191
192 if (recover && (recover < 4) && !status)
193 goto RETRY;
194
195 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
196
197 return(status);
198 }
199
200 status_code GS_SetGasType(BYTE kind)
201 {
202 GS_GasType = kind;
203 return(CM_RC_SUCCESSFUL);
204 }
205
206 status_code GS_COMRequest(GS_REPLY_STRUCT *outbuf)
207 {
208 GS_COMMAND combuf;
209 status_code status;
210
211 GS_FormatGasCommand(&combuf,GS_REQUEST,GS_FRNULL,GS_FCNULL,GS_NO_ERR);
212 status = GS_GasSendCommand(&combuf,outbuf);
213
214 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
215
216 return(status);
217 }
218
219 status_code GS_COMFillBuffer10cc(UINT32 sector)
220 {
221 GS_COMMAND combuf;
222 status_code status;
223
224 GS_FormatGasCommand(&combuf,GS_FILL_BUFFER,GS_CC10,sector,GS_NO_ERR);
225 status = GS_GasSendCommand(&combuf,NULL);
226 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
227
228 return(status);
229 }
230
231 status_code GS_COMFillBuffer10ccAllSector()
232 {
233 GS_COMMAND combuf;
234 status_code status;
235
236 GS_FormatGasCommand(&combuf,GS_FILL_BUFFER,GS_CC10,GS_FCNULL,GS_NO_ERR);
237 status = GS_GasSendCommand(&combuf,NULL);
238 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
239
240 return(status);
241 }
242
243 status_code GS_COMFillBuffer125cc()
244 {
245 GS_COMMAND combuf;
246 status_code status;
247
248 GS_FormatGasCommand(&combuf,GS_FILL_BUFFER,GS_CC125,GS_FCNULL,GS_NO_ERR);
249 status = GS_GasSendCommand(&combuf,NULL);
250 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
251
252 return(status);
253 }
254
255
256 status_code GS_COMEnAlarm(UINT32 mode)
257 {
258 GS_COMMAND combuf;
259 status_code status;
260
261 GS_FormatGasCommand(&combuf,GS_EN_ALLARM,mode,GS_FCNULL,GS_NO_ERR);
262 status = GS_GasSendCommand(&combuf,NULL);
263 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
264
265 return(status);
266 }
267
268 status_code GS_COMPurge(UINT32 flag_root,UINT32 flag_command,UINT32 kind)
269 {
270 GS_COMMAND combuf;
271 status_code status;
272
273 if (kind == GS_OLD)
274 GS_FormatGasCommand(&combuf,GS_PURGE,flag_root,flag_command,GS_NO_ERR);
275 else
276 GS_FormatGasCommand(&combuf,GS_PURGE_NEW,flag_root,flag_command,GS_NO_ERR);
277
278 status = GS_GasSendCommand(&combuf,NULL);
279 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
280
281 return(status);
282 }
283
284 status_code GS_COMOptPurge(UINT32 flag_root)
285 {
286 GS_COMMAND combuf;
287 status_code status;
288
289 GS_FormatGasCommand(&combuf,GS_OPT_PURGE,flag_root,GS_FCNULL,GS_NO_ERR);
290 status = GS_GasSendCommand(&combuf,NULL);
291 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
292
293 return(status);
294 }
295
296 status_code GS_COMAbort()
297 {
298 GS_COMMAND combuf;
299 status_code status;
300
301 GS_FormatGasCommand(&combuf,GS_ABORT,GS_FRNULL,GS_FCNULL,GS_NO_ERR);
302 status = GS_GasSendCommand(&combuf,NULL);
303 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
304
305 return(status);
306 }
307
308
309 status_code GS_COMMascValv(UINT32 valveno)
310 {
311 GS_COMMAND combuf;
312 status_code status;
313
314 GS_FormatGasCommand(&combuf,GS_MASC_VALV,valveno,GS_FCNULL,GS_NO_ERR);
315 status = GS_GasSendCommand(&combuf,NULL);
316 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
317
318 return(status);
319 }
320
321 status_code GS_COMMascSog(UINT32 thresoldno)
322 {
323 GS_COMMAND combuf;
324 status_code status;
325
326 GS_FormatGasCommand(&combuf,GS_MASC_SOG,thresoldno,GS_FCNULL,GS_NO_ERR);
327 status = GS_GasSendCommand(&combuf,NULL);
328 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
329
330 return(status);
331 }
332
333 status_code GS_COMOpen(UINT32 valves,UINT32 sector)
334 {
335 GS_COMMAND combuf;
336 status_code status;
337
338 GS_FormatGasCommand(&combuf,GS_OPEN_VALV,valves,sector,GS_NO_ERR);
339 status = GS_GasSendCommand(&combuf,NULL);
340 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
341
342 return(status);
343 }
344
345 status_code GS_COMClose(UINT32 valves,UINT32 sector)
346 {
347 GS_COMMAND combuf;
348 status_code status;
349
350 GS_FormatGasCommand(&combuf,GS_CLOSE_VALV,valves,sector,GS_NO_ERR);
351 status = GS_GasSendCommand(&combuf,NULL);
352 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
353
354 return(status);
355 }
356
357 status_code GS_COMOptNew(UINT32 command,UINT32 value)
358 {
359 GS_COMMAND combuf;
360 status_code status;
361
362 GS_FormatGasCommand(&combuf,command,value,GS_FCNULL,GS_NO_ERR);
363 status = GS_GasSendCommand(&combuf,NULL);
364 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
365
366 return(status);
367 }
368
369 status_code GS_COMOptNewT0(UINT32 value)
370 {
371 status_code status;
372 status = GS_COMOptNew(GS_OPTNEW_T0,value);
373 return(status);
374 }
375
376 status_code GS_COMOptNewT1(UINT32 value)
377 {
378 status_code status;
379 status = GS_COMOptNew(GS_OPTNEW_T1,value);
380 return(status);
381 }
382
383 status_code GS_COMOptNewT2(UINT32 value)
384 {
385 status_code status;
386 status = GS_COMOptNew(GS_OPTNEW_T2,value);
387 return(status);
388 }
389
390 status_code GS_COMOptNewE(UINT32 value)
391 {
392 status_code status;
393 status = GS_COMOptNew(GS_OPTNEW_E,value);
394 return(status);
395 }
396
397 status_code GS_COMOptNewB(UINT32 value)
398 {
399 status_code status;
400 status = GS_COMOptNew(GS_OPTNEW_B,value);
401 return(status);
402 }
403
404 status_code GS_COMResetErrFPGA()
405 {
406 GS_COMMAND combuf;
407 status_code status;
408
409 GS_FormatGasCommand(&combuf,GS_RESET_ERR_FPGA,GS_FRNULL,GS_FCNULL,GS_NO_ERR);
410 status = GS_GasSendCommand(&combuf,NULL);
411 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
412
413 return(status);
414 }
415
416 status_code GS_COMResetErrPSCU()
417 {
418 GS_COMMAND combuf;
419 status_code status;
420
421 GS_FormatGasCommand(&combuf,GS_RESET_ERR,GS_FRNULL,GS_FCNULL,GS_NO_ERR);
422 status = GS_GasSendCommand(&combuf,NULL);
423 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
424
425 return(status);
426 }
427
428 status_code GS_COMEmptyBuffer(UINT32 valve)
429 {
430 GS_COMMAND combuf;
431 status_code status;
432
433 GS_FormatGasCommand(&combuf,GS_EMPTY_BUFFER,valve,GS_FCNULL,GS_NO_ERR);
434 status = GS_GasSendCommand(&combuf,NULL);
435 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
436
437 return(status);
438 }
439
440
441 /* High Level Command Function */
442
443 status_code GS_HLStandBy(BYTE mode)
444 {
445 status_code status;
446 UINT32 addr;
447 int value = 1;
448
449 if (mode == GS_STDBY_ON)
450 addr = GS_GasParam[GS_GasType].VCB_on;
451 else
452 #warning "da ricontrollare"
453 //addr = TM_VCB_STANDBY_OFF;
454
455 status = HK_SendTC(addr,value);
456
457 return(status);
458 }
459
460 status_code GS_CheckPower(CM_ON_OFF *mode)
461 {
462 UINT32 v;
463 status_code s;
464
465 #warning "da ricontrollare"
466 // s=HK_GetTMValue(TM_GAS_ENABLED,&v);
467
468 if(s == CM_RC_SUCCESSFUL)
469 {
470 if(v)
471 *mode = CM_OFF;
472 else
473 *mode = CM_ON;
474 }
475
476 return s;
477 }
478
479
480 status_code GS_HLGasOff()
481 {
482 status_code status;
483 int value = 1;
484 UINT32 addr;
485
486 addr = GS_GasParam[GS_GasType].GasOff;
487 status = HK_SendTC(addr,value);
488
489 return(status);
490 }
491
492
493 status_code GS_GasOn()
494 {
495 }
496
497
498 /* Gas System Procedure */
499
500
501 status_code GS_GasStartUp()
502 {
503 GS_REPLY_STRUCT answ;
504 status_code status;
505 int check_interval = 60;
506 int GS_STARTUP_SUSPEND = 3*ConvertToSec(PRH_VAR_GS_T2)+2 + 60; // 60 for safe
507
508 status = GS_COMRequest(&answ);
509
510 if (!status)
511 {
512
513
514 status = GS_HLStandBy(GS_STDBY_OFF);
515
516 if (!status)
517 {
518 status = GS_COMFillBuffer10cc(GS_FCNULL);
519
520 if (!status)
521 {
522 status = GS_GasSuspend(check_interval*1000,GS_STARTUP_SUSPEND*1000);
523
524 switch(status)
525 {
526 case CM_RC_SUCCESSFUL:
527 {
528 status = 0; // TBD GS_COMEnAlarm(GS_FRON); temporaneamnte disabilitato per i test
529 if (!status)
530 {
531 status = GS_COMRequest(&answ);
532 }
533 }
534 break;
535 case CM_RC_GS_INTERRUPTED:
536 status = GS_COMAbort();
537 break;
538 case CM_RC_TIMEOUT:
539 break;
540 case CM_RC_GS_BAD_COMMAND:
541 case CM_RC_GS_MISMATCH_COMMAND:
542 case CM_RC_GS_ERR_FPGA:
543 break;
544 }
545 }
546 }
547 }
548 else
549 {
550 // turnoff , turnon forse high level 3.6V OFF da vedere
551 status = GS_HLGasOff();
552 OS_piTaskSuspend(500); // mezzo secondo prima di riprovare PROVVISORIO
553 GS_GasOn();
554 GS_SendCodeGasManager(GS_START_UP,NULL); // contare 2 volte
555 }
556 return(status);
557 }
558
559 status_code GS_GasPurgeSector(UINT32 sector)
560 {
561 GS_REPLY_STRUCT answ;
562 status_code status;
563 int check_interval = 5*60;
564 int GS_SUSPEND = ConvertToSec(PRH_VAR_GS_T0) + 10*(ConvertToSec(PRH_VAR_GS_T0)+ConvertToSec(PRH_VAR_GS_T1)+2)+
565 ConvertToSec(PRH_VAR_GS_T0)+ConvertToSec(PRH_VAR_GS_T1)+2+ConvertToSec(PRH_VAR_GS_T2) + 200; // 200 for safe
566
567 status = GS_COMPurge(GS_N12,sector,GS_NEW);
568
569 if (!status)
570 {
571 status = GS_GasSuspend(check_interval*1000,GS_SUSPEND*1000);
572
573 switch(status)
574 {
575 case CM_RC_SUCCESSFUL:
576 break;
577 case CM_RC_GS_INTERRUPTED:
578 status = GS_COMAbort();
579 break;
580 case CM_RC_GS_BAD_COMMAND:
581 case CM_RC_GS_MISMATCH_COMMAND:
582 case CM_RC_GS_ERR_FPGA:
583 break;
584 }
585 }
586 return(status);
587 }
588
589 status_code GS_TRDPurge()
590 {
591 GS_REPLY_STRUCT answ;
592 status_code status;
593 UINT32 sector[3]={GS_FC1,GS_FC2,GS_FC3};
594 UINT32 counter,value;
595
596 #warning "da ricontrollare"
597 // status = HK_GetTMValue(TM_GAS_TH,&value);
598
599 if (status)
600 return(status);
601
602 //if (value > 0x532) // temp < 5°C
603 // return(CM_RC_VALUE_UNDER_RANGE); // TBD
604
605 counter = 0;
606 status = GS_COMRequest(&answ);
607
608 if (!status)
609 {
610 GS_Mode = GS_TRD_PURGING;
611
612 GS_SetCCAGasMode(GS_GAS_IN_TRD,GS_BITSET);
613
614 while ((counter < 3) && (!status))
615 {
616 status = GS_GasPurgeSector(sector[counter]);
617 counter++;
618 }
619
620 if (status)
621 GS_SetCCAGasMode(GS_GAS_IN_TRD,GS_BITRESET);
622 }
623
624 return(status);
625 }
626
627
628 status_code GS_TechnologicalPurge()
629 {
630 status_code status=CM_RC_SUCCESSFUL;
631 int i;
632
633 i = 0;
634
635 while ((i++ < 3) && (status == CM_RC_SUCCESSFUL))
636 status = GS_TRDPurge();
637
638 return(status);
639 }
640
641 status_code GS_GasFillInputBuffer()
642 {
643 GS_REPLY_STRUCT answ;
644 status_code status;
645 int check_interval = 60;
646 int GS_STARTUP_SUSPEND = 3*ConvertToSec(PRH_VAR_GS_T2)+2 + 60; // 60 for safe
647
648 status = GS_COMRequest(&answ);
649
650 if (!status)
651 {
652 status = GS_COMFillBuffer10cc(GS_FCNULL);
653 if (!status)
654 {
655 status = GS_GasSuspend(1000*check_interval,GS_STARTUP_SUSPEND*1000);
656
657 switch(status)
658 {
659 case CM_RC_SUCCESSFUL:
660 break;
661 case CM_RC_GS_INTERRUPTED:
662 status = GS_COMAbort();
663 break;
664 case CM_RC_GS_BAD_COMMAND:
665 case CM_RC_GS_MISMATCH_COMMAND:
666 case CM_RC_GS_ERR_FPGA:
667 break;
668 }
669 }
670 }
671
672 return(status);
673 }
674
675
676 status_code GS_ContainerPurge()
677 {
678 status_code status;
679 int i,tmp,done;
680
681 status = GS_COMPurge(GS_N12,GS_FCB,GS_NEW);
682
683 if (!status)
684 {
685 GS_SetCCAGasMode(GS_GAS_CONTAINER_PURGE,GS_BITSET);
686 i = 0; done = 1;
687
688 while ((i < 30) && done)
689 {
690 status = HK_GetTMValue(TM_GAS_LPS5,&tmp);
691
692 if (!status)
693 {
694 if (tmp < 0x88) // 800 mbar 3 Volt = 1500 mbar
695 {
696 status = GS_COMAbort();
697 done = 0;
698 }
699 }
700
701 status = GS_GasTaskSuspend(10*1000);
702
703 if (status != RTEMS_TIMEOUT)
704 {
705 GS_SendCodeGasManager(GS_ABORT_OP,NULL);
706 return(CM_RC_SUCCESSFUL);
707 }
708 i++;
709 }
710
711 if (done)
712 GS_SendCodeGasManager(GS_CONTAINER_PURGE,NULL);
713 else
714 GS_SetCCAGasMode(GS_GAS_CONTAINER_PURGE,GS_BITRESET);
715 }
716 return(status);
717 }
718
719 status_code GS_SwitchOff(UINT32 stdby)
720 {
721 status_code status;
722
723 status = GS_COMAbort();
724
725 if (!status)
726 {
727 status = GS_COMEnAlarm(GS_FROFF);
728 if (!status)
729 {
730 if (stdby)
731 status = GS_HLStandBy(GS_STDBY_ON); // in case of alarm should no send STDBYON
732 if (!status)
733 status = GS_HLGasOff();
734 }
735 }
736 return(status);
737 }
738
739 status_code GS_Alarm()
740 {
741 status_code status;
742
743 status = GS_SwitchOff(GS_FALSE);
744 if (!status)
745 status = CM_RC_GS_ALARM; /* error in reply from Gas System */
746
747 return(status);
748 }
749
750 /* GAS task handler */
751
752 status_code GS_InitGasManager (void)
753 {
754 status_code status;
755 void * p;
756 unsigned short * pR;
757 unsigned int OldPriority;
758
759 // Task initialization
760
761 if ((status=OS_piTaskReady_INFN(GS_INFN_TASK,GS_tkGSManager)) != SUCCESSFUL)
762 {
763 // Task is not correctly started
764
765 LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
766
767 status = UNSATISFIED;
768 }
769
770 if ( (status=OS_piTaskPriority_INFN(GS_INFN_TASK,GS_MANAGER_PRIORITY,&OldPriority)) != SUCCESSFUL)
771 {
772 // Task priority is not correctly updated
773
774 LU_INFN_LOG (LU_CRITICAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
775
776 status = UNSATISFIED;
777 }
778
779 return (status);
780 }
781
782 /*****************************************************************************/
783 /* @Function: GS_SndMsgGSManager */
784 /* @Purpose : */
785 /* The function invokes the directive of the OS to send a message to the */
786 /* HKManager mailbox. */
787 /* */
788 /* @@ */
789 /* @Parameter Name @Mode @Description */
790 /* SndMsg IN Message buffer that contains task operation */
791 /* status_code OUT Return code */
792 /* @@ */
793 /*****************************************************************************/
794
795 status_code GS_SndMsgGSManager (MsgTsk* SndMsg)
796 {
797 status_code status;
798
799 // Send message to GS_SndMsgHKManager task mailbox
800
801 status = OS_piMsgQueueSend_INFN(GS_INFN_MAILBOX, (void *) SndMsg, sizeof(MsgTsk));
802 if (status)
803 LU_INFN_LOG (LU_FATAL|LU_HA, LU_MASK(__FILEID__), __FILEID__, __LINE__, status);
804
805 return (status);
806 }
807
808
809 /*****************************************************************************/
810 /* @Function: GS_tkHKManager */
811 /* @Purpose : */
812 /* The function is the task handler of the GS_tkHKManager object. */
813 /* When a message is received into task mailbox it wakes up. */
814 /* The information contained in the message (MsgTsk structure) define */
815 /* parameters (Info field), and the operation type that the task performs */
816 /* (Code field). */
817 /* The GS_tkHKManager task activity is to activate the cyclic telemetry */
818 /* acquisitin. */
819 /* */
820 /* @@ */
821 /* @Parameter Name @Mode @Description */
822 /* @@ */
823 /*****************************************************************************/
824
825 task GS_tkGSManager (task_argument unused)
826 {
827 status_code status;
828 MsgTsk RxMsg;
829 unsigned int MsgSize,value;
830 CM_ON_OFF power;
831
832 while (FOREVER)
833 {
834 RxMsg.Code = NULL_MSG_TM;
835
836 // Wait for a message to become available
837
838 if ((status = OS_piMsgQueueReceive_INFN(GS_INFN_MAILBOX, (void *) &RxMsg, &MsgSize, WAIT, NO_TIMEOUT)) == SUCCESSFUL)
839 {
840 GS_CheckPower(&power);
841 power= CM_ON; // TBD remove this
842
843 if (power == CM_ON)
844 switch (RxMsg.Code)
845 {
846 case GS_START_UP:
847 GS_GasStartUp();
848 break;
849 case GS_CONTAINER_PURGE:
850 GS_ContainerPurge();
851 break;
852 case GS_TRD_PURGE:
853 GS_TRDPurge();
854 break;
855 case GS_TECH_PURGE:
856 GS_TechnologicalPurge();
857 break;
858 case GS_FILLINPUT_BUFFER:
859 GS_GasFillInputBuffer();
860 break;
861 case GS_TEST:
862 GS_Test();
863 break;
864 case GS_ABORT_OP:
865 GS_COMAbort();
866 break;
867 }
868 }
869 }
870 }
871
872 status_code GS_SendCodeGasManager(GS_OPCODES code,UINT16 value)
873 {
874 MsgTsk SndMsg;
875 SndMsg.Code = code;
876 SndMsg.Info[0] = value >> 8;
877 SndMsg.Info[1] = value & 0xff;
878 return GS_SndMsgGSManager(&SndMsg);
879 }
880
881 status_code GS_GasTaskSuspend(UINT32 delay)
882 {
883 UINT32 Level,unused;
884 status_code e;
885
886 OS_piEventReceive(OS_GS_RESUME,RTEMS_NO_WAIT,0,&unused);
887
888 OS_piInterDisable(&Level);
889 GS_TaskSuspended = TRUE;
890 OS_piInterEnable(Level);
891
892 e=OS_piEventReceive(OS_GS_RESUME,RTEMS_WAIT,delay,&unused);
893
894 OS_piInterDisable(&Level);
895 GS_TaskSuspended = FALSE;
896 OS_piInterEnable(Level);
897
898 return(e);
899 }
900
901 /* this function suspend the gas task
902 return
903
904 CM_RC_GS_BAD_COMMAND in case of Bad command from Gas System FPGA
905 CM_RC_SUCCESSFUL in case of previously scheduled operation has finished
906 CM_RC_GS_INTERRUPTED in case of operation interrupted by some external event
907 CM_RC_TIMEOUT reached timeout but operation not finished
908 CM_RC_GS_MISMATCH_COMMAND if the executed command is not what is expected
909 CM_RC_GS_ERR_FPGA if err_fpga error has occurred
910 */
911
912 status_code GS_GasSuspend(UINT32 check_interval,UINT32 timeout)
913 {
914 UINT32 i,exit_loop;
915 status_code status;
916 GS_REPLY_STRUCT answ;
917
918 i = 0; exit_loop = 0;
919 do
920 {
921 status = GS_COMRequest(&answ);
922
923 if (!status)
924 {
925 if (answ.curr_state != GS_CSEND)
926 {
927 status = GS_GasTaskSuspend(check_interval);
928
929 if (status != RTEMS_TIMEOUT)
930 {
931 status = CM_RC_GS_INTERRUPTED;
932 exit_loop = 1;
933 }
934 }
935 else
936 return(CM_RC_SUCCESSFUL); // curr_state = GS_CSEND
937 }
938 else
939 exit_loop = 1;
940
941 i++;
942
943 } while (((i*check_interval) < timeout) && !exit_loop);
944
945 if (!exit_loop)
946 status = CM_RC_TIMEOUT;
947
948 return(status);
949 }
950
951 status_code GS_GasResume()
952 {
953 UINT32 Level,unused;
954 status_code e = CM_RC_SUCCESSFUL;
955
956 OS_piInterDisable(&Level);
957
958 if (GS_TaskSuspended)
959 {
960 e = OS_piEventSend(GS_INFN_TASK,OS_GS_RESUME);
961 GS_TaskSuspended = FALSE;
962 }
963
964 OS_piInterEnable(Level);
965
966 return(e);
967 }
968
969
970 status_code GS_GetGaSStatus(UINT16* GSStatus)
971 {
972 /*
973 TBD
974 */
975 *GSStatus = GS_CCAGasMode;
976 return CM_RC_SUCCESSFUL;
977 }
978
979 status_code GS_SetCCAGasMode(UINT16 bit,UINT16 mode)
980 {
981 if (mode == GS_BITSET)
982 GS_CCAGasMode |= bit;
983 else
984 GS_CCAGasMode &= ~bit;
985
986 return CM_RC_SUCCESSFUL;
987 }
988
989 status_code GS_CheckPurgeTemp()
990 {
991
992 }
993
994
995
996 status_code GS_Test()
997 {
998 static int test = 1;
999
1000 status_code status;
1001 static UINT32 valid;
1002 static UINT32 command;
1003 static UINT32 valve_conf;
1004 static UINT32 curr_state;
1005 static UINT32 conf_soglie;
1006 static UINT32 err_fpga;
1007 static UINT32 err_pscu;
1008 static UINT32 cont;
1009 static UINT32 com;
1010 static GS_REPLY_STRUCT outbuf;
1011 static UINT32 sector;
1012
1013 switch (test)
1014 {
1015 case 1:
1016 {
1017 status = GS_COMRequest(&outbuf);
1018
1019 valid = outbuf.valid;
1020 command = outbuf.command;
1021 valve_conf = outbuf.valve_conf;
1022 curr_state = outbuf.curr_state;
1023 conf_soglie = outbuf.conf_soglie;
1024 err_fpga = outbuf.err_fpga;
1025 err_pscu = outbuf.err_pscu;
1026 cont = outbuf.cont;
1027 com = outbuf.com;
1028
1029 if (!status)
1030 status = GS_HLStandBy(GS_STDBY_OFF);
1031
1032 if (!status)
1033 status = GS_COMMascValv(GS_FRALL);
1034
1035 sector = GS_FCNULL;
1036
1037 if (!status)
1038 status = GS_COMFillBuffer10cc(sector);
1039
1040 if (!status)
1041 status = GS_COMRequest(&outbuf);
1042
1043 valid = outbuf.valid;
1044 command = outbuf.command;
1045 valve_conf = outbuf.valve_conf;
1046 curr_state = outbuf.curr_state;
1047 conf_soglie = outbuf.conf_soglie;
1048 err_fpga = outbuf.err_fpga;
1049 err_pscu = outbuf.err_pscu;
1050 cont = outbuf.cont;
1051 com = outbuf.com;
1052 }
1053 break;
1054 case 2 :
1055 {
1056 static int i;
1057
1058 for (i=0; i < 100; i++)
1059 {
1060
1061 status = GS_COMRequest(&outbuf);
1062
1063 valid = outbuf.valid;
1064 command = outbuf.command;
1065 valve_conf = outbuf.valve_conf;
1066 curr_state = outbuf.curr_state;
1067 conf_soglie = outbuf.conf_soglie;
1068 err_fpga = outbuf.err_fpga;
1069 err_pscu = outbuf.err_pscu;
1070 cont = outbuf.cont;
1071 com = outbuf.com;
1072 }
1073 }
1074 break;
1075 case 3:
1076 {
1077
1078 status = GS_COMPurge(GS_N12,GS_FC1,GS_NEW);
1079
1080 }
1081 break;
1082 }
1083 }
1084
1085 #endif // GS_COMPILE

  ViewVC Help
Powered by ViewVC 1.1.23