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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Tue Apr 25 09:00:20 2006 UTC (19 years, 2 months ago) by kusanagi
Branch point for: MAIN
File MIME type: text/plain
Initial revision

1 kusanagi 1.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