1 |
kusanagi |
1.1 |
/**************************************************************************** |
2 |
|
|
/* F i l e D a t a |
3 |
|
|
/* |
4 |
|
|
/* Module : MCMDManager |
5 |
|
|
/* C.I. No. : |
6 |
|
|
/* $Revision: 1.22 $ |
7 |
|
|
/* $Date: 2005/02/21 08:58:29 $ |
8 |
|
|
/* Belonging to : |
9 |
|
|
/* : |
10 |
|
|
/* $RCSfile: MD_MCMDDispatcher_int.c,v $ |
11 |
|
|
/* Program Type : |
12 |
|
|
/* Sub-modules : |
13 |
|
|
/* |
14 |
|
|
/**************************************************************************** |
15 |
|
|
/* S W D e v e l o p m e n t E n v i r o n m e n t |
16 |
|
|
/* |
17 |
|
|
/* Host system : |
18 |
|
|
/* SW Compiler : |
19 |
|
|
/* $Author: sebastiani $ |
20 |
|
|
/* : |
21 |
|
|
/**************************************************************************** |
22 |
|
|
/* U p d a t i n g |
23 |
|
|
/* |
24 |
|
|
/* $Log: MD_MCMDDispatcher_int.c,v $ |
25 |
|
|
/* Revision 1.22 2005/02/21 08:58:29 sebastiani |
26 |
|
|
/* all log comments completed |
27 |
|
|
/* |
28 |
|
|
/* Revision 1.21 2004/10/08 07:27:29 sebastiani |
29 |
|
|
/* *** empty log message *** |
30 |
|
|
/* |
31 |
|
|
/* Revision 1.20 2004/09/28 15:36:38 sebastiani |
32 |
|
|
/* interrupt manager fix |
33 |
|
|
/* |
34 |
|
|
/* Revision 1.19 2004/09/17 15:01:00 faber |
35 |
|
|
/* LU_INFN_LOG flags fixing |
36 |
|
|
/* |
37 |
|
|
/* Revision 1.18 2004/07/27 17:30:17 faber |
38 |
|
|
/* OBT can be now in second or milliseconds, depending of the situazion. |
39 |
|
|
/* OBT_s is used for FM compatibility, OBT_ms basically for MM infos |
40 |
|
|
/* |
41 |
|
|
/* Revision 1.17 2004/07/27 10:13:48 faber |
42 |
|
|
/* LU_ALARM macro introduced, |
43 |
|
|
/* LU_XXXX bit field "logtype" redefined. |
44 |
|
|
/* HistoryArea 5 now log a 32 bit word as "info1" |
45 |
|
|
/* and logging is reformatted. |
46 |
|
|
/* |
47 |
|
|
/* Revision 1.16 2004/05/20 09:04:22 sebastiani |
48 |
|
|
/* ok |
49 |
|
|
/* |
50 |
|
|
/* Revision 1.15 2004/05/13 10:47:17 faber |
51 |
|
|
/* hid the HB_Store funcion in favour of wrapped funcions |
52 |
|
|
/* |
53 |
|
|
/* Revision 1.14 2004/05/11 09:11:06 faber |
54 |
|
|
/* *** empty log message *** |
55 |
|
|
/* |
56 |
|
|
/* Revision 1.13 2004/05/03 16:08:21 sebastiani |
57 |
|
|
/* fix time sync store |
58 |
|
|
/* |
59 |
|
|
/* Revision 1.12 2004/05/03 10:42:04 faber |
60 |
|
|
/* HB_StoreTimeSync called in MCMDTimeSync and |
61 |
|
|
/* HB_Store called _before_ dispatching inside MD_ifDispatch |
62 |
|
|
/* |
63 |
|
|
/* Revision 1.11 2004/04/29 10:23:34 sebastiani |
64 |
|
|
/* *** empty log message *** |
65 |
|
|
/* |
66 |
|
|
/* Revision 1.10 2004/04/29 07:12:44 faber |
67 |
|
|
/* HB_Store called before and not after, the Dispatching |
68 |
|
|
/* |
69 |
|
|
/* Revision 1.9 2004/04/20 14:54:13 faber |
70 |
|
|
/* work before Brussel |
71 |
|
|
/* |
72 |
|
|
/* Revision 1.8 2003/12/07 15:07:11 sebastiani |
73 |
|
|
/* GAS_TEST renamed to GAS_CONTAINER_PURGE |
74 |
|
|
/* |
75 |
|
|
/* Revision 1.7 2003/12/05 17:14:34 alfarano |
76 |
|
|
/* update |
77 |
|
|
/* |
78 |
|
|
/* Revision 1.6 2003/11/27 17:53:23 faber |
79 |
|
|
/* -Power management poweron procedure done and some tested in the simulator |
80 |
|
|
/* -history entry 5 now takes OBT |
81 |
|
|
/* |
82 |
|
|
/* Revision 1.5 2003/11/18 09:01:15 alfarano |
83 |
|
|
/* laben patch fixes some problems |
84 |
|
|
/* |
85 |
|
|
/* Revision 1.4 2003/11/10 14:16:56 faber |
86 |
|
|
/* MCMD in HB_Store (store all MCMD) |
87 |
|
|
/* |
88 |
|
|
/* Revision 1.3 2003/10/21 16:09:12 alfarano |
89 |
|
|
/* LU_LOG_INFN replacement for all remaining original log functions |
90 |
|
|
/* |
91 |
|
|
/* Revision 1.2 2003/10/17 09:15:26 sebastiani |
92 |
|
|
/* log every type of MCMD |
93 |
|
|
/* |
94 |
|
|
/* Revision 1.1.1.1 2003/08/04 09:40:21 sebastiani |
95 |
|
|
/* Imported sources laben rel. 19.06.2003 integrated with pam2 |
96 |
|
|
/* |
97 |
|
|
/* Revision 1.11 2003/04/30 09:22:12 aurora |
98 |
|
|
/* execute REBOOT mcmd always |
99 |
|
|
/* |
100 |
|
|
/* Revision 1.10 2003/04/29 14:50:59 aurora |
101 |
|
|
/* correct eligibility check of REBOOT mcmd |
102 |
|
|
/* |
103 |
|
|
/* Revision 1.9 2003/01/30 10:14:57 aurora |
104 |
|
|
/* introduced ifdef for EM and FM |
105 |
|
|
/* |
106 |
|
|
/* Revision 1.8 2002/06/11 13:19:18 zulia |
107 |
|
|
/* call Entry type 3 ( log DIRECT activity ) on direct MCMD |
108 |
|
|
/* |
109 |
|
|
/* Revision 1.7 2002/05/09 08:16:34 zulia |
110 |
|
|
/* * acceptance release |
111 |
|
|
/* |
112 |
|
|
/* |
113 |
|
|
/*****************************************************************************/ |
114 |
|
|
|
115 |
|
|
/*============================= Include File ================================*/ |
116 |
|
|
|
117 |
|
|
|
118 |
|
|
#include <src/INFN/LU_SourceFileID_INFN.h> |
119 |
|
|
#define __FILEID__ _MD_MCMDDispatcher_int__c |
120 |
|
|
#include <src/INFN/PRH_ParamHandler_INFN.h> |
121 |
|
|
#include <src/INFN/LU_LogUtility_INFN.h> |
122 |
|
|
#include <src/INFN/PRH_ParamHandler_INFN_auto.h> |
123 |
|
|
LU_DECL_MASK(); |
124 |
|
|
|
125 |
|
|
|
126 |
|
|
#include <src/MCMDManager/MCMDDispatcher/MD_MCMDDispatcher_int.h> |
127 |
|
|
#include <src/FileManager/MMSUManager/FT_MMSUManager_p.h> |
128 |
|
|
#include <src/MCMDManager/TTManager/MT_TTManager_p.h> |
129 |
|
|
#include <src/ModeManager/ModeCoordinator/MC_ModeCoordinator_p.h> |
130 |
|
|
#include <src/BasicSW/PatchDumpManager/PD_PatchDumpManager_p.h> |
131 |
|
|
#include <src/BasicSW/CrimeaDriver/CD_CrimeaDriver_p.h> |
132 |
|
|
#include <src/BasicSW/Bus1553B/BI_Bus1553B_p.h> |
133 |
|
|
#include <src/HKManager/HistoryArea/HA_HistoryArea_p.h> |
134 |
|
|
#include <src/TM_TCManager/TMTCManager/TM_TMTCManager_p.h> |
135 |
|
|
#include <src/INFN/PM_PamManager_INFN.h> |
136 |
|
|
|
137 |
|
|
#ifdef INFN |
138 |
|
|
#include <src/INFN/HB_HKBuffer_INFN.h> |
139 |
|
|
#include <src/INFN/MD_MCMDDispatcher_INFN_p.h> |
140 |
|
|
#else |
141 |
|
|
#include <src/TestUtility/Test/TS_Test_p.h> |
142 |
|
|
#endif |
143 |
|
|
/*============================== Local Variables ============================*/ |
144 |
|
|
|
145 |
|
|
/*****************************************************************************/ |
146 |
|
|
|
147 |
|
|
/*===== M C M D i s p a t c h e r I N T E R N A L F U N C T I O N S =====*/ |
148 |
|
|
|
149 |
|
|
/*****************************************************************************/ |
150 |
|
|
/* @Function: MD_ifDispatch */ |
151 |
|
|
/* @Purpose : */ |
152 |
|
|
/* The function checks the MCMD execution elegibility therefore dispatches */ |
153 |
|
|
/* the MCDM to the object executor. */ |
154 |
|
|
/* */ |
155 |
|
|
/* @@ */ |
156 |
|
|
/* @Parameter Name @Mode @Description */ |
157 |
|
|
/* pMcmdExec IN Pointer to MCMD header */ |
158 |
|
|
/* OUT */ |
159 |
|
|
/* @@ */ |
160 |
|
|
/*****************************************************************************/ |
161 |
|
|
|
162 |
|
|
void MD_ifDispatch (MA_HEADER_MCMD* pMcmdExec) |
163 |
|
|
{ |
164 |
|
|
status_code status; |
165 |
|
|
MsgTsk sndMsgMCMD; |
166 |
|
|
unsigned int dispatchMCMDflag; |
167 |
|
|
unsigned int dispatchINFNMCMDflag; |
168 |
|
|
unsigned int code; |
169 |
|
|
unsigned int timetagFlag; |
170 |
|
|
unsigned short* pMcmdInfo; |
171 |
|
|
status_code (*pf)(MsgTsk* msg); |
172 |
|
|
unsigned int code1; |
173 |
|
|
|
174 |
|
|
|
175 |
|
|
/* Default condition dispatch MCMD */ |
176 |
|
|
dispatchMCMDflag =TRUE; |
177 |
|
|
dispatchINFNMCMDflag =FALSE; |
178 |
|
|
pf =NULL; |
179 |
|
|
/* Select the MCMD executor */ |
180 |
|
|
|
181 |
|
|
|
182 |
|
|
//HB_Store(HB_MCMD,pMcmdExec->Length*sizeof(UINT16),pMcmdExec->PtrMCMD,0); |
183 |
|
|
HB_StoreMcmd(pMcmdExec); |
184 |
|
|
switch(pMcmdExec->Type) |
185 |
|
|
{ |
186 |
|
|
case DOWN_LINK : /* MCMD object executor : MMSUManager */ |
187 |
|
|
status =MC_piGetMcmdAbilityExec(DOWN_LINK); |
188 |
|
|
code =FT_MCMD_DOWN_LINK; |
189 |
|
|
pf =FT_piSndMsgMMSUManager; |
190 |
|
|
/*@LOG Downlink macrocommand */ |
191 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
192 |
|
|
break; |
193 |
|
|
case BITE : /* MCMD object executor : MMSUManager */ |
194 |
|
|
status =MC_piGetMcmdAbilityExec(BITE); |
195 |
|
|
code =FT_MCMD_BITE; |
196 |
|
|
pf =FT_piSndMsgMMSUManager; |
197 |
|
|
/*@LOG BITE macrocommand */ |
198 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
199 |
|
|
break; |
200 |
|
|
case RESET_HISTORY : |
201 |
|
|
status =MC_piGetMcmdAbilityExec(RESET_HISTORY); |
202 |
|
|
code =HA_RESET; |
203 |
|
|
pf =HA_piSndMsgHistoryArea; |
204 |
|
|
/*@LOG RESET_HISTORY macrocommand */ |
205 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
206 |
|
|
break; |
207 |
|
|
case PATCH : /* MCMD object executor : PatchDumpManager */ |
208 |
|
|
status = MC_piGetMcmdAbilityExec(PATCH); |
209 |
|
|
code = PD_PATCH; |
210 |
|
|
pf = PD_piSndMsgPatchDumpManager; |
211 |
|
|
/*@LOG PATCH macrocommand */ |
212 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
213 |
|
|
break; |
214 |
|
|
case DUMP : /* MCMD object executor : PatchDumpManager */ |
215 |
|
|
status = MC_piGetMcmdAbilityExec(DUMP); |
216 |
|
|
code = PD_DUMP; |
217 |
|
|
pf = PD_piSndMsgPatchDumpManager; |
218 |
|
|
/*@LOG DUMP macrocommand */ |
219 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
220 |
|
|
break; |
221 |
|
|
case REBOOT : |
222 |
|
|
status = MC_piGetMcmdAbilityExec(REBOOT); |
223 |
|
|
if (status == SUCCESSFUL) |
224 |
|
|
{ |
225 |
|
|
status = PRH_WriteEEPROMBootinfo(PRH_BOOTINFO_REBOOT); |
226 |
|
|
if(status != CM_RC_SUCCESSFUL) |
227 |
|
|
/*@LOG REBOOT: Write EEPROM Boot info error - status */ |
228 |
|
|
LU_INFN_LOG(LU_FATAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status); |
229 |
|
|
PM_CPU_Reboot(TRUE); |
230 |
|
|
/*@LOG REBOOT macrocommand */ |
231 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
232 |
|
|
} |
233 |
|
|
dispatchMCMDflag =FALSE; |
234 |
|
|
break; |
235 |
|
|
case DIRECT : |
236 |
|
|
status =MD_ifMcmdDirect(pMcmdExec); |
237 |
|
|
dispatchMCMDflag =FALSE; |
238 |
|
|
/*@LOG DIRECT macrocommand */ |
239 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
240 |
|
|
break; |
241 |
|
|
case DEL_MCMD_QUEUE :/* MCMD object executor : TTManager */ |
242 |
|
|
status =MC_piGetMcmdAbilityExec(DEL_MCMD_QUEUE); |
243 |
|
|
code =MT_DEL_MCMD_QUEUE; |
244 |
|
|
pf =MT_piSndMsgTTManager; |
245 |
|
|
/*@LOG DEL_MCMD_QUEUE macrocommand */ |
246 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
247 |
|
|
break; |
248 |
|
|
case EXE_MEM_CONF : /* MCMD object executor : MMSUManager */ |
249 |
|
|
status =MC_piGetMcmdAbilityExec(EXE_MEM_CONF); |
250 |
|
|
code =FT_MCMD_EXE_MEM_CONF; |
251 |
|
|
pf =FT_piSndMsgMMSUManager; |
252 |
|
|
/*@LOG EXE_MEM_CONF macrocommand */ |
253 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
254 |
|
|
break; |
255 |
|
|
case ABORT : |
256 |
|
|
status =MC_piGetMcmdAbilityExec(ABORT); |
257 |
|
|
code =FT_ABORT; |
258 |
|
|
pf =FT_piSndMsgMMSUManager; |
259 |
|
|
/*@LOG ABORT macrocommand */ |
260 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
261 |
|
|
break; |
262 |
|
|
case TIME_SYNCHRONISE : |
263 |
|
|
status = MC_piGetMcmdAbilityExec(TIME_SYNCHRONISE); |
264 |
|
|
if (status == SUCCESSFUL) |
265 |
|
|
{ |
266 |
|
|
status =MD_ifMcmdTimeSynchronised(pMcmdExec); |
267 |
|
|
} |
268 |
|
|
dispatchMCMDflag =FALSE; |
269 |
|
|
/*@LOG TIME_SYNCHRONISE macrocommand */ |
270 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
271 |
|
|
break; |
272 |
|
|
case TEST : /* MCMD object executor : MMSUManager */ |
273 |
|
|
status =MC_piGetMcmdAbilityExec(TEST); |
274 |
|
|
dispatchINFNMCMDflag =TRUE; |
275 |
|
|
/*@LOG TEST macrocommand */ |
276 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
277 |
|
|
break; |
278 |
|
|
case PURGE_TRD : |
279 |
|
|
status =MC_piGetMcmdAbilityExec(PURGE_TRD); |
280 |
|
|
dispatchINFNMCMDflag =TRUE; |
281 |
|
|
/*@LOG PURGE TRD macrocommand */ |
282 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
283 |
|
|
break; |
284 |
|
|
case GAS_CONTAINER_PURGE : |
285 |
|
|
status =MC_piGetMcmdAbilityExec(GAS_CONTAINER_PURGE); |
286 |
|
|
dispatchINFNMCMDflag =TRUE; |
287 |
|
|
/*@LOG CONTAINER_PURGE macrocommand */ |
288 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
289 |
|
|
break; |
290 |
|
|
case CALIBRATE : |
291 |
|
|
status =MC_piGetMcmdAbilityExec(CALIBRATE); |
292 |
|
|
dispatchINFNMCMDflag =TRUE; |
293 |
|
|
/*@LOG CALIBRATE macrocommand */ |
294 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
295 |
|
|
break; |
296 |
|
|
|
297 |
|
|
#ifndef INFN |
298 |
|
|
case SELECT_MODE : |
299 |
|
|
status =MC_piGetMcmdAbilityExec(SELECT_MODE); |
300 |
|
|
code =TS_GO_SELECT_MODE; |
301 |
|
|
pf =TS_piSndMsgTest; |
302 |
|
|
/*@LOG SELECT MODE macrocommand */ |
303 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
304 |
|
|
break; |
305 |
|
|
#endif |
306 |
|
|
|
307 |
|
|
#ifdef INFN |
308 |
|
|
case SELECT_MODE : |
309 |
|
|
status =MC_piGetMcmdAbilityExec(SELECT_MODE); |
310 |
|
|
dispatchINFNMCMDflag =TRUE; |
311 |
|
|
/*@LOG SELECT MODE macrocommand */ |
312 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
313 |
|
|
break; |
314 |
|
|
#endif |
315 |
|
|
|
316 |
|
|
case NEUTRON_DETECTOR : |
317 |
|
|
status =MC_piGetMcmdAbilityExec(NEUTRON_DETECTOR); |
318 |
|
|
dispatchINFNMCMDflag =TRUE; |
319 |
|
|
/*@LOG NEUTRON_DETECTOR macrocommand */ |
320 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
321 |
|
|
break; |
322 |
|
|
case ORBITAL_INFORMATION : |
323 |
|
|
status =MC_piGetMcmdAbilityExec(ORBITAL_INFORMATION); |
324 |
|
|
dispatchINFNMCMDflag =TRUE; |
325 |
|
|
/*@LOG ORBITAL_INFORMATION macrocommand */ |
326 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
327 |
|
|
break; |
328 |
|
|
case INCLINATION_INFORMATION : |
329 |
|
|
status =MC_piGetMcmdAbilityExec(INCLINATION_INFORMATION); |
330 |
|
|
dispatchINFNMCMDflag =TRUE; |
331 |
|
|
/*@LOG INCLINATION_INFORMATION macrocommand */ |
332 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
333 |
|
|
break; |
334 |
|
|
default : |
335 |
|
|
/* MCMD not identified */ |
336 |
|
|
status =HA_E10_MCMD_ERR; |
337 |
|
|
/*@LOG mcmd not identified */ |
338 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,pMcmdExec->Type); |
339 |
|
|
break; |
340 |
|
|
} |
341 |
|
|
|
342 |
|
|
/* Check pointer to MCMD area */ |
343 |
|
|
if (!pMcmdExec->PtrMCMD) |
344 |
|
|
{ |
345 |
|
|
status =HA_E10_MCMD_ERR; |
346 |
|
|
} |
347 |
|
|
|
348 |
|
|
/* Check if MCMD must be dispatched, his eligibility is OK, and */ |
349 |
|
|
/* is not INFN MCMD */ |
350 |
|
|
if (status==SUCCESSFUL && dispatchMCMDflag && !dispatchINFNMCMDflag) |
351 |
|
|
{ |
352 |
|
|
/*==================== MCMD dispatched ======================*/ |
353 |
|
|
/* MCMD eligibility found */ |
354 |
|
|
/* Send message to the object executor */ |
355 |
|
|
sndMsgMCMD.Code =code; |
356 |
|
|
*(MA_HEADER_MCMD* )sndMsgMCMD.Info =*pMcmdExec; |
357 |
|
|
sndMsgMCMD.LlInfo =sizeof(MA_HEADER_MCMD); |
358 |
|
|
status =(*pf)(&sndMsgMCMD); |
359 |
|
|
if (status != SUCCESSFUL) |
360 |
|
|
{ |
361 |
|
|
|
362 |
|
|
/*=============== Log in History Area ===================*/ |
363 |
|
|
/*@LOG Mailbox full MCMD not dispatched (Internal error) LOG_INFN HA_piLogHistoryEntry2 (pMcmdExec->Type,HA_E2_INTERNAL_ERR); */ |
364 |
|
|
LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,HA_E2_INTERNAL_ERR); |
365 |
|
|
}else{ |
366 |
|
|
|
367 |
|
|
} |
368 |
|
|
} |
369 |
|
|
else if (status!=SUCCESSFUL) |
370 |
|
|
{ |
371 |
|
|
/*================== MCMD not dispatched ====================*/ |
372 |
|
|
/* MCMD eligibility not found or Internal Error */ |
373 |
|
|
/*=================== Log in History Area ===================*/ |
374 |
|
|
if (status==HA_E10_MCMD_ERR) |
375 |
|
|
{ |
376 |
|
|
/* */ |
377 |
|
|
/*@LOG MCMD not defined LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MD,status,HA_E10_REP2_NULL); */ |
378 |
|
|
LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,HA_E10_REP2_NULL); |
379 |
|
|
|
380 |
|
|
/* Set Internal error */ |
381 |
|
|
status =HA_E2_INTERNAL_ERR; |
382 |
|
|
} |
383 |
|
|
else if (status==HA_E10_SEMAPHORE_ERR) |
384 |
|
|
{ |
385 |
|
|
/* Error during eligibility test */ |
386 |
|
|
status =HA_E2_INTERNAL_ERR; |
387 |
|
|
} |
388 |
|
|
|
389 |
|
|
/*@LOG LOG_INFN HA_piLogHistoryEntry2 (pMcmdExec->Type,status);*/ |
390 |
|
|
LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status); |
391 |
|
|
} |
392 |
|
|
else |
393 |
|
|
{ |
394 |
|
|
/*=========== MCMD not dispatched or INFN MCMD =============*/ |
395 |
|
|
|
396 |
|
|
if(dispatchINFNMCMDflag) |
397 |
|
|
{ |
398 |
|
|
/*========================INFN MCMD =========================*/ |
399 |
|
|
/*===========================================================*/ |
400 |
|
|
/*************************************************************/ |
401 |
|
|
/*============================= INFN Interface ==============*/ |
402 |
|
|
// INFN must put here the call to its provided operation in order to |
403 |
|
|
// make its own copy of the MCMD. When this funcion returns the MCMD is |
404 |
|
|
// cosidered copied elsewhere and deleted from the MCMD partition. |
405 |
|
|
|
406 |
|
|
#ifdef INFN |
407 |
|
|
MD_piSubmitMCMD_INFN(pMcmdExec); |
408 |
|
|
#endif |
409 |
|
|
|
410 |
|
|
} |
411 |
|
|
} |
412 |
|
|
|
413 |
|
|
if ((status!=SUCCESSFUL && pMcmdExec->PtrMCMD)) |
414 |
|
|
{ |
415 |
|
|
/* MCMD not dispatched */ |
416 |
|
|
/* delete MCMD from partition */ |
417 |
|
|
pMcmdInfo =(unsigned short* )pMcmdExec->PtrMCMD; |
418 |
|
|
timetagFlag =(*(pMcmdInfo+1)&TIMETAG_MASK) ? TIMETAG_MCMD:IMMEDIATE_MCMD; |
419 |
|
|
MA_piDelBufferMCMD(pMcmdExec->PtrMCMD,timetagFlag); |
420 |
|
|
} |
421 |
|
|
} |
422 |
|
|
|
423 |
|
|
|
424 |
|
|
|
425 |
|
|
/*****************************************************************************/ |
426 |
|
|
/* @Function: MD_ifMcmdDirect */ |
427 |
|
|
/* @Purpose : */ |
428 |
|
|
/* The function manages the MCMD DIRECT execution. */ |
429 |
|
|
/* It checks first the MCMD execution elegibility, than extracts the */ |
430 |
|
|
/* Telecommand parameter Id from the MCMD buffer, and executes the */ |
431 |
|
|
/* Telecommand by calling the specific provided interface of */ |
432 |
|
|
/* the ExternalEquipmentController object. */ |
433 |
|
|
/* A log is sent to the History area objet to notify the execution of the */ |
434 |
|
|
/* DIRECT MCMD. */ |
435 |
|
|
/* The MCMD buffer is released from the MCMDs partition. */ |
436 |
|
|
/* */ |
437 |
|
|
/* @@ */ |
438 |
|
|
/* @Parameter Name @Mode @Description */ |
439 |
|
|
/* PtrMcmd IN Pointer to MCMD header */ |
440 |
|
|
/* status_code OUT Return code (always SUCCESSFUL) */ |
441 |
|
|
/* @@ */ |
442 |
|
|
/*****************************************************************************/ |
443 |
|
|
|
444 |
|
|
status_code MD_ifMcmdDirect(MA_HEADER_MCMD* PtrMcmd) |
445 |
|
|
{ |
446 |
|
|
status_code status; |
447 |
|
|
unsigned int paramId; |
448 |
|
|
unsigned int value; |
449 |
|
|
unsigned int timetagFlag; |
450 |
|
|
|
451 |
|
|
/* Check MCMD eligibility */ |
452 |
|
|
status =MC_piGetMcmdAbilityExec(DIRECT); |
453 |
|
|
|
454 |
|
|
if (status == SUCCESSFUL) |
455 |
|
|
{ |
456 |
|
|
/* Get parameter code */ |
457 |
|
|
paramId =(unsigned int)*(((unsigned short*)PtrMcmd->PtrMCMD)+OFFSET_HEADER); |
458 |
|
|
paramId &=TM_PARAM_ID_MASK; |
459 |
|
|
value =(unsigned int)*(((unsigned short*)PtrMcmd->PtrMCMD)+OFFSET_HEADER+1); |
460 |
|
|
timetagFlag =( *(((unsigned short*)PtrMcmd->PtrMCMD)+1)&TIMETAG_MASK ) ? |
461 |
|
|
TIMETAG_MCMD : IMMEDIATE_MCMD; |
462 |
|
|
/* Delete MCMD from partition */ |
463 |
|
|
MA_piDelBufferMCMD(PtrMcmd->PtrMCMD,timetagFlag); |
464 |
|
|
|
465 |
|
|
status =TM_piSendTC(paramId,value); |
466 |
|
|
if (status != SUCCESSFUL) |
467 |
|
|
{ |
468 |
|
|
status =HA_E2_TELECOMMAND_NOT_FOUND; |
469 |
|
|
} |
470 |
|
|
} |
471 |
|
|
|
472 |
|
|
// LOG_INFN HA_piLogHistoryEntry2 (PtrMcmd->Type,status); |
473 |
|
|
// LOG_INFN HA_piLogHistoryEntry3 (paramId, value); |
474 |
|
|
|
475 |
|
|
/*@LOG MCMD Direct: paramID */ |
476 |
|
|
LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,paramId); |
477 |
|
|
/*@LOG MCMD Direct: value */ |
478 |
|
|
LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,value); |
479 |
|
|
/*@LOG MCMD Direct: status */ |
480 |
|
|
LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,status); |
481 |
|
|
|
482 |
|
|
|
483 |
|
|
/* The function returns always SUCCESSFUL because the error has */ |
484 |
|
|
/* been already managed */ |
485 |
|
|
return (SUCCESSFUL); |
486 |
|
|
} |
487 |
|
|
|
488 |
|
|
|
489 |
|
|
|
490 |
|
|
/*****************************************************************************/ |
491 |
|
|
/* @Function: MD_ifMcmdTimeSynchronised */ |
492 |
|
|
/* @Purpose : */ |
493 |
|
|
/* The function manages the MCMD TIME_SYNCHRONISE execution. */ |
494 |
|
|
/* The OBT is updated by using the MCMD parameter. |
495 |
|
|
/* A log is sent to the History area objet to notify the execution of the */ |
496 |
|
|
/* DIRECT MCMD. */ |
497 |
|
|
/* The MCMD buffer is released from the MCMDs partition. */ |
498 |
|
|
/* */ |
499 |
|
|
/* @@ */ |
500 |
|
|
/* @Parameter Name @Mode @Description */ |
501 |
|
|
/* PtrMcmd IN Pointer to MCMD header */ |
502 |
|
|
/* status_code OUT Return code (always SUCCESSFUL) */ |
503 |
|
|
/* @@ */ |
504 |
|
|
/*****************************************************************************/ |
505 |
|
|
|
506 |
|
|
status_code MD_ifMcmdTimeSynchronised(MA_HEADER_MCMD* PtrMcmd) |
507 |
|
|
{ |
508 |
|
|
status_code status; |
509 |
|
|
unsigned int paramId; |
510 |
|
|
unsigned int timetagFlag; |
511 |
|
|
|
512 |
|
|
/* Check MCMD eligibility */ |
513 |
|
|
status =MC_piGetMcmdAbilityExec(TIME_SYNCHRONISE); |
514 |
|
|
|
515 |
|
|
if (status == SUCCESSFUL) |
516 |
|
|
{ |
517 |
|
|
/* Get parameter code */ |
518 |
|
|
paramId =(unsigned int)*(((unsigned short*)PtrMcmd->PtrMCMD)+OFFSET_HEADER); |
519 |
|
|
paramId <<=16; |
520 |
|
|
paramId |=(unsigned int)*(((unsigned short*)PtrMcmd->PtrMCMD)+OFFSET_HEADER+1); |
521 |
|
|
timetagFlag =( *(((unsigned short*)PtrMcmd->PtrMCMD)+1)&TIMETAG_MASK ) ? |
522 |
|
|
TIMETAG_MCMD : IMMEDIATE_MCMD; |
523 |
|
|
|
524 |
|
|
TI_piUpdateTimeInfo_s((TI_TIME)paramId); |
525 |
|
|
// status=HB_StoreTimeSync((TI_TIME)paramId); |
526 |
|
|
} |
527 |
|
|
/* Delete MCMD from partition */ |
528 |
|
|
MA_piDelBufferMCMD(PtrMcmd->PtrMCMD,timetagFlag); |
529 |
|
|
|
530 |
|
|
/*@LOG Time Syncrhonisec LOG_INFN HA_piLogHistoryEntry2 (PtrMcmd->Type,status); */ |
531 |
|
|
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status); |
532 |
|
|
/* The function returns always SUCCESSFUL because the error has */ |
533 |
|
|
/* been already managed */ |
534 |
|
|
return (SUCCESSFUL); |
535 |
|
|
} |