Scope and fidelity to Phoebus
What bobview is for
bobview is a viewer. It opens Phoebus Display Builder .bob screens and
CS-Studio BOY .opi screens and shows live EPICS values on them, from a
single small binary that starts quickly and runs on modest hardware: down to
a phone, in the Android 16 Linux Terminal (Debian 13, aarch64). The same code
builds for the browser.
What is out of scope
- Scripts (Jython and JavaScript) are not run. The status line shows "N widgets with scripts ignored", counting widgets, not scripts. A few scripts that are common in DLS and techui-builder screens are recognised by name and done natively instead; see How BOY screens are translated and Widgets.
- Display editing. Use Phoebus to edit screens.
- Alarm services, and archivers other than the EPICS Archiver Appliance. Trends show history from an Archiver Appliance through archiveview; see Trend PVs.
Widgets bobview can't draw are shown as a grey placeholder labelled with the widget type and PV name, and the status line counts "N unsupported widgets". What is and isn't supported is listed in Widgets.
How close it is to Phoebus
Fidelity is approximate. Sizes, fonts (scaled by 0.95) and layout were tuned by eye, and output has not been compared with Phoebus's own pixel for pixel.
Where behaviour matters more than looks, bobview follows Phoebus closely:
number formats, how typed text is parsed into a value (units dropped, 0x
and 0b numbers, enum labels), macro expansion, and the precedence of
operators in rules (as Phoebus's Jython for a .bob, as BOY's JavaScript
for an .opi). Where it departs from Phoebus it says so in the reference,
for example rules taking the integer part of a double for bitwise operators
where Jython would fail.
Protocol maturity
Channel Access and PV Access come from the third-party
epics-rs crates, which are young; see
Architecture. bobview has been used against real
Diamond Light Source systems: the screens of beamlines p47 and b01-1, and
the accelerator's diagnostics and vacuum display hierarchies. In CI, the
interop job (crates/pv/tests/interop.rs) reads a PV over CA and over PVA
from a PVXS softIocPVX, writes one over CA and reads it back, and reads one
over CA through a ca-gateway; everything else is tested against the in-repo
bobview-testioc.