From 943982da70fdcbfda2f4efe27e9cddba8c1c7d27 Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Wed, 24 Jan 2001 21:35:53 +0000 Subject: [PATCH] new headers --- src/libCom/timer/epicsPeriodicTimer.h | 73 ++++++++++++++++++++++ src/libCom/timer/epicsTimer.h | 90 +++++++++++++++++++++++++++ src/libCom/timer/epicsTimerQueue.h | 70 +++++++++++++++++++++ 3 files changed, 233 insertions(+) create mode 100644 src/libCom/timer/epicsPeriodicTimer.h create mode 100644 src/libCom/timer/epicsTimer.h create mode 100644 src/libCom/timer/epicsTimerQueue.h diff --git a/src/libCom/timer/epicsPeriodicTimer.h b/src/libCom/timer/epicsPeriodicTimer.h new file mode 100644 index 000000000..323d0f0c2 --- /dev/null +++ b/src/libCom/timer/epicsPeriodicTimer.h @@ -0,0 +1,73 @@ +/* epicsPeriodicTimer.h */ + +/* Author: Jeffrey O. Hill */ + +/********************COPYRIGHT NOTIFICATION********************************** +This software was developed under a United States Government license +described on the COPYRIGHT_Combined file included as part +of this distribution. +****************************************************************************/ + +#ifndef epicsPeriodicTimerH +#define epicsPeriodicTimerH + +#include "epicsTimer.h" + +#ifdef __cplusplus + +class epicsShareClass epicsPeriodicTimer : public epicsTimer { +public: + epicsPeriodicTimer(epicsTimerNotify &,double period, + epicsTimerQueue&); + epicsPeriodicTimer(epicsTimerNotify &,double period, + sharedPriority priority = priorityLow); + virtual ~epicsPeriodicTimer(); + void setPeriod(double seconds); + void start(); + void stop(); + double getPeriod() const; + virtual void show(unsigned int level) const; +private: + class periodicImpl &periodicPvt; +private: //copy constructor and operator= not allowed + epicsPeriodicTimer(const epicsPeriodicTimer& rhs); + epicsPeriodicTimer& + operator=(const epicsPeriodicTimer& rhs); +}; + +extern "C" { +#endif /* __cplusplus */ + +typedef void *epicsPeriodicTimerId; + +epicsShareFunc epicsPeriodicTimerId epicsShareAPI +epicsPeriodicTimerCreate( + epicsTimerQueueId queueid,double period, + epicsTimerCallback cb,void *arg); +epicsShareFunc epicsPeriodicTimerId epicsShareAPI +epicsPeriodicTimerCreateShared( + epicsTimerSharedPriority priority, double period, + epicsTimerCallback cb,void *arg); +epicsShareFunc void epicsShareAPI +epicsPeriodicTimerDestroy(epicsPeriodicTimerId id); +epicsShareFunc void epicsShareAPI +epicsPeriodicTimerSetPeriod( + epicsPeriodicTimerId id,double seconds); +epicsShareFunc void epicsShareAPI + epicsPeriodicTimerStart(epicsPeriodicTimerId id); +epicsShareFunc void epicsShareAPI + epicsPeriodicTimerStop(epicsPeriodicTimerId id); +epicsShareFunc double epicsShareAPI + epicsPeriodicTimerGetPeriod(epicsPeriodicTimerId id); +/* GetExpireTime returns (0,1) if time (is not, is) given a value*/ +epicsShareFunc int epicsShareAPI +epicsPeriodicTimerGetExpireTime( + epicsPeriodicTimerId id, epicsTimeStamp *time); +epicsShareFunc void epicsShareAPI +epicsPeriodicTimerShow(epicsPeriodicTimerId id,unsigned int level); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /*epicsPeriodicTimerH*/ diff --git a/src/libCom/timer/epicsTimer.h b/src/libCom/timer/epicsTimer.h new file mode 100644 index 000000000..e9a71289d --- /dev/null +++ b/src/libCom/timer/epicsTimer.h @@ -0,0 +1,90 @@ +/* epicsTimer.h */ + +/* Author: Jeffrey O. Hill */ + +/********************COPYRIGHT NOTIFICATION********************************** +This software was developed under a United States Government license +described on the COPYRIGHT_Combined file included as part +of this distribution. +****************************************************************************/ + +#ifndef epicsTimerH +#define epicsTimerH + +#include "epicsAssert.h" +#include "shareLib.h" +#include "epicsTime.h" +#include "epicsThread.h" + +typedef enum { + epicsTimerPriorityLow,epicsTimerPriorityMedium,epicsTimerPriorityHigh +}epicsTimerSharedPriority; + +#ifdef __cplusplus + +// code using a timer must implement epicsTimerNotify +class epicsTimerNotify { +public: + virtual void expire() = 0; +}; + +class epicsShareClass epicsTimer { +public: + epicsTimer(epicsTimerNotify &,epicsTimerQueue&); + epicsTimer(epicsTimerNotify &, + epicsTimerSharedPriority priority = epicsTimerPriorityLow); + virtual ~epicsTimer(); + void start(epicsTime &); + void start(double delaySeconds); + virtual void cancel(); + epicsTime getExpireTime() const; + double getExpireSeconds() const; + bool isExpired() const; + epicsTimerNotify &getNotify() const; + epicsTimerQueue &getQueue() const; + virtual void show(unsigned int level) const; + static epicsTimerQueue &createTimerQueue( + unsigned int threadPriority = epicsThreadPriorityMin); + static void deleteTimerQueue(epicsTimerQueue &); +protected: + class impl& timerPvt; +private: //copy constructor and operator= not allowed + epicsTimer(const epicsTimer&); + epicsTimer& operator=(const epicsTimer&); +}; + +extern "C" { +#endif /*__cplusplus */ + +typedef void *epicsTimerId; +typedef void *epicsTimerQueueId; + +typedef void (*epicsTimerCallback)(void *); + +epicsShareFunc epicsTimerId epicsShareAPI epicsTimerCreate( + epicsTimerQueueId queueid,epicsTimerCallback callback, void *arg); +epicsShareFunc epicsTimerId epicsShareAPI epicsTimerCreateShared( + epicsTimerSharedPriority priority,epicsTimerCallback callback, void *arg); +epicsShareFunc void epicsShareAPI epicsTimerDestroy(epicsTimerQueueId id); +epicsShareFunc void epicsShareAPI epicsTimerStartTime( + epicsTimerQueueId id,epicsTimeStamp *time); +epicsShareFunc void epicsShareAPI epicsTimerStartDelay( + epicsTimerQueueId id,double delaySeconds); +epicsShareFunc void epicsShareAPI epicsTimerCancel(epicsTimerQueueId id); +/* GetExpireTime returns (0,1) if time (is not, is) given a value*/ +epicsShareFunc int epicsShareAPI epicsTimerGetExpireTime( + epicsTimerQueueId id, epicsTimeStamp *time); +epicsShareFunc int epicsShareAPI epicsTimerIsExpired(epicsTimerQueueId id); +epicsShareFunc void epicsShareAPI epicsTimerShow( + epicsTimerQueueId id, unsigned int level); + +epicsShareFunc epicsTimerQueueId epicsShareAPI +epicsTimerQueueCreate(unsigned int threadPriority); + +epicsShareFunc void epicsShareAPI epicsTimerQueueDelete(epicsTimerQueueId); + +#ifdef __cplusplus +} +#endif /*__cplusplus */ + +#endif /*epicsTimerH*/ diff --git a/src/libCom/timer/epicsTimerQueue.h b/src/libCom/timer/epicsTimerQueue.h new file mode 100644 index 000000000..1dd8e0913 --- /dev/null +++ b/src/libCom/timer/epicsTimerQueue.h @@ -0,0 +1,70 @@ +/* epicsTimerQueue.h */ + +/* Author: Jeffrey O. Hill */ + +/********************COPYRIGHT NOTIFICATION********************************** +This software was developed under a United States Government license +described on the COPYRIGHT_Combined file included as part +of this distribution. +****************************************************************************/ + +#ifndef epicsTimerQueueH +#define epicsTimerQueueH + +#include "epicsTimer.h" + +#ifdef __cplusplus + +#include "epicsTimer.h" + +class epicsTimerQueue { +public: + epicsTimerQueue() + virtual ~epicsTimerQueue() = 0; + epicsTime &getExpirationTime() const; + double getExpirationDelay() const; + virtual void show(unsigned int level) const; +protected: + class impl &queuePvt; + friend class epicsTimer; +private: + //copy constructor and operator= not allowed + epicsTimerQueue(const epicsTimerQueue& rhs); + epicsTimerQueue& operator=(const epicsTimerQueue& rhs); +}; + +class epicsTimerQueueThreaded : public epicsTimerQueue { +public: + epicsTimerQueueThreaded( + int threadPriority = threadPriorityMin+10); + virtual ~epicsTimerQueueThreaded(); + int getPriority(); + virtual void show(int level) const; +private: + class threadedImpl& threadPvt; + friend class epicsTimer; + //copy constructor and operator= not allowed + epicsTimerThreaded(const epicsTimerThreaded& rhs); + epicsTimerThreaded& operator= + (const epicsTimerThreaded& rhs); +}; + +class epicsTimerQueueNonthreaded : public epicsTimerQueue{ +public: + epicsTimerQueueNonthreaded(); + virtual ~epicsTimerQueue(); + void process(); + virtual void show(int level) const; +private: + class nothreadImpl& nothreadPvt; + friend class epicsTimer; + //copy constructor and operator= not allowed + epicsTimerQueueNonthreaded( + const epicsTimerQueueNonthreaded& rhs); + epicsTimerQueueNonthreaded& + operator=(const epicsTimerQueueNonthreaded& rhs); +}; + +#endif /* __cplusplus */ + +#endif /*epicsTimerQueueH*/