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