Warning

This documentation is actively being updated as the project evolves and may not be complete in all areas.

CAN driver

jumpstarter-driver-can provides functionality for interacting with CAN bus connections based on the python-can library.

Installation

pip3 install --extra-index-url https://pkg.jumpstarter.dev/simple/ jumpstarter-driver-can

jumpstarter_driver_can.Can

A generic CAN bus driver.

Available on any platform, supports many different CAN interfaces through the python-can library.

Configuration

Example configuration:

export:
  can:
    type: jumpstarter_driver_can.Can
    config:
      channel: 1
      interface: "virtual"

Parameter

Description

Type

Required

Default

interface

Refer to the python-can list of interfaces

str

yes

channel

channel to be used, refer to the interface documentation

int or str

yes

API Reference

class jumpstarter_driver_can.client.CanClient

A generic CAN client for sending/recieving traffic to/from an exported CAN bus.

property channel_info: str

Get the CAN channel info.

flush_tx_buffer() None

Flush the transmission buffer.

property protocol: CanProtocol

Get the CAN protocol supported by the bus.

send(msg: Message, timeout: float | None = None) None

Send an individual CAN message.

shutdown() None

Shutdown the bus.

property state: BusState

The current state of the CAN bus.

jumpstarter_driver_can.IsoTpPython

A Pure python ISO-TP socket driver

Available on any platform (does not require Linux ISO-TP kernel module), moderate performance and reliability, wide support for non-standard hardware interfaces

Configuration

Example configuration:

export:
  can:
    type: jumpstarter_driver_can.IsoTpPython
    config:
      channel: 0
      interface: "virtual"
      address:
        rxid: 1
        txid: 2
      params:
        max_frame_size: 2048
        blocking_send: false
        can_fd: true

Parameter

Description

Type

Required

Default

interface

Refer to the python-can list of interfaces

str

no

channel

channel to be used, refer to the interface documentation

int or str

no

address

Refer to the isotp.Address documentation

isotp.Address

yes

params

IsoTp parameters, refer to the IsoTpParams section table

IsoTpParams

no

see table

read_timeout

Read timeout for the bus in seconds

float

no

0.05

API Reference

class jumpstarter_driver_can.client.IsoTpClient

An ISO-TP CAN client for sending/recieving ISO-TP frames to/from an exported CAN bus.

available() bool

Returns True if an ISO-TP frame is awaiting in the reception queue, False otherwise.

recv(block: bool = False, timeout: float | None = None) bytes | None

Dequeue an ISO-TP frame from the reception queue if available.

send(data: bytes, target_address_type: int | None = None, send_timeout: float | None = None) None

Enqueue an ISO-TP frame to send over the CAN network.

set_address(address: Address | AsymmetricAddress) None

Sets the layer address. Can be set after initialization if needed. May cause a timeout if called while a transmission is active.

start() None

Start listening for messages.

stop() None

Stop listening for messages.

stop_receiving() None

Stop receiving messages.

stop_sending() None

Stop sending messages.

transmitting() bool

Returns True if an ISO-TP frame is being transmitted, False otherwise.

jumpstarter_driver_can.IsoTpSocket

Pure python ISO-TP socket driver

Available on any platform, moderate performance and reliability, wide support for non-standard hardware interfaces

Configuration

Example configuration:

export:
  can:
    type: jumpstarter_driver_can.IsoTpSocket
    config:
      channel: "vcan0"
      address:
        rxid: 1
        txid: 2
      params:
        max_frame_size: 2048
        blocking_send: false
        can_fd: true

Parameter

Description

Type

Required

Default

channel

CAN bus to be used i.e. vcan0, vcan1, etc..

str

yes

address

Refer to the isotp.Address documentation

isotp.Address

yes

params

IsoTp parameters, refer to the IsoTpParams section table

IsoTpParams

no

see table

API Reference

class jumpstarter_driver_can.client.IsoTpClient

An ISO-TP CAN client for sending/recieving ISO-TP frames to/from an exported CAN bus.

available() bool

Returns True if an ISO-TP frame is awaiting in the reception queue, False otherwise.

recv(block: bool = False, timeout: float | None = None) bytes | None

Dequeue an ISO-TP frame from the reception queue if available.

send(data: bytes, target_address_type: int | None = None, send_timeout: float | None = None) None

Enqueue an ISO-TP frame to send over the CAN network.

set_address(address: Address | AsymmetricAddress) None

Sets the layer address. Can be set after initialization if needed. May cause a timeout if called while a transmission is active.

start() None

Start listening for messages.

stop() None

Stop listening for messages.

stop_receiving() None

Stop receiving messages.

stop_sending() None

Stop sending messages.

transmitting() bool

Returns True if an ISO-TP frame is being transmitted, False otherwise.

IsoTpParams

Parameter

Description

Type

Required

Default

stmin

Minimum Separation Time minimum in milliseconds between consecutive frames.

int

No

0

blocksize

Number of consecutive frames that can be sent before waiting for a flow control frame.

int

No

8

tx_data_length

Default length of data in a transmitted CAN frame (CAN 2.0) or initial frame (CAN FD).

int

No

8

tx_data_min_length

Minimum length of data in a transmitted CAN frame; pads with tx_padding if shorter.

int | None

No

None

override_receiver_stmin

Override the STmin value (in seconds) received from the receiver; None means do not override.

float | None

No

None

rx_flowcontrol_timeout

Timeout in milliseconds for receiving a flow control frame after sending a first frame or a block.

int

No

1000

rx_consecutive_frame_timeout

Timeout in milliseconds for receiving a consecutive frame in a multi-frame message.

int

No

1000

tx_padding

Byte value used for padding if the data length is less than tx_data_min_length or for CAN FD.

int | None

No

None

wftmax

Maximum number of Wait Frame Transmissions (WFTMax) allowed before aborting. 0 means WFTs are not used.

int

No

0

max_frame_size

Maximum size of a single ISO-TP frame that can be processed.

int

No

4095

can_fd

If True, enables CAN FD (Flexible Data-Rate) specific ISO-TP handling.

bool

No

False

bitrate_switch

If True and can_fd is True, enables bitrate switching for CAN FD frames.

bool

No

False

default_target_address_type

Default target address type: 0 for Physical (1-to-1), 1 for Functional (1-to-n).

int

No

0

rate_limit_enable

If True, enables rate limiting for outgoing frames.

bool

No

False

rate_limit_max_bitrate

Maximum bitrate in bits per second for rate limiting if enabled.

int

No

10000000

rate_limit_window_size

Time window in seconds over which the rate limit is calculated.

float

No

0.2

listen_mode

If True, the stack operates in listen-only mode (does not send any frames).

bool

No

False

blocking_send

If True, send operations will block until the message is fully transmitted or an error occurs.

bool

No

False