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