areaDetector 1-8
/home/epics/devel/areaDetector/ADApp/ADSrc/ADDriver.h
Go to the documentation of this file.
00001 #ifndef ADDriver_H
00002 #define ADDriver_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 
00013 #define AREA_DETECTOR_OK 0
00014 
00015 #define AREA_DETECTOR_ERROR -1
00016 
00018 typedef enum
00019 {
00020     ADShutterClosed,    
00021     ADShutterOpen       
00022 } ADShutterStatus_t;
00023 
00025 typedef enum
00026 {
00027     ADShutterModeNone,      
00028     ADShutterModeEPICS,     
00029     ADShutterModeDetector   
00030 } ADShutterMode_t;
00031 
00033 typedef enum
00034 {
00035     ADStatusIdle,         
00036     ADStatusAcquire,      
00037     ADStatusReadout,      
00038     ADStatusCorrect,      
00039     ADStatusSaving,       
00040     ADStatusAborting,     
00041     ADStatusError,        
00042     ADStatusWaiting,      
00043     ADStatusInitializing, 
00044     ADStatusDisconnected, 
00045     ADStatusAborted       
00046 } ADStatus_t;
00047 
00049 typedef enum
00050 {
00051     ADImageSingle,      
00052     ADImageMultiple,    
00053     ADImageContinuous   
00054 } ADImageMode_t;
00055 
00056 /* Enumeration of frame types */
00057 typedef enum
00058 {
00059     ADFrameNormal,          
00060     ADFrameBackground,      
00061     ADFrameFlatField,       
00062     ADFrameDoubleCorrelation      
00063 } ADFrameType_t;
00064 
00065 /* Enumeration of trigger modes */
00066 typedef enum
00067 {
00068     ADTriggerInternal,      
00069     ADTriggerExternal       
00070 } ADTriggerMode_t;
00071 
00076  /*                               String                 asyn interface  access   Description  */
00077 #define ADManufacturerString        "MANUFACTURER"          
00078 #define ADModelString               "MODEL"                 
00080 #define ADGainString                "GAIN"                  
00082     /* Parameters that control the detector binning */
00083 #define ADBinXString                "BIN_X"                 
00084 #define ADBinYString                "BIN_Y"                 
00086     /* Parameters the control the region of the detector to be read out.
00087     * ADMinX, ADMinY, ADSizeX, and ADSizeY are in unbinned pixel units */
00088 #define ADMinXString                "MIN_X"                 
00089 #define ADMinYString                "MIN_Y"                 
00090 #define ADSizeXString               "SIZE_X"                
00091 #define ADSizeYString               "SIZE_Y"                
00092 #define ADMaxSizeXString            "MAX_SIZE_X"            
00093 #define ADMaxSizeYString            "MAX_SIZE_Y"            
00095     /* Parameters that control the orientation of the image */
00096 #define ADReverseXString            "REVERSE_X"             
00097 #define ADReverseYString            "REVERSE_Y"             
00099     /* Parameters defining the acquisition parameters. */
00100 #define ADFrameTypeString           "FRAME_TYPE"            
00101 #define ADImageModeString           "IMAGE_MODE"            
00102 #define ADTriggerModeString         "TRIGGER_MODE"          
00103 #define ADNumExposuresString        "NEXPOSURES"            
00104 #define ADNumImagesString           "NIMAGES"               
00105 #define ADAcquireTimeString         "ACQ_TIME"              
00106 #define ADAcquirePeriodString       "ACQ_PERIOD"            
00107 #define ADStatusString              "STATUS"                
00108 #define ADAcquireString             "ACQUIRE"               
00110     /* Shutter parameters */
00111 #define ADShutterControlString      "SHUTTER_CONTROL"       
00112 #define ADShutterControlEPICSString "SHUTTER_CONTROL_EPICS" 
00113 #define ADShutterStatusString       "SHUTTER_STATUS"        
00114 #define ADShutterModeString         "SHUTTER_MODE"          
00115 #define ADShutterOpenDelayString    "SHUTTER_OPEN_DELAY"    
00116 #define ADShutterCloseDelayString   "SHUTTER_CLOSE_DELAY"   
00118     /* Temperature parameters */
00119 #define ADTemperatureString         "TEMPERATURE"           
00120 #define ADTemperatureActualString   "TEMPERATURE_ACTUAL"    
00122     /* Statistics on number of images collected and the image rate */
00123 #define ADNumImagesCounterString    "NIMAGES_COUNTER"       
00124 #define ADNumExposuresCounterString "NEXPOSURES_COUNTER"    
00125 #define ADTimeRemainingString       "TIME_REMAINING"        
00127     /* Status reading */
00128 #define ADReadStatusString          "READ_STATUS"           
00130     /* Status message strings */
00131 #define ADStatusMessageString       "STATUS_MESSAGE"        
00132 #define ADStringToServerString      "STRING_TO_SERVER"      
00133 #define ADStringFromServerString    "STRING_FROM_SERVER"    
00136 class ADDriver : public asynNDArrayDriver {
00137 public:
00138     /* This is the constructor for the class. */
00139     ADDriver(const char *portName, int maxAddr, int numParams, int maxBuffers, size_t maxMemory,
00140              int interfaceMask, int interruptMask,
00141              int asynFlags, int autoConnect, int priority, int stackSize);
00142 
00143     /* These are the methods that we override from asynPortDriver */
00144     virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
00145 
00146     /* These are the methods that are new to this class */
00147     virtual void setShutter(int open);
00148 
00149 protected:
00150     int ADManufacturer;
00151     #define FIRST_AD_PARAM ADManufacturer
00152     int ADModel;
00153     int ADGain;
00154     int ADBinX;
00155     int ADBinY;
00156     int ADMinX;
00157     int ADMinY;
00158     int ADSizeX;
00159     int ADSizeY;
00160     int ADMaxSizeX;
00161     int ADMaxSizeY;
00162     int ADReverseX;
00163     int ADReverseY;
00164     int ADFrameType;
00165     int ADImageMode;
00166     int ADNumExposures;
00167     int ADNumExposuresCounter;
00168     int ADNumImages;
00169     int ADNumImagesCounter;
00170     int ADAcquireTime;
00171     int ADAcquirePeriod;
00172     int ADTimeRemaining;
00173     int ADStatus;
00174     int ADTriggerMode;
00175     int ADAcquire;
00176     int ADShutterControl;
00177     int ADShutterControlEPICS;
00178     int ADShutterStatus;
00179     int ADShutterMode;
00180     int ADShutterOpenDelay;
00181     int ADShutterCloseDelay;
00182     int ADTemperature;
00183     int ADTemperatureActual;
00184     int ADReadStatus;
00185     int ADStatusMessage;
00186     int ADStringToServer;
00187     int ADStringFromServer; 
00188     #define LAST_AD_PARAM ADStringFromServer   
00189 };
00190 #define NUM_AD_PARAMS (&LAST_AD_PARAM - &FIRST_AD_PARAM + 1)
00191 
00192 #endif