Files
pcas/src/cas/generic/casPVI.h
T
2003-05-15 23:57:18 +00:00

117 lines
3.4 KiB
C++

/*************************************************************************\
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* $Id$
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*/
#ifndef casPVIh
#define casPVIh
#ifdef epicsExportSharedSymbols
# define epicsExportSharedSymbols_casPVIh
# undef epicsExportSharedSymbols
#endif
// external headers included here
#include "tsSLList.h"
#include "epicsMutex.h"
#include "caProto.h"
#ifdef epicsExportSharedSymbols_casPVIh
# define epicsExportSharedSymbols
# include "shareLib.h"
#endif
#include "casdef.h"
#include "ioBlocked.h"
class chanIntfForPV;
class caServerI;
class casMonitor;
class casPVI :
public tsSLNode < casPVI >, // server resource table installation
public ioBlockedList // list of clients io blocked on this pv
{
public:
casPVI ( casPV & );
epicsShareFunc virtual ~casPVI ();
caServerI * getPCAS () const;
caStatus attachToServer ( caServerI & cas );
aitIndex nativeCount ();
void clearOutstandingReads ( tsDLList < class casAsyncIOI > &);
void destroyAllIO (
tsDLList < casAsyncIOI > & );
void installIO (
tsDLList < casAsyncIOI > &, casAsyncIOI & );
void uninstallIO (
tsDLList < casAsyncIOI > &, casAsyncIOI & );
void installChannel ( chanIntfForPV & chan );
void removeChannel (
chanIntfForPV & chan, tsDLList < casMonitor > & src,
tsDLList < casMonitor > & dest );
caStatus installMonitor (
casMonitor & mon, tsDLList < casMonitor > & monitorList );
casMonitor * removeMonitor (
tsDLList < casMonitor > & list, ca_uint32_t clientIdIn );
void deleteSignal ();
void postEvent ( const casEventMask & select, const gdd & event );
caServer * getExtServer () const;
caStatus bestDBRType ( unsigned & dbrType );
const gddEnumStringTable & enumStringTable () const;
caStatus updateEnumStringTable ( casCtx & );
void updateEnumStringTableAsyncCompletion ( const gdd & resp );
casPV * apiPointer (); // retuns NULL if casPVI isnt a base of casPV
void show ( unsigned level ) const;
caStatus read ( const casCtx & ctx, gdd & prototype );
caStatus write ( const casCtx & ctx, const gdd & value );
casChannel * createChannel ( const casCtx & ctx,
const char * const pUserName, const char * const pHostName );
aitEnum bestExternalType () const;
const char * getName () const;
void casPVDestroyNotify ();
private:
mutable epicsMutex mutex;
tsDLList < chanIntfForPV > chanList;
gddEnumStringTable enumStrTbl;
caServerI * pCAS;
casPV * pPV;
unsigned nMonAttached;
unsigned nIOAttached;
bool deletePending;
casPVI ( const casPVI & );
casPVI & operator = ( const casPVI & );
};
inline caServerI * casPVI::getPCAS() const
{
return this->pCAS;
}
inline const gddEnumStringTable & casPVI::enumStringTable () const
{
return this->enumStrTbl;
}
inline casPV * casPVI::apiPointer ()
{
return this->pPV;
}
#endif // casPVIh