This is Unofficial EPICS BASE Doxygen Site
osdEvent.c
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2011 UChicago Argonne LLC, as Operator of Argonne
3 * National Laboratory.
4 * Copyright (c) 2002 The Regents of the University of California, as
5 * Operator of Los Alamos National Laboratory.
6 * EPICS BASE is distributed subject to a Software License Agreement found
7 * in file LICENSE that is included with this distribution.
8 \*************************************************************************/
9 /* os/vxWorks/osdEvent.c */
10 
11 /* Author: Marty Kraimer Date: 25AUG99 */
12 
13 #include <vxWorks.h>
14 #include <semLib.h>
15 #include <time.h>
16 #include <objLib.h>
17 #include <sysLib.h>
18 #include <limits.h>
19 
20 #include "epicsEvent.h"
21 
22 /* The following not defined in any vxWorks header */
23 int sysClkRateGet(void);
24 
26 {
27  return (epicsEventId) semBCreate(SEM_Q_FIFO,
28  (initialState == epicsEventEmpty) ? SEM_EMPTY : SEM_FULL);
29 }
30 
32 {
33  semDelete((SEM_ID)id);
34 }
35 
37 {
38  int rate = sysClkRateGet();
39  int status;
40  int ticks;
41 
42  if (timeOut <= 0.0) {
43  ticks = 0;
44  } else if (timeOut >= (double) INT_MAX / rate) {
45  ticks = WAIT_FOREVER;
46  } else {
47  ticks = timeOut * rate;
48  if (ticks <= 0)
49  ticks = 1;
50  }
51  status = semTake((SEM_ID)id, ticks);
52  if (status == OK)
53  return epicsEventOK;
54  if (errno == S_objLib_OBJ_TIMEOUT ||
55  (errno == S_objLib_OBJ_UNAVAILABLE && ticks == 0))
56  return epicsEventWaitTimeout;
57  return epicsEventError;
58 }
59 
61 {
62  int status = semTake((SEM_ID)id, NO_WAIT);
63 
64  if (status == OK)
65  return epicsEventOK;
66  if (errno == S_objLib_OBJ_UNAVAILABLE)
67  return epicsEventWaitTimeout;
68  return epicsEventError;
69 }
70 
71 void epicsEventShow(epicsEventId id, unsigned int level)
72 {
73  semShow((SEM_ID)id,level);
74 }
int sysClkRateGet(void)
pvd::Status status
LIBCOM_API epicsEventStatus epicsEventWaitWithTimeout(epicsEventId pevent, double timeout)
Wait an the event or until the specified timeout period is over.
Definition: osdEvent.c:117
LIBCOM_API epicsEventId epicsEventCreate(epicsEventInitialState init)
Create an epicsEvent for use from C code, or return NULL.
Definition: osdEvent.c:47
LIBCOM_API void epicsEventShow(epicsEventId pevent, unsigned int level)
Display information about the semaphore.
Definition: osdEvent.c:150
LIBCOM_API epicsEventStatus epicsEventTryWait(epicsEventId id)
Similar to wait() except that if the event is currenly empty the call will return immediately with st...
Definition: osdEvent.c:145
APIs for the epicsEvent binary semaphore.
epicsEventStatus
Return status from several C API routines.
Definition: epicsEvent.h:49
epicsEventInitialState
Possible initial states of a new epicsEvent.
Definition: epicsEvent.h:63
LIBCOM_API void epicsEventDestroy(epicsEventId pevent)
Destroy an epicsEvent and any resources it holds.
Definition: osdEvent.c:70