A Python package for parsing IOC files and generating C++ code.
Project description
libxr is a Python package designed to automate embedded system development by parsing .ioc files and generating C++
code. It significantly reduces manual effort in STM32CubeMX-based projects.
🌟 Features
- Automatic
.iocparsing: Extracts GPIO, peripherals (UART, SPI, I2C, etc.), and DMA configurations. - C++ code generation: Generates fully functional STM32-compatible code.
- STM32CubeMX & FreeRTOS support: Works seamlessly with STM32 and CMake build systems.
- Automated Git management: Initializes repositories and creates
.gitignorefiles. - CMake automation: Generates
CMakeLists.txtfor STM32 projects.
📥 Installation
Install via pip
pip install libxr
Install from source
git clone https://github.com/Jiu-xiao/LibXR_CppCodeGenerator.git
cd LibXR_CppCodeGenerator
pip install -e .
📌 API Reference
xr_cubemx_cfg
This command automates STM32CubeMX project setup, including:
- Parsing
.iocfiles and generating JSON configuration. - Generating C++ code.
- Modifying STM32 interrupt handlers.
- Creating
CMakeLists.txtwith Clang support (if enabled). - Initializing Git and setting up
.gitignore. - Adding the
LibXRsubmodule if missing.
Usage:
xr_cubemx_cfg [-h] -d DIRECTORY [-t TERMINAL] [-c]
Required arguments:
-d, --directory(str): Path to the STM32CubeMX project.
Optional arguments:
-t, --terminal(str): Specifies the terminal device source.-c, --clang: Enables Clang support for compilation.
xr_parse_ioc
Parses the .ioc file in the specified directory and extracts peripheral configurations into a JSON file.
Usage:
xr_parse_ioc [-h] -d DIRECTORY [-o OUTPUT]
Required arguments:
-d, --directory(str): Path to the STM32CubeMX project directory.
xr_gen_code
Generates C++ code from the parsed .ioc JSON configuration and saves an additional JSON file for further
modifications.
Usage:
xr_gen_code [-h] -i INPUT [-o OUTPUT]
Required arguments:
-i, --input(str): Path to the JSON file generated bylibxr_parse_ioc.
Outputs:
app_main.cpp: Generated STM32 C++ source file.libxr_config.json: Stores configuration options such as DMA buffer sizes, terminal settings, and peripheral mappings.
xr_stm32_it
Modifies STM32 _it.c interrupt handler files to include necessary callback functions.
Usage:
xr_stm32_it [-h] input_dir
Required arguments:
input_dir(str): Path to the STM32CubeMX project source directory.
xr_stm32_clang
Generates gcc-arm-none-eabi.cmake for STM32 projects using Clang.
Usage:
xr_stm32_clang [-h] input_dir
Required arguments:
input_dir(str): Path to the STM32CubeMX project.
xr_stm32_cmake
Generates LibXR.CMake for STM32 projects using LibXR.
Usage:
xr_stm32_cmake [-h] input_dir
Required arguments:
input_dir(str): Path to the STM32CubeMX project.
.IOC file requirements
- STM32CubeMX: The
.iocfile must be generated using STM32CubeMX. - CMake: The project must be built using CMake.
- DMA: UART, SPI and I2C must have DMA enabled.
After Generation
After the code generation is completed, users need to manually add the following include statement:
#include "app_main.h"
Additionally, ensure that the function app_main(); is called at an appropriate location:
- For non-RTOS environments: Call
app_main();at the end of themainfunction. - For FreeRTOS environments: Call
app_main();at the beginning of the thread function.
🛠️ Contributing
We welcome community contributions! See our contribution guidelines for details.
Ways to contribute:
- 📝 Submit pull requests for new features or bug fixes.
- 🔍 Review pull requests from other contributors.
- 🐛 Report issues and suggest improvements.
- 📖 Write documentation and tutorials.
- 🎨 Design graphics for branding and promotions.
For detailed guidelines, visit our contributing page.
📄 License
libxr is licensed under the Apache-2.0 license. See the LICENSE file for more details.
🔗 Resources
- Project Homepage: GitHub
- Documentation: Online Docs
- Issue Tracker: Report Issues
- Source Code: GitHub Repository
Project details
Release history Release notifications | RSS feed
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 libxr-0.1.7.tar.gz.
File metadata
- Download URL: libxr-0.1.7.tar.gz
- Upload date:
- Size: 24.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8577f98327749fe1be484db310276de31b55f736ea79ca9099a1edd3551cb564
|
|
| MD5 |
c6cf0a0ef8f3cd539b93e5bae768c7b8
|
|
| BLAKE2b-256 |
7f82dafa8fb709259f91cff63257aa63ab28833d7383c92eb88c169ba0cdd1ff
|
Provenance
The following attestation bundles were made for libxr-0.1.7.tar.gz:
Publisher:
python-publish.yml on Jiu-xiao/LibXR_CppCodeGenerator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
libxr-0.1.7.tar.gz -
Subject digest:
8577f98327749fe1be484db310276de31b55f736ea79ca9099a1edd3551cb564 - Sigstore transparency entry: 185277849
- Sigstore integration time:
-
Permalink:
Jiu-xiao/LibXR_CppCodeGenerator@3c338bc6b08235f86d65150b69b18a849a407833 -
Branch / Tag:
refs/tags/V0.1.7 - Owner: https://github.com/Jiu-xiao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@3c338bc6b08235f86d65150b69b18a849a407833 -
Trigger Event:
release
-
Statement type:
File details
Details for the file libxr-0.1.7-py3-none-any.whl.
File metadata
- Download URL: libxr-0.1.7-py3-none-any.whl
- Upload date:
- Size: 25.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48f5a5bdc91f50f35f9b97dc740277584b917c6c2ea1173f3bb3acc226bb9e81
|
|
| MD5 |
d81efe7272bfdff76ef240ea8aac324d
|
|
| BLAKE2b-256 |
1b5eb33fcb6fe49a6a2e4e5212cbdf4dde34d6484b4f0ec13138d33bd201e774
|
Provenance
The following attestation bundles were made for libxr-0.1.7-py3-none-any.whl:
Publisher:
python-publish.yml on Jiu-xiao/LibXR_CppCodeGenerator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
libxr-0.1.7-py3-none-any.whl -
Subject digest:
48f5a5bdc91f50f35f9b97dc740277584b917c6c2ea1173f3bb3acc226bb9e81 - Sigstore transparency entry: 185277855
- Sigstore integration time:
-
Permalink:
Jiu-xiao/LibXR_CppCodeGenerator@3c338bc6b08235f86d65150b69b18a849a407833 -
Branch / Tag:
refs/tags/V0.1.7 - Owner: https://github.com/Jiu-xiao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@3c338bc6b08235f86d65150b69b18a849a407833 -
Trigger Event:
release
-
Statement type: