Full featured CAN driver for Geschwister Schneider USB/CAN devices.
Support Multichannel and CAN FD.
Installation
pip install python-can-candle
Example
Using with python-can
This library implements the plugin interface in python-can, aiming to replace the gs_usb interface within it.
import can
from candle import CandleBus
# Create a CandleBus instance in the python-can API.
with can.Bus(interface='candle', channel=0, ignore_config=True) as bus:
# Bus is an instance of CandleBus.
assert isinstance(bus, CandleBus)
Set ignore_config=True is recommended to prevent potential type casts.
Configurations
You can configure the device by appending the following parameters when creating the can.Bus.
- bitrate: int, defaults to 1000000
- sample_point: float, defaults to 87.5
- data_bitrate: int, defaults to 5000000
- data_sample_point: float, defaults to 87.5
- fd: bool, defaults to False
- loop_back: bool, defaults to False
- listen_only: bool, defaults to False
- triple_sample: bool, defaults to False
- one_shot: bool, defaults to False
- bit_error_reporting: bool, defaults to False
- termination: bool or None, defaults to None
For example, create a canfd device with 1M bitrate and 5M data bitrate.
with can.Bus(interface='candle', channel=0, fd=True, bitrate=1000000, data_bitrate=5000000, ignore_config=True) as bus:
...
Connect multiple devices
When connecting multiple devices at the same time, you can set channel to serial_number:channel to create the specified can.Bus.
with can.Bus(interface='candle', channel='208233AD5003:0', ignore_config=True) as bus:
...
You can also select devices by appending some additional parameters.
- vid: int, vendor ID
- pid: int, product ID
- manufacture: str, manufacture string
- product: str, product string
- serial_number: str, serial number
Device Discovery
Detect all available channels.
channels = can.detect_available_configs('candle')
print(channels)
Open multiple channels of a single device
This driver now supports opening multiple channels from the same device in a single CandleBus instance.
- Pass a list of channel indices belonging to the same device, e.g.
channel=[0, 1]. - For multiple devices, pass
serial_number=SERIALto select the device by serial number. - Configure each channel separately with
channel_configs.
Create a CandleBus instance with multiple channels.
bus = CandleBus(channel=[0, 1], serial_number='208233AD5003', bitrate=1000000)
Create and configure channels with different bitrates.
bus = CandleBus(channel=[0, 1], serial_number='208233AD5003', channel_configs={0: {'bitrate': 500000}, 1: {'bitrate': 1000000})
Send to a specific channel.
msg = can.Message(arbitration_id=0x100, channel=1, data=[0x1, 0x2, 0x3, 0x4])
bus.send(msg)
Send to multiple channels.
msg = can.Message(arbitration_id=0x100, channel=[0, 1], data=[0x1, 0x2, 0x3, 0x4])
bus.send(msg)
Distinguish channels in received messages.
msg = bus.recv()
print(f'Received message on channel {msg.channel}.')
Notes on multi-channel behavior
send()routes frames to the target channel based onmsg.channel(int,"SERIAL:idx", orSequence[int]).recv()returnsMessage.channelset to the source channel number.- When
msg.channelis not set,send()defaults to the first channel.
Performance
The communication layer is implemented based on pybind11 with libusb. You can run the following scripts to evaluate the performance.
For single-channel performance:
python -m candle.stress
For multi-channel performance:
python -m candle.stress_multichannel
Reference
Metadata
Release files for python-can-candle 1.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| python_can_candle-1.2.4.tar.gz | 29.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| python_can_candle-1.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.7 kB
Release files / python_can_candle-1.2.4.tar.gz
| Download URL | python_can_candle-1.2.4.tar.gz |
|---|---|
| Size | 29.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f5a1d016579045e596931fd5377102816d9f8e891586e07ac19458588f8a80f2
|
|
BLAKE2b-256 checksum How to use checksums |
c516afc489f64a7128dda1eb880ba245a7eb63c3ff9c336641d5550df7b501eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 28, 2026.
Transparency logRelease files / python_can_candle-1.2.4-py3-none-any.whl
| Download URL | python_can_candle-1.2.4-py3-none-any.whl |
|---|---|
| Size | 26.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09cf2942b1e9139c27552788c7a2cea45c37c0ecfd48dbfa03b2d56fe626111b
|
|
BLAKE2b-256 checksum How to use checksums |
79f48e115593d7e2013e97c88038c3f8fbfd1a8325ce91cc80892d6c7aa9b6f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 28, 2026.
Transparency log