areaDetector 1-8
/home/epics/devel/areaDetector/ADApp/pluginSrc/NDPluginDriver.h
Go to the documentation of this file.
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