Follow the SimWaveform practice: the AsyncSignal/AsyncMultiSignal signals push
their own data through .put(..., async_update=...) and the device server
publishes those BECMessageSignal puts to the async endpoint. Drop the
hand-rolled DeviceMessage + connector.xadd path (the legacy 'morphing' signal,
its buffer, and on_complete flushing), which did not follow ophyd_devices
practices.
The device is unchanged in intent: a 'monitored' device that also exposes
asynchronous signals (bec_widgets issue #1185) - readback (sync), async_counts
/ async_spectrum / async_channels (async), progress (not a curve).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A simulated device whose readout priority is 'monitored' but which still
exposes asynchronous signals, to reproduce and exercise bec_widgets issue
#1185 (waveform curves must be classified per signal, not by the parent
device's readout-priority group).
Signals:
- readback: synchronous, hinted, read at every scan point
- async_counts / async_spectrum / async_channels: AsyncSignal-family streams
- morphing: a plain SetableSignal that is also streamed on the async readback
endpoint during a scan, so its data-delivery type is only known at the first
reported value / beginning of the scan
- progress: ProgressSignal (role 'progress', never a curve)
Registers a 'mixed_mon' entry (readoutPriority monitored, softwareTrigger true)
in the simulation config, exports the class from ophyd_devices.sim, and adds
unit tests.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
BREAKING CHANGE: cleaned up and migrated to the new repo structure. Only shared devices will be hosted in ophyd_devices. Everything else will be in the beamline-specific repositories