1 #ifndef PIXELMANDRIVER_H
2 #define PIXELMANDRIVER_H
7 #include "asynPortDriver.h"
13 enum PixelmanCBEvent { MPX_UNKNOWN=0x0, MPX_ACQPRESTART=0x1, MPX_ACQSTART=0x2, MPX_SINGLEACQCOMP=0x3, MPX_SERIESACQCOMP=0x4 };
20 HwInfo() : item(NULL), index(-1), dataSize(0) { }
21 HwInfo(HwInfoItem* item_,
int index_,
int dataSize_) : item(item_), index(index_), dataSize(dataSize_) { }
26 eventCBInfo(PixelmanCBEvent type_ = MPX_UNKNOWN) : type(type_) { }
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;
41 epicsMutex m_acq_start_mutex;
42 epicsMutex m_acq_abort_mutex;
47 double m_autoRestartDelay;
51 void cmdStart() { epicsTimeGetCurrent(&m_cmd_time); m_cmd_running =
true; }
52 void cmdEnd() { m_cmd_running =
false; }
56 void getHwInfo(std::ostream& os);
57 void getHwItem(
const std::string& name,
int param);
59 void setHwItem(
const std::string& name,
int param);
60 void saveFinished(
int fileIndex);
72 void pixelmanEventCB(PixelmanCBEvent e, intptr_t userData);
76 static void pollerThreadC(
void* arg);
77 static void saverThreadC(
void* arg);
78 static void pixelmanDriverRestarterC(
void* arg);
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);
96 virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
99 virtual asynStatus writeOctet(asynUser *pasynUser,
const char *value,
size_t maxChars,
size_t *nActual);
105 #define FIRST_MCP_PARAM P_acquire
142 int P_autoRestartDelay;
150 int P_nShuttersPerBurst;
151 int P_nTrigsBurstRefresh;
158 #define LAST_MCP_PARAM P_devId
162 void pixelmanDriverRestarter();
163 static void printDevInfo(DevInfo* devInfo, std::ostream& os);
164 void setPixelMode(
unsigned mode);
168 #define NUM_MCP_PARAMS (&LAST_MCP_PARAM - &FIRST_MCP_PARAM + 1)
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"
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"
192 #define P_saveConfigString "SAVECONFIG"
193 #define P_loadConfigString "LOADCONFIG"
194 #define P_saveDefConfigString "SAVEDEFCONFIG"
195 #define P_loadDefConfigString "LOADDEFCONFIG"
197 #define P_acqHangString "ACQHANG"
198 #define P_hangTimeString "HANGTIME"
199 #define P_autoRestartString "AUTORESTART"
200 #define P_autoRestartDelayString "AUTORESTARTDELAY"
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"
213 #define P_nTrigSavSubString "NTRIGSAVSUB"
start integral acquisition
int acq_type
actually PixelmanAcqType
PixelmanAcqType
Acquisition type to request.