/[PAMELA software]/quicklook/dataToXML/Data/compilationInfo/src/MCMDManager/MCMDArea/MA_MCMDArea_op.c
ViewVC logotype

Annotation of /quicklook/dataToXML/Data/compilationInfo/src/MCMDManager/MCMDArea/MA_MCMDArea_op.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (download) (vendor branch)
Tue Apr 25 09:00:21 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 kusanagi 1.1 /****************************************************************************
2     /* F i l e D a t a
3     /*
4     /* Module : MCMDManager
5     /* C.I. No. :
6     /* $Revision: 1.12 $
7     /* $Date: 2005/02/21 08:58:29 $
8     /* Belonging to :
9     /* :
10     /* $RCSfile: MA_MCMDArea_op.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: MA_MCMDArea_op.c,v $
25     /* Revision 1.12 2005/02/21 08:58:29 sebastiani
26     /* all log comments completed
27     /*
28     /* Revision 1.11 2004/09/17 15:01:00 faber
29     /* LU_INFN_LOG flags fixing
30     /*
31     /* Revision 1.10 2004/07/27 17:30:17 faber
32     /* OBT can be now in second or milliseconds, depending of the situazion.
33     /* OBT_s is used for FM compatibility, OBT_ms basically for MM infos
34     /*
35     /* Revision 1.9 2004/05/10 12:59:17 faber
36     /* __FILEID__ right value fixed: many .c files had the wrong value!
37     /*
38     /* Revision 1.8 2004/02/26 11:23:09 faber
39     /* SELECT_MODE min length is 8-only comment modified
40     /*
41     /* Revision 1.7 2003/12/15 10:57:16 sebastiani
42     /* last changes for the acceptance of TM tests in Rome of 9-12/Dec/2003
43     /*
44     /* Revision 1.6 2003/12/07 15:07:11 sebastiani
45     /* GAS_TEST renamed to GAS_CONTAINER_PURGE
46     /*
47     /* Revision 1.5 2003/11/21 11:15:55 faber
48     /* bugfixes:
49     /* SELECT_MODE min length is 8, not 7
50     /* CALIBRATE length is 6, not 15
51     /*
52     /* Revision 1.4 2003/11/18 17:13:15 sebastiani
53     /* GPT enabled to print a "\n" every 60s directly on UART, only to check if the CPU is
54     /* alive
55     /*
56     /* Revision 1.3 2003/11/18 09:01:14 alfarano
57     /* laben patch fixes some problems
58     /*
59     /* Revision 1.2 2003/10/21 16:09:12 alfarano
60     /* LU_LOG_INFN replacement for all remaining original log functions
61     /*
62     /* Revision 1.1.1.1 2003/08/04 09:40:21 sebastiani
63     /* Imported sources laben rel. 19.06.2003 integrated with pam2
64     /*
65     /* Revision 1.13 2002/11/14 09:50:19 zulia
66     /* removed unsed status variable
67     /*
68     /* Revision 1.12 2002/08/05 14:26:56 zulia
69     /* Fixed max len of Patch MCMD to 504 and select mode to 504
70     /*
71     /* Revision 1.11 2002/08/01 09:48:04 zulia
72     /* set length downlink to 0x0a
73     /*
74     /* Revision 1.10 2002/07/22 08:15:00 zulia
75     /* correct the min length of MCMD SELECT_OPERATIVE_MODE from 9 to 7
76     /*
77     /* Revision 1.9 2002/06/11 13:16:48 zulia
78     /* changed lenght of DIRECT from 9 to 8
79     /*
80     /* Revision 1.8 2002/05/15 13:46:34 zulia
81     /* check of MCMD Lenght improved
82     /*
83     /* Revision 1.7 2002/05/09 08:16:34 zulia
84     /* * acceptance release
85     /*
86     /*
87     /*****************************************************************************/
88    
89    
90     /*============================= Include File ================================*/
91    
92     #include <src/MCMDManager/MCMDArea/MA_MCMDArea_op.h>
93     #include <src/MCMDManager/MCMDArea/MA_MCMDArea_int.h>
94    
95     #include <src/INFN/LU_SourceFileID_INFN.h>
96     #define __FILEID__ _MA_MCMDArea_op__c
97     #include <src/INFN/PRH_ParamHandler_INFN.h>
98     #include <src/INFN/LU_LogUtility_INFN.h>
99     #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
100     LU_DECL_MASK();
101    
102     /*============================== Local Variables ============================*/
103    
104     /*****************************************************************************/
105     /* @Constant: MA_McmdId */
106     /* @Purpose : */
107     /* Array of unsigned int. */
108     /* Array whose content is the MCMDs identifier, and the index is MCMDs type */
109     /* @@ */
110     /*****************************************************************************/
111     const unsigned int MA_McmdId [] = {ID_NULL_MCMD,
112     ID_DOWN_LINK,
113     ID_BITE,
114     ID_TEST,
115     ID_PATCH,
116     ID_DUMP,
117     ID_REBOOT,
118     ID_DIRECT,
119     ID_RESET_HISTORY,
120     ID_DEL_MCMD_QUEUE,
121     ID_EXE_MEM_CONF,
122     ID_ABORT,
123     ID_PURGE_TRD,
124     ID_GAS_CONTAINER_PURGE,
125     ID_CALIBRATE,
126     ID_SELECT_MODE,
127     ID_NEUTRON_DETECTOR,
128     ID_TIME_SYNCHRONISE,
129     ID_ORBITAL_INFORMATION,
130     ID_INCLINATION_INFORMATION};
131    
132     /**********************************************************************************/
133     /* @Constant: MA_McmdType */
134     /* @Purpose : */
135     /* Array of unsigned int. */
136     /* Array whose content is the MCMDs type, and the index is MCMDs identifier */
137     /* @@ */
138     /*****************************************************************************/
139     const unsigned int MA_McmdType [] ={
140     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//000
141     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//008
142     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//016
143     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//024
144    
145     PATCH,DUMP,RESET_HISTORY,DEL_MCMD_QUEUE,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//032
146     REBOOT, EXE_MEM_CONF, NULL_MCMD ,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD ,ABORT,//040
147     PURGE_TRD,GAS_CONTAINER_PURGE,CALIBRATE,SELECT_MODE,NULL_MCMD,NEUTRON_DETECTOR,NULL_MCMD, //048
148     NULL_MCMD,
149    
150     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//056
151     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//064
152     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//072
153     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//080
154     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//088
155     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//096
156     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//104
157     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//112
158     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//120
159    
160     BITE,NULL_MCMD, DOWN_LINK, NULL_MCMD, NULL_MCMD, NULL_MCMD, NULL_MCMD,NULL_MCMD,//128
161     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,TEST, //136
162     NULL_MCMD,NULL_MCMD, NULL_MCMD, NULL_MCMD, NULL_MCMD, NULL_MCMD,NULL_MCMD,NULL_MCMD,//144
163    
164     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//152
165     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//160
166     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//168
167     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//176
168     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//184
169     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//192
170     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//200
171     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//208
172     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//216
173    
174     TIME_SYNCHRONISE,ORBITAL_INFORMATION,INCLINATION_INFORMATION,NULL_MCMD,NULL_MCMD,//224
175     NULL_MCMD,NULL_MCMD,NULL_MCMD,
176    
177     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//232
178     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,//240
179     NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,NULL_MCMD,DIRECT//248
180     };
181    
182     /*****************************************************************************/
183     /* @Constant: MA_McmdLenght */
184     /* @Purpose : */
185     /* Array of unsigned int. */
186     /* Array whose content is the MCMDs lenght, and the index is MCMDs type */
187     /* @@ */
188     /*****************************************************************************/
189     #define MIN_SELECT_MODE_LEN 8
190     #define MIN_PATCH_LEN 10
191     const unsigned int MA_McmdLenght [] = {
192     0x00, /* NULL_MCMD, */
193     0x09, /* DOWN_LINK, */ // changed since test for TM in Rome
194     0x07, /* BITE, */
195     0x07, /* TEST, */
196     0x1f8, /* PATCH, 10 - 504 */
197     0x09, /* DUMP, */
198     0x06, /* REBOOT, */
199     0x08, /* DIRECT, */
200     0x06, /* RESET_HISTORY, */
201     0x09, /* DEL_MCMD_QUEUE, */
202     0x07, /* EXE_MEM_CONF, */
203     0x07, /* ABORT, */
204     0x07, /* PURGE_TRD, */
205     0x07, /* GAS_CONTAINTER_PURGE, */
206     0x06, /* CALIBRATE, 6 */
207     0x1f8, /* SELECT_MODE, 8 - 504 */
208     0x07, /* NEUTRON_DETECTOR, */
209     0x08, /* TIME_SYNCHRONISE, */
210     0x14, /* ORBITAL_INFORMATION, 20 */
211     0x42 /* INCLINATION_INFORMATION 66 */
212     };
213    
214    
215     /*****************************************************************************/
216     /* @Variable: MA_HeaderMcmd */
217     /* @Purpose : */
218     /* MA_HEADER_MCMD type */
219     /* Pointer to timetag MCMD in top to the list */
220     /* @@ */
221     /*****************************************************************************/
222     static MA_HEADER_MCMD* MA_HeaderMcmd;
223    
224     /*****************************************************************************/
225     /* @Variable: MA_TimetagCounter */
226     /* @Purpose : */
227     /* unsigned int type */
228     /* Counter of the timetag MCMD storend in the list */
229     /* @@ */
230     /*****************************************************************************/
231     static unsigned int MA_TimetagCounter;
232    
233     /*****************************************************************************/
234     /* @Variable: MA_TimetagBufFullFlag */
235     /* @Purpose : */
236     /* unsigned int type */
237     /* Flag of timetag MCMD list full */
238     /* @@ */
239     /*****************************************************************************/
240     static unsigned int MA_TimetagBufFullFlag;
241    
242     /*****************************************************************************/
243     /* @Variable: MA_1553IsLocked */
244     /* @Purpose : */
245     /* unsigned int type */
246     /* arbiter of 1553 MCMD Buffer */
247     /* @@ */
248     /*****************************************************************************/
249     static unsigned int MA_1553IsLocked;
250    
251     /*****************************************************************************/
252    
253     /*====== M C M D A r e a O P E R A T I O N A L F U N C T I O N S ========*/
254    
255     /*****************************************************************************/
256     /* @Function: MA_opInit */
257     /* @Purpose : */
258     /* Inialialization function of the MCMDArea object. */
259     /* The following initialization are performed: */
260     /* To get from a OS partition a pointer to a buffer for storing the timetag */
261     /* MCMD header list. */
262     /* Initialize object variable. */
263     /* */
264     /* @@ */
265     /* @Parameter Name @Mode @Description */
266     /* status_code OUT Return code */
267     /* @@ */
268     /*****************************************************************************/
269    
270     status_code MA_opInitMCMDArea (void)
271     {
272     status_code status;
273    
274     /* Get partition buffer for the timetag MCMD header list */
275     status =OS_piPartGetBuffer(MA_TAB_PART,(void*)&MA_HeaderMcmd);
276     /* Initialize object variable */
277     MA_TimetagCounter =0;
278     MA_TimetagBufFullFlag =FALSE;
279     MA_opRelease1553();
280     return (status);
281    
282     }
283    
284    
285    
286     /*****************************************************************************/
287     /* @Function: MA_opGetMCMDType */
288     /* @Purpose : */
289     /* The function converts the MCMD code in the MCMD type (enumarate). */
290     /* If MCMD type is not found an internal error HA_E10_MCMD_ERR is returned. */
291     /* */
292     /* @@ */
293     /* @Parameter Name @Mode @Description */
294     /* McmdId IN MCMD code identifier */
295     /* McmdType OUT MCMD type (enumerate) */
296     /* status_code OUT Return code */
297     /* @@ */
298     /*****************************************************************************/
299    
300     status_code MA_opGetMCMDType (unsigned int McmdId, unsigned int* McmdType)
301     {
302     status_code status;
303    
304     /* Check MCMD identification validity */
305     if (McmdId <= MAX_MCMD_ID)
306     {
307     /* Get MCMD type */
308     *McmdType =MA_McmdType[McmdId];
309     }
310     else
311     {
312     /* MCMD type not identified */
313     *McmdType =NULL_MCMD;
314     }
315     /* Check if MCMD type has been found */
316     if (*McmdType != NULL_MCMD)
317     {
318     status =SUCCESSFUL;
319     }
320     else
321     {
322     status =HA_E10_MCMD_ERR;
323     }
324    
325     return (status);
326    
327     }
328    
329    
330    
331     /*****************************************************************************/
332     /* @Function: MA_opGetMCMDId */
333     /* @Purpose : */
334     /* The function converts the MCMD type (enumarate) in the MCMD code. */
335     /* If MCMD type is not a valid enumerate an internal error HA_E10_MCMD_ERR */
336     /* is returned. */
337     /* */
338     /* @@ */
339     /* @Parameter Name @Mode @Description */
340     /* McmdType IN MCMD type (enumerate) */
341     /* McmdId OUT MCMD code identifier */
342     /* status_code OUT Return code */
343     /* @@ */
344     /*****************************************************************************/
345    
346     status_code MA_opGetMCMDId (unsigned int McmdType,unsigned int* McmdId)
347     {
348     status_code status;
349    
350     /* Check MCMD type identification validity */
351     if (McmdType <= MAX_MCMD)
352     {
353     /* Get MCMD identification */
354     *McmdId =MA_McmdId[McmdType];
355     status =SUCCESSFUL;
356     }
357     else
358     {
359     /* MCMD not identified */
360     *McmdId =NULL_MCMD;
361     status =HA_E10_MCMD_ERR;
362     }
363     return (status);
364    
365     }
366    
367     /*****************************************************************************/
368     /* @Function: MA_opGetMCMDLenght */
369     /* @Purpose : */
370     /* The function checks the MCMD lenght. */
371     /* */
372     /* @@ */
373     /* @Parameter Name @Mode @Description */
374     /* McmdType IN MCMD type (enumerate) */
375     /* McmdLen OUT MCMD lenght */
376     /* status_code OUT Return code */
377     /* @@ */
378     /*****************************************************************************/
379    
380     status_code MA_opGetMCMDLenght (unsigned int McmdType,
381     unsigned int McmdLen)
382     {
383     status_code status;
384     unsigned int len;
385    
386     /* Check MCMD type identification validity */
387     if (McmdType <= MAX_MCMD)
388     {
389     /* Get MCMD lenght */
390     status =UNSATISFIED;
391     len =MA_McmdLenght[McmdType];
392     if (McmdType == SELECT_MODE)
393     {
394     if (McmdLen >= MIN_SELECT_MODE_LEN && McmdLen<=len)
395     {
396     status =SUCCESSFUL;
397     }
398     }
399     else if (McmdType == PATCH)
400     {
401     if (McmdLen >= MIN_PATCH_LEN && McmdLen<=len)
402     {
403     status =SUCCESSFUL;
404     }
405     }
406     else
407     {
408     if (McmdLen==len)
409     {
410     status =SUCCESSFUL;
411     }
412     }
413     }
414     else
415     {
416     /* MCMD not identified */
417     status =HA_E10_MCMD_ERR;
418     }
419    
420     return (status);
421    
422     }
423    
424    
425     /*****************************************************************************/
426     /* @Function: MA_opPutMCMDtimetag */
427     /* @Purpose : */
428     /* The function inserts a MCMD with timetag in the timetag MCMD list. */
429     /* The MCMD is not inserted in the list if his timetag already exists. */
430     /* After having searched for the first free position in the list, if the */
431     /* MCMD timetag in top to the list is older than the MCMD timetag to insert,*/
432     /* is moved in the free position and the new MCMD is inserted in his */
433     /* position. Otherwise the new MCMD is inserted in the free position. */
434     /* During checks between timetag and OBT, for times close to the threshold */
435     /* overflow (2^ 32 bit), it is managed the cases in which one of the times */
436     /* exceeds the values limit of the variable. */
437     /* */
438     /* @@ */
439     /* @Parameter Name @Mode @Description */
440     /* Mcmd IN Pointer to MCMD header structure */
441     /* Obt IN On Board Time */
442     /* Option IN Flag which defines if await or no the */
443     /* resource availability (WAIT, NO_WAIT) */
444     /* Timeout IN Timeout value for WAIT option */
445     /* status_code OUT Return code */
446     /* @@ */
447     /*****************************************************************************/
448    
449     status_code MA_opPutMCMDtimetag (MA_HEADER_MCMD* Mcmd, TI_TIME Obt,
450     unsigned int Option, unsigned int Timeout)
451     {
452     status_code status;
453     status_code statusOper;
454     MA_HEADER_MCMD* pt;
455     MA_HEADER_MCMD* pFreePos;
456     unsigned int swapFlag;
457     unsigned int sameTimetagFlag;
458     unsigned short i;
459    
460     if ((status =OS_piResourceObtain (MA_RES,Option,Timeout))==SUCCESSFUL)
461     {
462     /* Search a free position, and check if the */
463     /* new timetag already exists */
464     sameTimetagFlag =FALSE;
465     pFreePos =NULL;
466     for (i=0, pt =MA_HeaderMcmd;(!sameTimetagFlag)&&(i<MAX_MCMD_TIMETAG); i++,pt++)
467     {
468     if(pt->Type == NULL_MCMD)
469     {
470     if (!pFreePos)
471     {
472     /* Found fFree position */
473     pFreePos =pt;
474     }
475     }
476     else
477     {
478     if (pt->TimeTag == Mcmd->TimeTag)
479     {
480     /* Same timetag found, the Mcmd must be refused */
481     sameTimetagFlag =TRUE;
482     statusOper =HA_E2_TIMETAG_ALREADY_EXIST;
483     }
484     }
485     }
486    
487     if (pFreePos && !sameTimetagFlag)
488     {
489     /* The Mcmd must be inserted into timetag queue. Check if */
490     /* must be inserted in the header or in the free position */
491     swapFlag =FALSE;
492     if (MA_HeaderMcmd->TimeTag < Obt)
493     {
494     /* Timetag which expires after the obt counter overflow */
495     if (Mcmd->TimeTag < Obt)
496     {
497     if(MA_HeaderMcmd->TimeTag > Mcmd->TimeTag)
498     {
499     swapFlag =TRUE;
500     }
501     }
502     else
503     {
504     swapFlag =TRUE;
505     }
506     }
507     else
508     {
509     /* Timetag which expires before the obt counter overflow */
510     if (Mcmd->TimeTag > Obt)
511     {
512     if(MA_HeaderMcmd->TimeTag > Mcmd->TimeTag)
513     {
514     swapFlag =TRUE;
515     }
516     }
517     }
518     /* Check if the header MCMD must be replaced with the new MCMD */
519     if (swapFlag)
520     {
521     /* The new MCMD is more recent, then is put in the header */
522     /* position and the less recent is put in the free position */
523     *pFreePos =*MA_HeaderMcmd;
524     *MA_HeaderMcmd =*Mcmd;
525     Mcmd->Type =NULL_MCMD;
526     }
527     else
528     {
529     /* The new MCMD is put in the free position */
530     *pFreePos =*Mcmd;
531     Mcmd->Type =NULL_MCMD;
532     }
533     statusOper =SUCCESSFUL;
534     /* Increment timetag counter */
535     MA_TimetagCounter++;
536     if (MA_TimetagCounter >= MAX_MCMD_TIMETAG)
537     {
538     /* MCMD timetag list full */
539     MA_TimetagBufFullFlag =TRUE;
540     }
541     }
542     else
543     {
544     if (!pFreePos && !sameTimetagFlag)
545     {
546     /* MCMD timetag list full */
547     MA_TimetagBufFullFlag =TRUE;
548     statusOper =HA_E2_MCMD_QUEUE_FULL;
549     }
550     }
551     /* Release MCMDArea resource */
552     status =OS_piResourceRelease (MA_RES);
553     }
554     else
555     {
556     if (status==UNSATISFIED || status==INVALID_ID)
557     {
558     /* Semaphore error */
559     /*@LOG LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_SEMAPHORE_ERR,status); */
560     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
561     status =HA_E10_SEMAPHORE_ERR;
562     }
563     }
564    
565     /* If resource is correctly obtaneid return operation status */
566     if(status == SUCCESSFUL)
567     {
568     status =statusOper;
569     }
570     return (status);
571     }
572    
573    
574    
575    
576     /*****************************************************************************/
577     /* @Function: MA_opGetMCMDtimetag */
578     /* @Purpose : */
579     /* The function returns the MCMD with the most recent timetag into the list.*/
580     /* The MCMD with most recent timetag of the list is always located in the */
581     /* header position. */
582     /* */
583     /* @@ */
584     /* @Parameter Name @Mode @Description */
585     /* Mcmd IN Pointer to MCMD header structure */
586     /* Option IN Flag which defines if await or no the */
587     /* resource availability (WAIT, NO_WAIT) */
588     /* Timeout IN Timeout value for WAIT option */
589     /* status_code OUT Return code */
590     /* @@ */
591     /*****************************************************************************/
592    
593     status_code MA_opGetMCMDtimetag (MA_HEADER_MCMD* Mcmd, unsigned int Option,
594     unsigned int Timeout)
595     {
596     status_code status;
597    
598     if ((status =OS_piResourceObtain (MA_RES,Option,Timeout))==SUCCESSFUL)
599     {
600     /* Get the MCMD in the header position (most recent) */
601     *Mcmd =*MA_HeaderMcmd;
602     /* Release MCMDArea resource */
603     status =OS_piResourceRelease (MA_RES);
604     }
605     else
606     {
607     /* Check if there is a resource error */
608     if (status==UNSATISFIED || status==INVALID_ID)
609     {
610     /* Semaphore error */
611     /*@LOG LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_SEMAPHORE_ERR,status); */
612     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
613     status =HA_E10_SEMAPHORE_ERR;
614     }
615     }
616     return (status);
617    
618     }
619    
620    
621    
622     /*****************************************************************************/
623     /* @Function: MA_opUpdateMCMDtimetag */
624     /* @Purpose : */
625     /* The function first takes a MCMDArea resource then call a function that */
626     /* updates the header position in the timetag MCMD list with most recent */
627     /* MCMD. At the end it releases the MCMDArea resource. */
628     /* */
629     /* @@ */
630     /* @Parameter Name @Mode @Description */
631     /* Obt IN On Board Time */
632     /* Option IN Flag which defines if await or no the */
633     /* resource availability (WAIT, NO_WAIT) */
634     /* Timeout IN Timeout value for WAIT option */
635     /* status_code OUT Return code */
636     /* @@ */
637     /*****************************************************************************/
638    
639     status_code MA_opUpdateMCMDtimetag (TI_TIME Obt, unsigned int Option,
640     unsigned int Timeout)
641     {
642     status_code status;
643    
644     if ((status =OS_piResourceObtain (MA_RES,Option,Timeout))==SUCCESSFUL)
645     {
646     /* Update the MCMD in the header position (most recent) */
647     MA_ifUpdateMcmdHeader(MA_HeaderMcmd,Obt);
648    
649     /* Release MCMDArea resource */
650     status =OS_piResourceRelease (MA_RES);
651     }
652     else
653     {
654     /* Check if there is a resource error */
655     if (status==UNSATISFIED || status==INVALID_ID)
656     {
657     /*@LOG Semaphore error LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_SEMAPHORE_ERR,status); */
658     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
659     status =HA_E10_SEMAPHORE_ERR;
660     }
661     }
662    
663     return (status);
664    
665     }
666    
667    
668    
669     /*****************************************************************************/
670     /* @Function: MA_opDelMCMDtimetag */
671     /* @Purpose : */
672     /* The function searches and deletes the MCMD in the timetag MCMD list. */
673     /* If MCMD deleted was in the header position call the function to update */
674     /* the header position with the most recent MCMD. */
675     /* */
676     /* @@ */
677     /* @Parameter Name @Mode @Description */
678     /* Mcmd IN Pointer to MCMD header structure */
679     /* Obt IN On Board Time */
680     /* Option IN Flag which defines if await or no the */
681     /* resource availability (WAIT, NO_WAIT) */
682     /* Timeout IN Timeout value for WAIT option */
683     /* status_code OUT Return code */
684     /* @@ */
685     /*****************************************************************************/
686    
687     status_code MA_opDelMCMDtimetag (MA_HEADER_MCMD* Mcmd, TI_TIME Obt,
688     unsigned int Option, unsigned int Timeout)
689     {
690     status_code status;
691     status_code statusOper;
692     MA_HEADER_MCMD* pt;
693     MA_HEADER_MCMD* pHOverObt;
694     MA_HEADER_MCMD* pHUnderObt;
695     unsigned int ttOverObt,ttUnderObt;
696     unsigned int ttOverFlag,ttUnderFlag;
697     unsigned int mcmdFoundFlag;
698     unsigned short i;
699    
700     if ((status =OS_piResourceObtain (MA_RES,Option,Timeout))==SUCCESSFUL)
701     {
702     /* Search the MCMD into timetag list */
703     mcmdFoundFlag =FALSE;
704     for (i=0, pt =MA_HeaderMcmd; i < MAX_MCMD_TIMETAG; i++,pt++)
705     {
706     if (Mcmd->PtrMCMD == pt->PtrMCMD)
707     {
708     /* Delete the specify MCMD into Timetag queue */
709     pt->Type =NULL_MCMD;
710     pt->TimeTag =0;
711     pt->PtrMCMD =NULL;
712     pt->Length =0;
713     mcmdFoundFlag =TRUE;
714     break; /* MCMD found, exit from the loop */
715     }
716     }
717     /* Check if deleted MCMD was the Header MCMD */
718     if(mcmdFoundFlag && MA_HeaderMcmd->Type==NULL_MCMD)
719     {
720     /* Search the more recent MCMD to execute, */
721     /* and put it in the header position */
722     MA_ifUpdateMcmdHeader(MA_HeaderMcmd,Obt);
723     }
724     if(mcmdFoundFlag)
725     {
726     /* MCMD found */
727     statusOper =SUCCESSFUL;
728     /* Decrements the MCMD timetag counter */
729     MA_TimetagCounter--;
730     /* MCMD timetag buffer not full */
731     MA_TimetagBufFullFlag =FALSE;
732     }
733     else
734     {
735     statusOper =HA_E10_MCMD_ERR;
736     }
737    
738     /* Release MCMDArea resource */
739     status =OS_piResourceRelease (MA_RES);
740     }
741     else
742     {
743     if (status==UNSATISFIED || status==INVALID_ID)
744     {
745     /*@LOG Semaphore error LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_SEMAPHORE_ERR,status); */
746     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
747     status =HA_E10_SEMAPHORE_ERR;
748     }
749     }
750     /* If resource is correctly obtaneid return operation status */
751     if(status == SUCCESSFUL)
752     {
753     status =statusOper;
754     }
755     return (status);
756    
757     }
758    
759    
760    
761     /*****************************************************************************/
762     /* @Function: MA_opDelAllMCMDtimetag */
763     /* @Purpose : */
764     /* Provided Interface to delete all or a specific MCMD in the list of the */
765     /* MCMD with timetag. DelAllMcmdFlag parameter establishes if must be */
766     /* deleted all the MCDM of the list or only the MCMD that has the same */
767     /* timetag value of the function parameter Timetag. In this case if MCMD */
768     /* deleted was in the header position is called the function to update the */
769     /* header position with the most recent MCMD. */
770     /* */
771     /* @@ */
772     /* DelAllMcmdFlag IN Flag to indicate delete all or a MCMD */
773     /* Timetag IN Timetag value */
774     /* Option IN Flag which defines if await or no the */
775     /* resource availability (WAIT, NO_WAIT) */
776     /* Timeout IN Timeout value for WAIT option */
777     /* status_code OUT Return code */
778     /* @@ */
779     /*****************************************************************************/
780    
781     status_code MA_opDelAllMCMDtimetag (unsigned int DelAllMcmdFlag,
782     unsigned int Timetag,
783     unsigned int Option,
784     unsigned int Timeout)
785     {
786     status_code status;
787     status_code statusOper;
788     MA_HEADER_MCMD* pt;
789     unsigned int mcdmDeleteFlag;
790     TI_TIME obt;
791     unsigned short i;
792    
793     if ((status =OS_piResourceObtain (MA_RES,Option,Timeout))==SUCCESSFUL)
794     {
795     statusOper =SUCCESSFUL;
796     mcdmDeleteFlag =FALSE;
797     if (DelAllMcmdFlag)
798     {
799     /* Search all timetag MCMDs and delete them */
800     for (i=0, pt =MA_HeaderMcmd; i < MAX_MCMD_TIMETAG; i++,pt++)
801     {
802     if (pt->Type != NULL_MCMD)
803     {
804     /* Release the buffer partition */
805     statusOper =OS_piPartReturnBuffer(MA_PART_TT,pt->PtrMCMD);
806     if (statusOper != SUCCESSFUL)
807     {
808     /*@LOG Error during MCMD buffer ereasing - LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_PARTITION_ERR,statusOper); */
809     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,statusOper);
810     statusOper =HA_E10_PARTITION_ERR;
811     break;
812     }
813     pt->Type =NULL_MCMD;
814     pt->PtrMCMD =NULL;
815     pt->TimeTag =0;
816     pt->Length =0;
817     MA_TimetagCounter--;
818     mcdmDeleteFlag =TRUE;
819     }
820     }
821     }
822     else
823     {
824     /* Search the timetag MCMD and delete it */
825     mcdmDeleteFlag =FALSE;
826     #warning do we want OBT in s or in ms ? if ms, russian must be warned ? TM was in s
827     TI_piGetTimeInfo_s(&obt);
828     /* Check if timetag to delete is out the OBT window (6 timetag ticks) */
829     if (abs(obt - Timetag) > TT_WINDOW_REQUIREMENT)
830     {
831     for (i=0,pt=MA_HeaderMcmd;(!mcdmDeleteFlag)&&(i<MAX_MCMD_TIMETAG);i++,pt++)
832     {
833     /* Check if timetag is found */
834     if (pt->TimeTag == Timetag)
835     {
836     /* MCMD found */
837     /* Release the buffer partition */
838     statusOper =OS_piPartReturnBuffer(MA_PART_TT,pt->PtrMCMD);
839     if (statusOper != SUCCESSFUL)
840     {
841     /*@LOG Error during MCMD buffer ereasing LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_PARTITION_ERR,statusOper); */
842     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,statusOper);
843     statusOper =HA_E10_PARTITION_ERR;
844     }
845     pt->Type =NULL_MCMD;
846     pt->PtrMCMD =NULL;
847     pt->TimeTag =0;
848     pt->Length =0;
849     MA_TimetagCounter--;
850     mcdmDeleteFlag =TRUE;
851     }
852     }
853     }
854     if (!mcdmDeleteFlag)
855     {
856     /* MCMD not found, timetag not correct. */
857     statusOper =HA_E10_MCMD_ERR;
858     }
859     else
860     {
861     /* Check if MCMD in header position has been deleted */
862     if(mcdmDeleteFlag && MA_HeaderMcmd->Type==NULL_MCMD)
863     {
864     /* Search the more recent MCMD to execute, */
865     /* and put it in the header position */
866     MA_ifUpdateMcmdHeader(MA_HeaderMcmd,obt);
867     }
868     }
869     }
870     if (mcdmDeleteFlag)
871     {
872     /* MCMD Timetag buffer not full */
873     MA_TimetagBufFullFlag =FALSE;
874     }
875    
876     /* Release MCMDArea resource */
877     status =OS_piResourceRelease (MA_RES);
878     }
879     else
880     {
881     if (status==UNSATISFIED || status==INVALID_ID)
882     {
883     /*@LOG Semaphore error LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_SEMAPHORE_ERR,status); */
884     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
885     status =HA_E10_SEMAPHORE_ERR;
886     }
887     }
888     /* If resource is correctly obtaneid return operation status */
889     if(status == SUCCESSFUL)
890     {
891     status =statusOper;
892     }
893     return (status);
894    
895     }
896    
897    
898    
899     /*****************************************************************************/
900     /* @Function: MA_opGetTlmTimetagRTE */
901     /* @Purpose : */
902     /* The function returns the MCMD identifier and timetag in the RTE */
903     /* telemetry format. The maximum number of returned MCMD is defined by the */
904     /* constant MAX_TLM_MCMD_TIMETAG and is the first met in the list. */
905     /* */
906     /* @@ */
907     /* @Parameter Name @Mode @Description */
908     /* McmdBuffer OUT Buffer where MCMD are stored */
909     /* status_code OUT Return code */
910     /* @@ */
911     /*****************************************************************************/
912    
913     status_code MA_opGetTlmTimetagRTE (MA_TLM_TIMETAG_RTE* McmdBuffer)
914     {
915     MA_HEADER_MCMD* pH;
916     MA_TLM_MCMD* pB;
917     unsigned short i;
918     unsigned int tt;
919    
920     /* Initialize buffer area */
921     for (i=0, pB =&McmdBuffer->Mcmd[0]; i<MAX_TLM_MCMD_TIMETAG; i++,pB++)
922     {
923     pB->Id =0;
924     pB->TimetagMsw =0;
925     pB->TimetagLsw =0;
926     }
927    
928     /* Copy in Telemetry buffer area the MCMDs */
929     for (i=0,pH =MA_HeaderMcmd,pB =&McmdBuffer->Mcmd[0],tt=0;
930     (tt<MA_TimetagCounter)&&(i<MAX_TLM_MCMD_TIMETAG); i++,pH++,pB++)
931     {
932     /* Check if valid MCMD */
933     if(pH->Type)
934     {
935     /* Put MCMD ID and timetag in telemetry area */
936     pB->Id =(unsigned short)(MA_McmdId[pH->Type]);
937     pB->TimetagMsw =(unsigned short)(pH->TimeTag>>16);
938     pB->TimetagLsw =(unsigned short)(pH->TimeTag&0xffff);
939     tt++;
940     }
941     }
942    
943     return (SUCCESSFUL);
944     }
945    
946    
947    
948     /*****************************************************************************/
949     /* @Function: MA_opGetMcmdTimetagQueueFull */
950     /* @Purpose : */
951     /* The function returns the timetag MCMD queue full flag. */
952     /* */
953     /* @@ */
954     /* @Parameter Name @Mode @Description */
955     /* QueueFullFlag OUT Variable where flag is stored */
956     /* status_code OUT Return code */
957     /* @@ */
958     /*****************************************************************************/
959    
960     status_code MA_opGetMcmdTimetagQueueFull (unsigned int* QueueFullFlag)
961     {
962    
963     *QueueFullFlag =MA_TimetagBufFullFlag;
964     return (SUCCESSFUL);
965    
966     }
967    
968    
969    
970     /*****************************************************************************/
971     /* @Function: MA_opGetBufferMCMD */
972     /* @Purpose : */
973     /* The function returns a MCMD buffer from partition resource. */
974     /* In the TimetagFlag parameter is specified if the buffer to obtain */
975     /* belongs to the partition of the immediate MCMD or with timetag */
976     /* */
977     /* @@ */
978     /* @Parameter Name @Mode @Description */
979     /* TimetagFlag IN Flag to indicate which partition use */
980     /* Option IN Flag which defines if await or no the */
981     /* resource availability (WAIT, NO_WAIT) */
982     /* Timeout IN Timeout value for WAIT option */
983     /* BufMCMD OUT Pointer to partition buffer */
984     /* status_code OUT Return code */
985     /* @@ */
986     /*****************************************************************************/
987    
988     status_code MA_opGetBufferMCMD (void** BufMCMD,
989     unsigned int TimeTagFalg)
990     {
991     status_code status;
992     status_code statusOper;
993    
994     if (((status = MA_opLock1553())==SUCCESSFUL))
995     {
996     /* Check if immediate or timetag MCMD */
997     if (TimeTagFalg == IMMEDIATE_MCMD)
998     {
999     /* Get the Immadiate MCMDs buffer */
1000     statusOper =OS_piPartGetBuffer(MA_PART_IM,BufMCMD);
1001     if (statusOper != SUCCESSFUL)
1002     {
1003     /*@LOG Partition not obtained LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_PARTITION_ERR,statusOper); */
1004     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,statusOper);
1005     statusOper =HA_E10_PARTITION_ERR;
1006     }
1007     }
1008     else if (TimeTagFalg == TIMETAG_MCMD)
1009     {
1010     /* Get the Timetag MCMD buffer */
1011     statusOper =OS_piPartGetBuffer(MA_PART_TT,BufMCMD);
1012     if (statusOper != SUCCESSFUL)
1013     {
1014     /*@LOG Partition not obtained LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_PARTITION_ERR,statusOper); */
1015     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,statusOper);
1016     statusOper =HA_E10_PARTITION_ERR;
1017     }
1018     }
1019     else
1020     {
1021     statusOper =HA_E10_PARTITION_ERR;
1022     }
1023    
1024     /* Release MCMDArea resource */
1025     MA_opRelease1553();
1026     }
1027     else
1028     {
1029     if (status==UNSATISFIED || status==INVALID_ID)
1030     {
1031     /*@LOG Semaphore error LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_SEMAPHORE_ERR,status); */
1032     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1033     status =HA_E10_SEMAPHORE_ERR;
1034     }
1035     }
1036     /* If resource is correctly obtaneid return operation status */
1037     if(status == SUCCESSFUL)
1038     {
1039     status =statusOper;
1040     }
1041     return (status);
1042    
1043    
1044    
1045     }
1046    
1047    
1048    
1049     /*****************************************************************************/
1050     /* @Function: MA_opDelBufferMCMD */
1051     /* @Purpose : */
1052     /* The function releases a MCMD buffer from partition resource. */
1053     /* In the TimetagFlag parameter is specified if the buffer to release */
1054     /* belongs to the partition of the immediate MCMD or with timetag. */
1055     /* */
1056     /* @@ */
1057     /* @Parameter Name @Mode @Description */
1058     /* BufMCMD IN Pointer to the buffer that must be released */
1059     /* TimetagFlag IN Flag to indicate which partition use */
1060     /* Option IN Flag which defines if await or no the */
1061     /* resource availability (WAIT, NO_WAIT) */
1062     /* Timeout IN Timeout value for WAIT option */
1063     /* status_code OUT Return code */
1064     /* @@ */
1065     /*****************************************************************************/
1066    
1067     status_code MA_opDelBufferMCMD (void* BufMCMD,
1068     unsigned int TimetagFalg)
1069     {
1070     status_code status;
1071     status_code statusOper;
1072    
1073    
1074     if (((status = MA_opLock1553())==SUCCESSFUL))
1075     {
1076     /* Checks if immediate or timetag MCMD */
1077     if (TimetagFalg == IMMEDIATE_MCMD)
1078     {
1079     /* Deletes the Immadiate MCMDs buffer */
1080     statusOper =OS_piPartReturnBuffer(MA_PART_IM,BufMCMD);
1081     if (statusOper != SUCCESSFUL)
1082     {
1083     /*@LOG Partition not released LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_PARTITION_ERR,statusOper); */
1084     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,statusOper);
1085     statusOper =HA_E10_PARTITION_ERR;
1086     }
1087     }
1088     else if (TimetagFalg == TIMETAG_MCMD)
1089     {
1090     /* Delete the Timetag MCMDs buffer */
1091     statusOper =OS_piPartReturnBuffer(MA_PART_TT,BufMCMD);
1092     if(statusOper != SUCCESSFUL)
1093     {
1094    
1095     /*@LOG Partition not released LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_PARTITION_ERR,statusOper); */
1096     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,statusOper);
1097     statusOper =HA_E10_PARTITION_ERR;
1098     }
1099     }
1100     else
1101     {
1102     statusOper =HA_E10_PARTITION_ERR;
1103     }
1104    
1105     /* Release MCMDArea resource */
1106     MA_opRelease1553();
1107     }
1108     else
1109     {
1110     /*@LOG Semaphore error LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_MA,HA_E10_SEMAPHORE_ERR,status); */
1111     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1112     status =HA_E10_SEMAPHORE_ERR;
1113     }
1114     /* If resource is correctly obtaneid return operation status */
1115     if(status == SUCCESSFUL)
1116     {
1117     status =statusOper;
1118     }
1119     return (status);
1120    
1121     }
1122    
1123     /*****************************************************************************/
1124     /* @Function: MA_opLock1553 */
1125     /* @Purpose : */
1126     /* This function lock the 1553 Buffer shared resource */
1127     /* */
1128     /* @@ */
1129     /* @Parameter Name @Mode @Description */
1130     /* SM_EXITCODE OUT Lock HBUS request result */
1131     /* @@ */
1132     /*****************************************************************************/
1133     status_code MA_opLock1553()
1134     {
1135     status_code status = SUCCESSFUL;
1136     unsigned int intLevel;
1137    
1138     OS_piInterDisable(&intLevel);
1139     if (MA_1553IsLocked)
1140     status = UNSATISFIED;
1141     else
1142     MA_1553IsLocked = TRUE;
1143     OS_piInterEnable(intLevel);
1144     return status;
1145     }
1146    
1147     /*****************************************************************************/
1148     /* @Function: MA_opRelease1553 */
1149     /* @Purpose : */
1150     /* This function release the 1553 Buffer shared resource */
1151     /* */
1152     /* @@ */
1153     /* @Parameter Name @Mode @Description */
1154     /* @@ */
1155     /*****************************************************************************/
1156     void MA_opRelease1553()
1157     {
1158     unsigned int intLevel;
1159    
1160     OS_piInterDisable(&intLevel);
1161     MA_1553IsLocked = FALSE;
1162     OS_piInterEnable(intLevel);
1163     }
1164    

  ViewVC Help
Powered by ViewVC 1.1.23