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 |
|