//----------------------------------------------------------------------------- // 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: // cdevFdServive (Arbitrary user file descriptor service) // // Author: Jie Chen // // Revision History: // cdevUserFdService.h,v // Revision 1.1 1997/02/18 15:45:48 chen // port to linux 2.0.x + addUserFdCallback // // // #ifndef _CDEV_USER_FD_SERVICE_H #define _CDEV_USER_FD_SERVICE_H #include class cdevUserFdService: public cdevService { public: cdevUserFdService (int fd, cdevUserFdCallback cbk, void* arg, char* name, cdevSystem& system = cdevSystem::defaultSystem () ); // PURPOSE: construction of fdService // REQUIRE: none // PROMISE: A fd servive with a unique name ~cdevUserFdService (void); // PURPOSE: destruction of fdService // REQUIRE: none // PROMISE: this object is gone forever int getFd (int* &fd, int &numFd); // PURPOSE: get service's IO file descriptors // REQUIRE: callers provide pointer (eg. int *fd = 0;) no memory. callers // should never free memory pointed by fd. fd should be cached // inside derived class for easy/quick access // PROMISE: numFd >= 0 int getNameServer (cdevDevice* &server); // PURPOSE: get right name server associated with this service // REQUIRE: caller provide pointer only, derived class provides // an empty function for now // PROMISE: not implemented yet int flush (void); // PURPOSE: pure virtual function to define intreface for net flush // REQUIRE: derived class provide implementation // PROMISE: return CDEV_SUCCESS int poll (void); // PURPOSE: pure virtual function to define intreface for polling method // REQUIRE: derived class provide implementation // PROMISE: return CDEV_SUCCESS: OK. return -1: network error int pend (int fd = -1); // PURPOSR: pure virtual function to define interface for pending method // REQUIRE: derived class provide implementation // PROMISE: return CDEV_SUCCESS, OK, return -1: network error int pend (double seconds, int fd = -1); // 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 static char* prefixName (void); // PURPOSE: return common prefix name for all services // REQUIRE: none // PROMISE: return common prefix name const char *className (void) const {return "cdevUserFdService";} protected: // hide request object creation method int getRequestObject (char *deviceName, char *msg, cdevRequestObject* &req); // PURPOSE: get request object: this service return 0 // REQUIRE: callers provide pointer to cdevRequestObject only, no memory // PROMISE: nothing private: // associated fd int* fd_; // user function and usr argument cdevUserFdCallback cbk_; void* arg_; // unique name for fd services static char* fdsvcname_; }; #endif