Skip to content

Commit 81f44e1

Browse files
committed
adapt CantactBus
1 parent c817117 commit 81f44e1

File tree

2 files changed

+40
-22
lines changed

2 files changed

+40
-22
lines changed

can/interfaces/cantact.py

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44

55
import time
66
import logging
7+
from typing import Optional, Union, Any
78
from unittest.mock import Mock
89

9-
from can import BusABC, Message
10+
from can import BusABC, Message, BitTiming, BitTimingFd
1011
from ..exceptions import (
1112
CanInitializationError,
1213
CanInterfaceNotImplementedError,
1314
error_check,
1415
)
16+
from ..util import deprecated_args_alias
1517

1618
logger = logging.getLogger(__name__)
1719

@@ -42,28 +44,32 @@ def _detect_available_configs():
4244
channels.append({"interface": "cantact", "channel": f"ch:{i}"})
4345
return channels
4446

47+
@deprecated_args_alias(bit_timing="timing")
4548
def __init__(
4649
self,
47-
channel,
48-
bitrate=500000,
49-
poll_interval=0.01,
50-
monitor=False,
51-
bit_timing=None,
52-
_testing=False,
53-
**kwargs,
54-
):
50+
channel: int,
51+
bitrate: int = 500000,
52+
poll_interval: float = 0.01,
53+
monitor: bool = False,
54+
timing: Optional[Union[BitTiming, BitTimingFd]] = None,
55+
**kwargs: Any,
56+
) -> None:
5557
"""
5658
:param int channel:
5759
Channel number (zero indexed, labeled on multi-channel devices)
5860
:param int bitrate:
5961
Bitrate in bits/s
6062
:param bool monitor:
6163
If true, operate in listen-only monitoring mode
62-
:param BitTiming bit_timing:
63-
Optional BitTiming to use for custom bit timing setting. Overrides bitrate if not None.
64+
:param timing:
65+
Optional :class:`~can.BitTiming` instance to use for custom bit timing setting.
66+
If this argument is set then it overrides the bitrate argument. The
67+
`f_clock` value of the timing instance must be set to 24_000_000 (24MHz)
68+
for standard CAN.
69+
CAN FD and the :class:`~can.BitTimingFd` class are not supported.
6470
"""
6571

66-
if _testing:
72+
if kwargs.get("_testing", False):
6773
self.interface = MockInterface()
6874
else:
6975
if cantact is None:
@@ -80,18 +86,28 @@ def __init__(
8086

8187
# Configure the interface
8288
with error_check("Cannot setup the cantact.Interface", CanInitializationError):
83-
if bit_timing is None:
84-
# use bitrate
85-
self.interface.set_bitrate(int(channel), int(bitrate))
86-
else:
89+
if isinstance(timing, BitTiming):
90+
if timing.f_clock != 24_000_000:
91+
raise CanInitializationError(
92+
f"timing.f_clock value {timing.f_clock} "
93+
"doesn't match expected device f_clock 24MHz."
94+
)
8795
# use custom bit timing
8896
self.interface.set_bit_timing(
8997
int(channel),
90-
int(bit_timing.brp),
91-
int(bit_timing.tseg1),
92-
int(bit_timing.tseg2),
93-
int(bit_timing.sjw),
98+
int(timing.brp),
99+
int(timing.tseg1),
100+
int(timing.tseg2),
101+
int(timing.sjw),
102+
)
103+
elif isinstance(timing, BitTimingFd):
104+
raise NotImplementedError(
105+
f"CAN FD is not supported by {self.__class__.__name__}."
94106
)
107+
else:
108+
# use bitrate
109+
self.interface.set_bitrate(int(channel), int(bitrate))
110+
95111
self.interface.set_enabled(int(channel), True)
96112
self.interface.set_monitor(int(channel), monitor)
97113
self.interface.start()

test/test_cantact.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ def test_bus_creation(self):
2323
def test_bus_creation_bittiming(self):
2424
cantact.MockInterface.set_bitrate.reset_mock()
2525

26-
bt = can.BitTiming(tseg1=13, tseg2=2, brp=6, sjw=1)
27-
bus = can.Bus(channel=0, interface="cantact", bit_timing=bt, _testing=True)
26+
bt = can.BitTiming(
27+
f_clock=24_000_000, bitrate=500_000, tseg1=13, tseg2=2, sjw=1
28+
)
29+
bus = can.Bus(channel=0, interface="cantact", timing=bt, _testing=True)
2830
self.assertIsInstance(bus, cantact.CantactBus)
2931
cantact.MockInterface.set_bitrate.assert_not_called()
3032
cantact.MockInterface.set_bit_timing.assert_called()

0 commit comments

Comments
 (0)