140 lines
4.1 KiB
C++
140 lines
4.1 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Copyright (c) 1994,1995 Southeastern Universities Research Association,
|
|
// Continuous Electron Beam Accelerator Facility
|
|
//
|
|
// This software was developed under a United States Government license
|
|
// described in the NOTICE file included as part of this distribution.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description:
|
|
// cdevSync class (abstract base class)
|
|
//
|
|
// Author: Jie Chen & Chip Watson
|
|
//
|
|
// Revision History:
|
|
// cdevSync.h,v
|
|
// Revision 1.3 1997/02/18 15:45:43 chen
|
|
// port to linux 2.0.x + addUserFdCallback
|
|
//
|
|
// Revision 1.2 1996/03/22 17:57:45 chen
|
|
// change attach/detach ReadFd to virtual
|
|
//
|
|
// Revision 1.1.1.1 1995/06/16 17:14:08 epics
|
|
// initial import of cdev
|
|
//
|
|
//
|
|
#ifndef _CDEV_SYNC_H
|
|
#define _CDEV_SYNC_H
|
|
|
|
#include <stdio.h>
|
|
#include <assert.h>
|
|
#include <cdevSpec.h>
|
|
#include <cdevFdSet.h>
|
|
#include <cdevTimeValue.h>
|
|
|
|
class CDEV_CLASS_SPEC cdevSync{
|
|
public:
|
|
// destructors
|
|
virtual ~cdevSync (void);
|
|
|
|
virtual int flush (void) = 0;
|
|
// PURPOSE: pure virtual function to define intreface for net flush
|
|
// REQUIRE: derived class provide implementation
|
|
// PROMISE: return CDEV_SUCCESS
|
|
|
|
virtual int poll (void) = 0;
|
|
// PURPOSE: pure virtual function to define intreface for polling method
|
|
// REQUIRE: derived class provide implementation
|
|
// PROMISE: return CDEV_SUCCESS: OK. return -1: network error
|
|
|
|
virtual int pend (int fd = -1) = 0;
|
|
// PURPOSR: pure virtual function to define interface for pending method
|
|
// REQUIRE: derived class provide implementation
|
|
// PROMISE: return CDEV_SUCCESS, OK, return -1: network error
|
|
|
|
virtual int pend (double seconds, int fd = -1) = 0;
|
|
// PURPOSR: pure virtual function to define interface for pending method
|
|
// REQUIRE: derived class provide implementation
|
|
// PROMISE: return CDEV_SUCCESS, OK, return CDEV_TIMEOUT: timeout.
|
|
// -1: network error
|
|
|
|
virtual const char *className (void) const {return "cdevSync";}
|
|
|
|
protected:
|
|
// constructor
|
|
cdevSync (void);
|
|
|
|
virtual int attachReadFd (int fd);
|
|
// PURPOSE: add a new file descriptor to mask
|
|
// REQURIE: fd > 3. You know what I mean
|
|
// PROMISE: return 0 success
|
|
|
|
virtual int detachReadFd (int fd);
|
|
// PURPOSE: remove a file descriptor from the mask
|
|
// REQUIRE: fd > 3
|
|
// PROMISE: return 0 success
|
|
|
|
int handleEvents (void);
|
|
// PURPOSE: wait until IO events arrive and dispatch IO events
|
|
// REQUIRE: nothing
|
|
// PROMISE: return 0: success, -1: error
|
|
|
|
virtual int handleEvents (cdevTimeValue *tv);
|
|
// PURPOSE: handle IO events for upto 'tv' long
|
|
// REQUIRE: nothing
|
|
// PROMISE: return 0: success at least one IO event occured, 1: timeout
|
|
|
|
int waitFor (cdevFdSet &rmaskret,
|
|
cdevFdSet &wmaskret,
|
|
cdevFdSet &emaskret,
|
|
cdevTimeValue *how_long);
|
|
// PURPOSE: Wait for IO events to occur upto time 'how_long'
|
|
// REQUIRE: nothing
|
|
// PROMISE: >0 IO event ready. 0 nothing, timeout
|
|
|
|
void dispatch (int nfound,
|
|
cdevFdSet &rmaskret,
|
|
cdevFdSet &wmaskret,
|
|
cdevFdSet &emaskret);
|
|
// PURPOSE: dispath IO events to the appropriate service
|
|
// REQUIRE: nothing
|
|
// PROMISE: dispatched
|
|
|
|
virtual void notifyService (int handle);
|
|
// PURPOSE: notify low level service there are IO events
|
|
// REQUIRE: derived class does real implementation
|
|
// PROMISE: nothing
|
|
|
|
int handleError (void);
|
|
// PURPOSE: handle interrupt error while waiting for IO events
|
|
// REQUIRE: nothing
|
|
// PROMISE: return 1: interrupt or bad file descriptor, return -1: error
|
|
|
|
int checkFds (void);
|
|
// PURPOSE: check whether file descriptors are valid
|
|
// REQUIRE: nothing
|
|
// PROMISE: return 1 always
|
|
|
|
int checkFd (int fd);
|
|
// PURPOSE: check whether file descriptor fd is valid
|
|
// REQUIRE: nothing
|
|
// PROMISE: return 0 success, -1, failure
|
|
|
|
int maxHandle (int i, int j, int k);
|
|
// PURPOSE: utility to calculate maximum of there integers
|
|
// REQUIRE: nothing
|
|
// PROMISE: maximum of there integers
|
|
|
|
// File Descriptor Mask for IO Multiplexing
|
|
cdevFdSet rdMask_;
|
|
cdevFdSet wrMask_;
|
|
cdevFdSet exMask_;
|
|
};
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|