1 #ifndef PIXELMANDRIVER_H
2 #define PIXELMANDRIVER_H
13 enum PixelmanCBEvent { MPX_UNKNOWN=0x0, MPX_ACQPRESTART=0x1, MPX_ACQSTART=0x2, MPX_SINGLEACQCOMP=0x3, MPX_SERIESACQCOMP=0x4, MPX_FRAMENEW=0x5 };
20 HwInfo() : item(NULL), index(-1), dataSize(0) { }
21 HwInfo(HwInfoItem* item_,
int index_,
int dataSize_) : item(item_), index(index_), dataSize(dataSize_) { }
28 eventCBInfo(PixelmanCBEvent type_ = MPX_UNKNOWN, CBPARAM par_ = 0, INTPTR userData_ = 0) : type(type_), par(par_), userData(userData_) { }
40 FrameInfo(FRAMEID fID_ = 0, ITEMID iID_ = 0, INTPTR userData_ = 0) : fID(fID_), iID(iID_), userData(userData_) { }
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;
51 epicsMutex m_acq_start_mutex;
52 epicsMutex m_acq_abort_mutex;
55 FRAMEID m_currentFrameID;
58 double m_autoRestartDelay;
62 void cmdStart() { epicsTimeGetCurrent(&m_cmd_time); m_cmd_running =
true; }
63 void cmdEnd() { m_cmd_running =
false; }
67 void getHwInfo(std::ostream& os);
68 void getHwItem(
const std::string& name,
int param);
70 void setHwItem(
const std::string& name,
int param);
71 void saveFinished(
int fileIndex);
83 void pixelmanEventCB(PixelmanCBEvent e, CBPARAM par, INTPTR userData);
87 static void pollerThreadC(
void* arg);
88 static void saverThreadC(
void* arg);
89 static void pixelmanDriverRestarterC(
void* arg);
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);
106 void processFrame(u32* buffer, u32 width, u32 height);
107 void acquisitionThread(AcquisitionThreadArgs* args);
108 virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
110 virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
113 virtual asynStatus writeOctet(asynUser *pasynUser,
const char *value,
size_t maxChars,
size_t *nActual);
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);
123 #define FIRST_MCP_PARAM P_acqAbort
159 int P_autoRestartDelay;
167 int P_nShuttersPerBurst;
168 int P_nTrigsBurstRefresh;
175 #define LAST_MCP_PARAM P_devId
181 void pixelmanDriverRestarter();
182 static void printDevInfo(DevInfo* devInfo, std::ostream& os);
183 void setPixelMode(
unsigned mode);
184 void setADAcquire(
int acquire);
189 #define NUM_MCP_PARAMS (&LAST_MCP_PARAM - &FIRST_MCP_PARAM + 1)
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"
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"
213 #define P_saveConfigString "SAVECONFIG"
214 #define P_loadConfigString "LOADCONFIG"
215 #define P_saveDefConfigString "SAVEDEFCONFIG"
216 #define P_loadDefConfigString "LOADDEFCONFIG"
218 #define P_acqHangString "ACQHANG"
219 #define P_hangTimeString "HANGTIME"
220 #define P_autoRestartString "AUTORESTART"
221 #define P_autoRestartDelayString "AUTORESTARTDELAY"
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"
234 #define P_nTrigSavSubString "NTRIGSAVSUB"
start integral acquisition
virtual void setShutter(int open)
Controls the shutter.
PixelmanAcqType
Acquisition type to request.
int acq_type
actually PixelmanAcqType
int computeImage(epicsUInt32 *value, u32 width, u32 height)
Computes the new image data.