This is Unofficial EPICS BASE Doxygen Site
generalTimeSup.h File Reference
#include "epicsTime.h"
#include "epicsTimer.h"
#include "libComAPI.h"
+ Include dependency graph for generalTimeSup.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define LAST_RESORT_PRIORITY   999
 
#define generalTimeCurrentTpRegister   generalTimeRegisterCurrentProvider
 
#define generalTimeEventTpRegister   generalTimeRegisterEventProvider
 

Typedefs

typedef int(* TIMECURRENTFUN) (epicsTimeStamp *pDest)
 
typedef int(* TIMEEVENTFUN) (epicsTimeStamp *pDest, int event)
 

Functions

LIBCOM_API int generalTimeRegisterCurrentProvider (const char *name, int priority, TIMECURRENTFUN getTime)
 
LIBCOM_API int generalTimeRegisterEventProvider (const char *name, int priority, TIMEEVENTFUN getEvent)
 
LIBCOM_API int generalTimeAddIntCurrentProvider (const char *name, int priority, TIMECURRENTFUN getTime)
 
LIBCOM_API int generalTimeAddIntEventProvider (const char *name, int priority, TIMEEVENTFUN getEvent)
 
LIBCOM_API int generalTimeGetExceptPriority (epicsTimeStamp *pDest, int *pPrio, int ignorePrio)
 

Macro Definition Documentation

#define generalTimeCurrentTpRegister   generalTimeRegisterCurrentProvider

Definition at line 32 of file generalTimeSup.h.

#define generalTimeEventTpRegister   generalTimeRegisterEventProvider

Definition at line 33 of file generalTimeSup.h.

#define LAST_RESORT_PRIORITY   999

Definition at line 17 of file generalTimeSup.h.

Typedef Documentation

typedef int(* TIMECURRENTFUN) (epicsTimeStamp *pDest)

Definition at line 23 of file generalTimeSup.h.

typedef int(* TIMEEVENTFUN) (epicsTimeStamp *pDest, int event)

Definition at line 24 of file generalTimeSup.h.

Function Documentation

LIBCOM_API int generalTimeAddIntCurrentProvider ( const char *  name,
int  priority,
TIMECURRENTFUN  getTime 
)

Definition at line 487 of file epicsGeneralTime.c.

489 {
490  gtProvider *ptp = findProvider(&gtPvt.timeProviders, gtPvt.timeListLock,
491  name, priority);
492  if (ptp == NULL)
493  return S_time_noProvider;
494 
495  ptp->getInt.Time = getTime;
496 
497  IFDEBUG(1)
498  printf("Time provider '%s' is interrupt-callable\n", name);
499 
500  return epicsTimeOK;
501 }
#define printf
Definition: epicsStdio.h:41
#define IFDEBUG(n)
union gtProvider::@16 getInt
#define NULL
Definition: catime.c:38
#define epicsTimeOK
Success.
Definition: epicsTime.h:339
TIMECURRENTFUN Time
#define S_time_noProvider
No time provider.
Definition: epicsTime.h:341
LIBCOM_API int generalTimeAddIntEventProvider ( const char *  name,
int  priority,
TIMEEVENTFUN  getEvent 
)

Definition at line 444 of file epicsGeneralTime.c.

446 {
447  gtProvider *ptp = findProvider(&gtPvt.eventProviders, gtPvt.eventListLock,
448  name, priority);
449  if (ptp == NULL)
450  return S_time_noProvider;
451 
452  ptp->getInt.Event = getEvent;
453 
454  IFDEBUG(1)
455  printf("Event provider '%s' is interrupt-callable\n", name);
456 
457  return epicsTimeOK;
458 }
#define printf
Definition: epicsStdio.h:41
#define IFDEBUG(n)
union gtProvider::@16 getInt
#define NULL
Definition: catime.c:38
#define epicsTimeOK
Success.
Definition: epicsTime.h:339
TIMEEVENTFUN Event
#define S_time_noProvider
No time provider.
Definition: epicsTime.h:341
LIBCOM_API int generalTimeGetExceptPriority ( epicsTimeStamp pDest,
int *  pPrio,
int  ignorePrio 
)

Definition at line 105 of file epicsGeneralTime.c.

