Merge branch 'improve-timestamp' into 'master'

Pass timestamp to epicsTS instead of timeStamp

See merge request epics-modules/adorca!29
This commit is contained in:
Marco Filho
2025-10-15 13:03:58 +02:00
2 changed files with 14 additions and 13 deletions

View File

@@ -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;

View File

@@ -189,9 +189,6 @@ class epicsShareClass Orca : public ADDriver {
int readParameter(int propertyID, bool processPV = true);
int readParameterStr(int paramIndex);
epicsUInt32 mTimeStampSec;
epicsUInt32 mTimeStampNsec;
void imageTask();
void temperatureTask();
@@ -333,7 +330,7 @@ class epicsShareClass Orca : public ADDriver {
int32 rowbytes, int32 cx, int32 cy,
epicsUInt32& ts_sec, epicsUInt32& ts_microsec);
asynStatus imageTransferStatus(HDCAM hdcam,
DCAMCAP_TRANSFERINFO& captransferinfo);
DCAMCAP_TRANSFERINFO& captransferinfo, char *buf);
// wrapper functions for dcamapi
int allocateBuffers(unsigned int);