diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 01ba9c995..d9eab5edf 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -180,6 +180,11 @@ def set_bitrate(self, bitrate: int, data_bitrate: Optional[int] = None) -> None: else: bitrates = ", ".join(str(k) for k in self._BITRATES.keys()) raise ValueError(f"Invalid bitrate, choose one of {bitrates}.") + + # If data_bitrate is None, we set it to 0 which means no data bitrate + if data_bitrate is None: + data_bitrate = 0 + if data_bitrate in self._DATA_BITRATES: dbitrate_code = self._DATA_BITRATES[data_bitrate] else: diff --git a/doc/changelog.d/1978.fixed.md b/doc/changelog.d/1978.fixed.md new file mode 100644 index 000000000..1de50bb60 --- /dev/null +++ b/doc/changelog.d/1978.fixed.md @@ -0,0 +1 @@ +Fix initialisation of an slcan bus, when setting a bitrate. When using CAN 2.0 (not FD), the default setting for `data_bitrate` was invalid, causing an exception. \ No newline at end of file diff --git a/test/test_slcan.py b/test/test_slcan.py index 491800e24..b757ad04d 100644 --- a/test/test_slcan.py +++ b/test/test_slcan.py @@ -74,7 +74,13 @@ class slcanTestCase(unittest.TestCase): def setUp(self): self.bus = cast( can.interfaces.slcan.slcanBus, - can.Bus("loop://", interface="slcan", sleep_after_open=0, timeout=TIMEOUT), + can.Bus( + "loop://", + interface="slcan", + sleep_after_open=0, + timeout=TIMEOUT, + bitrate=500000, + ), ) self.serial = cast(SerialMock, self.bus.serialPortOrig) self.serial.reset_input_buffer()