diff --git a/ADHamaApp/src/hama.cpp b/ADHamaApp/src/hama.cpp index cde1549..f8cde03 100644 --- a/ADHamaApp/src/hama.cpp +++ b/ADHamaApp/src/hama.cpp @@ -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();