A cross-platform C application to control Lotus Communication Systems Block Up/Down Converters (BUDC) via serial port.
This project provides two interfaces:
budc_cli
: A command-line tool for scripting and direct command execution.budc_gui
: A graphical user interface built with ImGui for interactive control.
- SCPI command communication for BUDC devices
- CLI for automation and scripting
- GUI with Dear ImGui for interactive control
- Cross-platform support: Windows and Linux (soon macOS)
- Build automation and Docker support
- Precompiled binaries released on GitHub for Windows and Linux
- Licensed under LGPL
- A C Compiler (GCC, Clang, MSVC)
- CMake (version 3.15 or newer)
- Git
The project uses CMake's FetchContent
to automatically download and build:
- libserialport: For serial communication
- cimgui: C bindings for Dear ImGui
- Dear ImGui: The GUI library
- GLFW: Window and input handling
- glad: OpenGL function loader
git clone https://github.com/PentHertz/lotus_budc_controler.git
cd lotus_budc_controller
mkdir build && cd build
cmake ..
make
And you can install it running the following command:
make install
On Windows with Visual Studio:
cmake --build build --config Release
The executables budc_cli
(or budc_cli.exe
) and budc_gui
(or budc_gui.exe
) will be located in the build/src/
directory.
The CLI is used for sending single or scripted commands over a specified serial port.
List available serial ports:
./build/src/budc_cli --list
If you have installed it through make, you can directly use the budc_gui
command line.
Show help and available commands:
./build/src/budc_cli --help
Example output:
BUDC Command Line Interface
Usage:
budc_cli --list List available serial ports
budc_cli --port <name> [COMMANDS]
Commands:
--status Get a full status report
--cmd "<cmd>" Send raw SCPI command
--freq <ghz> Set frequency in GHz
--freq-hz <hz> Set frequency in Hz
--freq-mhz <mhz> Set frequency in MHz
--power <level> Set power level
--get-freq Get current frequency
--get-power Get current power level
--get-temp Get temperature
--get-lock Get lock status
--preset Reset to preset values
--save Save settings to flash
--wait-lock Wait for PLL to lock (5s timeout) after a set command
Examples:
budc_cli --port /dev/ttyACM0 --status
budc_cli --port COM3 --freq 5.5
budc_cli --port COM3 --freq 2.4 --wait-lock
Example execution:
budc_cli --port /dev/ttyACM0 --status
Output:
--- BUDC Status Report ---
Identity: LOTUS,BUDC3G20GE,244003,v21.11.16
Serial Number: 244003
Firmware: v21.11.16
Frequency: 2.2000 GHz
Lock Status: UNLOCKED
Temperature: 51.0 C
Power Level: 32
The GUI launches directly into an interactive window built with Dear ImGui:
./build/src/budc_gui
No command-line arguments are needed.
Instead of using Docker, this project includes a pre-configured build script for Linux environments.
chmod +x build_script.sh
./build_script.sh
This script handles:
- Dependency checks
- Fetching sources
- Building both CLI and GUI
- Storing binaries under
build/
Tagged GitHub releases include precompiled binaries for:
- Linux (x86_64)
- Windows (x86_64)
👉 Download from the Releases page.
This project is licensed under the GNU Lesser General Public License (LGPL). See the LICENSE
file for details.