/[PAMELA software]/quicklook/dataToXML/Data/compilationInfo/src/BasicSW/TimingInfo/TI_TimingInfo_op.c
ViewVC logotype

Annotation of /quicklook/dataToXML/Data/compilationInfo/src/BasicSW/TimingInfo/TI_TimingInfo_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:20 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 : BasicSW
5     /* C.I. No. :
6     /* $Revision: 1.26 $
7     /* $Date: 2005/02/21 08:58:28 $
8     /* Belonging to :
9     /* :
10     /* $RCSfile: TI_TimingInfo_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: TI_TimingInfo_op.c,v $
25     /* Revision 1.26 2005/02/21 08:58:28 sebastiani
26     /* all log comments completed
27     /*
28     /* Revision 1.25 2005/02/19 10:16:47 sebastiani
29     /* disable GPT
30     /*
31     /* Revision 1.24 2005/01/26 18:46:26 sebastiani
32     /* *** empty log message ***
33     /*
34     /* Revision 1.23 2004/09/17 15:01:00 faber
35     /* LU_INFN_LOG flags fixing
36     /*
37     /* Revision 1.22 2004/09/08 10:39:12 faber
38     /* *** empty log message ***
39     /*
40     /* Revision 1.21 2004/08/26 16:54:01 sebastiani
41     /* fix some bug
42     /*
43     /* Revision 1.20 2004/07/27 17:30:17 faber
44     /* OBT can be now in second or milliseconds, depending of the situazion.
45     /* OBT_s is used for FM compatibility, OBT_ms basically for MM infos
46     /*
47     /* Revision 1.19 2004/07/08 16:23:35 sebastiani
48     /* *** empty log message ***
49     /*
50     /* Revision 1.18 2004/05/27 17:50:38 sebastiani
51     /* *** empty log message ***
52     /*
53     /* Revision 1.17 2004/05/07 08:01:05 faber
54     /* *** empty log message ***
55     /*
56     /* Revision 1.16 2004/05/06 15:50:57 faber
57     /* GetTimeSyncInfo introduced
58     /*
59     /* Revision 1.15 2004/04/29 07:11:43 faber
60     /* pached GetOrbitOffset
61     /*
62     /* Revision 1.14 2003/12/04 17:16:08 sebastiani
63     /* GS debug/tests, and other
64     /*
65     /* Revision 1.13 2003/12/01 09:27:16 sebastiani
66     /* CCA info for Gas Module and first implementation of IPM infos.
67     /*
68     /* Revision 1.12 2003/11/18 17:13:15 sebastiani
69     /* GPT enabled to print a "\n" every 60s directly on UART, only to check if the CPU is
70     /* alive
71     /*
72     /* Revision 1.11 2003/11/04 11:36:35 alfarano
73     /* deleted task in TM_TMTC manager and added to HK_Manager, added KHB buffer read task
74     /*
75     /* Revision 1.10 2003/10/30 16:10:48 faber
76     /* GPT disabled. the callback function is a null function
77     /*
78     /* Revision 1.9 2003/10/21 16:09:12 alfarano
79     /* LU_LOG_INFN replacement for all remaining original log functions
80     /*
81     /* Revision 1.8 2003/09/15 09:20:23 faber
82     /* GTP function modification for simulator mode (TimedFunction)
83     /*
84     /* Revision 1.7 2003/09/12 10:52:56 faber
85     /* introduced PTH_VAR_TC_CYC_RATE
86     /*
87     /* Revision 1.6 2003/09/10 16:15:51 faber
88     /* PRH_EXTERN_VAR(XX_LOGMASK) removed (not needed any more)
89     /*
90     /* Revision 1.5 2003/09/10 11:55:07 faber
91     /* LU_MASK introduced. Log mask for module is now an unique array (PRH_ARR_LOG_MASK) indexed by __FILEID__
92     /*
93     /* Revision 1.4 2003/08/29 11:13:30 faber
94     /* TI_StartTimerMoscowTime introduced
95     /*
96     /* Revision 1.3 2003/08/28 10:11:44 faber
97     /* New timer management. GPT is now possible to be disabled. (DisableGPT,EnableGPT)
98     /* GetTimeInfo now use the RTEMS clock instead reading the TI_SystemTime.
99     /* GetTimeInfo now returns seconds, instead of milliseconds.
100     /*
101     /* Revision 1.2 2003/08/22 07:47:35 sebastiani
102     /* Timer behavior change: TYME_SYNC / OBT_ORBIT / OBT introduced.
103     /* TymeSync MCMD now doesn't affect OBT (TI_SystemTime) any more
104     /*
105     /* Revision 1.1.1.1 2003/08/04 09:40:21 sebastiani
106     /* Imported sources laben rel. 19.06.2003 integrated with pam2
107     /*
108     /* Revision 1.2 2003/06/18 16:53:19 sebastiani
109     /* Pam/Run Manager development update. ExpSeq sequence is receiven from the RunManager (simulator mode)
110     /*
111     /* Revision 1.1.1.1 2003/05/27 08:13:24 wizard
112     /* Import of the Official Laben CD Release Software as the pamela-EM_delivery_20030521_1454.tar.bz2
113     /*
114     /* Revision 1.9 2003/01/30 09:43:49 aurora
115     /* introduced ifdef for EM and FM
116     /*
117     /* Revision 1.8 2002/11/14 09:46:42 zulia
118     /* removed unsed status variable
119     /*
120     /* Revision 1.7 2002/09/11 15:34:17 zulia
121     /* comment
122     /*
123     /* Revision 1.6 2002/05/09 08:16:34 zulia
124     /* * acceptance release
125     /*
126     /*
127     /*****************************************************************************/
128    
129    
130     /*============================= Include File ================================*/
131     #include <src/INFN/LU_SourceFileID_INFN.h>
132     #define __FILEID__ _TI_TimingInfo_op__c
133     #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
134     #include <src/INFN/PRH_ParamHandler_INFN.h>
135     #include <src/INFN/LU_LogUtility_INFN.h>
136    
137     LU_DECL_MASK();
138    
139    
140     #include <src/INFN/OS_rtems_INFN_p.h>
141    
142    
143     #include <src/BasicSW/TimingInfo/TI_TimingInfo_op.h>
144    
145     //##FS 17.6.03
146     #ifdef SIMULATOR
147     #include <src/INFN/PM_PamManager_INFN.h>
148     #endif
149     //##FS END 17.6.03
150    
151     /*****************************************************************************/
152     /*============================= Object variables ============================*/
153    
154    
155     /*****************************************************************************/
156     /* @Variable: TI_ObtTimeSync */
157     /* @Purpose : */
158     /* TI_TIME type */
159     /* is the OBT in the moment in which the Time Sync MCMD arrived. */
160     /* if zero, means not set. */
161     /* in milliseconds */
162     /* @@ */
163     /*****************************************************************************/
164     static TI_TIME TI_ObtTimeSync_s;
165     static TI_TIME TI_ObtTimeSync_ms;
166    
167     volatile static BOOL TimeSyncExtInt_enabled = FALSE;
168    
169     /*****************************************************************************/
170     /* @Variable: TI_TimeSync */
171     /* @Purpose : */
172     /* TI_TIME type */
173     /* is the "Moscow Time" arrived by the MCMD */
174     /* if zero, means not set. */
175     /* in seconds */
176     /* @@ */
177     /*****************************************************************************/
178     static TI_TIME TI_TimeSync_s;
179    
180    
181    
182     /*****************************************************************************/
183     /* @Variable: TI_ObtOrbit */
184     /* @Purpose : */
185     /* TI_TIME type */
186     /* is the OBT in the moment of the Ascending Node (CALIBRATE MCMD) */
187     /* To know the tim of the (last) ascending node, calculate: */
188     /* OBT - ObtOrbit */
189     /* zero means not set. */
190     /* in seconds */
191     /* @@ */
192     /*****************************************************************************/
193     static TI_TIME TI_ObtOrbit_s;
194    
195    
196    
197     /*****************************************************************************/
198     /* @Variable: TI_TimeSyncCounter */
199     /* @Purpose : */
200     /* unsigned int type */
201     /* store the number times the TimeSync MCMD was received. */
202     /* if zero means that the Time Sync */
203     /* MCMD has never arrived (in this case time-variables should be TI_UNSET).*/
204     /* in seconds */
205     /* @@ */
206     /*****************************************************************************/
207     static unsigned int TI_TimeSyncCounter;
208    
209     /*===========================================================================*/
210    
211    
212    
213     /* External Parameters */
214    
215     /*****************************************************************************/
216    
217     /*===== T i m i n g I n f o O P E R A T I O N A L F U N C T I O N S =====*/
218    
219     /*****************************************************************************/
220     /* @Function: TI_opInitTimingInfo */
221     /* @Purpose : */
222     /* The function performs the following initialization: */
223     /* - Establishes an ISR for ERC 32 General Purpos Timer (GPT). */
224     /* - Initializes the GPT Scaler and Couter. */
225     /* - Initializes global object variables. */
226     /* */
227     /* @@ */
228     /* @Parameter Name @Mode @Description */
229     /* @@ */
230     /*****************************************************************************/
231    
232     status_code TI_opInitTimingInfo (void)
233     {
234     status_code status;
235     void* OldHandler;
236    
237     /* the rtems epoch is 01.01.1988 00:00 */
238     static rtems_time_of_day epoch = {1988,1,1,0,0,0,0};
239    
240     /*===========================================================================*/
241     /*================ GENERAL PURPOSE TIMER (ERC32) ========================*/
242     /*
243     status =OS_piIsrCatch ( TI_opNull,
244     ERC32_INTERRUPT_GENERAL_PURPOSE_TIMER+0x10,
245     &OldHandler);
246     */
247     #if TI_GPT_ENABLED
248     status =OS_piIsrCatch ( TI_ihTimingInfo,
249     ERC32_INTERRUPT_GENERAL_PURPOSE_TIMER+0x10,
250     &OldHandler);
251    
252     if (status==SUCCESSFUL)
253     {
254     /*==== INIT OF THE GENERAL PURPOSE TIMER (ERC32) ====================*/
255     ERC32_MEC.General_Purpose_Timer_Counter =TI_GPT_COUNTER_VALUE*1000*5;
256     ERC32_MEC.General_Purpose_Timer_Scalar =TI_GPT_SCALER_VALUE;
257     ERC32_MEC_Set_General_Purpose_Timer_Control(
258     ERC32_MEC_TIMER_COUNTER_RELOAD_AT_ZERO |
259     ERC32_MEC_TIMER_COUNTER_LOAD_COUNTER |
260     ERC32_MEC_TIMER_COUNTER_ENABLE_COUNTING |
261     ERC32_MEC_TIMER_COUNTER_LOAD_SCALER);
262     TI_opEnableGPT();
263     }
264     else
265     {
266     /* ISR not successfully established */
267     // LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_TI,HA_E10_INT_CATCH_ERR,status);
268     /*@LOG Isr not successfully enstablisched - status */
269     LU_INFN_LOG(LU_FATAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
270     }
271     #else
272     TI_opDisableGPT();
273     #endif
274     /*===========================================================================*/
275     /*=================== SYSTEM TIME INITIALIZATION ========================*/
276    
277    
278     TI_ObtTimeSync_s =TI_UNSET;
279     TI_ObtTimeSync_ms =TI_UNSET;
280     TI_TimeSync_s =TI_UNSET;
281     TI_ObtOrbit_s =TI_UNSET;
282     TI_TimeSyncCounter = 0;
283    
284     /* init the RTEMS system clock to the RTEMS epoch: */
285     status = rtems_clock_set(&epoch);
286     if(status)
287     /*@LOG invalid time of day - statys */
288     LU_INFN_LOG(LU_FATAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
289     return (status);
290     }
291    
292    
293    
294     /*****************************************************************************/
295     /* @Function: TI_OBT */
296     /* @Purpose : */
297     /* Get the OBT using the rtems clock. The function returns the number of */
298     /* seconds since bootstrap (pamela initialization) */
299     /*****************************************************************************/
300    
301     static TI_TIME TI_OBT_s() {
302     rtems_interval sse;
303     rtems_clock_get(RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH,&sse);
304     /* TI_TIME is unsigned long (uint32). rtems_interval is unsigned32 too. */
305     return sse;
306     }
307    
308     static TI_TIME TI_OBT_ms() {
309     rtems_clock_time_value t;
310     rtems_clock_get(RTEMS_CLOCK_GET_TIME_VALUE,&t);
311     return (t.seconds*1000)+(t.microseconds/1000);
312     }
313    
314     void TI_opDisableGPT() {
315     ERC32_Mask_interrupt( ERC32_INTERRUPT_GENERAL_PURPOSE_TIMER );
316     }
317    
318    
319     void TI_opEnableGPT() {
320     ERC32_Unmask_interrupt( ERC32_INTERRUPT_GENERAL_PURPOSE_TIMER );
321     }
322    
323    
324     /*****************************************************************************/
325     /* @Function: TI_opTimingOperation */
326     /* @Purpose : */
327     /* The function implements the OBT interrupt handler. The interrupt rate */
328     /* is every 1 ms. The function provides for the following actions: */
329     /* - Increment the variable TI_SystemTime (OBT). */
330     /* - Decrement the Monitoring counter, and whenever this counter goes to */
331     /* zero (every second) send a message to Monitoring to start parameters */
332     /* check. */
333     /* - Send message to TTMANAGER every 128 ms for MCMD timetag. */
334     /* check. */
335     /* */
336     /* @@ */
337     /* @Parameter Name @Mode @Description */
338     /* @@ */
339     /*****************************************************************************/
340    
341     void TI_opNull(void) {
342     return;
343     }
344    
345     void TI_opTimingOperation (void)
346     {
347     // MsgTsk SndMsg;
348     static unsigned int t=0;
349     t++;
350     console_outbyte_polled(0,'-');
351     console_outbyte_polled(0,'0'+t%10);
352     console_outbyte_polled(0,'\n');
353     LU_UART_CR('-');
354     #ifdef SIMULATOR
355     PM_SendTestCommand(105,0,0,0,0);
356     #endif
357     /*
358     if(TI_SystemTime == MAX_SYSTEM_TIME) {
359     TI_SystemTimeRestart++;
360     TI_SystemTime=1;
361     LU_INFN_LOG(LU_WARNING,LU_MASK(__FILEID__),__FILEID__,__LINE__,TI_SystemTimeRestart );
362     }
363     */
364     }
365    
366    
367     /*****************************************************************************/
368     /* @Function: TI_opGetTimeInfo */
369     /* @Purpose : */
370     /* The function returns the On Board Time (OBT) information. */
371     /* */
372     /* @@ */
373     /* @Parameter Name @Mode @Description */
374     /* IN */
375     /* status_code OUT Return code */
376     /* @@ */
377     /*****************************************************************************/
378    
379    
380     void TI_opGetTimeInfo_s (TI_TIME* Time)
381     {
382     *Time = TI_OBT_s();
383     }
384    
385     void TI_opGetTimeInfo_ms (TI_TIME* Time)
386     {
387     *Time = TI_OBT_ms();
388     }
389    
390    
391     status_code TI_opResourceObtain() {
392     status_code s;
393     if(rtems_interrupt_is_in_progress())
394     return TI_SUCCESSFUL;
395     s=OS_piResourceObtain(TI_RES,WAIT,NO_TIMEOUT);
396     if(s != SUCCESSFUL) {
397     /*@LOG TI_opResourceObtain(): error - status */
398     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
399     s=TI_RESERROR;
400     }else
401     s=TI_SUCCESSFUL;
402     return s;
403     }
404    
405     status_code TI_opResourceRelease() {
406     status_code s;
407     if(rtems_interrupt_is_in_progress())
408     return TI_SUCCESSFUL;
409     s=OS_piResourceRelease(TI_RES);
410     if(s != SUCCESSFUL) {
411     /*@LOG TI_opResourceRelease(): error - status */
412     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
413     s=TI_RESERROR;
414     }else
415     s=TI_SUCCESSFUL;
416     return s;
417     }
418    
419    
420    
421     void TI_opSetObtTimeSync(TI_TIME ms,BOOL enable_next) {
422     UINT32 intLevel;
423     OS_PROTECTED_INT(intLevel,
424     do {
425     if(TimeSyncExtInt_enabled) {
426     TI_ObtTimeSync_ms = ms;
427     TI_ObtTimeSync_s = ms / 1000;
428     TimeSyncExtInt_enabled = enable_next;
429     }
430     } while(0)
431     );
432     }
433    
434    
435     void TI_opTimeSyncExtInterrupt()
436     {
437     volatile BOOL doit;
438     UINT32 intLevel;
439     OS_PROTECTED_INT(intLevel,doit = TimeSyncExtInt_enabled);
440     if(doit)
441     TI_opSetObtTimeSync(TI_OBT_ms(),FALSE);
442     }
443    
444     /*****************************************************************************/
445     /* @Function: TI_opUpdateTimeInfo */
446     /* @Purpose : */
447     /* The function updates the Time Information when a TimeSync MCMD arrive. */
448     /* */
449     /* @@ */
450     /* @Parameter Name @Mode @Description */
451     /* Time IN The "Moscow Time" in seconds */
452     /* @@ */
453     /*****************************************************************************/
454     void TI_opUpdateTimeInfo_s (TI_TIME Time)
455     {
456     UINT32 intLevel;
457     OS_PROTECTED_INT(intLevel,TimeSyncExtInt_enabled = TRUE);
458    
459     if( (TI_opResourceObtain()) == SUCCESSFUL) {
460     TI_TimeSyncCounter++;
461     TI_TimeSync_s = Time;
462     /* this is incorrect, but it will fix if the interrupt will not come: */
463     TI_opSetObtTimeSync(TI_OBT_ms(),TRUE);
464     OS_PROTECTED_INT(intLevel,TimeSyncExtInt_enabled = TRUE);
465     }
466     TI_opResourceRelease();
467    
468    
469     }
470    
471    
472    
473     /*****************************************************************************/
474     /* @Function: TI_GetTimeSyncInfo */
475     /* @Purpose : */
476     /* The function return the time sync infos stored wten the time sync arrived*/
477     /* if info is not available, put 0 into both output params and return error */
478     /* @@ */
479     /* @Parameter Name @Mode @Description */
480     /* OBT OUT OBT at the moment of the TSYNC */
481     /* TimeSync OUT MoscowTime arrived */
482     /* @@ */
483     /*****************************************************************************/
484    
485    
486     status_code TI_opGetTimeSyncInfo_s(TI_TIME *obt_ts,TI_TIME *ts) {
487     status_code status;
488     volatile TI_TIME TI_ObtTimeSync_s_local;
489     UINT32 intLevel;
490     if( (status=TI_opResourceObtain()) == SUCCESSFUL) {
491     if(TI_TimeSyncCounter > 0) {
492     OS_PROTECTED_INT(intLevel,TI_ObtTimeSync_s_local = TI_ObtTimeSync_s);
493     *obt_ts = TI_ObtTimeSync_s_local;
494     *ts = TI_TimeSync_s;
495     status=TI_SUCCESSFUL;
496     } else {
497     status=TI_NOTIMESYNC;
498     *obt_ts = 0;
499     *ts = 0;
500     }
501     }
502     if(TI_opResourceRelease() == TI_RESERROR)
503     status = TI_RESERROR;
504     return status;
505     }
506    
507     /*****************************************************************************/
508     /* @Function: TI_GetTimeSyncOffset */
509     /* @Purpose : */
510     /* The function return the TIME_SYNC_OFFSET that is TI_OBT - */
511     /* TI_ObtTimeSync. */
512     /* @@ */
513     /* @Parameter Name @Mode @Description */
514     /* Time IN The "Moscow Time" in seconds */
515     /* @@ */
516     /*****************************************************************************/
517    
518     status_code TI_opGetTimeSyncOffset_s(TI_TIME *t) {
519     status_code status;
520     volatile TI_TIME TI_ObtTimeSync_s_local;
521     UINT32 intLevel;
522     if( (status=TI_opResourceObtain()) == SUCCESSFUL) {
523     if(TI_TimeSyncCounter > 0) {
524     OS_PROTECTED_INT(intLevel,TI_ObtTimeSync_s_local = TI_ObtTimeSync_s);
525     *t = TI_OBT_s() - TI_ObtTimeSync_s_local;
526     status=TI_SUCCESSFUL;
527     } else
528     status=TI_NOTIMESYNC;
529     }
530     if(TI_opResourceRelease() == TI_RESERROR)
531     status = TI_RESERROR;
532     return status;
533     }
534    
535    
536     /*****************************************************************************/
537     /* @Function: TI_GetCurrentMoscowTime */
538     /* @Purpose : */
539     /* The current moscow time is the TimeSync plus the "time sync offset", */
540     /* that is TI_OBT - TI_ObtTimeSync */
541     /* @@ */
542     /* @Parameter Name @Mode @Description */
543     /* t OUT The "Moscow Time" in seconds */
544     /* @@ */
545     /*****************************************************************************/
546    
547     status_code TI_opGetCurrentMoscowTime_s(TI_TIME *t) {
548     status_code status;
549     volatile TI_TIME TI_ObtTimeSync_s_local;
550     UINT32 intLevel;
551     if( (status=TI_opResourceObtain()) == SUCCESSFUL) {
552     if(TI_TimeSyncCounter != 0) {
553     OS_PROTECTED_INT(intLevel,TI_ObtTimeSync_s_local = TI_ObtTimeSync_s);
554     *t = TI_TimeSync_s + (TI_OBT_s() - TI_ObtTimeSync_s_local);
555     status=TI_SUCCESSFUL;
556     } else {
557     *t = 0;
558     status=TI_NOTIMESYNC;
559     }
560     }
561     if(TI_opResourceRelease() == TI_RESERROR)
562     status = TI_RESERROR;
563     return status;
564     }
565    
566    
567     /*****************************************************************************/
568     /* @Function: TI_TimeSyncIsAvailable */
569     /* @Purpose : */
570     /* The information of the TimeSync is available if UpdateTimeInfo has called*/
571     /* at least one time, that means a TimeSync MCMD was coming. */
572     /* if TI_TimeSyncCounter == 0, then the information is not available. */
573     /* @@ */
574     /* @Parameter Name @Mode @Description */
575     /* t OUT The "Moscow Time" in seconds */
576     /* @@ */
577     /*****************************************************************************/
578    
579     status_code TI_opTimeSyncIsAvailable(BOOL* avail) {
580     status_code status;
581     if( (status=TI_opResourceObtain()) == SUCCESSFUL) {
582     *avail = (TI_TimeSyncCounter != 0);
583     }
584     if(TI_opResourceRelease() == TI_RESERROR)
585     status = TI_RESERROR;
586     return status;
587     }
588    
589    
590     /*****************************************************************************/
591     /* @Function: TI_SetObtOrbit */
592     /* @Purpose : */
593     /* The TI_ObtOrbit is defined to be the OBT (TI_OBT) in the moment */
594     /* of the ascending node. This function sets the TI_ObtOrbit properly and */
595     /* it sshould be called only when the */
596     /* ascending node MCMD (CALIBRATE) cames. */
597     /* @@ */
598     /* @Parameter Name @Mode @Description */
599     /* t OUT The "Moscow Time" in seconds */
600     /* @@ */
601     /*****************************************************************************/
602    
603     status_code TI_opSetObtOrbit_s() {
604     status_code status;
605     if( (status=TI_opResourceObtain()) == SUCCESSFUL) {
606     TI_ObtOrbit_s = TI_OBT_s();
607     }
608     if(TI_opResourceRelease() == TI_RESERROR)
609     status = TI_RESERROR;
610     return status;
611     }
612    
613     status_code TI_opGetObtOrbit_s(TI_TIME* t) {
614     status_code status;
615     if( (status=TI_opResourceObtain()) == SUCCESSFUL) {
616     if(TI_ObtOrbit_s != TI_UNSET) {
617     *t=TI_ObtOrbit_s;
618     status=TI_SUCCESSFUL;
619     }else
620     status=TI_NOORBIT;
621     }
622     if(TI_opResourceRelease() == TI_RESERROR)
623     status = TI_RESERROR;
624     return status;
625     }
626    
627     /*****************************************************************************/
628     /* @Function: TI_GetOrbitOffset */
629     /* @Purpose : */
630     /* The Orbit Offset is the time in seconds elapsed since the last ascendind */
631     /* node (CALIBRATE) MCMD */
632     /* that is TI_OBT-TI_ObtOrbit */
633     /* @@ */
634     /* @Parameter Name @Mode @Description */
635     /* @@ */
636     /*****************************************************************************/
637    
638     status_code TI_opGetOrbitOffset_s(TI_TIME *t) {
639     status_code status;
640     if( (status=TI_opResourceObtain()) == SUCCESSFUL) {
641     if(TI_ObtOrbit_s != TI_UNSET) {
642     *t = TI_OBT_s() - TI_ObtOrbit_s;
643     status=TI_SUCCESSFUL;
644     }else
645     status=TI_NOORBIT;
646     }
647     if(TI_opResourceRelease() == TI_RESERROR)
648     status = TI_RESERROR;
649     return status;
650     }
651    
652    
653     /*****************************************************************************/
654     /* @Function: TI_StartTimerMoscowTime */
655     /* @Purpose : */
656     /* This function is a wrapper of the OS_StartTimer_INFN function. */
657     /* but the time info is expressed in absolute MoscowTime. */
658     /* the function computes the remaining time before the event, */
659     /* if the time is elapled (belong into the past, the function return */
660     /* TI_ELAPSED */
661     /* if the OS_StartTimer returns an error, its logged and return */
662     /* TI_TIMERERROR */
663     /* this function cannot be called into an ISR becasue the semaphore */
664     /* @@ */
665     /* @Parameter Name @Mode @Description */
666     /* t OUT The "Moscow Time" in seconds */
667     /* @@ */
668     /*****************************************************************************/
669     status_code TI_opStartTimer_INFN_MoscowTime_s(unsigned int Tim,TI_TIME Time,void* Routine,void* UserData) {
670     status_code status;
671     TI_TIME now,after;
672     status = TI_opGetCurrentMoscowTime_s(&now);
673     if(status == TI_SUCCESSFUL) {
674     if(now > Time) /* time is elapsed */
675     status = TI_ELAPSED;
676     else {
677     after = Time - now;
678     status = OS_piStartTimer_INFN (Tim,after,Routine,UserData);
679     if (status != SUCCESSFUL) {
680     /*@LOG StartTimer_INFN error - status */
681     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
682     status=TI_TIMERERROR;
683     }
684     }
685     }
686     return status;
687     }

  ViewVC Help
Powered by ViewVC 1.1.23