00001 #ifndef NDPluginFile_H
00002 #define NDPluginFile_H
00003
00004 #include <epicsTypes.h>
00005 #include <epicsMutex.h>
00006
00007 #include "NDPluginDriver.h"
00008
00010 #define NDFileModeRead 0x01
00011
00012 #define NDFileModeWrite 0x02
00013
00014 #define NDFileModeAppend 0x04
00015
00016 #define NDFileModeMultiple 0x08
00017 typedef int NDFileOpenMode_t;
00018
00021 typedef enum {
00022 NDPluginFileLastParam =
00023 NDPluginDriverLastParam
00024 } NDPluginFileParam_t;
00025
00026
00031 class NDPluginFile : public NDPluginDriver {
00032 public:
00033 NDPluginFile(const char *portName, int queueSize, int blockingCallbacks,
00034 const char *NDArrayPort, int NDArrayAddr, int maxAddr, int paramTableSize,
00035 int maxBuffers, size_t maxMemory, int interfaceMask, int interruptMask,
00036 int asynFlags, int autoConnect, int priority, int stackSize);
00037
00038
00039 virtual void processCallbacks(NDArray *pArray);
00040 virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
00041 virtual asynStatus writeNDArray(asynUser *pasynUser, void *genericPointer);
00042 virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
00043 const char **pptypeName, size_t *psize);
00044
00045
00055 virtual asynStatus openFile(const char *fileName, NDFileOpenMode_t openMode, NDArray *pArray) = 0;
00056
00059 virtual asynStatus readFile(NDArray **pArray) = 0;
00060
00065 virtual asynStatus writeFile(NDArray *pArray) = 0;
00066
00069 virtual asynStatus closeFile() = 0;
00070
00071 int supportsMultipleArrays;
00074 private:
00075 asynStatus openFileBase(NDFileOpenMode_t openMode, NDArray *pArray);
00076 asynStatus readFileBase();
00077 asynStatus writeFileBase();
00078 asynStatus closeFileBase();
00079 asynStatus doCapture(int capture);
00080 NDArray **pCapture;
00081 epicsMutexId fileMutexId;
00082 };
00083
00084
00085 #endif