areaDetector 1-8
|
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