areaDetector 1-9
/home/epics/devel/areaDetector/ADApp/pluginSrc/NDPluginStdArrays.h
Go to the documentation of this file.
00001 #ifndef NDPluginStdArrays_H
00002 #define NDPluginStdArrays_H
00003 
00004 #include <epicsTypes.h>
00005 #include <asynStandardInterfaces.h>
00006 
00007 #include "NDPluginDriver.h"
00008 
00009 #define NDPluginStdArraysDataString "STD_ARRAY_DATA"           /* (asynXXXArray, r/w) Array data waveform */
00010 
00015 class NDPluginStdArrays : public NDPluginDriver {
00016 public:
00017     NDPluginStdArrays(const char *portName, int queueSize, int blockingCallbacks, 
00018                       const char *NDArrayPort, int NDArrayAddr, size_t maxMemory,
00019                       int priority, int stackSize);
00020 
00021     /* These methods override the virtual methods in the base class */
00022     void processCallbacks(NDArray *pArray);
00023     virtual asynStatus readInt8Array(asynUser *pasynUser, epicsInt8 *value,
00024                                         size_t nElements, size_t *nIn);
00025     virtual asynStatus readInt16Array(asynUser *pasynUser, epicsInt16 *value,
00026                                         size_t nElements, size_t *nIn);
00027     virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value,
00028                                         size_t nElements, size_t *nIn);
00029     virtual asynStatus readFloat32Array(asynUser *pasynUser, epicsFloat32 *value,
00030                                         size_t nElements, size_t *nIn);
00031     virtual asynStatus readFloat64Array(asynUser *pasynUser, epicsFloat64 *value,
00032                                         size_t nElements, size_t *nIn);
00033 protected:
00034     int NDPluginStdArraysData;
00035     #define FIRST_NDPLUGIN_STDARRAYS_PARAM NDPluginStdArraysData
00036     #define LAST_NDPLUGIN_STDARRAYS_PARAM NDPluginStdArraysData
00037 private:
00038     /* These methods are just for this class */
00039     template <typename epicsType> asynStatus readArray(asynUser *pasynUser, epicsType *value, 
00040                                         size_t nElements, size_t *nIn, NDDataType_t outputType);
00041     template <typename epicsType, typename interruptType> void arrayInterruptCallback(NDArray *pArray, 
00042                             NDArrayPool *pNDArrayPool, 
00043                             void *interruptPvt, int *initialized, NDDataType_t signedType);
00044                                         
00045 };
00046 
00047 #define NUM_NDPLUGIN_STDARRAYS_PARAMS ((int)(&LAST_NDPLUGIN_STDARRAYS_PARAM - &FIRST_NDPLUGIN_STDARRAYS_PARAM + 1))
00048     
00049 #endif