Skip to main content

OpenMoRFeus

Tests License: MIT PyPI version Python versions Open implementation and technical documentation for controlling the Outernet moRFeus RF generator and frequency mixer through USB HID.

Installation

OpenMoRFeus requires Python 3.10 or newer.

Command-line interface

Install the driver and CLI directly from PyPI:

python3 -m pip install openmorfeus
openmorfeus --help

Graphical interface

Install the optional PyQt6 graphical interface:

python3 -m pip install 'openmorfeus[gui]'
openmorfeus-gui

Using a Python virtual environment is recommended:

python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install 'openmorfeus[gui]'

Development installation

Contributors can install the repository in editable mode:

git clone https://github.com/davidaguirresalcedo/OpenMoRFeus.git
cd OpenMoRFeus
python3 -m venv .venv
.venv/bin/python -m pip install -e '.[gui]'

USB access without root privileges

OpenMoRFeus includes a udev rule for the Outernet moRFeus USB HID identifiers 10c4:eac9.

Install it with:

sudo install -m 0644       packaging/udev/99-openmorfeus.rules       /etc/udev/rules.d/99-openmorfeus.rules

sudo udevadm control --reload-rules
sudo udevadm trigger

Disconnect and reconnect the moRFeus after installing the rule.

The device can then be accessed without running the Python application as root.

Project objectives

  • Document the moRFeus USB HID protocol.
  • Provide a modern Python API.
  • Provide a command-line interface.
  • Restore compatibility with legacy software.
  • Integrate moRFeus into automated RF test benches.

Current status

  • USB device enumeration confirmed.
  • HID read communication confirmed.
  • HID write communication confirmed.
  • Frequency control confirmed.
  • GET frame format documented.
  • SET frame format documented.
  • Function selectors 0x81 through 0x85 validated.
  • Textual error response observed.
  • Modern Python driver.
  • Command-line interface.
  • Responsive PyQt6 graphical interface.
  • Safe frequency sweep generator with automatic restoration.
  • Automated unit tests and GitHub Actions CI.
  • Legacy morfeus_tool compatibility layer.
  • Automated hardware-in-the-loop tests with a physical moRFeus.
  • RF laboratory integration.

Device identity

Property Value
Manufacturer Outernet
Product moRFeus
USB Vendor ID 0x10C4
USB Product ID 0xEAC9
USB class HID

Repository layout

OpenMoRFeus/

  • README.md
  • docs/
    • HID_PROTOCOL_SPEC.md
    • ENGINEERING_LOG.md
  • experiments/
  • src/
    • openmorfeus/
      • init.py
  • tests/

Safety note

Selector 0x86, historically named Firmware Mode, has not been tested with a SET operation. It may cause a reset or place the device in a firmware-update state. It must not be exercised until a recovery procedure is established.

License

OpenMoRFeus is released under the MIT License. See LICENSE for the complete terms.

Command-line interface

OpenMoRFeus includes a command-line interface for the documented moRFeus controls.

openmorfeus state
openmorfeus get frequency
openmorfeus get mode

openmorfeus set frequency 1350MHz
openmorfeus set mode generator
openmorfeus set mixer-current 0
openmorfeus set bias-tee off
openmorfeus set lcd-timeout always-on

Bare frequency values are interpreted as MHz. Explicit Hz, kHz, MHz, and GHz units are supported.

The historical selectors 0x00 and 0x86 are intentionally not exposed.

Graphical interface

Install the optional PyQt6 dependency and launch the GUI:

python3 -m pip install 'openmorfeus[gui]'
openmorfeus-gui

Hardware transactions run outside the graphical event loop. The GUI exposes only the documented controls. Historical selectors 0x00 and 0x86 remain unavailable.

Sweep generator

The graphical interface includes a responsive frequency-sweep dialog with:

  • validated start, stop, and step frequencies;
  • configurable dwell time;
  • live progress and current-frequency display;
  • pause, resume, and stop control;
  • automatic restoration of the initial frequency.

The sweep runs outside the Qt event thread. Closing the dialog during execution requests a controlled stop before the window is closed.

Metadata

Release files for openmorfeus 0.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for openmorfeus 0.3.4
File Size Uploaded
openmorfeus-0.3.4.tar.gz 27.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for openmorfeus 0.3.4
File Interpreter ABI Platform
openmorfeus-0.3.4-py3-none-any.whl Python 3 none any Details

Total release size: 51.7 kB

Release files / openmorfeus-0.3.4.tar.gz

Download URL openmorfeus-0.3.4.tar.gz
Size 27.4 kB
Tags Source
SHA-256 checksum
How to use checksums
17cff0c24b4dee23958221a30565727640313de251f1c3fae2deefb554345548
BLAKE2b-256 checksum
How to use checksums
52b001b00d2f1c576de1f07700130bd892a9268980877ed5c41ad23ec5abaac5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.

Transparency log

Release files / openmorfeus-0.3.4-py3-none-any.whl

Download URL openmorfeus-0.3.4-py3-none-any.whl
Size 24.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
022f56052c7ed475e2ee82ddf3a3ae63954b79455ae1da033406878d171010c8
BLAKE2b-256 checksum
How to use checksums
3b9c4ac2775906c2ab38c72a1126616d7d106c26b22e7304cab20311d9592454
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.4 This release

2 release files

0.3.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page