106 {
107  gtProvider *ptp;
109 
110  if(useOsdGetCurrent)
111  return osdTimeGetCurrent(pDest);
112 
114 
115  IFDEBUG(2)
116  printf("generalTimeGetExceptPriority(ignore=%d)\n", ignore);
117 
119  for (ptp = (gtProvider *)ellFirst(&gtPvt.timeProviders);
120  ptp; ptp = (gtProvider *)ellNext(&ptp->node)) {
121  if ((ignore > 0 && ptp->priority == ignore) ||
122  (ignore < 0 && ptp->priority != -ignore))
123  continue;
124 
125  status = ptp->get.Time(pDest);
126  if (status == epicsTimeOK) {
127  /* No ratchet, time from this routine may go backwards */
128  if (pPrio)
129  *pPrio = ptp->priority;
130  break;
131  }
132  else IFDEBUG(2)
133  printf("gTGExP provider '%s' returned error\n", ptp->name);
134  }
135  epicsMutexUnlock(gtPvt.timeListLock);
136 
137  IFDEBUG(2) {
138  if (ptp && status == epicsTimeOK) {
139  char buff[40];
140 
141  epicsTimeToStrftime(buff, sizeof(buff), tsfmt, pDest);
142  printf("gTGExP returning %s from provider '%s'\n",
143  buff, ptp->name);
144  }
145  else
146  printf("gTGExP returning error\n");
147  }
148 
149  return status;
150 }
epicsMutexId timeListLock
pvd::Status status
union gtProvider::@15 get
ELLLIST timeProviders
#define printf
Definition: epicsStdio.h:41
#define IFDEBUG(n)
#define epicsTimeOK
Success.
Definition: epicsTime.h:339
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
int osdTimeGetCurrent(epicsTimeStamp *pDest)
Definition: osdTime.cpp:119
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
LIBCOM_API size_t epicsStdCall epicsTimeToStrftime(char *pBuff, size_t bufLength, const char *pFormat, const epicsTimeStamp *pTS)
Convert epicsTimeStamp to string. See epicsTime::strftime()
Definition: epicsTime.cpp:1120
TIMECURRENTFUN Time
void generalTime_Init(void)
Initialise the framework.
#define S_time_noProvider
No time provider.
Definition: epicsTime.h:341
int generalTimeGetExceptPriority(epicsTimeStamp *pDest, int *pPrio, int ignore)
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
LIBCOM_API int generalTimeRegisterCurrentProvider ( const char *  name,
int  priority,
TIMECURRENTFUN  getTime 
)

Definition at line 460 of file epicsGeneralTime.c.

462 {
463  gtProvider *ptp;
464 
466 
467  if (name == NULL || getTime == NULL)
468  return S_time_badArgs;
469 
470  ptp = (gtProvider *)malloc(sizeof(gtProvider));
471  if (ptp == NULL)
472  return S_time_noMemory;
473 
474  ptp->name = epicsStrDup(name);
475  ptp->priority = priority;
476  ptp->get.Time = getTime;
477  ptp->getInt.Time = NULL;
478 
479  insertProvider(ptp, &gtPvt.timeProviders, gtPvt.timeListLock);
480 
481  IFDEBUG(1)
482  printf("Registered time provider '%s' at %d\n", name, priority);
483 
484  return epicsTimeOK;
485 }
union gtProvider::@15 get
#define printf
Definition: epicsStdio.h:41
#define IFDEBUG(n)
union gtProvider::@16 getInt
#define NULL
Definition: catime.c:38
#define epicsTimeOK
Success.
Definition: epicsTime.h:339
#define S_time_badArgs
Invalid arguments.
Definition: epicsTime.h:345
#define S_time_noMemory
Out of memory.
Definition: epicsTime.h:347
TIMECURRENTFUN Time
void generalTime_Init(void)
Initialise the framework.
char * epicsStrDup(const char *s)
Definition: epicsString.c:233
LIBCOM_API int generalTimeRegisterEventProvider ( const char *  name,
int  priority,
TIMEEVENTFUN  getEvent 
)

Definition at line 417 of file epicsGeneralTime.c.

419 {
420  gtProvider *ptp;
421 
423 
424  if (name == NULL || getEvent == NULL)
425  return S_time_badArgs;
426 
427  ptp = (gtProvider *)malloc(sizeof(gtProvider));
428  if (ptp == NULL)
429  return S_time_noMemory;
430 
431  ptp->name = epicsStrDup(name);
432  ptp->priority = priority;
433  ptp->get.Event = getEvent;
434  ptp->getInt.Event = NULL;
435 
436  insertProvider(ptp, &gtPvt.eventProviders, gtPvt.eventListLock);
437 
438  IFDEBUG(1)
439  printf("Registered event provider '%s' at %d\n", name, priority);
440 
441  return epicsTimeOK;
442 }
union gtProvider::@15 get
#define printf
Definition: epicsStdio.h:41
#define IFDEBUG(n)
union gtProvider::@16 getInt
#define NULL
Definition: catime.c:38
#define epicsTimeOK
Success.
Definition: epicsTime.h:339
#define S_time_badArgs
Invalid arguments.
Definition: epicsTime.h:345
TIMEEVENTFUN Event
#define S_time_noMemory
Out of memory.
Definition: epicsTime.h:347
void generalTime_Init(void)
Initialise the framework.
char * epicsStrDup(const char *s)
Definition: epicsString.c:233