Skip to main content

Python library for JABI (Just Another Bridge Interface)

Project description

JABI

JABI (Just Another Bridge Interface) makes creating and deploying bridge devices that provide RPC to common microcontroller peripherals simple.

Architecture

Interfaces are the available methods by which a single client may connect. Multiple interfaces running concurrently is supported. The following interfaces are currently supported.

  • USB
  • UART

Microcontroller peripherals are made available over each interface via a custom basic RPC. Each interface listens for request packets and dispatches them to the appropriate peripheral. Multiple instances of each peripheral type is supported. The following peripherals are currently supported.

  • Metadata
  • CAN (FD)
  • LIN
  • SPI controller
  • I2C controller
  • UART
  • GPIO
  • PWM
  • ADC
  • DAC

Clients connect to the microcontroller over any one of the interfaces. The following clients are supported.

  • C++
  • Python - pip install pyjabi
  • gRPC
  • Rust - cargo add jabi

Setup

Firmware

Follow Zephyr's Getting Started Guide to get dependencies installed. Then create a new workspace using this repo. We'll create it under jabi, but you can use whatever you want.

west init -m https://github.com/dragonlock2/JABI.git jabi
cd jabi && west update

To port any board, you'll need the following. See firmware/boards for examples.

  • Zephyr board definition. See Zephyr's Board Porting Guide for help.
  • firmware/boards/<board>.conf - enable device drivers and any desired settings
  • firmware/boards/<board>.overlay - selects available interfaces and peripherals

Now compile and flash the firmware.

west build -b <board>
west flash

Dependencies

If you want to build from source, you may need to install a few dependencies.

  • macOS
    • brew install git cmake autoconf automake libtool libusb grpc openssl
  • Linux
    • apt install git cmake autotools-dev autoconf libtool libusb-1.0-0-dev libssl-dev
    • Install grpc from source.
  • Windows
  • Windows (MSYS2/MinGW) (experimental)
    • Install MSYS2 to install the following packages.
    • pacman -S mingw-w64-ucrt-x86_64-gcc git mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-autotools mingw-w64-ucrt-x86_64-libusb mingw-w64-ucrt-x86_64-grpc
      • If you're not on x86_64, your exact package names may be different.

C++

C++ support is provided as a CMake library and can be added to any CMake project using add_subdirectory. An example project is in examples/cpp.

Python

A Python library is published on PyPI. For the latest changes, it can be built and installed locally by running the following. An example using it is in examples/python.

pip install clients/python

gRPC

Protobuf definitions are located in jabi.proto. grpc-server is a reference server implementation that bridges one device to a network and can handle parallel requests. It provides various arguments for selecting the desired device. An example client is in examples/grpc-client.

Rust

A Rust crate is published on crates.io. For the latest changes, it can be added locally. An example project is in examples/rust.

TODO

The following gRPC clients.

  • Google Flutter cross-platform app

Fun things to look into one day.

  • Better documentation...
  • Unit testing...
  • Alternative functions for pins
  • Move to Thrift for RPC (natively supported in Zephyr!)
    • Network (Ethernet, WiFi) support
  • BLE support
  • USB Linux drivers to show up under /dev
  • USB HS dev board for comparable performance to STLINK-V3

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyjabi-0.1.1.tar.gz (382.0 kB view hashes)

Uploaded Source

Built Distributions

pyjabi-0.1.1-pp310-pypy310_pp73-win_amd64.whl (183.8 kB view hashes)

Uploaded PyPy Windows x86-64

pyjabi-0.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (401.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pyjabi-0.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (395.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

pyjabi-0.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl (220.0 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

pyjabi-0.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (232.0 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pyjabi-0.1.1-pp39-pypy39_pp73-win_amd64.whl (183.9 kB view hashes)

Uploaded PyPy Windows x86-64

pyjabi-0.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (401.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pyjabi-0.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (395.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

pyjabi-0.1.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl (219.9 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

pyjabi-0.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (231.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pyjabi-0.1.1-cp312-cp312-win_amd64.whl (184.7 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

pyjabi-0.1.1-cp312-cp312-win32.whl (151.5 kB view hashes)

Uploaded CPython 3.12 Windows x86

pyjabi-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl (920.0 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

pyjabi-0.1.1-cp312-cp312-musllinux_1_1_i686.whl (964.1 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

pyjabi-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (416.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

pyjabi-0.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (409.2 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

pyjabi-0.1.1-cp312-cp312-macosx_11_0_arm64.whl (220.9 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

pyjabi-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl (230.7 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

pyjabi-0.1.1-cp311-cp311-win_amd64.whl (184.9 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

pyjabi-0.1.1-cp311-cp311-win32.whl (152.8 kB view hashes)

Uploaded CPython 3.11 Windows x86

pyjabi-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl (923.2 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pyjabi-0.1.1-cp311-cp311-musllinux_1_1_i686.whl (967.3 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

pyjabi-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (416.5 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pyjabi-0.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (411.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

pyjabi-0.1.1-cp311-cp311-macosx_11_0_arm64.whl (220.9 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

pyjabi-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl (230.1 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

pyjabi-0.1.1-cp310-cp310-win_amd64.whl (184.0 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

pyjabi-0.1.1-cp310-cp310-win32.whl (152.2 kB view hashes)

Uploaded CPython 3.10 Windows x86

pyjabi-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl (920.5 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pyjabi-0.1.1-cp310-cp310-musllinux_1_1_i686.whl (966.3 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pyjabi-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (415.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pyjabi-0.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (409.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

pyjabi-0.1.1-cp310-cp310-macosx_11_0_arm64.whl (219.6 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

pyjabi-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl (228.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pyjabi-0.1.1-cp39-cp39-win_amd64.whl (179.7 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

pyjabi-0.1.1-cp39-cp39-win32.whl (152.4 kB view hashes)

Uploaded CPython 3.9 Windows x86

pyjabi-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl (921.5 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pyjabi-0.1.1-cp39-cp39-musllinux_1_1_i686.whl (966.5 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pyjabi-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (415.7 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pyjabi-0.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (410.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

pyjabi-0.1.1-cp39-cp39-macosx_11_0_arm64.whl (219.8 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

pyjabi-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl (228.5 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page