Skip to content

OpenwaterHealth/openlifu-operator-interface

OpenLIFU Operator Interface

A kiosk-mode operator application for running focused ultrasound (LIFU) sonications using pre-validated preset settings. Extracted from openlifu-test-app so the operator-facing UX can iterate independently of the engineering test bench.

What this app does

  • Presents a single operator page (no sidebar, no tab switching).
  • Loads validated treatment presets from preset_settings/<context>/.
  • Drives the LIFU TX/HV stack through lifu.lifu_connector.LIFUConnector.
  • Persists session settings (operator name, session id, log folder) per machine.
  • Captures a per-run log file covering the connector, SDK, and any uncaught Python tracebacks for support / audit.

Usage

# Real hardware, vet context (default)
python main.py

# Simulated device, vet context
python main.py --simulate

# Explicit context
python main.py --context diathermy

# Lab-supply harness
python main.py --hv-test-mode

# Verbose logging
python main.py --simulate --loglevel debug

Project layout

openlifu-operator-interface/
├── main.py                 # kiosk entry point
├── main.qml                # window chrome + OperatorInterface.qml loader
├── version.py
├── pyproject.toml
├── assets/                 # fonts, images, icons
├── components/             # WindowMenu + icon buttons
├── lifu/                   # LIFUConnector + mixins + simulated stack
├── logs/                   # run-log parser
├── pages/
│   └── OperatorInterface.qml
├── plot/                   # ultrasound plot generation (used by connector)
├── preset_settings/        # per-context treatment presets
└── rthooks/                # PyInstaller runtime hooks

Relationship to openlifu-test-app

This repo was scaffolded from the operator-mode subset of openlifu-test-app. The lifu/ Python package and shared components/ files are currently duplicated. Long-term, app-agnostic parts of the connector (state machine, session logger, thermal policy, run-progress state machine, preset loader, HV-enable-mode policy) are candidates for promotion into openlifu_sdk.ui so both apps consume them from one place.

Trim candidates (operator-only)

These mixins were copied from the test app but are not exercised by OperatorInterface.qml. They can be removed once we're confident no operator-mode code path reaches them:

  • lifu/lifu_testing.py — verification tests (Testing page)
  • lifu/lifu_console.py — HV diagnostics (Console page)
  • lifu/lifu_settings.py — firmware update / test reports (Settings page)

Some methods in lifu/lifu_transmitter.py and lifu/lifu_controller.py are likewise unused by the operator page and could be trimmed.

Requirements

  • Python 3.10+
  • PyQt6 6.7+
  • openlifu-sdk >= 1.0.7

About

OpenLIFU Operator Interface

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors