pub enum ProcessAction {
WriteDbLink {
link_field: &'static str,
value: EpicsValue,
},
ReadDbLink {
link_field: &'static str,
target_field: &'static str,
},
ReprocessAfter(Duration),
DeviceCommand {
command: &'static str,
args: Vec<EpicsValue>,
},
WriteDbLinkNotify {
link_field: &'static str,
value: EpicsValue,
},
CancelReprocess,
}Expand description
Side-effect actions that a record requests from the processing framework.
Records return these from process() via ProcessOutcome::actions.
The framework executes them at the appropriate point in the processing
cycle, keeping records as pure state machines without direct DB access.
Variants§
WriteDbLink
Write a value to a DB link. The framework reads link_field from the
record to get the target PV name, then writes value to that PV.
Executed after alarm/snapshot, before FLNK. Example: scaler writes CNT to COUT/COUTP links.
ReadDbLink
Read a value from a DB link into a record field. The framework reads
link_field from the record to get the source PV name, reads that PV,
and writes the result into target_field via an internal put that
bypasses read-only checks.
The value delivered is the link target’s native EpicsValue — it
is NOT coerced to a numeric type on the way in. The record coerces (or
preserves) it at its own put_field/put_field_internal boundary, so a
string-class source can reach a string field byte-exact (the sseq
DOLn→STRn path, C sseqRecord.c:643-705). Records whose
target_field is numeric simply convert there, exactly as before.
Pre-process action: executed BEFORE the next process() cycle so
the value is immediately available. This matches C EPICS dbGetLink()
which is synchronous/immediate.
Example: throttle reads SINP into VAL when SYNC is triggered.
ReprocessAfter(Duration)
Schedule a re-process of this record after the given duration.
The framework spawns tokio::spawn(sleep(d) + process_record(name)).
The current cycle’s OUT/FLNK/notify proceed normally.
Equivalent to C EPICS callbackRequestDelayed() + scanOnce().
DeviceCommand
Send a named command to the device support driver.
The framework calls DeviceSupport::handle_command() with this data.
Used by scaler to request reset/arm/write_preset operations
without the record holding a direct driver reference.
WriteDbLinkNotify
Write a value to a DB link as a put-with-completion, then re-enter
THIS record’s process() when the downstream operation completes.
The framework arms a put-notify wait-set (C dbProcessNotify),
writes link_field’s target through it, releases the initiator’s
own count, and wires the completion to an async re-entry of this
record (mint_async_token + reprocess_on_notify). The record
returns RecordProcessResult::AsyncPending alongside this action
and is re-entered once the downstream record (and its FLNK/OUT
chain) finishes — the synApps sseq WAITn “wait for the put
callback” dependency (sseqRecord.c::processNextLink,
dbCaPutLinkCallback). Built on the same new_put_notify +
reprocess_on_notify primitive an out-of-band
crate::server::database::AsyncDbHandle caller uses.
Executed before FLNK, like Self::WriteDbLink.
CancelReprocess
Cancel this record’s outstanding async re-entry (C
callbackCancelDelayed): the framework advances the record’s
re-entry generation so any pending ReprocessAfter timer or
WriteDbLinkNotify completion re-entry becomes a structural no-op
(the AsyncToken gate), with no runtime “is-aborted” check on the
re-entry path. Used by sseq ABORT to drop a pending DLYn
delay or WAITn wait; the record resets its own sequence state in
the same process() cycle that emits this.
Trait Implementations§
Source§impl Clone for ProcessAction
impl Clone for ProcessAction
Source§fn clone(&self) -> ProcessAction
fn clone(&self) -> ProcessAction
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ProcessAction
impl Debug for ProcessAction
Source§impl PartialEq for ProcessAction
impl PartialEq for ProcessAction
Source§fn eq(&self, other: &ProcessAction) -> bool
fn eq(&self, other: &ProcessAction) -> bool
self and other values to be equal, and is used by ==.