areaDetector 1-8
|
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 asynUser *pasynUserGenericPointer; 00045 void *asynGenericPointerPvt; 00046 asynGenericPointer *pasynGenericPointer; 00048 protected: 00049 int NDPluginDriverArrayPort; 00050 #define FIRST_NDPLUGIN_PARAM NDPluginDriverArrayPort 00051 int NDPluginDriverArrayAddr; 00052 int NDPluginDriverPluginType; 00053 int NDPluginDriverDroppedArrays; 00054 int NDPluginDriverQueueSize; 00055 int NDPluginDriverQueueFree; 00056 int NDPluginDriverEnableCallbacks; 00057 int NDPluginDriverBlockingCallbacks; 00058 int NDPluginDriverMinCallbackTime; 00059 #define LAST_NDPLUGIN_PARAM NDPluginDriverMinCallbackTime 00060 00061 private: 00062 virtual asynStatus setArrayInterrupt(int connect); 00063 00064 /* The asyn interfaces we access as a client */ 00065 void *asynGenericPointerInterruptPvt; 00066 00067 /* Our data */ 00068 epicsMessageQueueId msgQId; 00069 epicsTimeStamp lastProcessTime; 00070 int dimsPrev[ND_ARRAY_MAX_DIMS]; 00071 }; 00072 #define NUM_NDPLUGIN_PARAMS (&LAST_NDPLUGIN_PARAM - &FIRST_NDPLUGIN_PARAM + 1) 00073 00074 00075 #endif