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
00019 #define FILEPLUGIN_NAME "FilePluginFileName"
00020 #define FILEPLUGIN_NUMBER "FilePluginFileNumber"
00021 #define FILEPLUGIN_DESTINATION "FilePluginDestination"
00022
00027 class NDPluginFile : public NDPluginDriver {
00028 public:
00029 NDPluginFile(const char *portName, int queueSize, int blockingCallbacks,
00030 const char *NDArrayPort, int NDArrayAddr, int maxAddr, int numParams,
00031 int maxBuffers, size_t maxMemory, int interfaceMask, int interruptMask,
00032 int asynFlags, int autoConnect, int priority, int stackSize);
00033
00034
00035 virtual void processCallbacks(NDArray *pArray);
00036 virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
00037 virtual asynStatus writeNDArray(asynUser *pasynUser, void *genericPointer);
00038
00048 virtual asynStatus openFile(const char *fileName, NDFileOpenMode_t openMode, NDArray *pArray) = 0;
00049
00052 virtual asynStatus readFile(NDArray **pArray) = 0;
00053
00058 virtual asynStatus writeFile(NDArray *pArray) = 0;
00059
00062 virtual asynStatus closeFile() = 0;
00063
00064 int supportsMultipleArrays;
00067 private:
00068 asynStatus openFileBase(NDFileOpenMode_t openMode, NDArray *pArray);
00069 asynStatus readFileBase();
00070 asynStatus writeFileBase();
00071 asynStatus closeFileBase();
00072 asynStatus doCapture(int capture);
00073 asynStatus attrFileNameCheck();
00074 asynStatus attrFileNameSet();
00075 bool attrIsProcessingRequired(NDAttributeList* pAttrList);
00076
00077 NDArray **pCapture;
00078 epicsMutexId fileMutexId;
00079 bool useAttrFilePrefix;
00080 };
00081
00082 #define NUM_NDPLUGIN_FILE_PARAMS 0
00083
00084 #endif