Files
pcas/src/gdd/gddUtils.h
Jim Kowalkowski 54d746e3f3 new in EPICS base
1996-06-25 19:11:52 +00:00

92 lines
1.7 KiB
C++

#ifndef GDD_UTILS_H
#define GDD_UTILS_H
/*
* Author: Jim Kowalkowski
* Date: 2/96
*
* $Id$
*
* $Log$
*
* *Revision 1.2 1996/06/24 03:15:39 jbk
* *name changes and fixes for aitString and fixed string functions
* *Revision 1.1 1996/05/31 13:15:36 jbk
* *add new stuff
*
*/
#ifdef vxWorks
#include <vxWorks.h>
#include <vme.h>
#include <sysLib.h>
#include <semLib.h>
#endif
#include "aitTypes.h"
typedef enum { gddSemEmpty, gddSemFull } gddSemType;
#if 0
#ifdef vxWorks
#undef vxWorks
#define __temp_vxWorks__ 1
#endif
#endif
// Semaphores default to "Full"
class gddSemaphore
{
public:
gddSemaphore(void);
gddSemaphore(gddSemType);
~gddSemaphore(void);
void give(void);
void take(void);
void take(aitUint32 usec);
private:
#ifdef vxWorks
SEM_ID sem;
#endif
};
#ifdef vxWorks
inline gddSemaphore::gddSemaphore(void)
{ sem=semBCreate(SEM_Q_PRIORITY,SEM_FULL); }
inline gddSemaphore::gddSemaphore(gddSemType s)
{
if(s==gddSemEmpty) sem=semBCreate(SEM_Q_PRIORITY,SEM_EMPTY);
else sem=semBCreate(SEM_Q_PRIORITY,SEM_FULL);
}
inline gddSemaphore::~gddSemaphore(void) { semDelete(sem); }
inline void gddSemaphore::give(void) { semGive(sem); }
inline void gddSemaphore::take(void) { semTake(sem,WAIT_FOREVER); }
inline void gddSemaphore::take(aitUint32 usec)
{ semTake(sem,usec/(sysClkRateGet()*1000000)); }
#else
inline gddSemaphore::gddSemaphore(void) { }
inline gddSemaphore::gddSemaphore(gddSemType) { }
inline gddSemaphore::~gddSemaphore(void) { }
inline void gddSemaphore::give(void) { }
inline void gddSemaphore::take(void) { }
inline void gddSemaphore::take(aitUint32) { }
#endif
#if 0
class gddIntLock
{
public:
private:
};
#endif
#ifdef __temp_vxWorks__
#define vxWorks 1
#undef __temp_vxWorks__
#endif
#endif