Skip to content

Commit c0e5a8e

Browse files
authored
Resolve an unset data_bitrate to no operation in slcan. (#1978)
* Change the default to 0, which is a no-op for data_bitrate. * Added a changelog fragment. * Fix black formatting for test_slcan.py * Revert the function signature, and explicitly check for `None` in data_bitrate. * Update the town crier news fragment.
1 parent 9c71151 commit c0e5a8e

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

can/interfaces/slcan.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,11 @@ def set_bitrate(self, bitrate: int, data_bitrate: Optional[int] = None) -> None:
180180
else:
181181
bitrates = ", ".join(str(k) for k in self._BITRATES.keys())
182182
raise ValueError(f"Invalid bitrate, choose one of {bitrates}.")
183+
184+
# If data_bitrate is None, we set it to 0 which means no data bitrate
185+
if data_bitrate is None:
186+
data_bitrate = 0
187+
183188
if data_bitrate in self._DATA_BITRATES:
184189
dbitrate_code = self._DATA_BITRATES[data_bitrate]
185190
else:

doc/changelog.d/1978.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
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.

test/test_slcan.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,13 @@ class slcanTestCase(unittest.TestCase):
7474
def setUp(self):
7575
self.bus = cast(
7676
can.interfaces.slcan.slcanBus,
77-
can.Bus("loop://", interface="slcan", sleep_after_open=0, timeout=TIMEOUT),
77+
can.Bus(
78+
"loop://",
79+
interface="slcan",
80+
sleep_after_open=0,
81+
timeout=TIMEOUT,
82+
bitrate=500000,
83+
),
7884
)
7985
self.serial = cast(SerialMock, self.bus.serialPortOrig)
8086
self.serial.reset_input_buffer()

0 commit comments

Comments
 (0)