From 0626e20f26537a7e5156bb16eec3f06f56251bcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Nogueira?= Date: Thu, 23 Apr 2026 11:46:44 -0300 Subject: [PATCH 1/2] Make FWClear available for all detectors It's not clear why it was made exclusive to Eiger1, since the command is available and working in all API versions. --- docs/ADEiger/eiger.rst | 5 ++--- eigerApp/Db/eiger1.template | 11 ----------- eigerApp/Db/eigerBase.template | 7 +++++++ eigerApp/src/eigerDetector.cpp | 4 ++-- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/docs/ADEiger/eiger.rst b/docs/ADEiger/eiger.rst index 54d8f13..ede0ff4 100644 --- a/docs/ADEiger/eiger.rst +++ b/docs/ADEiger/eiger.rst @@ -187,8 +187,7 @@ can be given with the command:: sudo setcap cap_setuid,cap_setgid+ep eigerDetectorApp All files on the detector disk can be deleted at once by processing -the FWClear PV. This is only available with the Eiger1 and Simplon API version -1.6.0. +the FWClear PV. If the last data file of a series won't be full (e.g. series_1_data_000002.h5 with 20 images) then it will only appear on @@ -725,7 +724,7 @@ FileWriter Interface - FWAutoRemove, FWAutoRemove_RBV - bo, bi * - filewriter/config/clear - - Writing to this PV clears *all* files on the detector server disk. Eiger1 only. + - Writing to this PV clears *all* files on the detector server disk. - FWClear - ao diff --git a/eigerApp/Db/eiger1.template b/eigerApp/Db/eiger1.template index eeef3c5..b92b0fa 100644 --- a/eigerApp/Db/eiger1.template +++ b/eigerApp/Db/eiger1.template @@ -52,14 +52,3 @@ record(ai, "$(P)$(R)DCUBufferFree_RBV") field(VAL, "0") field(PREC, "1") } - -#################### -# FileWriter Setup # -#################### - -# FileWriter clear all files -record(ao, "$(P)$(R)FWClear") { - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))CLEAR") - field(DESC, "Clear files in the detector") -} diff --git a/eigerApp/Db/eigerBase.template b/eigerApp/Db/eigerBase.template index 68801ee..81fbe0b 100644 --- a/eigerApp/Db/eigerBase.template +++ b/eigerApp/Db/eigerBase.template @@ -598,6 +598,13 @@ record(bi,"$(P)$(R)FWAutoRemove_RBV") { field(SCAN, "I/O Intr") } +# FileWriter clear all files +record(ao, "$(P)$(R)FWClear") { + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))CLEAR") + field(DESC, "Clear files in the detector") +} + # FileWriter free buffer space record(ai, "$(P)$(R)FWFree_RBV") { diff --git a/eigerApp/src/eigerDetector.cpp b/eigerApp/src/eigerDetector.cpp index cf6e6ba..ab2bb5b 100644 --- a/eigerApp/src/eigerDetector.cpp +++ b/eigerApp/src/eigerDetector.cpp @@ -328,6 +328,7 @@ eigerDetector::eigerDetector (const char *portName, const char *serverHostname, mFWImgNumStart = mParams.create(EigFWImgNumStartStr, asynParamInt32, SSFWConfig, "image_nr_start"); mFWState = mParams.create(EigFWStateStr, asynParamOctet, SSFWStatus, "state"); mFWFree = mParams.create(EigFWFreeStr, asynParamFloat64, SSFWStatus, "buffer_free"); + mFWClear = mParams.create(EigFWClearStr, asynParamInt32, SSFWCommand, "clear"); // Monitor API Parameters mMonitorEnable = mParams.create(EigMonitorEnableStr, asynParamInt32, SSMonConfig, "mode"); @@ -385,7 +386,6 @@ eigerDetector::eigerDetector (const char *portName, const char *serverHostname, mParams.getByIndex(i)->setEnumValues(linkEnum); } mDCUBufFree = mParams.create(EigDCUBufFreeStr, asynParamFloat64, SSDetStatus, "builder/dcu_buffer_free"); - mFWClear = mParams.create(EigFWClearStr, asynParamInt32, SSFWCommand, "clear"); } else if (mEigerModel == Eiger2 || mEigerModel == Pilatus4) { @@ -516,7 +516,7 @@ asynStatus eigerDetector::writeInt32 (asynUser *pasynUser, epicsInt32 value) } setIntegerParam(ADAcquire, value); } - else if (mAPIVersion == API_1_6_0 && function == mFWClear->getIndex()) + else if (function == mFWClear->getIndex()) { status = (asynStatus) mFWClear->put(1); mFWFree->fetch(); From c31a05d17c5b7d2a9ddab8b7a7c7e3da9b97231a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Nogueira?= Date: Thu, 23 Apr 2026 11:50:24 -0300 Subject: [PATCH 2/2] Make FWClear a bo record It's more adequate for a command. The labels for ZNAM and ONAM are the same, since processing this record always causes the command to run. --- docs/ADEiger/eiger.rst | 2 +- eigerApp/Db/eigerBase.template | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/ADEiger/eiger.rst b/docs/ADEiger/eiger.rst index ede0ff4..34d5dd6 100644 --- a/docs/ADEiger/eiger.rst +++ b/docs/ADEiger/eiger.rst @@ -726,7 +726,7 @@ FileWriter Interface * - filewriter/config/clear - Writing to this PV clears *all* files on the detector server disk. - FWClear - - ao + - bo Stream Interface ~~~~~~~~~~~~~~~~ diff --git a/eigerApp/Db/eigerBase.template b/eigerApp/Db/eigerBase.template index 81fbe0b..4711e6e 100644 --- a/eigerApp/Db/eigerBase.template +++ b/eigerApp/Db/eigerBase.template @@ -599,10 +599,12 @@ record(bi,"$(P)$(R)FWAutoRemove_RBV") { } # FileWriter clear all files -record(ao, "$(P)$(R)FWClear") { +record(bo, "$(P)$(R)FWClear") { field(DTYP, "asynInt32") field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))CLEAR") field(DESC, "Clear files in the detector") + field(ZNAM, "Clear") + field(ONAM, "Clear") } # FileWriter free buffer space