areaDetector  3-13
EPICS areaDetector framework
PerkinElmer.h
Go to the documentation of this file.
1 /* PerkinElmer.h
2  *
3  * This is a driver the PerkinElmer Image Plates
4  * Models: XRD0820
5  * XRF0822
6  *
7  *
8  * Author: Brian Tieman
9  *
10  * Created: 07/24/2008
11  *
12  * Current author: Mark Rivers
13  *
14  */
15 
16 #ifndef PERKINELMER_H
17 #define PERKINELMER_H
18 
19 #include "ADDriver.h"
20 
21 #include <windows.h>
22 
23 // Structures defined in Acq.h must be packed
24 #pragma pack(1)
25 #include "Acq.h"
26 #pragma pack()
27 
28 //______________________________________________________________________________________________
29 
30 static const char *driverName = "PerkinElmer";
31 
32 //______________________________________________________________________________________________
33 
34 
35 typedef enum
36 {
41 
42 // We add an additional mode to ADImageMode = PEImageAverage
43 
44 typedef enum
45 {
51 
52 typedef enum
53 {
59 
60 typedef enum
61 {
68 
69 
70 //______________________________________________________________________________________________
71 
72 class PerkinElmer;
73 
76 class PerkinElmer : public ADDriver
77 {
78 public:
79  PerkinElmer(const char *portName, int IDType, const char *IDValue,
80  int maxBuffers, size_t maxMemory,
81  int priority, int stackSize);
82 
83  /* These are the methods that we override from ADDriver */
84  virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
85  virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
86  void report(FILE *fp, int details);
87 
88  // These should really be private, but they are called from C so must be public
89  void endFrameCallback(HACQDESC hAcqDesc);
90  void endAcqCallback(HACQDESC hAcqDesc);
91  void acquireStopTask(void);
92  ~PerkinElmer();
93 
94 protected:
96 #define PE_FIRST_PARAM PE_Initialize
116  int PE_Gain;
132 
133 
134 private:
135  int IDType_;
136  char *IDValue_;
137  HACQDESC hAcqDesc_;
138  epicsEventId acquireStopEvent_;
139  epicsUInt16 *pAcqBuffer_;
140  epicsUInt16 *pOffsetBuffer_;
141  DWORD *pGainBuffer_;
142  epicsUInt16 *pBadPixelMap_;
143  int *pPixelCorrectionList_;
144  unsigned int uiNumFrameBuffers_;
145  unsigned int uiNumBuffersInUse_;
146  int iAcqMode_;
147  // Keep a copy of parmeters for Acquistion_EnumSensors
148  unsigned int uiNumSensors_;
149  // Keep a copy of parmeters for Acquisition_GetCommChannel
150  unsigned int uiChannelType_;
151  int iChannelNum_;
152  // Keep a copy of parmeters from Acquisition_GetConfiguration
153  unsigned int uiDevFrames_;
154  unsigned int uiRows_;
155  unsigned int uiColumns_;
156  unsigned int uiDataType_;
157  unsigned int uiSortFlags_;
158  CHwHeaderInfo cHwHeaderInfo_;
159  CHwHeaderInfoEx cHwHeaderInfoEx_;
160  BOOL bEnableIRQ_;
161  DWORD dwAcqType_;
162  DWORD dwSystemID_;
163  DWORD dwSyncMode_;
164  DWORD dwHwAccess_;
165  DWORD dwBoardType_;
166  bool acquireSettingsChanged_;
167  bool doSoftwareTriggers_;
168 
169  bool initializeDetector (void);
170  void setBinning(void);
171  void reportSensors(FILE *fp, int details);
172 
173  void acquireSetup(void);
174  void acquireStop(void);
175  void acquireNormalImage(void);
176  void acquireOffsetImage(void);
177  void acquireGainImage(void);
178  void doSoftwareTrigger(void);
179 
180  asynStatus loadGainFile(void);
181  asynStatus saveGainFile(void);
182  asynStatus loadPixelCorrectionFile();
183  asynStatus setTriggerOut();
184 
185  void reportXISStatus(int errorCode, const char *functionName, const char *formatString, ...);
186 
187 };
188 
189 //______________________________________________________________________________________________
190 #define PE_SystemIDString "PE_SYSTEMID"
191 #define PE_InitializeString "PE_INITIALIZE"
192 #define PE_CorrectionsDirectoryString "PE_CORRECTIONS_DIRECTORY"
193 #define PE_AcquireOffsetString "PE_ACQUIRE_OFFSET"
194 #define PE_NumOffsetFramesString "PE_NUM_OFFSET_FRAMES"
195 #define PE_CurrentOffsetFrameString "PE_CURRENT_OFFSET_FRAME"
196 #define PE_UseOffsetString "PE_USE_OFFSET"
197 #define PE_OffsetAvailableString "PE_OFFSET_AVAILABLE"
198 #define PE_OffsetConstantString "PE_OFFSET_CONSTANT"
199 #define PE_AcquireGainString "PE_ACQUIRE_GAIN"
200 #define PE_NumGainFramesString "PE_NUM_GAIN_FRAMES"
201 #define PE_CurrentGainFrameString "PE_CURRENT_GAIN_FRAME"
202 #define PE_UseGainString "PE_USE_GAIN"
203 #define PE_GainAvailableString "PE_GAIN_AVAILABLE"
204 #define PE_GainFileString "PE_GAIN_FILE"
205 #define PE_LoadGainFileString "PE_LOAD_GAIN_FILE"
206 #define PE_SaveGainFileString "PE_SAVE_GAIN_FILE"
207 #define PE_UsePixelCorrectionString "PE_USE_PIXEL_CORRECTION"
208 #define PE_PixelCorrectionAvailableString "PE_PIXEL_CORRECTION_AVAILABLE"
209 #define PE_PixelCorrectionFileString "PE_PIXEL_CORRECTION_FILE"
210 #define PE_LoadPixelCorrectionFileString "PE_LOAD_PIXEL_CORRECTION_FILE"
211 #define PE_GainString "PE_GAIN"
212 #define PE_NumFrameBuffersString "PE_NUM_FRAME_BUFFERS"
213 #define PE_TriggerString "PE_TRIGGER"
214 #define PE_SyncModeString "PE_SYNC_MODE"
215 #define PE_FrameBufferIndexString "PE_FRAME_BUFFER_INDEX"
216 #define PE_ImageNumberString "PE_IMAGE_NUMBER"
217 #define PE_SkipFramesString "PE_SKIP_FRAMES"
218 #define PE_NumFramesToSkipString "PE_NUM_FRAMES_TO_SKIP"
219 #define PE_TriggerOutSignalString "PE_TRIGGER_OUT_SIGNAL"
220 #define PE_TriggerOutEPLengthString "PE_TRIGGER_OUT_EP_LENGTH"
221 #define PE_TriggerOutEPFirstFrameString "PE_TRIGGER_OUT_EP_FIRST_FRAME"
222 #define PE_TriggerOutEPLastFrameString "PE_TRIGGER_OUT_EP_LAST_FRAME"
223 #define PE_TriggerOutEPDelay1String "PE_TRIGGER_OUT_EP_DELAY1"
224 #define PE_TriggerOutEPDelay2String "PE_TRIGGER_OUT_EP_DELAY2"
225 #define PE_TriggerOutDDDDelayString "PE_TRIGGER_OUT_DDD_DELAY"
226 #define PE_TriggerOutEdgeString "PE_TRIGGER_OUT_EDGE"
227 
228 //______________________________________________________________________________________________
229 
230 #endif
@ ADImageSingle
Collect a single image per Acquire command.
Definition: ADDriver.h:50
@ ADImageContinuous
Collect images continuously until Acquire is set to 0.
Definition: ADDriver.h:52
@ ADImageMultiple
Collect ADNumImages images per Acquire command.
Definition: ADDriver.h:51
const char * driverName
Definition: ADTimePix.cpp:73
PEAcquisitionMode_t
Definition: PerkinElmer.h:36
@ PE_ACQUIRE_ACQUISITION
Definition: PerkinElmer.h:37
@ PE_ACQUIRE_OFFSET
Definition: PerkinElmer.h:38
@ PE_ACQUIRE_GAIN
Definition: PerkinElmer.h:39
PESyncMode_t
Definition: PerkinElmer.h:61
@ PE_SYNC_LINEWISE
Definition: PerkinElmer.h:64
@ PE_SYNC_DDD_CLEAR
Definition: PerkinElmer.h:62
@ PE_SYNC_DDD_NOCLEAR
Definition: PerkinElmer.h:63
@ PE_SYNC_AUTOTRIGGER
Definition: PerkinElmer.h:66
@ PE_SYNC_FRAMEWISE
Definition: PerkinElmer.h:65
PEImageMode_t
Definition: PerkinElmer.h:45
@ PEImageAverage
Definition: PerkinElmer.h:49
@ PEImageSingle
Definition: PerkinElmer.h:46
@ PEImageMultiple
Definition: PerkinElmer.h:47
@ PEImageContinuous
Definition: PerkinElmer.h:48
PETimingMode_t
Definition: PerkinElmer.h:53
@ PE_FREE_RUNNING
Definition: PerkinElmer.h:56
@ PE_SOFT_TRIGGER
Definition: PerkinElmer.h:57
@ PE_EXTERNAL_TRIGGER
Definition: PerkinElmer.h:55
@ PE_INTERNAL_TRIGGER
Definition: PerkinElmer.h:54
Class from which areaDetector drivers are directly derived.
Definition: ADDriver.h:132
Driver for the Perkin Elmer flat panel amorphous silicon detectors.
Definition: PerkinElmer.h:77
int PE_NumGainFrames
Definition: PerkinElmer.h:105
int PE_TriggerOutEPLength
Definition: PerkinElmer.h:125
int PE_TriggerOutSignal
Definition: PerkinElmer.h:124
int PE_Trigger
Definition: PerkinElmer.h:118
int PE_GainFile
Definition: PerkinElmer.h:109
int PE_AcquireGain
Definition: PerkinElmer.h:104
int PE_SaveGainFile
Definition: PerkinElmer.h:111
int PE_GainAvailable
Definition: PerkinElmer.h:108
int PE_ImageNumber
Definition: PerkinElmer.h:121
int PE_NumFrameBuffers
Definition: PerkinElmer.h:117
int PE_PixelCorrectionAvailable
Definition: PerkinElmer.h:113
int PE_LoadPixelCorrectionFile
Definition: PerkinElmer.h:115
int PE_OffsetAvailable
Definition: PerkinElmer.h:102
int PE_CorrectionsDirectory
Definition: PerkinElmer.h:97
int PE_CurrentGainFrame
Definition: PerkinElmer.h:106
int PE_SyncMode
Definition: PerkinElmer.h:119
int PE_TriggerOutEPFirstFrame
Definition: PerkinElmer.h:126
int PE_NumFramesToSkip
Definition: PerkinElmer.h:123
int PE_UseGain
Definition: PerkinElmer.h:107
void report(FILE *fp, int details)
Report status of the driver.
Definition: PerkinElmer.cpp:583
int PE_TriggerOutEdge
Definition: PerkinElmer.h:131
int PE_UsePixelCorrection
Definition: PerkinElmer.h:112
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value)
Called when asyn clients call pasynInt32->write().
Definition: PerkinElmer.cpp:1062
int PE_TriggerOutDDDDelay
Definition: PerkinElmer.h:130
int PE_OffsetConstant
Definition: PerkinElmer.h:103
int PE_SkipFrames
Definition: PerkinElmer.h:122
int PE_NumOffsetFrames
Definition: PerkinElmer.h:99
int PE_TriggerOutEPDelay2
Definition: PerkinElmer.h:129
void endAcqCallback(HACQDESC hAcqDesc)
callback function that is called by XISL at end of acquisition
Definition: PerkinElmer.cpp:997
void acquireStopTask(void)
Definition: PerkinElmer.cpp:1526
PerkinElmer(const char *portName, int IDType, const char *IDValue, int maxBuffers, size_t maxMemory, int priority, int stackSize)
Constructor for Perkin Elmer driver; most parameters are simply passed to ADDriver::ADDriver.
Definition: PerkinElmer.cpp:103
int PE_Gain
Definition: PerkinElmer.h:116
int PE_PixelCorrectionFile
Definition: PerkinElmer.h:114
int PE_LoadGainFile
Definition: PerkinElmer.h:110
virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value)
Called when asyn clients call pasynFloat64->write().
Definition: PerkinElmer.cpp:1178
int PE_FrameBufferIndex
Definition: PerkinElmer.h:120
int PE_CurrentOffsetFrame
Definition: PerkinElmer.h:100
int PE_TriggerOutEPDelay1
Definition: PerkinElmer.h:128
int PE_Initialize
Definition: PerkinElmer.h:95
void endFrameCallback(HACQDESC hAcqDesc)
callback function that is called by XISL every frame at end of data transfer
Definition: PerkinElmer.cpp:791
~PerkinElmer()
Destructor for Perkin Elmer driver; most parameters are simply passed to ADDriver::ADDriver.
Definition: PerkinElmer.cpp:218
int PE_AcquireOffset
Definition: PerkinElmer.h:98
int PE_UseOffset
Definition: PerkinElmer.h:101
int PE_TriggerOutEPLastFrame
Definition: PerkinElmer.h:127
list value
Definition: makeDbAndEdl.py:234
#define DWORD
Definition: pco_structures.h:443