Python SDK for motorbridge Rust ABI
Project description
motorbridge Python SDK
Channel Compatibility (PCAN + CANable candleLight/gs_usb + CAN-FD + Damiao Serial Bridge + DM_Device)
- Linux SocketCAN uses prepared interfaces directly:
can0,can1. For CANable, use candleLight/gs_usb firmware so it appears as a SocketCAN interface such ascan0. - Use PCAN or CANable candleLight/gs_usb for standard CAN.
- CAN-FD transport is available both in CLI (
--transport socketcanfd) and Python SDK (Controller.from_socketcanfd(...)), and is required for Hexfellow. - Damiao-only adapter transports are available in CLI: serial bridge (
--transport dm-serial --serial-port /dev/ttyACM0 --serial-baud 921600) and DM_Device SDK (--transport dm-device --dm-device-type usb2canfd|usb2canfd-dual|linkx4c --dm-channel 0|1|2|3; Damiao motors only; adapter must be in USB mode). - Damiao-only DM_Device SDK transport is available in CLI
(
--transport dm-device --dm-device-type usb2canfd|usb2canfd-dual|linkx4c) and Python SDK (Controller.from_dm_device(...)). The adapter must be in USB mode. Channel mapping:usb2canfd=>0,usb2canfd-dual=>0/1,linkx4c=> SDK channels0..3. Linux x86_64 USB2CANFD_DUAL channel 0/1 and LINKX4C channel0..3scans are verified. - Full Damiao serial-bridge interface list and command patterns are documented in
motor_cli/README.md(section3.6inmotor_cli/README.zh-CN.md). - On Linux SocketCAN, do not append bitrate in
--channel(for examplecan0@1000000is invalid). - On Windows (PCAN backend),
can0/can1map toPCAN_USBBUS1/2; optional@bitratesuffix is supported.
Python binding layer on top of motor_abi.
Chinese version: README.zh-CN.md
README Navigation (What Each One Is For)
If this is your first time in this folder, read in this order:
- This file: README.md
Purpose: Python binding overview (install, API scope, common commands). - examples/README.md (English) / examples/READMEzh_cn.md (Chinese)
Purpose: practical demo index and run instructions (from simplest to advanced). 2.5.../motorbridge-docsPurpose: canonical Mintlify documentation site (tutorial + API style docs). - get_started/README.md / get_started/README.zh-CN.md
Purpose: pip-first onboarding path (install -> scan -> run). - DAMIAO_PYTHON_REFERENCE.zh-CN.md
Purpose: Damiao Python interface reference (parameter lookup style). - DAMIAO_binding.md
Purpose: Damiao binding implementation notes (design/internal behavior). - README.zh-CN.md
Purpose: Chinese overview for Chinese-speaking teammates.
Notes:
- If your goal is "run something now", start with
Start Here (Simplest 2 Examples)inexamples/README.md. - If your goal is CLI parameter lookup, see
../../motor_cli/README.md.
Scope
Packaging note:
- Current package target version:
0.4.6. - Published wheel includes
motor_abishared library andws_gatewaybinary for that platform. - Published wheels do not bundle the DaMiao DM_Device SDK runtime. When
Controller.from_dm_device(...), Python CLI--transport dm-device, ormotorbridge-gateway --transport dm-deviceis used, motorbridge resolves the current OS/arch runtime. If the runtime is missing, it prints the required file name, GitHub download URL, and valid install paths. This keeps Linux manylinux wheels compatible withauditwheelwhile keeping runtime setup explicit. - DM_Device runtime controls:
- Show the required runtime and install paths:
motorbridge-install-dm-device - Download explicitly into the user cache:
motorbridge-install-dm-device --download - Print the resolved path:
motorbridge-install-dm-device --print-path - Use a manually installed SDK runtime:
MOTOR_DM_DEVICE_LIB=/path/to/libdm_device.so - Use the source-tree location:
third_party/dm_device/v1.1.0/<platform>/<arch>/<runtime> - Use an internal mirror for explicit downloads:
MOTOR_DM_DEVICE_DOWNLOAD_BASE_URL=https://.../third_party/dm_device/v1.1.0 - Override the cache directory:
MOTOR_DM_DEVICE_CACHE_DIR=/path/to/cache
- Show the required runtime and install paths:
- DM_Device runtime support matrix:
| Platform / Arch | Published Python Wheel | DM_Device Runtime Available | Runtime File | OS/runtime ABI notes | Hardware Verified |
|---|---|---|---|---|---|
| Linux x86_64 | yes | yes | linux/x86_64/libdm_device.so |
needs libusb-1.0.so.0, libstdc++.so.6 with GLIBCXX_3.4.32, GLIBC_2.14+ |
yes, USB2CANFD_DUAL channel 0/1 and LINKX4C channel 0..3 scan |
| Linux aarch64 | yes | yes | linux/arm64/libdm_device.so |
needs libusb-1.0.so.0, GLIBC_2.17+, GLIBCXX_3.4.22+ |
pending host validation |
| Windows x86_64 | yes | yes | windows/msvc/dm_device.dll |
needs libusb runtime/driver and Microsoft Visual C++ runtime (MSVCP140*.dll, VCRUNTIME140*.dll) |
pending host validation |
| macOS arm64 | yes | yes | macos/arm64/libdm_device.dylib |
links system libc++, libSystem, libobjc; final OS floor pending macOS host validation |
pending host validation |
| macOS x86_64 | no official wheel | source/manual install only | macos/x86_64/libdm_device.dylib |
links system libc++, libSystem, libobjc; final OS floor pending macOS host validation |
pending host validation |
| Other arch/OS | no | no | none vendored | unsupported | unsupported |
-
ABI metadata helpers:
motorbridge.abi_version()returns the loaded ABI library version.motorbridge.abi_capabilities()returns the loaded ABI capability JSON as a Pythondict.
-
0.4.5improves Damiaoensure_modereadback verification by retrying the mode-register write after failed verification attempts. It also documents the experimental RobStriderobstride_cia402androbstride_mitCLI paths; those paths are for testing/protocol bring-up and are not production-ready yet. -
0.4.4adds Damiaodm-devicetransport, PythonController.from_dm_device(...), Python CLI--transport dm-device, and explicit runtime resolution forlibdm_device.so/.dylib/.dllwhen the target platform has a vendored SDK runtime. -
For Python CLI scans with
--transport dm-device, omit--dm-channelto scan every channel for the selected adapter:0onusb2canfd,0|1onusb2canfd-dual, or0|1|2|3onlinkx4c. Pass--dm-channel ...to scan one physical channel. -
0.4.2optimizes Damiaodm-serialmulti-motor control by makingrecv(0ms)non-blocking when no serial bytes are pending and by reducing the bounded serial read timeout to 1 ms. -
0.4.1adds ABI capability/version discovery and aligns C++ RobStride wrapper parity with the Python SDK. Binding parity is tracked inbindings/api_surface.json. -
After
pip install motorbridge, gateway binary path is typically:.../site-packages/motorbridge/bin/ws_gateway(orws_gateway.exeon Windows). -
0.4.1includes Damiaodm-serialwhole-arm scan/session handling in the bundled gateway and addsdamiao_state_manyfor multi-joint browser telemetry. -
0.3.9RobStriderequest_feedback()semantics and0.3.8PP/CSP-specific position-control entrypoints remain available while keeping the public Python binding API backward compatible. -
RobStride parameter writes default to no status-ack wait; set
MOTORBRIDGE_ROBSTRIDE_WRITE_ACK_TIMEOUT_MSto restore synchronous waiting. -
The Python CLI is now implemented as a
motorbridge.clipackage, butmotorbridge-cli,python -m motorbridge.cli,python -m motorbridge,from motorbridge.cli import main, and legacy flat run arguments remain supported. -
Gateway launch command (added to PATH by pip):
motorbridge-gateway -- --bind 127.0.0.1:9002 ...- This launcher executes the packaged Rust
ws_gatewaybinary, so WS JSON ops such asstate_stream,damiao_state_many,param_stream,damiao_param_stream, androbstride_param_streamare supported by the bundled gateway version.
-
Security note:
- keep loopback bind (
127.0.0.1) for local usage. - if you bind to non-loopback addresses (
0.0.0.0or host IP), exportMOTORBRIDGE_WS_TOKENbefore launch. - clients must pass the token in
x-motorbridge-tokenorAuthorization: Bearer ....
- keep loopback bind (
-
macOS runtime note (only if you see dynamic library load errors):
- Resolve binary path generically:
GW="$(python3 -c "import motorbridge, pathlib; print(pathlib.Path(motorbridge.__file__).resolve().parent/'bin'/'ws_gateway')")" - Use package-local
libdirectory (no machine-specific absolute path):PKG_DIR="$(python3 -c "import motorbridge, pathlib; print(pathlib.Path(motorbridge.__file__).resolve().parent)")"DYLD_LIBRARY_PATH="$PKG_DIR/lib:${DYLD_LIBRARY_PATH:-}" "$GW" --bind 127.0.0.1:9002 --vendor damiao --channel can0 --model auto --motor-id 0x01 --feedback-id 0x11 --dt-ms 20
- Resolve binary path generically:
-
High-level API:
Controller,Motor,Mode -
CLI:
motorbridge-cli -
Controller constructors:
Controller(channel="can0")(SocketCAN/PCAN path)Controller.from_socketcanfd(channel="can0")(CAN-FD path, required by Hexfellow)Controller.from_dm_serial(serial_port="/dev/ttyACM0", baud=921600)(Damiao-only serial bridge)Controller.from_dm_device(dm_device_type="usb2canfd-dual", dm_channel="0")/Controller.from_dm_device(dm_device_type="linkx4c", dm_channel="0")(Damiao-only DM_Device SDK transport)
-
Vendors:
- Damiao:
add_damiao_motor(...) - Hexfellow:
add_hexfellow_motor(...) - MyActuator:
add_myactuator_motor(...) - RobStride:
add_robstride_motor(...) - HighTorque:
add_hightorque_motor(...)
- Damiao:
-
Unified state-query pattern:
- Recommended flow:
request_feedback() -> poll_feedback_once() -> get_state(). - RobStride has no single-shot private-protocol status request;
request_feedback()is a non-blocking no-op for RobStride. Userobstride_ping()for connectivity, active report for streaming state, or typed parameter reads for fresh position/velocity values.
- Recommended flow:
Unified Mode Mapping Summary (Top-Level -> Vendor Native)
| Unified Mode | Damiao | RobStride | Hexfellow | MyActuator | HighTorque |
|---|---|---|---|---|---|
Mode.MIT |
native MIT | native MIT | native MIT (mode 5) | unsupported | maps to native pos+vel+tqe |
Mode.POS_VEL |
native POS_VEL | maps to native Position (run_mode=1 + limit_spd(0x7017) + loc_ref(0x7016)) |
native POS_VEL (mode 1) | Position setpoint flow | maps to native pos+vel+tqe |
Mode.VEL |
native VEL | native Velocity | unsupported | native velocity setpoint flow | native velocity command |
Mode.FORCE_POS |
native FORCE_POS | unsupported | unsupported | unsupported | maps to native pos+vel+tqe |
Note:
- RobStride unified high-level control currently covers
MIT/POS_VEL/VEL. - Torque/current is parameter-level only for RobStride (
robstride_write_param_*), not a dedicated unified mode. - RobStride feedback/host default should use
0xFD; scan tries0xFD,0xFF,0xFE,0x00,0xAAby default. - RobStride
feedback_id/host_idis not the motordevice_id; scan hits report the motor ID asprobe/device_id.
Quick Start
from motorbridge import Controller, Mode
with Controller("can0") as ctrl:
motor = ctrl.add_damiao_motor(0x01, 0x11, "4340P")
ctrl.enable_all()
motor.ensure_mode(Mode.MIT, 1000)
motor.send_mit(0.0, 0.0, 20.0, 1.0, 0.0)
print(motor.get_state())
motor.close()
Damiao over serial bridge:
from motorbridge import Controller, Mode
with Controller.from_dm_serial("/dev/ttyACM1", 921600) as ctrl:
motor = ctrl.add_damiao_motor(0x04, 0x14, "4310")
ctrl.enable_all()
motor.ensure_mode(Mode.MIT, 1000)
motor.send_mit(0.5, 0.0, 20.0, 1.0, 0.0)
motor.close()
RobStride quick use:
from motorbridge import Controller
with Controller("can0") as ctrl:
motor = ctrl.add_robstride_motor(127, 0xFD, "rs-00")
print(motor.robstride_ping())
print(motor.robstride_get_param_f32(0x7019))
motor.close()
MyActuator quick use:
from motorbridge import Controller, Mode
with Controller("can0") as ctrl:
motor = ctrl.add_myactuator_motor(1, 0x241, "X8")
ctrl.enable_all()
motor.ensure_mode(Mode.POS_VEL, 1000)
motor.send_pos_vel(3.1416, 2.0) # rad / rad/s
print(motor.get_state())
motor.close()
Hexfellow quick use (CAN-FD only):
from motorbridge import Controller, Mode
with Controller.from_socketcanfd("can0") as ctrl:
motor = ctrl.add_hexfellow_motor(1, 0x00, "hexfellow")
ctrl.enable_all()
motor.ensure_mode(Mode.MIT, 1000) # Hexfellow supports MIT / POS_VEL
motor.send_mit(0.8, 1.0, 30.0, 1.0, 0.1)
print(motor.get_state())
motor.close()
CLI Examples
Damiao:
motorbridge-cli run \
--vendor damiao --channel can0 --model 4340P --motor-id 0x01 --feedback-id 0x11 \
--mode mit --pos 0 --vel 0 --kp 20 --kd 1 --tau 0 --loop 50 --dt-ms 20
# Rust CLI style ID update is also accepted:
motorbridge-cli run \
--vendor damiao --channel can0 --model 4340P --motor-id 0x01 --feedback-id 0x11 \
--set-motor-id 0x02 --set-feedback-id 0x12 --store 1 --verify-id 1
RobStride:
motorbridge-cli run \
--vendor robstride --channel can0 --model rs-00 --motor-id 127 \
--mode ping
RobStride MIT quick check:
motorbridge-cli run \
--vendor robstride --channel can0 --model rs-00 \
--motor-id 2 --feedback-id 0xFD \
--mode mit --ensure-strict 1 \
--pos 0.5 --vel 0 --kp 20.0 --kd 0.5 --tau 0 \
--loop 100 --dt-ms 20
RobStride position target, aligned with the WS gateway native register path
(limit_spd 0x7017, loc_kp 0x701E, loc_ref 0x7016):
motorbridge-cli run \
--vendor robstride --channel can0 --model rs-00 \
--motor-id 2 --feedback-id 0xFD \
--mode pos-vel \
--pos 1.5 --vlim 1.0 --loc-kp 5.0 \
--loop 1 --dt-ms 20
motorbridge-cli run \
--vendor robstride --channel can0 --model rs-00 \
--motor-id 2 --feedback-id 0xFD \
--mode pos-vel \
--pos -1.5 --vlim 1.0 --loc-kp 5.0 \
--loop 1 --dt-ms 20
RobStride parameter read:
motorbridge-cli robstride-read-param \
--channel can0 --model rs-00 --motor-id 127 --param-id 0x7019 --type f32
# Rust CLI style is also accepted by Python CLI:
motorbridge-cli run \
--vendor robstride --channel can0 --model rs-00 --motor-id 127 --feedback-id 0xFD \
--mode read-param --param-id 0x7019 --param-type f32
Damiao parameter read/write:
motorbridge-cli damiao-read-param \
--channel can0 --model 4340P --motor-id 0x01 --feedback-id 0x11 \
--param-id 21 --type f32
motorbridge-cli damiao-write-param \
--channel can0 --model 4340P --motor-id 0x01 --feedback-id 0x11 \
--param-id 8 --type u32 --value 0x01 --verify 1
Unified scan (all vendors):
motorbridge-cli scan --vendor all --channel can0 --start-id 0x01 --end-id 0xFF
RobStride-focused scan and ID update:
motorbridge-cli scan \
--vendor robstride --channel can0 --start-id 1 --end-id 127 \
--feedback-ids 0xFD,0xFF,0xFE,0x00,0xAA
motorbridge-cli id-set \
--vendor robstride --channel can0 \
--motor-id 127 --feedback-id 0xFD \
--new-motor-id 126 --store 1 --verify 1
HighTorque via binding:
from motorbridge import Controller
with Controller("can0") as ctrl:
motor = ctrl.add_hightorque_motor(1, 0x01, "hightorque")
motor.send_mit(3.1416, 0.8, 0.0, 0.0, 0.8) # kp/kd are accepted but ignored by protocol
motor.request_feedback()
print(motor.get_state())
motor.close()
HighTorque via Rust CLI:
cargo run -p motor_cli --release -- \
--vendor hightorque --channel can0 --motor-id 1 --mode read
Experimental Windows Support (PCAN-USB)
Linux remains the primary target. Windows support is experimental and currently uses PEAK PCAN.
- Install PEAK PCAN driver + PCAN-Basic runtime (
PCANBasic.dll). - Use
channelascan0@1000000(maps toPCAN_USBBUS1at 1Mbps).
Recommended quick validation with Rust CLI on Windows:
cargo run -p motor_cli --release -- --vendor damiao --channel can0@1000000 --model 4340P --motor-id 0x01 --feedback-id 0x11 --mode scan --start-id 1 --end-id 16
cargo run -p motor_cli --release -- --vendor damiao --channel can0@1000000 --model 4340P --motor-id 0x01 --feedback-id 0x11 --mode pos-vel --pos 3.1416 --vlim 2.0 --loop 1 --dt-ms 20
cargo run -p motor_cli --release -- --vendor damiao --channel can0@1000000 --model 4310 --motor-id 0x07 --feedback-id 0x17 --mode pos-vel --pos 3.1416 --vlim 2.0 --loop 1 --dt-ms 20
Local wheel build (Windows):
python -m pip install --user wheel
set MOTORBRIDGE_LIB=%CD%\\target\\release\\motor_abi.dll
set MOTORBRIDGE_WS_GATEWAY_BIN=%CD%\\target\\release\\ws_gateway.exe
python -m pip wheel --no-build-isolation bindings/python -w bindings/python/dist
python -m pip install bindings/python/dist/motorbridge-*.whl
Example Programs
- Damiao wrapper demo:
examples/python_wrapper_demo.py - Hexfellow CAN-FD demo:
examples/hexfellow_canfd_demo.py(MIT / POS_VEL only) - Damiao maintenance demo:
examples/damiao_maintenance_demo.py - Damiao register rw demo:
examples/damiao_register_rw_demo.py - Damiao dm-serial demo:
examples/damiao_dm_serial_demo.py - RobStride wrapper demo:
examples/robstride_wrapper_demo.py - Full Damiao mode demo:
examples/full_modes_demo.py - Damiao scan / tune / position helpers:
examples/scan_ids_demo.pyexamples/pid_register_tune_demo.pyexamples/pos_ctrl_demo.pyexamples/pos_repl_demo.py
See examples/README.md (English) or examples/READMEzh_cn.md (Chinese).
Damiao Full-Coverage Status
Damiao usage in Python examples is now covered end-to-end:
- control modes:
mit/pos-vel/vel/force-pos - transport paths: SocketCAN/PCAN constructor +
from_socketcanfd(...)+from_dm_serial(...)+from_dm_device(...) - maintenance ops:
clear_error,set_zero_position,set_can_timeout_ms,request_feedback- project guard for Damiao set-zero: call
disable()beforeset_zero_position() - no user-facing
msparameter for set-zero; core applies fixed20mssettle
- project guard for Damiao set-zero: call
- register APIs:
get/write f32,get/write u32,store_parameters
RobStride Maintenance Notes
clear_error()is supported through the same unified motor method as Damiao.robstride_set_active_report(True/False)toggles RobStride comm_type24active status reporting.- With active reporting enabled, background polling can update
get_state()from incoming status frames without a fresh query command;request_feedback()remains available as a compatibility/manual-refresh helper.
CLI Run-Mode Argument Map
motorbridge-cli run keeps one unified command surface, but each vendor/mode
uses only the arguments that its native protocol understands.
| Vendor | Mode | Effective arguments | Notes |
|---|---|---|---|
| Damiao | mit |
--pos --vel --kp --kd --tau |
native MIT frame |
| Damiao | pos-vel |
--pos --vlim |
native position-speed frame |
| Damiao | vel |
--vel |
native velocity frame |
| Damiao | force-pos |
--pos --vlim --ratio |
native force-position frame |
| RobStride | mit |
--pos --vel --kp --kd --tau |
native MIT frame |
| RobStride | pos-vel |
--pos --vlim --loc-kp |
maps to native Position mode; --kp is accepted as a --loc-kp fallback |
| RobStride | vel |
--vel |
native speed mode |
| HighTorque | mit |
--pos --vel --tau |
--kp/--kd are accepted for unified signature but ignored by ht_can v1.5.5 |
| Hexfellow | mit |
--pos --vel --kp --kd --tau |
CAN-FD path |
| Hexfellow | pos-vel |
--pos --vlim |
CAN-FD path |
For RobStride pos-vel, --vel, --kd, and --tau are intentionally
ignored because the firmware path is parameter-based (limit_spd, loc_kp,
loc_ref). The Rust CLI and Python CLI warn when those ignored arguments are
explicitly provided.
End-to-End Demo Commands
# Build ABI once
cargo build -p motor_abi --release
export PYTHONPATH=bindings/python/src
export LD_LIBRARY_PATH=$PWD/target/release:${LD_LIBRARY_PATH}
# Damiao wrapper demo
python3 bindings/python/examples/python_wrapper_demo.py \
--channel can0 --model 4340P --motor-id 0x01 --feedback-id 0x11 \
--pos 0 --vel 0 --kp 20 --kd 1 --tau 0 --loop 20 --dt-ms 20
# RobStride wrapper demo: ping
python3 bindings/python/examples/robstride_wrapper_demo.py \
--channel can0 --model rs-00 --motor-id 2 --feedback-id 0xFD --mode ping
# RobStride wrapper demo: clear fault
python3 bindings/python/examples/robstride_wrapper_demo.py \
--channel can0 --model rs-00 --motor-id 2 --feedback-id 0xFD --mode clear-error
# RobStride wrapper demo: active-report bring-up
python3 bindings/python/examples/robstride_wrapper_demo.py \
--channel can0 --model rs-00 --motor-id 2 --feedback-id 0xFD \
--mode write-param --param-id 0x7026 --param-type u16 --param-value 3
python3 bindings/python/examples/robstride_wrapper_demo.py \
--channel can0 --model rs-00 --motor-id 2 --feedback-id 0xFD \
--mode active-report --active-report 1
# RobStride wrapper demo: position command
python3 bindings/python/examples/robstride_wrapper_demo.py \
--channel can0 --model rs-00 --motor-id 2 --feedback-id 0xFD \
--mode pos-vel --pos 1.5 --vlim 1.0 --loc-kp 5.0 --loop 1 --dt-ms 20
# RobStride wrapper demo: velocity
python3 bindings/python/examples/robstride_wrapper_demo.py \
--channel can0 --model rs-00 --motor-id 2 --feedback-id 0xFD \
--mode vel --vel 0.3 --loop 40 --dt-ms 50
Notes
id-dumpis a Damiao workflow;id-setsupports Damiao and RobStride;scansupportsdamiao|hexfellow|myactuator|robstride|hightorque|all.- For RobStride
id-set,--new-motor-idchangesdevice_id;--feedback-idremains the host-side ID. - RobStride
motor_id/device_idis validated as1..255;feedback_id/host_idis validated as0..255to prevent silentctypestruncation. - RobStride scan probes each
--feedback-idshost_id exactly through host-id-specific ABI helpers; invalid host IDs are rejected instead of silently falling back. - Python CLI and Rust CLI are aligned for the production Damiao and RobStride workflows: scan, enable/disable, control, ID update, parameter read/write, RobStride clear-error, and RobStride active-report. Rust CLI still exposes deeper vendor-specific surfaces for HighTorque/MyActuator/Hexfellow debugging.
Mode.MITandsend_force_posare not available for MyActuator in ABI wrapper.- Hexfellow supports
MITandPOS_VELthrough ABI wrapper;VELandFORCE_POSreturn unsupported. - Full Damiao tuning reference stays in:
PyPI Auto Publish (GitHub Actions)
This repository includes .github/workflows/pypi-publish.yml.
- Tag publish policy:
- push
vX.Y.Z-> publish the same artifacts to both TestPyPI and PyPI
- push
- Manual publish is still available via workflow
Python Publish:testpypi(only TestPyPI)pypi(only PyPI)
One-time setup (token mode)
- Create API token on PyPI and add repository secret
PYPI_API_TOKEN. - Create API token on TestPyPI and add repository secret
TEST_PYPI_API_TOKEN. - Keep package version unique for every upload (for example
0.1.6,0.1.7).
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 Distributions
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 motorbridge-0.4.6.tar.gz.
File metadata
- Download URL: motorbridge-0.4.6.tar.gz
- Upload date:
- Size: 42.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d29dfef59867c331dad5b7f6ceeab2ec379fc4fd8f151412d75505f29b08d58
|
|
| MD5 |
69326bb9f6e2be4c54f8ca2ec7e1d1bc
|
|
| BLAKE2b-256 |
df0f10f06a86bae13f165316225b81f7eb61b4cd43928dc282b4c321b82b9009
|
File details
Details for the file motorbridge-0.4.6-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae8e7d94d75b04fe8395eb83c600bfc4fb54148e8ae0a78d1ec00d046aaef2ce
|
|
| MD5 |
24af63447f2655c2caa942172006d9db
|
|
| BLAKE2b-256 |
4f335a7ab5797bbf743992286e72b49409c6ebaa4dfe96e1d79a84e6743337b3
|
File details
Details for the file motorbridge-0.4.6-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
514d4a54616ed2d7f686e5e77ebaf0ae711d60b3082084ee4b3b4def8e9abc90
|
|
| MD5 |
dd48c4db7c476047f27b9f050bc56aa3
|
|
| BLAKE2b-256 |
17f5b072015ae5acd5675dd7981e217c328ef7c020134419ae19f047c78a2cd2
|
File details
Details for the file motorbridge-0.4.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5173e129e7a6d64808389a1bebdb040149a9e19a9a6b07eecb4c12af0398692e
|
|
| MD5 |
451cf303f97f036e75ed4dc729ad818c
|
|
| BLAKE2b-256 |
69a72c879f504ea5d6b9066b4ff2cc68bdd0f3f02ae3953a13e91df4055fe57c
|
File details
Details for the file motorbridge-0.4.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90bae72465fecf5f00481ae74e6d2b563ec03a21d98113f81a69f928ce5fc8b3
|
|
| MD5 |
504d87828ec28b364062350a6a4fecf1
|
|
| BLAKE2b-256 |
58bdb3d9800979176019a9dc7c258f6210a4219ac7144c021d0787efdbdfb62a
|
File details
Details for the file motorbridge-0.4.6-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f0ece95d12afee31af58062350455205e2cd104032797d93f1f5d6ea0ba91c7
|
|
| MD5 |
9d9090a677a1e9ce78fc80e0e439b4c6
|
|
| BLAKE2b-256 |
857ca1b0bf3046a42ec9da20af7a35ec615778863d2227941bc4cb1308aa092c
|
File details
Details for the file motorbridge-0.4.6-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d420357dbc3b324fd53ff998f875c63ef8b07fce865dab1391dbaff405ea96e8
|
|
| MD5 |
c53d98936598ab18fa9dd27642e4bf7e
|
|
| BLAKE2b-256 |
381f63c7a7809f91de027206361f77bfdd8960ce38e1d04611319a55a7dd5263
|
File details
Details for the file motorbridge-0.4.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f717dc10e2e7d8aee32fc63f7eca455e4dbfcf95ed543dda5f5b7b6061d94cfd
|
|
| MD5 |
f852bf50788077edac8a27933ffb198d
|
|
| BLAKE2b-256 |
017b377f48f4cad892d5dede88a2800091fdbecf487b038f1b6ebce125741058
|
File details
Details for the file motorbridge-0.4.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d746f590416fe6563ba5e89722d1a8889a86c4b94a534b11e20e4791195169a
|
|
| MD5 |
baa24fec67b6da35c17b0f74ec73e1e8
|
|
| BLAKE2b-256 |
766748804baf433f0b0951a6cf535c2912c3fa66b44f36810d380a45db867e6f
|
File details
Details for the file motorbridge-0.4.6-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ae9168c295e45271921d08cdc9a411217b173e8b5ffa94becccd4723943cc9a
|
|
| MD5 |
effb6f3355992bf6dffad6f85dbc1308
|
|
| BLAKE2b-256 |
c7833417fc15e55c9089fdb0ee6dd8e2fc2e49df0d6b175f343a9c5476ccb5f0
|
File details
Details for the file motorbridge-0.4.6-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03937c90598281b2aebc74d4b979a860896be9e901d8e4a4505dfafa638ea203
|
|
| MD5 |
0115c81b38a31029438c6a997f329fcb
|
|
| BLAKE2b-256 |
e995e43cf5b193450177133d0dbef1b882bf0f1c72a2d28b9137540b1db81050
|
File details
Details for the file motorbridge-0.4.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d73f806c28860c4a173eed893530a18822bbddaaf7f102c255de252ffc2e57a
|
|
| MD5 |
cd84a8d1f6ec1022f6c67c01539f3a60
|
|
| BLAKE2b-256 |
a5f75800f2d578035aee1bbdfd4aafe4350132fb37714fdef20af72096e08c46
|
File details
Details for the file motorbridge-0.4.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
700fdf73ec66b9a7be65a46490eee07534f28bb98bdeebfb5447e759bb9f223a
|
|
| MD5 |
06db5232763e8a35f8b7d68a9e3049ec
|
|
| BLAKE2b-256 |
98b49c8ba8c33c49ebf5dd5556925eb2a47e3a06eb26cca81fa7063973be3167
|
File details
Details for the file motorbridge-0.4.6-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2f2ac08451fc893161a8d6919495924aaf206fc60cfe96eabee98508e8cd60a
|
|
| MD5 |
6fa6f357e3008822cac358105c3c0af4
|
|
| BLAKE2b-256 |
f26ca6588e20e68067487c9dfdd62580ad6e66045b24a63feb05ff95ab7a9967
|
File details
Details for the file motorbridge-0.4.6-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbda0bfc29ef67d06983f43dda3d756d525ffa337219bd1e8e9329112f32b933
|
|
| MD5 |
7d4ca38c8b8a724821a4b58d2282f042
|
|
| BLAKE2b-256 |
550b8f0d5b1c6128cf15420aba38cbf685e9df0ca29e73bd10b866b74b276323
|
File details
Details for the file motorbridge-0.4.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1512170a6b19320ed92aecc7abb6cd260d82fed7ed1dba286906eb546372773e
|
|
| MD5 |
14c1bc3ae6ab34ff19c0d89c39ffc12f
|
|
| BLAKE2b-256 |
fb765a4d8f2ee65720569ccc1610fe319d06f54fc1424cd295bef6233da8a823
|
File details
Details for the file motorbridge-0.4.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
631b5f48e1b1fb852be61b2de57e107a678940c3e50893623f7e7f4f1a0a8204
|
|
| MD5 |
8610f9c62e2b85b8a8f72d5f887319fb
|
|
| BLAKE2b-256 |
c98dfbf6702d97cf6024adeb5dc299da16920901cd832a45548714a902b2ec40
|
File details
Details for the file motorbridge-0.4.6-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: motorbridge-0.4.6-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70cf17c782141aeb6ac399864630f7e532d082a283fb8e7dcebb8b80fdc2450f
|
|
| MD5 |
a9ae84e68063f997a9dd605f6d6bfccc
|
|
| BLAKE2b-256 |
6f8da1664a611c515969084c2142c9a629b9ecabc8e160f14a573ccb5c482b05
|