Files
epics-base/src/cas/generic/st/casOSD.h
T
Jeff Hill 36b70e243f fixed problem where send was not always rearmed if this
was indirectly necessary in the send callback because
in this callback the code considered sends to be still armed
until the send callback completed
1998-10-23 00:27:15 +00:00

166 lines
2.7 KiB
C++

//
// $Id$
//
// casOSD.h - Channel Access Server OS dependent wrapper
//
//
//
#ifndef includeCASOSDH
#define includeCASOSDH
#undef epicsExportSharedSymbols
#include "osiTimer.h"
#include "fdManager.h"
#define epicsExportSharedSymbols
#include "shareLib.h" // redefine share lib defines
class caServerI;
class caServerOS;
class casServerReg;
class casBeaconTimer;
//
// caServerOS
//
class caServerOS {
friend class casServerReg;
public:
caServerOS (caServerI &casIn) :
cas (casIn), pBTmr (NULL) {}
caStatus init ();
virtual ~caServerOS ();
caStatus start ();
inline caServerI * operator -> ();
private:
caServerI &cas;
casBeaconTimer *pBTmr;
};
class casDGClient;
class casDGReadReg;
//
// casDGIntfOS
//
class casDGIntfOS : public casDGIntfIO {
public:
casDGIntfOS(casDGClient &client);
virtual ~casDGIntfOS();
caStatus start();
void show(unsigned level) const;
void recvCB();
void sendCB();
private:
casDGReadReg *pRdReg;
};
//
// casIntfOS
//
class casIntfOS : public casIntfIO, public tsDLNode<casIntfOS>
{
friend class casServerReg;
public:
casIntfOS (caServerI &casIn) :
cas (casIn), pRdReg (NULL) {}
caStatus init(const caNetAddr &addr, casDGClient &dgClientIn,
int autoBeaconAddr, int addConfigBeaconAddr);
virtual ~casIntfOS();
void recvCB ();
void sendCB () {}; // NOOP satifies template
casDGIntfIO *newDGIntfIO (casDGClient &dgClientIn) const;
private:
caServerI &cas;
casServerReg *pRdReg;
};
class casStreamWriteReg;
class casStreamReadReg;
class casStreamEvWakeup;
class casStreamIOWakeup;
//
// casStreamOS
//
class casStreamOS : public casStreamIO {
friend class casStreamEvWakeup;
friend class casStreamIOWakeup;
public:
casStreamOS(caServerI &, const ioArgsToNewStreamIO &ioArgs);
caStatus init();
~casStreamOS();
//
// process any incomming messages
//
casProcCond processInput();
caStatus start();
void recvCB();
void sendCB();
void sendBlockSignal();
void ioBlockedSignal();
void eventSignal();
void eventFlush();
void show (unsigned level) const;
private:
casStreamWriteReg *pWtReg;
casStreamReadReg *pRdReg;
casStreamEvWakeup *pEvWk;
casStreamIOWakeup *pIOWk;
unsigned sendBlocked:1;
//
//
//
inline void armSend ();
inline void armRecv ();
inline void disarmSend();
inline void disarmRecv();
};
class casDGEvWakeup;
//
// casDGOS
//
class casDGOS : public casDGIO {
friend class casDGEvWakeup;
public:
casDGOS(caServerI &cas);
~casDGOS();
//
// process any incomming messages
//
casProcCond processInput();
void sendBlockSignal();
void eventSignal();
void eventFlush();
void show(unsigned level) const;
caStatus start();
private:
casDGEvWakeup *pEvWk;
};
// no additions below this line
#endif // includeCASOSDH