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"
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
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
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 (&LAST_NDPLUGIN_STDARRAYS_PARAM - &FIRST_NDPLUGIN_STDARRAYS_PARAM + 1)
00048
00049 #endif