|
|
|
|
@@ -834,6 +834,7 @@ void Orca::imageTask() {
|
|
|
|
|
uint64_t prevAcquisitionCount = 0;
|
|
|
|
|
DCAMCAP_TRANSFERINFO captransferinfo;
|
|
|
|
|
epicsTimeStamp prevAcqTime, currentAcqTime;
|
|
|
|
|
epicsTimeStamp acqTimestamp;
|
|
|
|
|
epicsTimeStamp prev_trigger_time, current_trigger_time;
|
|
|
|
|
double elapsedTime;
|
|
|
|
|
int evr_counts = 0;
|
|
|
|
|
@@ -841,6 +842,7 @@ void Orca::imageTask() {
|
|
|
|
|
double maxAcqusitionTime, acqusitionRate;
|
|
|
|
|
int triggerMode = DCAMPROP_TRIGGERSOURCE__INTERNAL;
|
|
|
|
|
int triggerActive;
|
|
|
|
|
char buf[256];
|
|
|
|
|
|
|
|
|
|
lock();
|
|
|
|
|
while (1) {
|
|
|
|
|
@@ -875,7 +877,7 @@ void Orca::imageTask() {
|
|
|
|
|
|
|
|
|
|
// get image transfer status.
|
|
|
|
|
unlock();
|
|
|
|
|
imageTransferStatus(m_hdcam, captransferinfo);
|
|
|
|
|
imageTransferStatus(m_hdcam, captransferinfo, buf);
|
|
|
|
|
lock();
|
|
|
|
|
|
|
|
|
|
if (prevAcquisitionCount < (uint64_t)captransferinfo.nFrameCount) {
|
|
|
|
|
@@ -926,18 +928,19 @@ void Orca::imageTask() {
|
|
|
|
|
// Update asyn parameters
|
|
|
|
|
setIntegerParam(evrCountsSinceAcqStart, evr_counts_since_last_start);
|
|
|
|
|
setIntegerParam(evrTriggerDropped, evr_trigger_dropped);
|
|
|
|
|
char buf[256];
|
|
|
|
|
getStringParam(evrTimeStamp, 256, buf);
|
|
|
|
|
|
|
|
|
|
// remember parsed timestamp values
|
|
|
|
|
sscanf(buf, "%u.%u", &mTimeStampSec, &mTimeStampNsec);
|
|
|
|
|
timestamp = mTimeStampSec + mTimeStampNsec / 1.e9;
|
|
|
|
|
FLOW_ARGS("mTimeStampSec: %u - mTimeStampNsec: %u\n", mTimeStampSec,
|
|
|
|
|
mTimeStampNsec);
|
|
|
|
|
sscanf(buf, "%u.%u", &acqTimestamp.secPastEpoch, &acqTimestamp.nsec);
|
|
|
|
|
acqTimestamp.secPastEpoch -= POSIX_TIME_AT_EPICS_EPOCH;
|
|
|
|
|
|
|
|
|
|
timestamp = acqTimestamp.secPastEpoch + acqTimestamp.nsec / 1.e9;
|
|
|
|
|
FLOW_ARGS("acqTimestamp.secPastEpoch: %u - acqTimestamp.nsec: %u\n", acqTimestamp.secPastEpoch,
|
|
|
|
|
acqTimestamp.nsec);
|
|
|
|
|
FLOW_ARGS("Timestamp from evr: %f\n", timestamp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
updateTimeStamp(&acqTimestamp);
|
|
|
|
|
timestamp =
|
|
|
|
|
(ts_sec + ts_microsec / 1.0e6) - (exposure_time + readout_time);
|
|
|
|
|
FLOW_ARGS("Timestamp from camera: %f\n", timestamp);
|
|
|
|
|
@@ -967,7 +970,7 @@ void Orca::imageTask() {
|
|
|
|
|
if (pImage) {
|
|
|
|
|
pImage->uniqueId = count;
|
|
|
|
|
pImage->timeStamp = timestamp;
|
|
|
|
|
updateTimeStamp(&pImage->epicsTS);
|
|
|
|
|
pImage->epicsTS = acqTimestamp;
|
|
|
|
|
|
|
|
|
|
memcpy(pImage->pData, (epicsUInt16*)image, pImage->dataSize);
|
|
|
|
|
|
|
|
|
|
@@ -1742,7 +1745,7 @@ void Orca::getImageInformation(HDCAM hdcam, int32& pixeltype, int32& width,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
asynStatus Orca::imageTransferStatus(HDCAM hdcam,
|
|
|
|
|
DCAMCAP_TRANSFERINFO& captransferinfo) {
|
|
|
|
|
DCAMCAP_TRANSFERINFO& captransferinfo, char *buf) {
|
|
|
|
|
DCAMERR err;
|
|
|
|
|
const char* functionName = "imageTransferStatus";
|
|
|
|
|
memset(&captransferinfo, 0, sizeof(captransferinfo));
|
|
|
|
|
@@ -1750,6 +1753,7 @@ asynStatus Orca::imageTransferStatus(HDCAM hdcam,
|
|
|
|
|
|
|
|
|
|
// get number of captured image
|
|
|
|
|
err = dcamcap_transferinfo(m_hdcam, &captransferinfo);
|
|
|
|
|
getStringParam(evrTimeStamp, 256, buf);
|
|
|
|
|
if (failed(err)) {
|
|
|
|
|
ERR_ARGS("DCAMERR: 0x%08X [%s]", m_err, "dcamcap_transferinfo");
|
|
|
|
|
return asynError;
|
|
|
|
|
|