deimoscontrols/deimos: 0.15.0

Read full text
Authors: James Logan
Cited by: 0

Abstract

2026-01-01 deimos 0.15.0 Broad refactor and many new features to improve usability of software interface. Added Rust Add python feature for building python bindings Add controller::nonblocking module with machinery for running the controller on a separate thread Includes external termination signal and live manual read/write handles Add reconnection logic to controller LossOfContactPolicy::Reconnect allows attempting reconnection after losing contact with peripherals during run This provides robustness to IP address reconfiguration, hot-swapping modules, etc Provide a timeout duration or allow indefinite reconnection attempts Add peripheral::hootl module with machinery for building software mockup wrappers of hardware Includes UDP loopback implementaiton to mimic hardware as fully as possible Add python module with python bindings Add socket::orchestrator module with new layer of socket abstraction Option 1 (used for Performant operation mode) is similar to previous (synchronous nonblocking rx/tx) Option 2 (used for Efficient operation mode) uses a fan-in thread channel system to defer rx waiting to OS scheduling and places sockets on separate threads during run Add socket::thread_channel module with a Socket implementation that uses a user channel for comms This supports HOOTL testing on non-unix platforms with the unix socket is not available Add socket::worker module with socket thread workers for use with Efficient operation mode fan-in pattern Add Efficient operation mode Uses OS scheduling instead of busy-waiting, and thread channel fan-in pattern for comms instead of polling Reduces CPU usage to around 1% at the expense of degraded performance above 50Hz Does not pin core affinity Add dispatcher::latest for extracting the latest values during run Add dispatcher::low_pass wrapper for running a low-pass filter on each channel Add dispatcher::decimation wrapper for taking every Nth value Add dispatcher::channel_filter wrapper for selecting only specific channels to be passed along Python Add python bindings and type stubs Add python examples, tests, and deployment workflow Changed Rust Remove calc::Orchestrator from public API and rename to CalcOrchestrator Refactor Socket trait for new optional fan-in system Refactor Controller and Context Accommodate both Performant and Efficient operating methods Implement reconnection logic Implement nonblocking operation and external read/write/stop handles Fine-tune control loop performance to reduce cycle busy time to about 12 microseconds and eliminate context switching opportunities from main loop, allowing at least 20kHz stable operation of control software under real-life conditions with 7 DAQs attached on UDP and 447 channels of data stored (now limited primarily by hardware performance) Store, add, and remove sockets and dispatchers by name Refactor Calc and Dispatcher implementations to return Box from new to reduce boilerplate Refactor logging module to allow reentrant runs without conflict due to duplicate logger setup Refactor calc::sequence_machine module into a folder with multiple files and remove Timeout::Error option Set up workspace versioning Update and unpin dep versions to be more friendly to use within a larger project Gate unix socket functionality behind #[cfg(unix)] to allow Windows builds to run Improve logging and error handling across entire project Use x86-64-v3 reference cpu target instead of manually enabling instruction sets Update readme Move dispatcher::tsdb::Row up to dispatcher for reuse Add live-reading handle to dispatcher::df for use from python Add Send + Sync to trait bounds for peripheral::PluginFn to support nonblocking run method Hardware Improve manufacturability of silkscreen on Deimos DAQ Rev6 Firmware Update Deimos DAQ Rev6 firmware to use latest version of flaw filtering library Removed Rust Remove CalcProto and PeripheralProto object prototyping interfaces and related types and constants. Remove Orchestrator (from public API)

Publication details

Journal / source
Zenodo (CERN European Organization for Nuclear Research)
Publication date
4 January 2026