OpenMoRFeus
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
- openmorfeus/
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17cff0c24b4dee23958221a30565727640313de251f1c3fae2deefb554345548
|
|
| MD5 |
d695b787dc575e5ad12b929793397064
|
|
| BLAKE2b-256 |
52b001b00d2f1c576de1f07700130bd892a9268980877ed5c41ad23ec5abaac5
|
Provenance
The following attestation bundles were made for openmorfeus-0.3.4.tar.gz:
Publisher:
publish.yml on davidaguirresalcedo/OpenMoRFeus
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openmorfeus-0.3.4.tar.gz -
Subject digest:
17cff0c24b4dee23958221a30565727640313de251f1c3fae2deefb554345548 - Sigstore transparency entry: 2332569360
- Sigstore integration time:
-
Permalink:
davidaguirresalcedo/OpenMoRFeus@d169960d8a40df7ebd71335b5b03cb5d3519bd54 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/davidaguirresalcedo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d169960d8a40df7ebd71335b5b03cb5d3519bd54 -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
022f56052c7ed475e2ee82ddf3a3ae63954b79455ae1da033406878d171010c8
|
|
| MD5 |
95d96f38a50c3e88f4c95423c9518db0
|
|
| BLAKE2b-256 |
3b9c4ac2775906c2ab38c72a1126616d7d106c26b22e7304cab20311d9592454
|
Provenance
The following attestation bundles were made for openmorfeus-0.3.4-py3-none-any.whl:
Publisher:
publish.yml on davidaguirresalcedo/OpenMoRFeus
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openmorfeus-0.3.4-py3-none-any.whl -
Subject digest:
022f56052c7ed475e2ee82ddf3a3ae63954b79455ae1da033406878d171010c8 - Sigstore transparency entry: 2332569391
- Sigstore integration time:
-
Permalink:
davidaguirresalcedo/OpenMoRFeus@d169960d8a40df7ebd71335b5b03cb5d3519bd54 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/davidaguirresalcedo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d169960d8a40df7ebd71335b5b03cb5d3519bd54 -
Trigger Event:
release
-
Statement type: