ISIS Logo
PIXELMAN
EPICS plugin for Pixelman
pixelmanDriver.h
Go to the documentation of this file.
1 #ifndef PIXELMANDRIVER_H
2 #define PIXELMANDRIVER_H
3 
6 
7 #include "ADDriver.h"
8 
10 class pixelmanDriver : public ADDriver
11 {
12 public:
13  enum PixelmanCBEvent { MPX_UNKNOWN=0x0, MPX_ACQPRESTART=0x1, MPX_ACQSTART=0x2, MPX_SINGLEACQCOMP=0x3, MPX_SERIESACQCOMP=0x4, MPX_FRAMENEW=0x5 };
14 private:
15  struct HwInfo
16  {
17  HwInfoItem* item;
18  int index;
19  int dataSize;
20  HwInfo() : item(NULL), index(-1), dataSize(0) { }
21  HwInfo(HwInfoItem* item_, int index_, int dataSize_) : item(item_), index(index_), dataSize(dataSize_) { }
22  };
23  struct eventCBInfo
24  {
25  PixelmanCBEvent type;
26  CBPARAM par;
27  INTPTR userData;
28  eventCBInfo(PixelmanCBEvent type_ = MPX_UNKNOWN, CBPARAM par_ = 0, INTPTR userData_ = 0) : type(type_), par(par_), userData(userData_) { }
29  };
30  struct RunEndInfo
31  {
32  char fileName[512];
33  int fileIndex;
34  };
35  struct FrameInfo
36  {
37  FRAMEID fID;
38  ITEMID iID;
39  INTPTR userData;
40  FrameInfo(FRAMEID fID_ = 0, ITEMID iID_ = 0, INTPTR userData_ = 0) : fID(fID_), iID(iID_), userData(userData_) { }
41  };
42  epicsMessageQueue m_eventCBQueue;
43  epicsMessageQueue m_runEndQueue;
44  epicsMessageQueue m_frameQueue;
45  std::map<std::string,HwInfo> m_hwInfo;
46  std::map<int,std::string> m_paramInfo;
47  epicsTimeStamp m_cmd_time;
48  epicsTimeStamp m_start_time;
49  epicsTimeStamp m_abort_time;
50 
51  epicsMutex m_acq_start_mutex;
52  epicsMutex m_acq_abort_mutex;
53 
54  DEVID m_devId;
55  FRAMEID m_currentFrameID;
56  DevInfo m_devInfo;
57  int m_autoRestart;
58  double m_autoRestartDelay;
59  bool m_cmd_running;
60  bool m_start_running;
61  bool m_abort_running;
62  void cmdStart() { epicsTimeGetCurrent(&m_cmd_time); m_cmd_running = true; }
63  void cmdEnd() { m_cmd_running = false; }
64 
65  bool m_acqRunning;
66 
67  void getHwInfo(std::ostream& os);
68  void getHwItem(const std::string& name, int param);
69  void getAllHwItems();
70  void setHwItem(const std::string& name, int param);
71  void saveFinished(int fileIndex);
72 
73 public:
77  ACQ_ABORT=0x3
78  };
82  };
83  void pixelmanEventCB(PixelmanCBEvent e, CBPARAM par, INTPTR userData);
84 
85  pixelmanDriver(const char* portName, const char* devName);
86  int getDevId() const;
87  static void pollerThreadC(void* arg);
88  static void saverThreadC(void* arg);
89  static void pixelmanDriverRestarterC(void* arg);
91  {
92  pixelmanDriver* driver;
93  int acq_type;
94  int numberOfAcq;
95  double timeOfEachAcq;
96  u32 fileFlags;
97  char fileName[512];
98  AcquisitionThreadArgs(pixelmanDriver* d, int at) : driver(d), acq_type(at), numberOfAcq(0), timeOfEachAcq(0.0), fileFlags(0) { fileName[0] = '\0'; }
99  };
100  AcquisitionThreadArgs* createAcquisitionThreadArgs(int at);
101  static void acquisitionThreadC(void* arg);
102  void pixelmanEventCBProcess();
103  static void pixelmanEventCBProcessC(void* arg);
104  void frameFilter(FRAMEID fID, ITEMID iID, INTPTR userData);
105  void readFrame();
106  void processFrame(u32* buffer, u32 width, u32 height);
107  void acquisitionThread(AcquisitionThreadArgs* args);
108  virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
109 // virtual asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value);
110  virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
111 // virtual asynStatus readFloat64(asynUser *pasynUser, epicsFloat64 *value);
112 // virtual asynStatus readOctet(asynUser *pasynUser, char *value, size_t maxChars, size_t *nActual, int *eomReason);
113  virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual);
114 // virtual asynStatus readFloat64Array(asynUser *pasynUser, epicsFloat64 *value, size_t nElements, size_t *nIn);
115 // virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements, size_t *nIn);
116  virtual void setShutter(int open);
117  int computeImage(epicsUInt32 *value, u32 width, u32 height);
118  template <typename epicsType>
119  int computeArray(epicsUInt32* value, size_t nelements, int sizeX, int sizeY);
120 
121 private:
122 
123 #define FIRST_MCP_PARAM P_acqAbort
124 
125  int P_acqAbort;
126  int P_acqStart;
127  int P_trigAcqStart;
128  int P_trigAcqStop;
129 
130  // these parameters control the acquisiton requested by P_startAcquisition
131  int P_numberOfAcq;
132  int P_timeOfEachAcq; // double
133  int P_fileFlags;
134 // int P_fileName; ///< string
135 
136  // these are status paramters from reguisteed pixelman callbacks
137  int P_acqSActive;
138  int P_acqActive;
139 
140  // these four parameters are read from pixelman using mpxCtrlGetAcqInfo() in a polling loop an reflect acuuisition status
141  int P_acqType;
142  int P_acqTypeReq;
143  int P_frameFilled;
144  int P_acqTotalCount;
145  int P_acqNumber;
146  int P_frameID;
147  int P_acqMode;
148  int P_extShutMode;
149  int P_burstMode;
150 
151  int P_hwTimer;
152  int P_saveConfig; // string
153  int P_loadConfig; // string
154  int P_saveDefConfig; // int
155  int P_loadDefConfig; // int
156  int P_acqHang; // int
157  int P_hangTime; // double
158  int P_autoRestart; // int
159  int P_autoRestartDelay; // double
160 
161  int P_dataFileName;
162  int P_shutrCLKShift;
163  int P_tpxCubeBin;
164  int P_dataAcqMode;
165  int P_fileIndex;
166  int P_saveRawData;
167  int P_nShuttersPerBurst;
168  int P_nTrigsBurstRefresh;
169  int P_setPixelMode;
170  int P_cameraStatus;
171  int P_nTrigSavSub;
172 
173  int P_devId;
174 
175 #define LAST_MCP_PARAM P_devId
176 
177  NDArray* m_pRaw;
178 
179  void pollerThread();
180  void saverThread();
181  void pixelmanDriverRestarter();
182  static void printDevInfo(DevInfo* devInfo, std::ostream& os);
183  void setPixelMode(unsigned mode);
184  void setADAcquire(int acquire);
185  void frameProcess();
186 
187 };
188 
189 #define NUM_MCP_PARAMS (&LAST_MCP_PARAM - &FIRST_MCP_PARAM + 1)
190 
191 #define P_acqAbortString "ABORT"
192 #define P_acqStartString "START"
193 #define P_trigAcqStartString "TRIGSTART"
194 #define P_trigAcqStopString "TRIGSTOP"
195 #define P_numberOfAcqString "NUMACQ"
196 #define P_timeOfEachAcqString "ACQTIME"
197 #define P_fileFlagsString "FILEFLAGS"
198 //#define P_fileNameString "FILENAME"
199 #define P_acqSActiveString "ACQSACTIVE"
200 #define P_acqActiveString "ACQACTIVE"
201 #define P_acqTypeString "ACQTYPE"
202 #define P_acqTypeReqString "ACQTYPEREQ"
203 #define P_frameFilledString "FRAMEFILLED"
204 #define P_acqTotalCountString "ACQTOTCNT"
205 #define P_acqNumberString "ACQNUM"
206 #define P_acqModeString "ACQMODE"
207 #define P_burstModeString "BURSTMODE"
208 #define P_extShutModeString "EXTSHUTMODE"
209 #define P_hwTimerString "HWTIMER"
210 #define P_devIdString "DEVID"
211 #define P_frameIDString "FRAMEID"
212 
213 #define P_saveConfigString "SAVECONFIG"
214 #define P_loadConfigString "LOADCONFIG"
215 #define P_saveDefConfigString "SAVEDEFCONFIG"
216 #define P_loadDefConfigString "LOADDEFCONFIG"
217 
218 #define P_acqHangString "ACQHANG"
219 #define P_hangTimeString "HANGTIME"
220 #define P_autoRestartString "AUTORESTART"
221 #define P_autoRestartDelayString "AUTORESTARTDELAY"
222 
223 #define P_dataFileNameString "DATAFILENAME"
224 #define P_shutrCLKShiftString "SHTRCLKSHIFT"
225 #define P_tpxCubeBinString "TPXCUBEBIN"
226 #define P_dataAcqModeString "DATAACQMODE"
227 #define P_fileIndexString "FILEINDEX"
228 #define P_saveRawDataString "SAVERAWDATA"
229 #define P_nShuttersPerBurstString "NSHUTTERSPERBURST"
230 #define P_nTrigsBurstRefreshString "NTRIGSBURSTREFRESH"
231 #define P_setPixelModeString "SETPIXELMODE"
232 #define P_cameraStatusString "CAMERASTATUS"
233 
234 #define P_nTrigSavSubString "NTRIGSAVSUB"
235 #endif /* PIXELMANDRIVER_H */
start integral acquisition
camera not taking data
camera writing to file
start frame acquisition
abort acquisition
virtual void setShutter(int open)
Controls the shutter.
pixelman asyn driver
PixelmanAcqType
Acquisition type to request.
int acq_type
actually PixelmanAcqType
int computeImage(epicsUInt32 *value, u32 width, u32 height)
Computes the new image data.
Copyright © 2013 Science and Technology Facilities Council | Generated by   doxygen 1.8.5