areaDetector 1-9
/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 
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