From e29af906c3237bf6dd7f92f9adbbc6b39a547dd0 Mon Sep 17 00:00:00 2001 From: David Snowdon <3860429+dcasnowdon@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:14:46 +1000 Subject: [PATCH 1/5] Change the default to 0, which is a no-op for data_bitrate. --- can/interfaces/slcan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 01ba9c995..2b1aa0ed6 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -166,7 +166,7 @@ def __init__( super().__init__(channel, **kwargs) - def set_bitrate(self, bitrate: int, data_bitrate: Optional[int] = None) -> None: + def set_bitrate(self, bitrate: int, data_bitrate: Optional[int] = 0) -> None: """ :param bitrate: Bitrate in bit/s From 669fb124b3dd9b30bd3deaae25e7b5c7d604b5c3 Mon Sep 17 00:00:00 2001 From: David Snowdon <3860429+dcasnowdon@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:31:55 +1000 Subject: [PATCH 2/5] Added a changelog fragment. --- doc/changelog.d/1978.added.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/changelog.d/1978.added.md diff --git a/doc/changelog.d/1978.added.md b/doc/changelog.d/1978.added.md new file mode 100644 index 000000000..0eaca620d --- /dev/null +++ b/doc/changelog.d/1978.added.md @@ -0,0 +1 @@ +Fix the optional setting of data bitrate in slcan From c5f1c96107ff9ff61b5db316f97df09a6d5443c0 Mon Sep 17 00:00:00 2001 From: David Snowdon <3860429+dcasnowdon@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:37:55 +1000 Subject: [PATCH 3/5] Fix black formatting for test_slcan.py --- test/test_slcan.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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() From df572d8f002452a981778640967a75374d58619e Mon Sep 17 00:00:00 2001 From: David Snowdon <3860429+dcasnowdon@users.noreply.github.com> Date: Mon, 11 Aug 2025 20:34:08 +1000 Subject: [PATCH 4/5] Revert the function signature, and explicitly check for `None` in data_bitrate. --- can/interfaces/slcan.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 2b1aa0ed6..d9eab5edf 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -166,7 +166,7 @@ def __init__( super().__init__(channel, **kwargs) - def set_bitrate(self, bitrate: int, data_bitrate: Optional[int] = 0) -> None: + def set_bitrate(self, bitrate: int, data_bitrate: Optional[int] = None) -> None: """ :param bitrate: Bitrate in bit/s @@ -180,6 +180,11 @@ def set_bitrate(self, bitrate: int, data_bitrate: Optional[int] = 0) -> 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: From 1f99d75aaa3b485099b7e175333c7f70d5ce85eb Mon Sep 17 00:00:00 2001 From: David Snowdon <3860429+dcasnowdon@users.noreply.github.com> Date: Tue, 12 Aug 2025 13:28:09 +1000 Subject: [PATCH 5/5] Update the town crier news fragment. --- doc/changelog.d/1978.added.md | 1 - doc/changelog.d/1978.fixed.md | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 doc/changelog.d/1978.added.md create mode 100644 doc/changelog.d/1978.fixed.md diff --git a/doc/changelog.d/1978.added.md b/doc/changelog.d/1978.added.md deleted file mode 100644 index 0eaca620d..000000000 --- a/doc/changelog.d/1978.added.md +++ /dev/null @@ -1 +0,0 @@ -Fix the optional setting of data bitrate in slcan 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