00001 #ifndef NDPluginDriver_H
00002 #define NDPluginDriver_H
00003
00004 #include <epicsTypes.h>
00005 #include <epicsMessageQueue.h>
00006 #include <epicsTime.h>
00007 #include <asynStandardInterfaces.h>
00008
00009 #include "asynNDArrayDriver.h"
00010
00012 typedef enum
00013 {
00014 NDPluginDriverArrayPort
00015 = NDLastStdParam,
00016 NDPluginDriverArrayAddr,
00017 NDPluginDriverPluginType,
00018 NDPluginDriverArrayCounter,
00019 NDPluginDriverDroppedArrays,
00020 NDPluginDriverEnableCallbacks,
00021 NDPluginDriverBlockingCallbacks,
00022 NDPluginDriverMinCallbackTime,
00024 NDPluginDriverUniqueId,
00025 NDPluginDriverTimeStamp,
00026 NDPluginDriverDataType,
00027 NDPluginDriverColorMode,
00028 NDPluginDriverBayerPattern,
00029 NDPluginDriverNDimensions,
00030 NDPluginDriverDimensions,
00031 NDPluginDriverLastParam
00032 } NDPluginDriverParam_t;
00033
00035 class NDPluginDriver : public asynNDArrayDriver {
00036 public:
00037 NDPluginDriver(const char *portName, int queueSize, int blockingCallbacks,
00038 const char *NDArrayPort, int NDArrayAddr, int maxAddr, int paramTableSize,
00039 int maxBuffers, size_t maxMemory, int interfaceMask, int interruptMask,
00040 int asynFlags, int autoConnect, int priority, int stackSize);
00041
00042
00043 virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
00044 virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars,
00045 size_t *nActual);
00046 virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value,
00047 size_t nElements, size_t *nIn);
00048 virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
00049 const char **pptypeName, size_t *psize);
00050
00051
00052 virtual void driverCallback(asynUser *pasynUser, void *genericPointer);
00053 virtual void processTask(void);
00054
00055 protected:
00056 virtual void processCallbacks(NDArray *pArray);
00057 virtual asynStatus connectToArrayPort(void);
00058 asynUser *pasynUserGenericPointer;
00059 void *asynGenericPointerPvt;
00060 asynGenericPointer *pasynGenericPointer;
00062 private:
00063 virtual asynStatus setArrayInterrupt(int connect);
00064
00065
00066 void *asynGenericPointerInterruptPvt;
00067
00068
00069 epicsMessageQueueId msgQId;
00070 epicsTimeStamp lastProcessTime;
00071 int dimsPrev[ND_ARRAY_MAX_DIMS];
00072 };
00073
00074
00075 #endif