Add mechanism to check if acquirePeriod is valid

This commit is contained in:
Douglas Araujo
2023-09-18 11:31:57 +02:00
committed by Iocuser
parent 1d07985371
commit 16bb800227
+20 -7
View File
@@ -187,6 +187,7 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory,
createParam(hAcqControlString, asynParamInt32, &hAcqControl);
setIntegerParam(NDArrayCallbacks, 1);
setStringParam (ADStatusMessage, "Idle");
callParamCallbacks();
connectCamera();
@@ -790,6 +791,7 @@ void Hama::imageTask(){
lock();
status = startAcquire();
setStringParam (ADStatusMessage, "Acquiring");
setIntegerParam(hAcqControl, 1);
callParamCallbacks();
@@ -908,6 +910,7 @@ void Hama::imageTask(){
setIntegerParam(ADAcquire, 0);
setIntegerParam(hAcqControl, 0);
setIntegerParam(ADStatus, ADStatusIdle);
setStringParam (ADStatusMessage, "Acquisition Done");
}
callParamCallbacks();
}
@@ -964,17 +967,28 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value) {
if (index == ADAcquire) {
if (value && adstatus != ADStatusAcquire) {
/* Send an event to wake up the acq task.*/
puts("Requested acquire start event. Sending acquire start event signal to thread");
int evr_counts = 0;
getIntegerParam(evrCounts, &evr_counts);
printf("EVR counts on Acquire: %d\n", evr_counts);
epicsEventSignal(this->startEvent_);
double readoutTime, acquirePeriod, acquireTime;
status = getDoubleParam(hTimingReadoutTime, &readoutTime);
status = getDoubleParam(ADAcquireTime, &acquireTime);
status = getDoubleParam(ADAcquirePeriod, &acquirePeriod);
if (acquirePeriod < (readoutTime + acquireTime)) {
setStringParam (ADStatusMessage,
"Acquire Period must be greater than ReadoutTime + AcquireTime");
setIntegerParam(ADAcquire, 0);
setIntegerParam(ADStatus, ADStatusAborted);
}
else {
/* Send an event to wake up the acq task.*/
setStringParam (ADStatusMessage, "");
epicsEventSignal(this->startEvent_);
}
}
else if (!value && (adstatus == ADStatusAcquire || adstatus == ADStatusError || adstatus == ADStatusWaiting)) {
/* This was a command to stop acquisition */
setIntegerParam(ADStatus, ADStatusAborted);
setIntegerParam(hAcqControl, 0);
setStringParam (ADStatusMessage, "Acquisition aborted by user");
stopAcquire();
}
}
@@ -1387,7 +1401,6 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value) {
//}
}
setIntegerParam(index, value);
/* Do callbacks so higher layers see any changes */
status = (asynStatus) callParamCallbacks();