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
00011 #define NDPluginDriverArrayPortString "NDARRAY_PORT"
00012 #define NDPluginDriverArrayAddrString "NDARRAY_ADDR"
00013 #define NDPluginDriverPluginTypeString "PLUGIN_TYPE"
00014 #define NDPluginDriverDroppedArraysString "DROPPED_ARRAYS"
00015 #define NDPluginDriverEnableCallbacksString "ENABLE_CALLBACKS"
00016 #define NDPluginDriverBlockingCallbacksString "BLOCKING_CALLBACKS"
00017 #define NDPluginDriverMinCallbackTimeString "MIN_CALLBACK_TIME"
00021 class NDPluginDriver : public asynNDArrayDriver {
00022 public:
00023 NDPluginDriver(const char *portName, int queueSize, int blockingCallbacks,
00024 const char *NDArrayPort, int NDArrayAddr, int maxAddr, int numParams,
00025 int maxBuffers, size_t maxMemory, int interfaceMask, int interruptMask,
00026 int asynFlags, int autoConnect, int priority, int stackSize);
00027
00028
00029 virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
00030 virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars,
00031 size_t *nActual);
00032 virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value,
00033 size_t nElements, size_t *nIn);
00034
00035
00036 virtual void driverCallback(asynUser *pasynUser, void *genericPointer);
00037 virtual void processTask(void);
00038
00039 protected:
00040 virtual void processCallbacks(NDArray *pArray);
00041 virtual asynStatus connectToArrayPort(void);
00042 asynUser *pasynUserGenericPointer;
00043 void *asynGenericPointerPvt;
00044 asynGenericPointer *pasynGenericPointer;
00046 protected:
00047 int NDPluginDriverArrayPort;
00048 #define FIRST_NDPLUGIN_PARAM NDPluginDriverArrayPort
00049 int NDPluginDriverArrayAddr;
00050 int NDPluginDriverPluginType;
00051 int NDPluginDriverDroppedArrays;
00052 int NDPluginDriverEnableCallbacks;
00053 int NDPluginDriverBlockingCallbacks;
00054 int NDPluginDriverMinCallbackTime;
00055 #define LAST_NDPLUGIN_PARAM NDPluginDriverMinCallbackTime
00056
00057 private:
00058 virtual asynStatus setArrayInterrupt(int connect);
00059
00060
00061 void *asynGenericPointerInterruptPvt;
00062
00063
00064 epicsMessageQueueId msgQId;
00065 epicsTimeStamp lastProcessTime;
00066 int dimsPrev[ND_ARRAY_MAX_DIMS];
00067 };
00068 #define NUM_NDPLUGIN_PARAMS (&LAST_NDPLUGIN_PARAM - &FIRST_NDPLUGIN_PARAM + 1)
00069
00070
00071 #endif