Skip to main content

OpenMoRFeus

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

Installation

Create or activate a Python virtual environment and install the project:

python3 -m venv .venv
.venv/bin/python -m pip install -e .

The installed command is:

.venv/bin/openmorfeus --help

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:

python -m pip install -e '.[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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openmorfeus-0.3.3.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openmorfeus-0.3.3-py3-none-any.whl (24.1 kB view details)

Uploaded Python 3

File details

Details for the file openmorfeus-0.3.3.tar.gz.

File metadata

  • Download URL: openmorfeus-0.3.3.tar.gz
  • Upload date:
  • Size: 27.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for openmorfeus-0.3.3.tar.gz
Algorithm Hash digest
SHA256 9c5dbd1d6a3d945358f2384b5ce52fcfe36b8a056b554e2dc98614f1d160747e
MD5 a750a95a1bb196f52230a8892db4267b
BLAKE2b-256 caa6f3ebb23aa97e1e0eee8e672da9fbce840d087aba2b4ed354a73f4cce81b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for openmorfeus-0.3.3.tar.gz:

Publisher: publish.yml on davidaguirresalcedo/OpenMoRFeus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file openmorfeus-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: openmorfeus-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 24.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for openmorfeus-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8cb59d41f2d7b6da76985ac5a7c83b77031d805a636f0cb44189917ad44b00bf
MD5 28d9f3ca00d9202b153278ad062d1d88
BLAKE2b-256 5b8c2803a7fa77700f6ccd33b7944ff625bf3f58164d7f2c3428f97d4c156ccf

See more details on using hashes here.

Provenance

The following attestation bundles were made for openmorfeus-0.3.3-py3-none-any.whl:

Publisher: publish.yml on davidaguirresalcedo/OpenMoRFeus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page