areaDetector 1-9
|
00001 00012 #ifndef ANDORCCD_H 00013 #define ANDORCCD_H 00014 00015 #include "ADDriver.h" 00016 00017 #define MAX_ENUM_STRING_SIZE 26 00018 #define MAX_ADC_SPEEDS 16 00019 #define MAX_PREAMP_GAINS 16 00020 00021 #define AndorCoolerParamString "ANDOR_COOLER" 00022 #define AndorTempStatusMessageString "ANDOR_TEMP_STAT" 00023 #define AndorMessageString "ANDOR_MESSAGE" 00024 #define AndorShutterModeString "ANDOR_SHUTTER_MODE" 00025 #define AndorShutterExTTLString "ANDOR_SHUTTER_EXTTL" 00026 #define AndorPalFileNameString "ANDOR_PAL_FILE_PATH" 00027 #define AndorAccumulatePeriodString "ANDOR_ACCUMULATE_PERIOD" 00028 #define AndorPreAmpGainString "ANDOR_PREAMP_GAIN" 00029 #define AndorAdcSpeedString "ANDOR_ADC_SPEED" 00030 00031 typedef struct { 00032 int ADCIndex; 00033 int AmpIndex; 00034 int HSSpeedIndex; 00035 float HSSpeed; 00036 int BitDepth; 00037 char *EnumString; 00038 int EnumValue; 00039 } AndorADCSpeed_t; 00040 00041 typedef struct { 00042 float Gain; 00043 char *EnumString; 00044 int EnumValue; 00045 } AndorPreAmpGain_t; 00046 00051 class AndorCCD : public ADDriver { 00052 public: 00053 AndorCCD(const char *portName, int maxBuffers, size_t maxMemory, 00054 const char *installPath, int priority, int stackSize); 00055 virtual ~AndorCCD(); 00056 00057 /* These are the methods that we override from ADDriver */ 00058 virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value); 00059 virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value); 00060 virtual void report(FILE *fp, int details); 00061 virtual asynStatus readEnum(asynUser *pasynUser, char *strings[], int values[], int severities[], 00062 size_t nElements, size_t *nIn); 00063 00064 // Should be private, but are called from C so must be public 00065 void statusTask(void); 00066 void dataTask(void); 00067 00068 protected: 00069 int AndorCoolerParam; 00070 #define FIRST_ANDOR_PARAM AndorCoolerParam 00071 int AndorTempStatusMessage; 00072 int AndorMessage; 00073 int AndorShutterMode; 00074 int AndorShutterExTTL; 00075 int AndorPalFileName; 00076 int AndorAccumulatePeriod; 00077 int AndorPreAmpGain; 00078 int AndorAdcSpeed; 00079 #define LAST_ANDOR_PARAM AndorAdcSpeed 00080 00081 private: 00082 00083 unsigned int checkStatus(unsigned int returnStatus); 00084 asynStatus setupAcquisition(); 00085 asynStatus setupShutter(int command); 00086 void saveDataFrame(int frameNumber); 00087 void setupADCSpeeds(); 00088 void setupPreAmpGains(); 00092 static const epicsInt32 AImageFastKinetics; 00093 00097 static const epicsUInt32 AASingle; 00098 static const epicsUInt32 AAAccumulate; 00099 static const epicsUInt32 AAKinetics; 00100 static const epicsUInt32 AAFastKinetics; 00101 static const epicsUInt32 AARunTillAbort; 00102 static const epicsUInt32 AATimeDelayedInt; 00103 00107 static const epicsUInt32 ATInternal; 00108 static const epicsUInt32 ATExternal; 00109 static const epicsUInt32 ATExternalStart; 00110 static const epicsUInt32 ATExternalExposure; 00111 static const epicsUInt32 ATExternalFVB; 00112 static const epicsUInt32 ATSoftware; 00113 00117 static const epicsUInt32 ASIdle; 00118 static const epicsUInt32 ASTempCycle; 00119 static const epicsUInt32 ASAcquiring; 00120 static const epicsUInt32 ASAccumTimeNotMet; 00121 static const epicsUInt32 ASKineticTimeNotMet; 00122 static const epicsUInt32 ASErrorAck; 00123 static const epicsUInt32 ASAcqBuffer; 00124 static const epicsUInt32 ASSpoolError; 00125 00129 static const epicsInt32 ARFullVerticalBinning; 00130 static const epicsInt32 ARMultiTrack; 00131 static const epicsInt32 ARRandomTrack; 00132 static const epicsInt32 ARSingleTrack; 00133 static const epicsInt32 ARImage; 00134 00138 static const epicsInt32 AShutterAuto; 00139 static const epicsInt32 AShutterOpen; 00140 static const epicsInt32 AShutterClose; 00141 00145 static const epicsInt32 AFFTIFF; 00146 static const epicsInt32 AFFBMP; 00147 static const epicsInt32 AFFSIF; 00148 static const epicsInt32 AFFEDF; 00149 static const epicsInt32 AFFRAW; 00150 static const epicsInt32 AFFFITS; 00151 00152 epicsEventId statusEvent; 00153 epicsEventId dataEvent; 00154 double mPollingPeriod; 00155 double mFastPollingPeriod; 00156 unsigned int mAcquiringData; 00157 char *mInstallPath; 00158 00162 int mNumAmps; 00163 int mNumADCs; 00164 int mNumADCSpeeds; 00165 AndorADCSpeed_t mADCSpeeds[MAX_ADC_SPEEDS]; 00166 int mTotalPreAmpGains; 00167 int mNumPreAmpGains; 00168 AndorPreAmpGain_t mPreAmpGains[MAX_PREAMP_GAINS]; 00169 00170 //Shutter control parameters 00171 float mAcquireTime; 00172 float mAcquirePeriod; 00173 float mAccumulatePeriod; 00174 00175 }; 00176 00177 #define NUM_ANDOR_DET_PARAMS ((int)(&LAST_ANDOR_PARAM - &FIRST_ANDOR_PARAM + 1)) 00178 00179 #endif //ANDORCCD_H 00180