areaDetector 1-9
|
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 NDPluginDriverQueueSizeString "QUEUE_SIZE" 00016 #define NDPluginDriverQueueFreeString "QUEUE_FREE" 00017 #define NDPluginDriverEnableCallbacksString "ENABLE_CALLBACKS" 00018 #define NDPluginDriverBlockingCallbacksString "BLOCKING_CALLBACKS" 00019 #define NDPluginDriverMinCallbackTimeString "MIN_CALLBACK_TIME" 00023 class NDPluginDriver : public asynNDArrayDriver { 00024 public: 00025 NDPluginDriver(const char *portName, int queueSize, int blockingCallbacks, 00026 const char *NDArrayPort, int NDArrayAddr, int maxAddr, int numParams, 00027 int maxBuffers, size_t maxMemory, int interfaceMask, int interruptMask, 00028 int asynFlags, int autoConnect, int priority, int stackSize); 00029 00030 /* These are the methods that we override from asynNDArrayDriver */ 00031 virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value); 00032 virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars, 00033 size_t *nActual); 00034 virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value, 00035 size_t nElements, size_t *nIn); 00036 00037 /* These are the methods that are new to this class */ 00038 virtual void driverCallback(asynUser *pasynUser, void *genericPointer); 00039 virtual void processTask(void); 00040 00041 protected: 00042 virtual void processCallbacks(NDArray *pArray); 00043 virtual asynStatus connectToArrayPort(void); 00044 00045 protected: 00046 int NDPluginDriverArrayPort; 00047 #define FIRST_NDPLUGIN_PARAM NDPluginDriverArrayPort 00048 int NDPluginDriverArrayAddr; 00049 int NDPluginDriverPluginType; 00050 int NDPluginDriverDroppedArrays; 00051 int NDPluginDriverQueueSize; 00052 int NDPluginDriverQueueFree; 00053 int NDPluginDriverEnableCallbacks; 00054 int NDPluginDriverBlockingCallbacks; 00055 int NDPluginDriverMinCallbackTime; 00056 #define LAST_NDPLUGIN_PARAM NDPluginDriverMinCallbackTime 00057 00058 private: 00059 virtual asynStatus setArrayInterrupt(int connect); 00060 00061 /* The asyn interfaces we access as a client */ 00062 void *asynGenericPointerInterruptPvt; 00063 00064 /* Our data */ 00065 asynUser *pasynUserGenericPointer; 00066 void *asynGenericPointerPvt; 00067 asynGenericPointer *pasynGenericPointer; 00068 bool connectedToArrayPort; 00069 epicsMessageQueueId msgQId; 00070 epicsTimeStamp lastProcessTime; 00071 int dimsPrev[ND_ARRAY_MAX_DIMS]; 00072 }; 00073 #define NUM_NDPLUGIN_PARAMS ((int)(&LAST_NDPLUGIN_PARAM - &FIRST_NDPLUGIN_PARAM + 1)) 00074 00075 00076 #endif