dxpSITORO  1-0
asynNDArrayDriver.h
Go to the documentation of this file.
1 #ifndef asynNDArrayDriver_H
2 #define asynNDArrayDriver_H
3 
4 #include "asynPortDriver.h"
5 #include "NDArray.h"
6 #include "ADCoreVersion.h"
7 
9 #define MAX_FILENAME_LEN 256
10 
12 typedef enum {
17 } NDFileMode_t;
18 
19 typedef enum {
23 
24 typedef enum {
30 
35  /* String asyn interface access Description */
36 #define NDPortNameSelfString "PORT_NAME_SELF"
39 #define NDADCoreVersionString "ADCORE_VERSION"
40 #define NDDriverVersionString "DRIVER_VERSION"
42 /* Parameters defining characteristics of the array data from the detector.
43  * NDArraySizeX and NDArraySizeY are the actual dimensions of the array data,
44  * including effects of the region definition and binning */
45 #define NDArraySizeXString "ARRAY_SIZE_X"
46 #define NDArraySizeYString "ARRAY_SIZE_Y"
47 #define NDArraySizeZString "ARRAY_SIZE_Z"
48 #define NDArraySizeString "ARRAY_SIZE"
49 #define NDNDimensionsString "ARRAY_NDIMENSIONS"
50 #define NDDimensionsString "ARRAY_DIMENSIONS"
51 #define NDDataTypeString "DATA_TYPE"
52 #define NDColorModeString "COLOR_MODE"
53 #define NDUniqueIdString "UNIQUE_ID"
54 #define NDTimeStampString "TIME_STAMP"
55 #define NDEpicsTSSecString "EPICS_TS_SEC"
56 #define NDEpicsTSNsecString "EPICS_TS_NSEC"
57 #define NDBayerPatternString "BAYER_PATTERN"
59 /* Statistics on number of arrays collected */
60 #define NDArrayCounterString "ARRAY_COUNTER"
62 /* File name related parameters for saving data.
63  * Drivers are not required to implement file saving, but if they do these parameters
64  * should be used.
65  * The driver will normally combine NDFilePath, NDFileName, and NDFileNumber into
66  * a file name that order using the format specification in NDFileTemplate.
67  * For example NDFileTemplate might be "%s%s_%d.tif" */
68 #define NDFilePathString "FILE_PATH"
69 #define NDFilePathExistsString "FILE_PATH_EXISTS"
70 #define NDFileNameString "FILE_NAME"
71 #define NDFileNumberString "FILE_NUMBER"
72 #define NDFileTemplateString "FILE_TEMPLATE"
73 #define NDAutoIncrementString "AUTO_INCREMENT"
74 #define NDFullFileNameString "FULL_FILE_NAME"
75 #define NDFileFormatString "FILE_FORMAT"
76 #define NDAutoSaveString "AUTO_SAVE"
77 #define NDWriteFileString "WRITE_FILE"
78 #define NDReadFileString "READ_FILE"
79 #define NDFileWriteModeString "WRITE_MODE"
80 #define NDFileWriteStatusString "WRITE_STATUS"
81 #define NDFileWriteMessageString "WRITE_MESSAGE"
82 #define NDFileNumCaptureString "NUM_CAPTURE"
83 #define NDFileNumCapturedString "NUM_CAPTURED"
84 #define NDFileCaptureString "CAPTURE"
85 #define NDFileDeleteDriverFileString "DELETE_DRIVER_FILE"
86 #define NDFileLazyOpenString "FILE_LAZY_OPEN"
87 #define NDFileCreateDirString "CREATE_DIR"
88 #define NDFileTempSuffixString "FILE_TEMP_SUFFIX"
90 #define NDAttributesFileString "ND_ATTRIBUTES_FILE"
91 #define NDAttributesStatusString "ND_ATTRIBUTES_STATUS"
92 #define NDAttributesMacrosString "ND_ATTRIBUTES_MACROS"
94 /* The detector array data */
95 #define NDArrayDataString "ARRAY_DATA"
96 #define NDArrayCallbacksString "ARRAY_CALLBACKS"
98 /* NDArray Pool status */
99 #define NDPoolMaxBuffersString "POOL_MAX_BUFFERS"
100 #define NDPoolAllocBuffersString "POOL_ALLOC_BUFFERS"
101 #define NDPoolFreeBuffersString "POOL_FREE_BUFFERS"
102 #define NDPoolMaxMemoryString "POOL_MAX_MEMORY"
103 #define NDPoolUsedMemoryString "POOL_USED_MEMORY"
104 
110 class epicsShareFunc asynNDArrayDriver : public asynPortDriver {
111 public:
112  asynNDArrayDriver(const char *portName, int maxAddr, int maxBuffers, size_t maxMemory,
113  int interfaceMask, int interruptMask,
114  int asynFlags, int autoConnect, int priority, int stackSize);
115  virtual ~asynNDArrayDriver();
116  /* These are the methods that we override from asynPortDriver */
117  virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars,
118  size_t *nActual);
119  virtual asynStatus readGenericPointer(asynUser *pasynUser, void *genericPointer);
120  virtual asynStatus writeGenericPointer(asynUser *pasynUser, void *genericPointer);
121  virtual asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value);
122  virtual asynStatus readFloat64(asynUser *pasynUser, epicsFloat64 *value);
123  virtual void report(FILE *fp, int details);
124 
125  /* These are the methods that are new to this class */
126  virtual asynStatus createFilePath(const char *path, int pathDepth);
127  virtual asynStatus checkPath();
128  virtual asynStatus createFileName(int maxChars, char *fullFileName);
129  virtual asynStatus createFileName(int maxChars, char *filePath, char *fileName);
130  virtual asynStatus readNDAttributesFile();
131  virtual asynStatus getAttributes(NDAttributeList *pAttributeList);
132 
133 protected:
135  #define FIRST_NDARRAY_PARAM NDPortNameSelf
183 
184  NDArray **pArrays;
185  NDArrayPool *pNDArrayPool;
186  class NDAttributeList *pAttributeList;
190 
191 };
192 
193 #endif
int NDFileNumber
Definition: asynNDArrayDriver.h:155
int NDPoolUsedMemory
Definition: asynNDArrayDriver.h:182
int NDPoolFreeBuffers
Definition: asynNDArrayDriver.h:180
Definition: asynNDArrayDriver.h:25
Definition: asynNDArrayDriver.h:20
int NDArrayData
Definition: asynNDArrayDriver.h:176
NDFileMode_t
Enumeration of file saving modes.
Definition: asynNDArrayDriver.h:12
int NDFileNumCapture
Definition: asynNDArrayDriver.h:166
Base class for asyn port drivers; handles most of the bookkeeping for writing an asyn port driver wit...
Definition: asynPortDriver.h:41
int NDPortNameSelf
Definition: asynNDArrayDriver.h:134
int NDArraySizeX
Definition: asynNDArrayDriver.h:138
int NDArraySizeZ
Definition: asynNDArrayDriver.h:140
int NDArraySize
Definition: asynNDArrayDriver.h:141
int NDNDimensions
Definition: asynNDArrayDriver.h:142
int NDFileWriteMessage
Definition: asynNDArrayDriver.h:165
int NDFileFormat
Definition: asynNDArrayDriver.h:159
int NDDriverVersion
Definition: asynNDArrayDriver.h:137
int NDFileName
Definition: asynNDArrayDriver.h:154
int NDArrayCounter
Definition: asynNDArrayDriver.h:151
Definition: asynNDArrayDriver.h:26
int NDFileCapture
Definition: asynNDArrayDriver.h:168
int NDFilePath
Definition: asynNDArrayDriver.h:152
int threadPriority_
Definition: asynNDArrayDriver.h:189
int NDEpicsTSSec
Definition: asynNDArrayDriver.h:148
int NDAttributesFile
Definition: asynNDArrayDriver.h:173
int NDFileTempSuffix
Definition: asynNDArrayDriver.h:172
int NDADCoreVersion
Definition: asynNDArrayDriver.h:136
virtual asynStatus writeGenericPointer(asynUser *pasynUser, void *pointer)
Called when asyn clients call pasynGenericPointer->write().
Definition: asynPortDriver.cpp:2682
NDArrayPool * pNDArrayPool
An NDArrayPool object used to allocate and manipulate NDArray objects.
Definition: asynNDArrayDriver.h:185
This is the class from which NDArray drivers are derived; implements the asynGenericPointer functions...
Definition: asynNDArrayDriver.h:110
virtual void report(FILE *fp, int details)
Reports on status of the driver.
Definition: asynPortDriver.cpp:2998
int NDPoolAllocBuffers
Definition: asynNDArrayDriver.h:179
int NDAutoSave
Definition: asynNDArrayDriver.h:160
int threadStackSize_
Definition: asynNDArrayDriver.h:188
int NDDataType
Definition: asynNDArrayDriver.h:144
NDArray ** pArrays
An array of NDArray pointers used to store data in the driver.
Definition: asynNDArrayDriver.h:184
int NDFileWriteMode
Definition: asynNDArrayDriver.h:163
Stream arrays continuously to a single file if the file format supports this.
Definition: asynNDArrayDriver.h:16
int NDFileCreateDir
Definition: asynNDArrayDriver.h:171
Definition: asynNDArrayDriver.h:21
int NDEpicsTSNsec
Definition: asynNDArrayDriver.h:149
int NDFileNumCaptured
Definition: asynNDArrayDriver.h:167
int NDDimensions
Definition: asynNDArrayDriver.h:143
class NDAttributeList * pAttributeList
An NDAttributeList object used to obtain the current values of a set of attributes.
Definition: asynNDArrayDriver.h:186
Definition: asynNDArrayDriver.h:28
virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual)
Called when asyn clients call pasynOctet->write().
Definition: asynPortDriver.cpp:2151
int NDColorMode
Definition: asynNDArrayDriver.h:145
int NDBayerPattern
Definition: asynNDArrayDriver.h:150
int NDArraySizeY
Definition: asynNDArrayDriver.h:139
Write 1 array per file.
Definition: asynNDArrayDriver.h:13
int NDFileLazyOpen
Definition: asynNDArrayDriver.h:170
virtual asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value)
Called when asyn clients call pasynInt32->read().
Definition: asynPortDriver.cpp:1642
int NDFileTemplate
Definition: asynNDArrayDriver.h:156
Capture NDNumCapture arrays into memory, write them out when capture is complete. ...
Definition: asynNDArrayDriver.h:14
NDFileWriteStatus_t
Definition: asynNDArrayDriver.h:19
int NDUniqueId
Definition: asynNDArrayDriver.h:146
int NDAutoIncrement
Definition: asynNDArrayDriver.h:157
int NDAttributesStatus
Definition: asynNDArrayDriver.h:174
int NDFileWriteStatus
Definition: asynNDArrayDriver.h:164
NDAttributesStatus_t
Definition: asynNDArrayDriver.h:24
int NDWriteFile
Definition: asynNDArrayDriver.h:161
int NDPoolMaxMemory
Definition: asynNDArrayDriver.h:181
Definition: asynNDArrayDriver.h:27
int NDFullFileName
Definition: asynNDArrayDriver.h:158
virtual asynStatus readGenericPointer(asynUser *pasynUser, void *pointer)
Called when asyn clients call pasynGenericPointer->read().
Definition: asynPortDriver.cpp:2659
int NDTimeStamp
Definition: asynNDArrayDriver.h:147
int NDPoolMaxBuffers
Definition: asynNDArrayDriver.h:178
int NDAttributesMacros
Definition: asynNDArrayDriver.h:175
int NDReadFile
Definition: asynNDArrayDriver.h:162
int NDFilePathExists
Definition: asynNDArrayDriver.h:153
virtual asynStatus readFloat64(asynUser *pasynUser, epicsFloat64 *value)
Called when asyn clients call pasynFloat64->read().
Definition: asynPortDriver.cpp:1993
int NDArrayCallbacks
Definition: asynNDArrayDriver.h:177
int NDFileDeleteDriverFile
Definition: asynNDArrayDriver.h:169