areaDetector 1-8
/home/epics/devel/areaDetector/ADApp/pluginSrc/NDPluginFile.h
Go to the documentation of this file.
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     /* These methods override those in the base class */
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     void       freeCaptureBuffer(int numCapture);
00074     asynStatus attrFileNameCheck();
00075     asynStatus attrFileNameSet();
00076     bool attrIsProcessingRequired(NDAttributeList* pAttrList);
00077 
00078     NDArray **pCapture;
00079     epicsMutexId fileMutexId;
00080     bool useAttrFilePrefix;
00081 };
00082 
00083 #define NUM_NDPLUGIN_FILE_PARAMS 0
00084     
00085 #endif