Skip to content

Commit c817117

Browse files
committed
adapt CANalystIIBus
1 parent 16a7938 commit c817117

File tree

2 files changed

+32
-30
lines changed

2 files changed

+32
-30
lines changed

can/interfaces/canalystii.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
import collections
22
from ctypes import c_ubyte
33
import logging
4-
import canalystii as driver
54
import time
6-
import warnings
75
from typing import Any, Dict, Optional, Deque, Sequence, Tuple, Union
8-
from can import BitTiming, BusABC, Message
9-
from can.exceptions import CanTimeoutError
6+
7+
from can import BitTiming, BusABC, Message, BitTimingFd
8+
from can.exceptions import CanTimeoutError, CanInitializationError
109
from can.typechecking import CanFilters
10+
from can.util import deprecated_args_alias
11+
12+
import canalystii as driver
1113

1214
logger = logging.getLogger(__name__)
1315

1416

1517
class CANalystIIBus(BusABC):
18+
@deprecated_args_alias(bit_timing="timing")
1619
def __init__(
1720
self,
1821
channel: Union[int, Sequence[int], str] = (0, 1),
1922
device: int = 0,
2023
bitrate: Optional[int] = None,
21-
bit_timing: Optional[BitTiming] = None,
24+
timing: Optional[Union[BitTiming, BitTimingFd]] = None,
2225
can_filters: Optional[CanFilters] = None,
2326
rx_queue_size: Optional[int] = None,
2427
**kwargs: Dict[str, Any],
@@ -33,9 +36,12 @@ def __init__(
3336
Optional USB device number. Default is 0 (first device found).
3437
:param bitrate:
3538
CAN bitrate in bits/second. Required unless the bit_timing argument is set.
36-
:param bit_timing:
37-
Optional BitTiming instance to use for custom bit timing setting.
38-
If this argument is set then it overrides the bitrate argument.
39+
:param timing:
40+
Optional :class:`~can.BitTiming` instance to use for custom bit timing setting.
41+
If this argument is set then it overrides the bitrate argument. The
42+
`f_clock` value of the timing instance must be set to 8_000_000 (8MHz)
43+
for standard CAN.
44+
CAN FD and the :class:`~can.BitTimingFd` class are not supported.
3945
:param can_filters:
4046
Optional filters for received CAN messages.
4147
:param rx_queue_size:
@@ -44,8 +50,8 @@ def __init__(
4450
"""
4551
super().__init__(channel=channel, can_filters=can_filters, **kwargs)
4652

47-
if not (bitrate or bit_timing):
48-
raise ValueError("Either bitrate or bit_timing argument is required")
53+
if not (bitrate or timing):
54+
raise ValueError("Either bitrate or timing argument is required")
4955

5056
if isinstance(channel, str):
5157
# Assume comma separated string of channels
@@ -63,17 +69,17 @@ def __init__(
6369

6470
self.device = driver.CanalystDevice(device_index=device)
6571
for channel in self.channels:
66-
if bit_timing:
67-
try:
68-
if bit_timing.f_clock != 8_000_000:
69-
warnings.warn(
70-
f"bit_timing.f_clock value {bit_timing.f_clock} "
71-
"doesn't match expected device f_clock 8MHz."
72-
)
73-
except ValueError:
74-
pass # f_clock not specified
75-
self.device.init(
76-
channel, timing0=bit_timing.btr0, timing1=bit_timing.btr1
72+
if isinstance(timing, BitTiming):
73+
if timing.f_clock != 8_000_000:
74+
raise CanInitializationError(
75+
f"timing.f_clock value {timing.f_clock} "
76+
"doesn't match expected device f_clock 8MHz."
77+
)
78+
79+
self.device.init(channel, timing0=timing.btr0, timing1=timing.btr1)
80+
elif isinstance(timing, BitTimingFd):
81+
raise NotImplementedError(
82+
f"CAN FD is not supported by {self.__class__.__name__}."
7783
)
7884
else:
7985
self.device.init(channel, bitrate=bitrate)

test/test_interface_canalystii.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ def test_initialize_single_channel_only(self):
3939
def test_initialize_with_timing_registers(self):
4040
with create_mock_device() as mock_device:
4141
instance = mock_device.return_value
42-
timing = can.BitTiming(btr0=0x03, btr1=0x6F)
43-
bus = CANalystIIBus(bitrate=None, bit_timing=timing)
42+
timing = can.BitTiming.from_registers(
43+
f_clock=8_000_000, btr0=0x03, btr1=0x6F
44+
)
45+
bus = CANalystIIBus(bitrate=None, timing=timing)
4446
instance.init.assert_has_calls(
4547
[
4648
call(0, timing0=0x03, timing1=0x6F),
@@ -50,15 +52,9 @@ def test_initialize_with_timing_registers(self):
5052

5153
def test_missing_bitrate(self):
5254
with self.assertRaises(ValueError) as cm:
53-
bus = CANalystIIBus(0, bitrate=None, bit_timing=None)
55+
bus = CANalystIIBus(0, bitrate=None, timing=None)
5456
self.assertIn("bitrate", str(cm.exception))
5557

56-
def test_invalid_bit_timing(self):
57-
with create_mock_device() as mock_device:
58-
with self.assertRaises(ValueError) as cm:
59-
invalid_timings = can.BitTiming()
60-
CANalystIIBus(0, bit_timing=invalid_timings)
61-
6258
def test_receive_message(self):
6359
driver_message = driver.Message(
6460
can_id=0x333,

0 commit comments

Comments
 (0)