Skip to content

canIoCtlInit failes with canERR_PARAM (-1) on Kvaser Leaf Light v2 for Linux #2079

Open

Description

@kyle-lawson-innio

Describe the bug

Creating a bus fails during initialization. I'm using the Kvaser backend under Linux with a Kvaser Leaf Light v2. Using the Leaf Light v2 on Windows the same function is successful

import can

bus = can.Bus(
    interface="kvaser",
    channel=0,
    bitrate=500000,
)

raises

can.interfaces.kvaser.canlib.CANLIBOperationError:
Function canIoCtl failed - Error in parameter [Error Code -1]

To Reproduce

  1. Attach a Kvaser Leaf Light dongle (I used the Leaf V2)
  2. initialize the bus with can.interface.Bus(interface='kvaser', channel=0, bitrate=500000)

Expected behavior

The bus will initialize without any errors thrown

Additional context

OS and version: Fedora 44
Python version: 3.14.6
python-can version: 4.6.1
python-can interface/s (if applicable): Kvaser Leaf Light v2 and Kvaser Linux SDK 5.52

Investigateion

I verified that...

  • can.detect_available_configs() correctly discovers the device.
  • canOpenChannel() succeeds
  • the Channel can be opened directly using the CANlib bindings
  • the failure occurs during the initialization of canIoCtlInit() calls in KbaserBus.__init__()

The failure occurs on canIOCTL_SET_LOCAL_TXACK or specifically...

canIoCtlInit(
    self._read_handle,
    canstat.canIOCTL_SET_LOCAL_TXACK,
    ctypes.byref(ctypes.c_byte(local_echo)),
    1,
)

Work-Around

commenting out this section of code allows me to continue initializing the bus and my program runs smoothly.

Potentially related Issue

#2051

Activity

  1. kyle-lawson-innio commented on Jul 23, 2026

    @kyle-lawson-innio
    Author

    Here is my more formal work-around/suggestion for can/interfaces/kvaser/canlib.py

            # enable canMSG_LOCAL_TXACK flag in received messages
    
            try:
                canIoCtlInit(
                    self._read_handle,
                    canstat.canIOCTL_SET_LOCAL_TXACK,
                    ctypes.byref(ctypes.c_byte(local_echo)),
                    1,
                )
            except CANLIBOperationError as exc:
                # Some Linux CANlib/device combinations do not support
                # canIOCTL_SET_LOCAL_TXACK and return canERR_PARAM (-1).
                # Continue without TXACK support.
                if exc.error_code != canstat.canERR_PARAM:
                    raise
    
                log.debug(
                    "canIOCTL_SET_LOCAL_TXACK not supported by this device/CANlib; "
                    "continuing without local TXACK."
                )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions