20 m_Mutex(QMutex::Recursive),
29 m_SyncMode(HIS_SYNCMODE_INTERNAL_TIMER),
32 m_DetectorNumber (saver, this,
"detectorNumber", 0,
"Perkin Elmer Detector Number"),
33 m_DetectorSubType(saver, this,
"detectorSubType", 0,
"Perkin Elmer Detector Subtype"),
34 m_DetectorAddress(saver, this,
"detectorAddress",
"",
"Perkin Elmer Detector Address"),
35 m_DetectorGain (saver, this,
"detectorGain", 0,
"Detector Gain"),
36 m_DetectorBinning(saver, this,
"detectorBinning", 0,
"Detector Binning Mode")
39 printf(
"QxrdDetectorPerkinElmer::QxrdDetectorPerkinElmer(%p)\n",
this);
43 printMessage(
"QxrdDetectorPerkinElmer::QxrdDetectorPerkinElmer()");
52 printf(
"QxrdDetectorPerkinElmer::~QxrdDetectorPerkinElmer(%p)\n",
this);
56 printMessage(
"QxrdDetectorPerkinElmer::~QxrdDetectorPerkinElmer()");
62 plugin->Acquisition_SetAcqData(
m_AcqDesc, NULL);
63 plugin->Acquisition_SetCallbacksAndMessages(
m_AcqDesc, NULL, 0, 0, NULL, NULL);
65 plugin->Acquisition_CloseAll();
100 set_DetectorNumber (proxy->property(
"detectorNumber").toInt());
101 set_DetectorSubType (proxy->property(
"detectorSubType").toInt());
102 set_DetectorAddress (proxy->property(
"detectorAddress").toString());
103 set_DetectorGain (proxy->property(
"detectorGain").toInt());
104 set_DetectorBinning (proxy->property(
"detectorBinning").toInt());
110 return get_DetectorSubType();
115 return get_DetectorAddress();
120 QString res =
"No Error";
127 case HIS_ERROR_MEMORY:
128 res =
"HIS_ERROR_MEMORY";
131 case HIS_ERROR_BOARDINIT:
132 res =
"HIS_ERROR_BOARDINIT";
135 case HIS_ERROR_NOCAMERA:
136 res =
"HIS_ERROR_NOCAMERA";
139 case HIS_ERROR_CORRBUFFER_INCOMPATIBLE:
140 res =
"HIS_ERROR_CORRBUFFER_INCOMPATIBLE";
143 case HIS_ERROR_ACQ_ALREADY_RUNNING:
144 res =
"HIS_ERROR_ACQ_ALREADY_RUNNING";
147 case HIS_ERROR_TIMEOUT:
148 res =
"HIS_ERROR_TIMEOUT";
151 case HIS_ERROR_INVALIDACQDESC:
152 res =
"HIS_ERROR_INVALIDACQDESC";
155 case HIS_ERROR_VXDNOTFOUND:
156 res =
"HIS_ERROR_VXDNOTFOUND";
159 case HIS_ERROR_VXDNOTOPEN:
160 res =
"HIS_ERROR_VXDNOTOPEN";
163 case HIS_ERROR_VXDUNKNOWNERROR:
164 res =
"HIS_ERROR_VXDUNKNOWNERROR";
167 case HIS_ERROR_VXDGETDMAADR:
168 res =
"HIS_ERROR_VXDGETDMAADR";
171 case HIS_ERROR_ACQABORT:
172 res =
"HIS_ERROR_ACQABORT";
175 case HIS_ERROR_ACQUISITION:
176 res =
"HIS_ERROR_ACQUISITION";
179 case HIS_ERROR_VXD_REGISTER_IRQ:
180 res =
"HIS_ERROR_VXD_REGISTER_IRQ";
183 case HIS_ERROR_VXD_REGISTER_STATADR:
184 res =
"HIS_ERROR_MEMORY";
187 case HIS_ERROR_GETOSVERSION:
188 res =
"HIS_ERROR_GETOSVERSION";
191 case HIS_ERROR_SETFRMSYNC:
192 res =
"HIS_ERROR_SETFRMSYNC";
195 case HIS_ERROR_SETFRMSYNCMODE:
196 res =
"HIS_ERROR_SETFRMSYNCMODE";
199 case HIS_ERROR_SETTIMERSYNC:
200 res =
"HIS_ERROR_SETTIMERSYNC";
203 case HIS_ERROR_INVALID_FUNC_CALL:
204 res =
"HIS_ERROR_INVALID_FUNC_CALL";
207 case HIS_ERROR_ABORTCURRFRAME:
208 res =
"HIS_ERROR_ABORTCURRFRAME";
211 case HIS_ERROR_GETHWHEADERINFO:
212 res =
"HIS_ERROR_GETHWHEADERINFO";
215 case HIS_ERROR_HWHEADER_INV:
216 res =
"HIS_ERROR_HWHEADER_INV";
219 case HIS_ERROR_SETLINETRIG_MODE:
220 res =
"HIS_ERROR_SETLINETRIG_MODE";
223 case HIS_ERROR_WRITE_DATA:
224 res =
"HIS_ERROR_WRITE_DATA";
227 case HIS_ERROR_READ_DATA:
228 res =
"HIS_ERROR_READ_DATA";
231 case HIS_ERROR_SETBAUDRATE:
232 res =
"HIS_ERROR_SETBAUDRATE";
235 case HIS_ERROR_NODESC_AVAILABLE:
236 res =
"HIS_ERROR_NODESC_AVAILABLE";
239 case HIS_ERROR_BUFFERSPACE_NOT_SUFF:
240 res =
"HIS_ERROR_BUFFERSPACE_NOT_SUFF";
243 case HIS_ERROR_SETCAMERAMODE:
244 res =
"HIS_ERROR_SETCAMERAMODE";
247 case HIS_ERROR_FRAME_INV:
248 res =
"HIS_ERROR_FRAME_INV";
251 case HIS_ERROR_SLOW_SYSTEM:
252 res =
"HIS_ERROR_SLOW_SYSTEM";
255 case HIS_ERROR_GET_NUM_BOARDS:
256 res =
"HIS_ERROR_GET_NUM_BOARDS";
259 case HIS_ERROR_HW_ALREADY_OPEN_BY_ANOTHER_PROCESS:
260 res =
"HIS_ERROR_HW_ALREADY_OPEN_BY_ANOTHER_PROCESS";
263 case HIS_ERROR_CREATE_MEMORYMAPPING:
264 res =
"HIS_ERROR_CREATE_MEMORYMAPPING";
267 case HIS_ERROR_VXD_REGISTER_DMA_ADDRESS:
268 res =
"HIS_ERROR_VXD_REGISTER_DMA_ADDRESS";
271 case HIS_ERROR_VXD_REGISTER_STAT_ADDR:
272 res =
"HIS_ERROR_VXD_REGISTER_STAT_ADDR";
275 case HIS_ERROR_VXD_UNMASK_IRQ:
276 res =
"HIS_ERROR_VXD_UNMASK_IRQ";
279 case HIS_ERROR_LOADDRIVER:
280 res =
"HIS_ERROR_LOADDRIVER";
283 case HIS_ERROR_FUNC_NOTIMPL:
284 res =
"HIS_ERROR_FUNC_NOTIMPL";
287 case HIS_ERROR_MEMORY_MAPPING:
288 res =
"HIS_ERROR_MEMORY_MAPPING";
291 case HIS_ERROR_CREATE_MUTEX:
292 res =
"HIS_ERROR_CREATE_MUTEX";
296 res =
"HIS_ERROR_ACQ";
299 case HIS_ERROR_DESC_NOT_LOCAL:
300 res =
"HIS_ERROR_DESC_NOT_LOCAL";
303 case HIS_ERROR_INVALID_PARAM:
304 res =
"HIS_ERROR_INVALID_PARAM";
307 case HIS_ERROR_ABORT:
308 res =
"HIS_ERROR_ABORT";
311 case HIS_ERROR_WRONGBOARDSELECT:
312 res =
"HIS_ERROR_WRONGBOARDSELECT";
315 case HIS_ERROR_WRONG_CAMERA_MODE:
316 res =
"HIS_ERROR_WRONG_CAMERA_MODE";
319 case HIS_ERROR_AVERAGED_LOST:
320 res =
"HIS_ERROR_AVERAGED_LOST";
323 case HIS_ERROR_BAD_SORTING_PARAM:
324 res =
"HIS_ERROR_BAD_SORTING_PARAM";
327 case HIS_ERROR_UNKNOWN_IP_MAC_NAME:
328 res =
"HIS_ERROR_UNKNOWN_IP_MAC_NAME";
331 case HIS_ERROR_NO_BOARD_IN_SUBNET:
332 res =
"HIS_ERROR_NO_BOARD_IN_SUBNET";
335 case HIS_ERROR_UNABLE_TO_OPEN_BOARD:
336 res =
"HIS_ERROR_UNABLE_TO_OPEN_BOARD";
339 case HIS_ERROR_UNABLE_TO_CLOSE_BOARD:
340 res =
"HIS_ERROR_UNABLE_TO_CLOSE_BOARD";
343 case HIS_ERROR_UNABLE_TO_ACCESS_DETECTOR_FLASH:
344 res =
"HIS_ERROR_UNABLE_TO_ACCESS_DETECTOR_FLASH";
347 case HIS_ERROR_HEADER_TIMEOUT:
348 res =
"HIS_ERROR_HEADER_TIMEOUT";
351 case HIS_ERROR_NO_PING_ACK:
352 res =
"HIS_ERROR_NO_PING_ACK";
355 case HIS_ERROR_NR_OF_BOARDS_CHANGED:
356 res =
"HIS_ERROR_NR_OF_BOARDS_CHANGED";
371 printMessage(tr(
"Acquisition Error %1 [%2] at line %3 in file %4")
421 if (QThread::currentThread() != thread()) {
422 QMetaObject::invokeMethod(
this,
"startDetector");
433 int nRet = HIS_ALL_OK;
435 BOOL bEnableIRQ =
true;
436 BOOL bSelfInit =
true;
437 BOOL bAlwaysOpen =
true;
441 UINT dwSortFlags, dwDataType, dwRows, dwColumns, dwFrames;
442 DWORD dwAcqType, dwSystemID, dwSyncMode, dwHwAccess;
455 int subType = get_DetectorSubType();
458 printMessage(
"Initialising PCI/PCIe Perkin Elmer Detector");
461 nRet = plugin->Acquisition_EnumSensors(&nSensors, bEnableIRQ,
FALSE);
465 printMessage(tr(
"Acquisition_EnumSensors = %1").arg(nRet));
468 if (nRet != HIS_ALL_OK) {
474 printMessage(tr(
"Number of sensors = %1").arg(nSensors));
477 if (get_DetectorNumber() == 0 && nSensors != 1) {
480 }
else if (get_DetectorNumber() < 0 || get_DetectorNumber() > nSensors) {
485 for (
int i=1; i<=(get_DetectorNumber() ? get_DetectorNumber() : 1); i++) {
486 if (plugin && (nRet = plugin->Acquisition_GetNextSensor(&Pos, &
m_AcqDesc))!=HIS_ALL_OK) {
492 printMessage(tr(
"Attempting to connect to Perkin Elmer detector on the network at IP Address %1")
493 .arg(get_DetectorAddress()));
495 if (plugin && (nRet = plugin->Acquisition_GbIF_Init(&
m_AcqDesc, 0, bEnableIRQ,
496 1024, 1024, bSelfInit,
498 (GBIF_STRING_DATATYPE*) qPrintable(get_DetectorAddress()))) != HIS_ALL_OK) {
503 printMessage(tr(
"Attempting to connect to Perkin Elmer detector on the network at MAC address %1").arg(get_DetectorAddress()));
505 if (plugin && (nRet = plugin->Acquisition_GbIF_Init(&
m_AcqDesc, 0, bEnableIRQ,
506 1024, 1024, bSelfInit,
508 (GBIF_STRING_DATATYPE*) qPrintable(get_DetectorAddress()))) != HIS_ALL_OK) {
513 printMessage(tr(
"Attempting to connect to Perkin Elmer detector on the network at device name %1").arg(get_DetectorAddress()));
515 if (plugin && (nRet = plugin->Acquisition_GbIF_Init(&
m_AcqDesc, 0, bEnableIRQ,
516 1024, 1024, bSelfInit,
518 (GBIF_STRING_DATATYPE*) qPrintable(get_DetectorAddress()))) != HIS_ALL_OK) {
523 printMessage(
"Searching for Perkin Elmer Detectors on the network");
527 if (plugin && (nRet = plugin->Acquisition_GbIF_GetDeviceCnt(&nBoards)) != HIS_ALL_OK) {
532 QVector<GBIF_DEVICE_PARAM> devs(nBoards);
534 if (plugin && (nRet = plugin->Acquisition_GbIF_GetDeviceList(devs.data(), nBoards))) {
546 for (
int i=0; i<nBoards; i++) {
547 printMessage(tr(
"Device %1: %2 found at IP: %3, MAC: %4, Name: %5")
549 .arg(devs[i].cModelName)
550 .arg((
char*)(devs[i].ucIP))
551 .arg((
char*)(devs[i].ucMacAddress))
552 .arg(devs[i].cDeviceName));
555 if (get_DetectorNumber() >= 0 && get_DetectorNumber() <= nBoards) {
556 int n = (get_DetectorNumber() ? get_DetectorNumber() : 1);
558 if (plugin && (nRet = plugin->Acquisition_GbIF_Init(&
m_AcqDesc, 0, bEnableIRQ,
559 1024, 1024, bSelfInit,
561 devs[n-1].ucIP)) != HIS_ALL_OK) {
571 if (plugin && (nRet = plugin->Acquisition_GetCommChannel(
m_AcqDesc, &nChannelType, &nChannelNr))!=HIS_ALL_OK) {
577 printMessage(tr(
"Acquisition_GetCommChannel channel type = %1, channel no = %2")
578 .arg(nChannelType).arg(nChannelNr));
581 if (plugin && (nRet=plugin->Acquisition_GetConfiguration(
m_AcqDesc, &dwFrames, &dwRows, &dwColumns, &dwDataType,
582 &dwSortFlags, &bEnableIRQ, &dwAcqType,
583 &dwSystemID, &dwSyncMode, &dwHwAccess))!=HIS_ALL_OK) {
589 printMessage(tr(
"Acquisition_GetConfiguration frames = %1, rows = %2, cols = %3")
590 .arg(dwFrames).arg(dwRows).arg(dwColumns));
591 printMessage(tr(
"Acquisition_GetConfiguration data type = %1, sort flags = %2, IRQ = %3")
592 .arg(dwDataType).arg(dwSortFlags).arg(bEnableIRQ));
593 printMessage(tr(
"Acquisition_GetConfiguration acq type = %1, systemID = %2, syncMode = %3, hwAccess = %4")
594 .arg(dwAcqType).arg(dwSystemID).arg(dwSyncMode).arg(dwHwAccess));
601 set_NCols(dwColumns);
604 if (plugin && (nRet=plugin->Acquisition_GetCameraBinningMode(
m_AcqDesc, &binningMode)) != HIS_ALL_OK) {
610 printMessage(tr(
"Acquisition_GetCameraBinningMode mode = %1").arg(binningMode));
613 CHwHeaderInfo hwHeaderInfo;
615 if (plugin && (nRet=plugin->Acquisition_GetHwHeaderInfo(
m_AcqDesc, &hwHeaderInfo)) != HIS_ALL_OK) {
621 printMessage(tr(
"Prom ID %1, Header ID %2").arg(hwHeaderInfo.dwPROMID).arg(hwHeaderInfo.dwHeaderID));
627 if (hwHeaderInfo.dwHeaderID >= 14) {
628 CHwHeaderInfoEx hdrx;
630 if (plugin && (nRet = plugin->Acquisition_GetHwHeaderInfoEx(
m_AcqDesc, &hwHeaderInfo, &hdrx)) != HIS_ALL_OK) {
636 printMessage(tr(
"Camera Type %1").arg(hdrx.wCameratype));
637 printMessage(tr(
"Binning Mode %1").arg(hdrx.wBinningMode));
643 int nReadoutTimes = 8;
644 double readoutTimes[8];
646 if (plugin && (nRet = plugin->Acquisition_GetIntTimes(
m_AcqDesc, readoutTimes, &nReadoutTimes)) != HIS_ALL_OK) {
651 for (
int i=0; i<nReadoutTimes; i++) {
658 for (
int i=0; i<nReadoutTimes; i++) {
663 if (plugin && (nRet = plugin->Acquisition_SetAcqData(
m_AcqDesc, (
ACQDATATYPE)
this)) != HIS_ALL_OK) {
668 if (plugin && (nRet = plugin->Acquisition_SetCallbacksAndMessages(
m_AcqDesc, NULL, 0,
682 printMessage(tr(
"Exposure Time = %1").arg(acq->get_ExposureTime()));
687 printMessage(tr(
"SetFrameSyncMode HIS_SYNCMODE_INTERNAL_TIMER"));
690 if (plugin && (nRet=plugin->Acquisition_SetFrameSyncMode(
m_AcqDesc, HIS_SYNCMODE_INTERNAL_TIMER)) != HIS_ALL_OK) {
691 if (plugin && (nRet=plugin->Acquisition_SetFrameSyncMode(
m_AcqDesc, HIS_SYNCMODE_FREE_RUNNING)) != HIS_ALL_OK) {
710 if (acq->get_ExposureTime() <= 0) {
711 acq->set_ExposureTime(0.135);
717 get_NRows(), get_NCols())) != HIS_ALL_OK) {
738 printMessage(tr(
"Stopping Perkin Elmer Detector %1").arg(get_DetectorName()));
748 double newTime = acq->get_ExposureTime();
756 printMessage(tr(
"Exposure time changed to %1").arg(newTime));
758 DWORD tmp = (int)(newTime*1e6);
764 if ((nRet=plugin->Acquisition_SetTimerSync(
m_AcqDesc, &tmp)) != HIS_ALL_OK) {
788 switch (get_DetectorBinning()) {
802 printMessage(tr(
"Change binning mode to %1").arg(newMode));
805 WORD binningMode = newMode;
815 if ((nRet=plugin->Acquisition_GetCameraBinningMode(
m_AcqDesc, &originalMode)) != HIS_ALL_OK) {
820 printMessage(tr(
"Initial binning mode = %1").arg(originalMode));
822 printMessage(tr(
"Setting binning mode = %1").arg(newMode));
824 if ((nRet=plugin->Acquisition_SetCameraBinningMode(
m_AcqDesc, newMode)) != HIS_ALL_OK) {
829 if ((nRet=plugin->Acquisition_GetCameraBinningMode(
m_AcqDesc, &binningMode)) != HIS_ALL_OK) {
834 printMessage(tr(
"Binning mode was set to %1").arg(binningMode));
836 if (binningMode <= 1) {
856 int newGain = get_DetectorGain();
858 printMessage(tr(
"Camera Gain Changed to %1").arg(newGain));
865 if ((nRet=plugin->Acquisition_SetCameraGain(
m_AcqDesc, get_DetectorGain())) != HIS_ALL_OK) {
886 0, HIS_SEQ_CONTINUOUS, NULL, NULL, NULL)) != HIS_ALL_OK) {
899 if (QThread::currentThread() != thread()) {
900 QMetaObject::invokeMethod(
this,
"beginAcquisition", Qt::BlockingQueuedConnection, Q_ARG(
double, exposure));
922 plugin -> Acquisition_ResetFrameCnt(
m_AcqDesc);
929 if (QThread::currentThread() != thread()) {
930 QMetaObject::invokeMethod(
this,
"endAcquisition", Qt::BlockingQueuedConnection);
938 if (QThread::currentThread() != thread()) {
939 QMetaObject::invokeMethod(
this,
"shutdownAcquisition", Qt::BlockingQueuedConnection);
962 get_NCols(), get_NRows(),
this);
967 printMessage(tr(
"QxrdDetectorPerkinElmer::onEndFrame(%1,%2,%3)")
968 .arg(counter).arg(n1).arg(n2));
978 long npixels = get_NRows()*get_NCols();
982 DWORD actSecFrame = n2;
991 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
997 if ((counter1 - counter) > 5) {
999 .arg(counter1-counter).arg(counter).arg(counter1));
1010 quint16* current = (image ? image->data() : NULL);
1014 unsigned short *fp = frame;
1016 for (
long i=0; i<npixels; i++) {
1017 unsigned short val = *fp++;
1022 if (current && frame) {
1023 ::memcpy(current, frame, npixels*
sizeof(quint16));
1032 .arg(cksum,8,16,QChar(
'0')).arg(avg/npixels));
1035 unsigned short* fp =
m_Buffer.data() + f*npixels;
1040 for (
long i=0; i<npixels; i++) {
1041 unsigned short val = *fp++;
1047 .arg(f).arg(cksum,8,16,QChar(
'0')).arg(avg/npixels));
1056 image->set_ImageSequenceNumber(counter1);
1057 image->set_ImageNumber(n1);
1165 if (plugin && acq) {
1169 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
1170 sync->acquiredFrameAvailable(
m_Counter.load());
1172 sync->acquiredFrameAvailable(
m_Counter);
1178 DWORD actualFrame, actSecFrame;
1180 plugin->Acquisition_GetActFrame(
m_AcqDesc, &actualFrame, &actSecFrame);
1185 int counter =
m_Counter.fetchAndAddOrdered(1) + 1;
1189 onEndFrame(counter, actualFrame, actSecFrame);
1201 if (hAcqDesc && plugin) {
1204 plugin->Acquisition_GetAcqData(hAcqDesc, &
object);
1208 if (detector && detector->
isEnabled()) {
1222 printMessage(tr(
"HeaderID %1 PROMID %2 Frame %3 Msec %4 Usec %5 Status %6")
QSharedPointer< QxrdExperiment > QxrdExperimentPtr
void onEndFrame(int counter, unsigned int n1, unsigned int n2)
QSharedPointer< QxrdDetectorProxy > QxrdDetectorProxyPtr
virtual void pushPropertiesToProxy(QxrdDetectorProxyPtr proxy)
QxrdExperimentWPtr m_Experiment
void onExposureTimeChanged()
int detectorSubType() const
qint64 qcepDebug(int cond)
void criticalMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
void onBinningModeChanged()
QSharedPointer< QxrdPerkinElmerPluginInterface > QxrdPerkinElmerPluginInterfacePtr
static void CALLBACK OnEndAcqCallback(HACQDESC hAcqDesc)
void pushPropertiesToProxy(QxrdDetectorProxyPtr proxy)
virtual void pullPropertiesfromProxy(QxrdDetectorProxyPtr proxy)
void acquisitionNSensorsError(const char *fn, int ln, int n)
void beginAcquisition(double exposure)
QxrdAcquisitionWPtr m_Acquisition
void shutdownAcquisition()
JSON Parse a string as a JSON object
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
bool checkDetectorEnabled()
void enqueueAcquiredFrame(QcepImageDataBasePtr img)
void pullPropertiesfromProxy(QxrdDetectorProxyPtr proxy)
QSharedPointer< QxrdSynchronizedAcquisition > QxrdSynchronizedAcquisitionPtr
static void CALLBACK OnEndFrameCallback(HACQDESC hAcqDesc)
static void pushDefaultsToProxy(QxrdDetectorProxyPtr proxy)
void onEndFrameCallback()
virtual void startDetector()
CHwHeaderInfoEx m_HwHeaderInfoEx
void acquisitionInitError(const char *fn, int ln, int n)
void acquisitionError(const char *fn, int ln, int n)
QVector< double > m_ReadoutTimes
void startupAcquisition()
QxrdPerkinElmerPluginInterfaceWPtr m_PerkinElmer
virtual ~QxrdDetectorPerkinElmer()
QString detectorAddress() const
static QcepInt16ImageDataPtr newInt16Image(AllocationStrategy strat, int width, int height, QcepObject *parent)
QString acquisitionErrorString(int n)
QWeakPointer< QxrdAcquisition > QxrdAcquisitionWPtr
QcepApplication * g_Application
CHwHeaderInfo m_HwHeaderInfo
QVector< quint16 > m_Buffer
static void pushDefaultsToProxy(QxrdDetectorProxyPtr proxy, int detType)
QxrdDetectorPerkinElmer(QcepSettingsSaverWPtr saver, QxrdExperimentWPtr expt, QxrdAcquisitionWPtr acq, int detNum, QcepObject *parent)
virtual void shutdownAcquisition()
virtual void endAcquisition()
QSharedPointer< QcepInt16ImageData > QcepInt16ImageDataPtr
void onCameraGainChanged()
virtual void beginAcquisition(double exposure)
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
bool checkPluginAvailable()