Repositories

bleRPC is organized into a main monorepo and several protocol library packages for each supported language.

Main Repository

tdaira/blerpc

The main monorepo containing firmware, central clients, code generators, and tests.

DirectoryDescription
peripheral/Zephyr peripheral firmware (C) — nRF54L15 & EFR32xG22E
peripheral_py/Python peripheral (bless) for role-reversal testing
central/Python central client (bleak) + integration tests
central_fw/Zephyr central firmware (C) for device-to-device communication
central_android/Android central app (Kotlin) with test runner
central_ios/iOS central app (Swift) with test runner
proto/Protocol Buffers definitions (blerpc.proto)
src/Shared C source (container, command, BLE service)
tools/generate-handlers/Code generator (Go) — generates handlers and clients for all languages
boards/Custom board definitions (EFR32xG22E)
tests/Standalone C unit tests

Protocol Libraries

Platform-independent protocol encoding/decoding libraries, published as separate packages for each language.

blerpc-protocol

Python C

Container splitting/reassembly and command encoding/decoding. The Python package is installable via pip. The C implementation is header-only for embedded use.

pip install git+https://github.com/tdaira/blerpc-protocol.git

blerpc-protocol-swift

Swift

Swift Package for iOS and macOS. Zero external dependencies (Foundation only). Supports iOS 16+ and macOS 13+.

// Swift Package Manager
.package(url: "https://github.com/tdaira/blerpc-protocol-swift", from: "0.1.0")

blerpc-protocol-kt

Kotlin

Kotlin library for Android. Published to GitHub Packages (Maven).

implementation("com.blerpc:blerpc-protocol-kt:0.1.0")

Architecture Overview

How the repositories relate to each other:

                         bleRPC (monorepo)
            +-----------------------------------------+
            |                                         |
            |  proto/blerpc.proto                     |
            |       |                                 |
            |       v                                 |
            |  tools/generate-handlers (Go)           |
            |       |                                 |
            |       +---> peripheral/src/             |
            |       |     generated_handlers.{c,h}    |
            |       |                                 |
            |       +---> central/blerpc/generated/   |
            |       |     generated_client.py         |
            |       |                                 |
            |       +---> central_android/.../         |
            |       |     GeneratedClient.kt          |
            |       |                                 |
            |       +---> central_ios/.../             |
            |             GeneratedClient.swift        |
            |                                         |
            +-----------------------------------------+
                    |           |            |
                    v           v            v
           blerpc-protocol  blerpc-     blerpc-
           (Python + C)     protocol-kt protocol-swift

CI / CD

Each repository has GitHub Actions CI that runs on every push and pull request:

RepositoryCI Checks
blerpcC standalone tests, Python tests + ruff lint, Go lint + build, Peripheral firmware build (nRF54L15 + EFR32xG22E), iOS build, Android build
blerpc-protocolPython tests + lint, C tests
blerpc-protocol-swiftswift build, swift test, SwiftLint
blerpc-protocol-ktGradle build, Gradle test, ktlint

License

All bleRPC repositories are licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0).