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

Annotation of /quicklook/dataToXML/Data/compilationInfo/src/INFN/MH_ModeHandler_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 /****************************************************************************
2     * F i l e D a t a
3     * $Id: MH_ModeHandler_INFN.c,v 1.34 2005/03/21 13:46:49 faber Exp $
4     * $Revision: 1.34 $
5     * $Date: 2005/03/21 13:46:49 $
6     * $RCSfile: MH_ModeHandler_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: faber $
12     * :
13     ****************************************************************************
14     * U p d a t i n g
15     *
16     * $Log: MH_ModeHandler_INFN.c,v $
17     * Revision 1.34 2005/03/21 13:46:49 faber
18     * TRIG_II software introeduces as emtpy commands.
19     * DNLK_TIM started at start downlink in order to be sure end of download.
20     *
21     * Revision 1.33 2005/03/06 14:54:46 sebastiani
22     * version running on 06 03 2005
23     *
24     * Revision 1.32 2005/02/21 08:58:29 sebastiani
25     * all log comments completed
26     *
27     * Revision 1.31 2004/12/02 10:43:38 sebastiani
28     * fix AC
29     * fix CAL
30     * fix HK BUFTYPE
31     *
32     * Revision 1.30 2004/11/19 15:14:52 sebastiani
33     * PRH_EXTERN_{VAR,ARR,TABLE} removed and put them on the autogenerated parameter heeader file
34     *
35     * Revision 1.29 2004/11/05 16:43:07 sebastiani
36     * *** empty log message ***
37     *
38     * Revision 1.28 2004/11/05 09:36:35 sebastiani
39     * first version of the PM state machine. tried but not deeply tested
40     *
41     * Revision 1.27 2004/09/17 15:01:00 faber
42     * LU_INFN_LOG flags fixing
43     *
44     * Revision 1.26 2004/08/26 16:54:34 sebastiani
45     * version work fine
46     *
47     * Revision 1.25 2004/07/27 10:13:48 faber
48     * LU_ALARM macro introduced,
49     * LU_XXXX bit field "logtype" redefined.
50     * HistoryArea 5 now log a 32 bit word as "info1"
51     * and logging is reformatted.
52     *
53     * Revision 1.24 2004/07/01 14:47:44 sebastiani
54     * add crc_c
55     *
56     * Revision 1.23 2004/06/22 08:57:01 sebastiani
57     * *** empty log message ***
58     *
59     * Revision 1.22 2004/06/15 08:24:37 sebastiani
60     * *** empty log message ***
61     *
62     * Revision 1.21 2004/06/08 14:02:43 alfarano
63     * eeprom functions
64     *
65     * Revision 1.20 2004/06/01 16:41:19 sebastiani
66     * EventReceive ANY
67     *
68     * Revision 1.19 2004/05/20 16:03:52 faber
69     * ACQ flow dev continuing
70     *
71     * Revision 1.18 2004/05/04 17:20:51 sebastiani
72     * new GOM TEST mode introduced. Entry point in TS_RM_Test(c1,c2)
73     *
74     * Revision 1.17 2004/01/12 17:51:28 tassa
75     * manca solo la parte di invio e ricezione sulla/dalla IDAQ
76     *
77     * Revision 1.16 2003/12/15 10:57:16 sebastiani
78     * last changes for the acceptance of TM tests in Rome of 9-12/Dec/2003
79     *
80     * Revision 1.15 2003/12/06 08:32:38 faber
81     * startup procedure tuned. TMTC sampling storing at startup
82     *
83     * Revision 1.14 2003/12/03 14:36:51 faber
84     * more action definition about mcmd (setmode/purge_trd).
85     * SSt word better defined
86     *
87     * Revision 1.13 2003/12/01 15:44:09 faber
88     * Donwlink duration field is a 16 bit word, not 32 (only HSB)
89     *
90     * Revision 1.12 2003/11/19 15:48:37 faber
91     * *** empty log message ***
92     *
93     * Revision 1.11 2003/10/17 10:01:55 sebastiani
94     * MC_piSetState introduced in all cases of MH_SetGOM
95     *
96     * Revision 1.10 2003/09/25 09:47:20 faber
97     * donwlink time/duration *= --> /=
98     *
99     * Revision 1.9 2003/09/24 14:52:59 carota
100     * bug fix again (like before)
101     *
102     * Revision 1.8 2003/09/24 14:06:43 faber
103     * fix: 2 words mcmcd scanning skippend
104     *
105     * Revision 1.7 2003/09/22 09:59:35 faber
106     * new select mode definitions
107     *
108     * Revision 1.6 2003/09/19 15:57:35 faber
109     * Large development update INFN software
110     *
111     * Revision 1.5 2003/09/12 10:57:41 faber
112     * development in proress (Working schedule module)
113     *
114     * Revision 1.4 2003/09/10 16:15:52 faber
115     * PRH_EXTERN_VAR(XX_LOGMASK) removed (not needed any more)
116     *
117     * Revision 1.3 2003/09/10 11:55:07 faber
118     * LU_MASK introduced. Log mask for module is now an unique array (PRH_ARR_LOG_MASK) indexed by __FILEID__
119     *
120     * Revision 1.2 2003/09/10 10:32:37 faber
121     * Large implementation of PamManager/RunManager Pam Sowfare. (compiled,never run)
122     *
123     * Revision 1.1.1.1 2003/08/04 09:40:22 sebastiani
124     * Imported sources laben rel. 19.06.2003 integrated with pam2
125     *
126     * Revision 1.4 2003/07/17 11:15:52 sebastiani
127     * idaq manager
128     * new print for logging in minicom
129     *
130     * Revision 1.3 2003/07/03 12:39:29 sebastiani
131     * *** empty log message ***
132     *
133     * Revision 1.2 2003/06/18 16:53:19 sebastiani
134     * Pam/Run Manager development update. ExpSeq sequence is receiven from the RunManager (simulator mode)
135     *
136     * Revision 1.1 2003/06/12 15:17:21 sebastiani
137     * first ModeHandler update
138     *
139     *
140     *****************************************************************************/
141    
142    
143     /*============================= Include File ================================*/
144    
145     #include <src/INFN/LU_SourceFileID_INFN.h>
146     #define __FILEID__ _MH_ModeHandler_INFN__c
147    
148    
149     #ifdef TEST_I
150     // #include <src/INFN/TS_Test_INFN.h>
151     #endif // TEST_I
152    
153     #include <src/INFN/LU_LogUtility_INFN.h>
154     #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
155     LU_DECL_MASK();
156    
157     #include <src/INFN/PM_PamManager_INFN.h>
158     #include <src/INFN/RM_RunManager_INFN.h>
159    
160     #include <src/BasicSW/RTEMSInterface/OS_rtems_p.h>
161     #include <src/INFN/MH_ModeHandler_INFN.h>
162     #include <src/INFN/SMH_SelectModeHandler_INFN.h>
163    
164     #include <src/ModeManager/ModeCoordinator/MC_ModeCoordinator_p.h>
165     #include <src/HKManager/HistoryArea/HA_HistoryArea_p.h>
166     #include <src/FileManager/MMSUManager/FT_MMSUManager_p.h>
167     #include <src/FileManager/MMSUManager/FT_MMSUManager_int.h>
168     #include <src/INFN/WS_WorkingSchedule_INFN.h>
169    
170     /*============================ Global define ================================*/
171    
172    
173     /*============================== global types ==============================*/
174    
175    
176    
177     /*****************************************************************************/
178     /*=========================== Structure define ==============================*/
179    
180    
181     /*****************************************************************************/
182     /*============================ Enumerate define =============================*/
183    
184     /*****************************************************************************/
185    
186     /*=== Mode Handler O P E R A T I O N E N V I R O N M ==*/
187    
188     /*****************************************************************************/
189    
190     /* the General Operation Mode of Pamela. What pamela is doing */
191     static MH_GOM MH_GOM_Mode,MH_Saved_GOM_Mode;
192     static RM_OPCODES MH_LastIgnoredOpDuringDownload;
193     static UINT32 MH_test_c1,MH_test_c2,MH_test_c3;
194     static UINT32 MH_SubMode;
195    
196     /* annouce donwload infos: (B1 MCMD) */
197     static TI_TIME MH_DownlinkStart;
198     static TI_TIME MH_DownlinkDuration;
199     static BOOL MH_DownlinkInfo=FALSE;
200     static BOOL MH_DownloadIsInProgress_flag=FALSE;
201    
202    
203     UINT32 MH_GetSubMode() {
204     return MH_SubMode;
205     }
206    
207     status_code MH_Init() {
208     MH_SubMode = 0;
209     MH_Saved_GOM_Mode=MH_GOM_NULL;
210     MH_GOM_Mode=MH_GOM_NULL;
211     MH_test_c1=0;
212     MH_test_c2=0;
213     MH_test_c3=0;
214     MH_DownlinkInfo = FALSE;
215     return SUCCESSFUL;
216     }
217    
218     MH_GOM MH_GetGOM() {
219     MH_GOM m;
220     UINT32 level;
221     OS_PROTECTED_INT(level,m=MH_GOM_Mode);
222     return m;
223     }
224    
225     MH_GOM MH_GetSavedGOM() {
226     MH_GOM m;
227     UINT32 level;
228     OS_PROTECTED_INT(level,m=MH_Saved_GOM_Mode);
229     return m;
230     }
231    
232     /*
233     MH_GetDownlinkInfo.
234    
235     the function return the downlink start time and duration.
236     times are in 1/8 of seconds.
237     if DownlinkInfo is not available (B1 not called) it returns
238     an error.
239     the function also automatically clear the DownlinkInfo, so
240     another successfull call of the function must wait for another
241     downlink info to come.
242     */
243     status_code MH_GetDownlinkInfo(TI_TIME* start,TI_TIME* duration) {
244     status_code status;
245     if(MH_DownlinkInfo) {
246     /* return infos: */
247     *start = MH_DownlinkStart;
248     *duration = MH_DownlinkDuration;
249     /* clean information flag */
250     MH_DownlinkInfo=FALSE;
251     status=SUCCESSFUL;
252     }else
253     status=MH_INFN_NODOWNLINKINFO;
254     return status;
255     }
256    
257     status_code MH_SetModeFromMCMD(BYTE Mode,MA_HEADER_MCMD *headerMcmd) {
258     status_code status=CM_RC_SUCCESSFUL;
259     static MsgTsk ActiveMsg;
260     unsigned int code;
261     unsigned int timetagFlag;
262     unsigned short* pMcmdInfo;
263     unsigned int CurrentState;
264    
265    
266     MsgTsk SndMsg;
267    
268    
269    
270     //MC_piSetState(MC_ACTIVE_STATE);
271     // Delete MCMD from partition
272    
273    
274     switch(Mode)
275     {
276     case SMH_SUBMODEA0:
277     // MH_SetGOM(MH_GOM_MAINTENANCE);
278     PM_SetGom(PM_STOP_AND_WAIT,SCM_NO_ACTION);
279     MH_SubMode = Mode;
280     break;
281     case SMH_SUBMODEB1:
282     MH_PrepareDownlink(headerMcmd);
283     MH_SubMode = Mode;
284     break;
285     case SMH_SUBMODEB2:
286     WS_SetFavouriteWorkingSchedule(WS_3);
287     MH_SubMode = Mode;
288     break;
289     case SMH_SUBMODEB3:
290     WS_SetFavouriteWorkingSchedule(WS_0);
291     MH_SubMode = Mode;
292     break;
293     case SMH_SUBMODEB41:
294     WS_SetFavouriteWorkingSchedule(WS_1);
295     MH_SubMode = Mode;
296     break;
297     case SMH_SUBMODEB42:
298     WS_SetFavouriteWorkingSchedule(WS_2);
299     MH_SubMode = Mode;
300     break;
301     default :
302     /*@LOG unrecognized SUBMODE in SetModeFromMCMD - Mode */
303     LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,Mode);
304     break;
305     }
306     /*@LOG Trace: SubMode */
307     LU_INFN_LOG(LU_NORMAL_TRACE|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,Mode);
308     return (status);
309    
310     }
311    
312     status_code MH_PrepareDownlink(MA_HEADER_MCMD* headerMcmd) {
313     UINT16 start_l,start_h,duration_l,duration_h;
314     UINT16 *usp;
315     MC_STATE CurrentState;
316     /* prepare DOWNLINK */
317     MC_piGetState(&CurrentState);
318     /* get information from the MCMD: */
319     usp = SMH_GETPTR_BODYAREA(headerMcmd->PtrMCMD);
320     /* skip select mode info: SUBMODE & LEN */
321     usp+=2;
322     /* get the start time info: */
323     start_h = *usp;
324     usp++;
325     start_l = *usp;
326     usp++;
327     /* get the duration info: */
328     duration_h = *usp;
329     usp++;
330     duration_l = *usp;
331     /* TBD: stop acq here */
332     MH_DownlinkStart =
333     (unsigned int)start_h << 16 |
334     (unsigned int)start_l;
335     /*
336     MH_DownlinkDuration =
337     (unsigned int)duration_h << 16 |
338     (unsigned int)duration_l;
339     */
340     MH_DownlinkDuration =
341     (unsigned int)duration_h;
342    
343     /* because we have times in units of 0.125 seconds in the MCMDs,
344     we multiply the value by 8
345     */
346    
347     MH_DownlinkInfo=TRUE;
348    
349     MH_DownlinkStart /= 8;
350     MH_DownlinkDuration /= 8;
351     /*@LOG Downlink Start */
352     LU_INFN_LOG(LU_NORMAL_TRACE|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,MH_DownlinkStart);
353     /*@LOG Downlink Dowlink Duration */
354     LU_INFN_LOG(LU_NORMAL_TRACE|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,MH_DownlinkDuration);
355    
356     MH_SetGOM(MH_GOM_DOWNLOAD);
357     }
358    
359     status_code MH_SetTestParam(UINT32 c1,UINT32 c2,UINT32 c3) {
360     MH_test_c1=c1;
361     MH_test_c2=c2;
362     MH_test_c3=c3;
363     }
364    
365     void MH_SetLastIgnoredOpDuringDownload(RM_OPCODES m) {
366     UINT32 level;
367     OS_PROTECTED_INT(level,MH_LastIgnoredOpDuringDownload=m);
368     }
369    
370    
371     MH_GOM MH_GetLastIgnoredOpDuringDownload() {
372    
373     static MH_GOM MH_RMOPCODES_2_GOM [RM_OP_MAX] = {
374     /* RM_OP_NULL -> */ MH_GOM_MAINTENANCE ,
375     /* RM_OP_IDLE -> */ MH_GOM_MAINTENANCE ,
376     /* RM_OP_INITIALIZATION -> */ MH_GOM_INITIALIZATION ,
377     /* RM_OP_CALIBRATION -> */ MH_GOM_CALIBRATION,
378     /* RM_OP_ACQUISITION -> */ MH_GOM_ACQUISITION,
379     /* RM_OP_FLUSH_HB -> */ MH_GOM_FLUSH_HB, // not sure here!
380     /* RM_OP_FORCE_IDAQCMD -> */ MH_GOM_FORCE_IDAQCMD,
381     /* RM_OP_TEST -> */ MH_GOM_TEST,
382     /* RM_OP_SINT -> */ MH_GOM_NULL
383     };
384    
385     UINT32 level;
386     RM_OPCODES m;
387     OS_PROTECTED_INT(level,m=MH_LastIgnoredOpDuringDownload);
388     return MH_RMOPCODES_2_GOM[m];
389     }
390    
391     void MH_EndOfDownload() {
392     UINT32 level;
393     OS_PROTECTED_INT(level,MH_DownloadIsInProgress_flag=FALSE);
394     }
395    
396     BOOL MH_DownloadIsInProgress() {
397     UINT32 level;
398     BOOL b;
399     OS_PROTECTED_INT(level,b=MH_DownloadIsInProgress_flag);
400     return b;
401     }
402    
403     status_code MH_SetGOM(MH_GOM newmode) {
404     rtems_event_set unused;
405     status_code status;
406     PM_INFN_STATUS s;
407     UINT32 level;
408     /* stop the run manager: */
409     status = PM_StopRunManager();
410     if(status == SUCCESSFUL) {
411     switch(newmode) {
412     case MH_GOM_INITIALIZATION:
413     MH_Saved_GOM_Mode = MH_GOM_Mode;
414     RM_SendCodeRunManager(RM_OP_INITIALIZATION);
415     break;
416     case MH_GOM_CALIBRATION:
417     MH_Saved_GOM_Mode = MH_GOM_Mode;
418     RM_SendCodeRunManager(RM_OP_CALIBRATION);
419     break;
420     case MH_GOM_ACQUISITION:
421     MH_Saved_GOM_Mode = MH_GOM_Mode;
422     RM_SendCodeRunManager(RM_OP_ACQUISITION);
423     break;
424     case MH_GOM_DOWNLOAD:
425    
426     {
427     RM_OPCODES rmopcode=RM_OP_NULL;
428     OS_PROTECTED_INT(level,MH_DownloadIsInProgress_flag=TRUE);
429     switch(MH_GOM_Mode) {
430     case MH_GOM_INITIALIZATION:
431     rmopcode=RM_OP_INITIALIZATION;
432     break;
433     case MH_GOM_CALIBRATION:
434     rmopcode=RM_OP_CALIBRATION ;
435     break;
436     case MH_GOM_ACQUISITION:
437     rmopcode=RM_OP_ACQUISITION;
438     break;
439     }
440     if(rmopcode!=RM_OP_NULL)
441     RM_SendCodeRunManager(rmopcode);
442    
443     /* this is to be sure a stop downlink will occur in case no download MCMD arrive. Timeout one minute */
444     status = OS_piStartTimer_INFN(DNLK_TIM,PRH_VAR_MH_END_OF_DOWNLOAD_TIMEOUT,
445     FT_ifStopDownLink_CallBack, NULL);
446     }
447    
448     // OS_PROTECTED_INT(level,MH_DownloadIsInProgress_flag=TRUE);
449     // RM_SendCodeRunManager(MH_GOM_Mode); /* make the RM remember what is doing */
450     break;
451     case MH_GOM_MAINTENANCE:
452     MH_Saved_GOM_Mode = MH_GOM_Mode;
453     break;
454     case MH_GOM_FLUSH_HB:
455     RM_SendCodeRunManager(RM_OP_FLUSH_HB); /* */
456     break;
457     case MH_GOM_FORCE_IDAQCMD:
458     RM_SendCodeRunManager(RM_OP_FORCE_IDAQCMD);
459     break;
460     case MH_GOM_TEST:
461     RM_SendTest(MH_test_c1,MH_test_c2,MH_test_c3);
462     break;
463     default:
464     /*@LOG MH_SetGOM: unrecognized newmode - newmode */
465     LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,newmode);
466     MH_GOM_Mode=MH_GOM_MAINTENANCE;
467     break;
468     }
469     MH_GOM_Mode = newmode;
470     }else {
471     /*@LOG MH_SetGOM: error in stopping run manager - status */
472     LU_INFN_LOG(LU_FATAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
473     }
474    
475     }
476    
477    
478    

  ViewVC Help
Powered by ViewVC 1.1.23