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.

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.4.tar.gz (27.4 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.4-py3-none-any.whl (24.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: openmorfeus-0.3.4.tar.gz
  • Upload date:
  • Size: 27.4 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.4.tar.gz
Algorithm Hash digest
SHA256 17cff0c24b4dee23958221a30565727640313de251f1c3fae2deefb554345548
MD5 d695b787dc575e5ad12b929793397064
BLAKE2b-256 52b001b00d2f1c576de1f07700130bd892a9268980877ed5c41ad23ec5abaac5

See more details on using hashes here.

Provenance

The following attestation bundles were made for openmorfeus-0.3.4.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.4-py3-none-any.whl.

File metadata

  • Download URL: openmorfeus-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 24.3 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 022f56052c7ed475e2ee82ddf3a3ae63954b79455ae1da033406878d171010c8
MD5 95d96f38a50c3e88f4c95423c9518db0
BLAKE2b-256 3b9c4ac2775906c2ab38c72a1126616d7d106c26b22e7304cab20311d9592454

See more details on using hashes here.

Provenance

The following attestation bundles were made for openmorfeus-0.3.4-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