Skip to content

Commit 08e9446

Browse files
committed
Implement CanProtocol for VectorBus
1 parent 4365157 commit 08e9446

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

can/interfaces/vector/canlib.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
# ==============================
99
import ctypes
1010
import logging
11-
import time
1211
import os
12+
import time
13+
import warnings
1314
from types import ModuleType
1415
from typing import (
1516
List,
@@ -44,6 +45,7 @@
4445
CanInitializationError,
4546
BitTiming,
4647
BitTimingFd,
48+
CanProtocol,
4749
)
4850
from can.util import (
4951
len2dlc,
@@ -203,7 +205,7 @@ def __init__(
203205
channel_configs = get_channel_configs()
204206

205207
self.mask = 0
206-
self.fd = isinstance(timing, BitTimingFd) if timing else fd
208+
is_fd = isinstance(timing, BitTimingFd) if timing else fd
207209
self.channel_masks: Dict[int, int] = {}
208210
self.index_to_channel: Dict[int, int] = {}
209211

@@ -228,7 +230,7 @@ def __init__(
228230

229231
interface_version = (
230232
xldefine.XL_InterfaceVersion.XL_INTERFACE_VERSION_V4
231-
if self.fd
233+
if is_fd
232234
else xldefine.XL_InterfaceVersion.XL_INTERFACE_VERSION
233235
)
234236

@@ -323,7 +325,21 @@ def __init__(
323325
self._time_offset = 0.0
324326

325327
self._is_filtered = False
326-
super().__init__(channel=channel, can_filters=can_filters, **kwargs)
328+
super().__init__(
329+
channel=channel,
330+
can_filters=can_filters,
331+
protocol=CanProtocol.CAN_FD if is_fd else CanProtocol.CAN_20,
332+
**kwargs,
333+
)
334+
335+
@property
336+
def fd(self) -> bool:
337+
warnings.warn(
338+
"The VectorBus.fd property is deprecated and superseded by "
339+
"BusABC.protocol. It is scheduled for removal in version 5.0.",
340+
DeprecationWarning,
341+
)
342+
return self.protocol == CanProtocol.CAN_FD
327343

328344
def _find_global_channel_idx(
329345
self,
@@ -646,7 +662,7 @@ def _recv_internal(
646662

647663
while True:
648664
try:
649-
if self.fd:
665+
if self.protocol == CanProtocol.CAN_FD:
650666
msg = self._recv_canfd()
651667
else:
652668
msg = self._recv_can()
@@ -780,7 +796,7 @@ def send(self, msg: Message, timeout: Optional[float] = None) -> None:
780796

781797
def _send_sequence(self, msgs: Sequence[Message]) -> int:
782798
"""Send messages and return number of successful transmissions."""
783-
if self.fd:
799+
if self.protocol == CanProtocol.CAN_FD:
784800
return self._send_can_fd_msg_sequence(msgs)
785801
else:
786802
return self._send_can_msg_sequence(msgs)

test/test_vector.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ def mock_xldriver() -> None:
7979
def test_bus_creation_mocked(mock_xldriver) -> None:
8080
bus = can.Bus(channel=0, interface="vector", _testing=True)
8181
assert isinstance(bus, canlib.VectorBus)
82+
assert bus.protocol == can.CanProtocol.CAN_20
83+
8284
can.interfaces.vector.canlib.xldriver.xlOpenDriver.assert_called()
8385
can.interfaces.vector.canlib.xldriver.xlGetApplConfig.assert_called()
8486

@@ -95,6 +97,8 @@ def test_bus_creation_mocked(mock_xldriver) -> None:
9597
def test_bus_creation() -> None:
9698
bus = can.Bus(channel=0, serial=_find_virtual_can_serial(), interface="vector")
9799
assert isinstance(bus, canlib.VectorBus)
100+
assert bus.protocol == can.CanProtocol.CAN_20
101+
98102
bus.shutdown()
99103

100104
xl_channel_config = _find_xl_channel_config(
@@ -108,12 +112,15 @@ def test_bus_creation() -> None:
108112

109113
bus = canlib.VectorBus(channel=0, serial=_find_virtual_can_serial())
110114
assert isinstance(bus, canlib.VectorBus)
115+
assert bus.protocol == can.CanProtocol.CAN_20
111116
bus.shutdown()
112117

113118

114119
def test_bus_creation_bitrate_mocked(mock_xldriver) -> None:
115120
bus = can.Bus(channel=0, interface="vector", bitrate=200_000, _testing=True)
116121
assert isinstance(bus, canlib.VectorBus)
122+
assert bus.protocol == can.CanProtocol.CAN_20
123+
117124
can.interfaces.vector.canlib.xldriver.xlOpenDriver.assert_called()
118125
can.interfaces.vector.canlib.xldriver.xlGetApplConfig.assert_called()
119126

@@ -139,6 +146,7 @@ def test_bus_creation_bitrate() -> None:
139146
bitrate=200_000,
140147
)
141148
assert isinstance(bus, canlib.VectorBus)
149+
assert bus.protocol == can.CanProtocol.CAN_20
142150

143151
xl_channel_config = _find_xl_channel_config(
144152
serial=_find_virtual_can_serial(), channel=0
@@ -151,6 +159,8 @@ def test_bus_creation_bitrate() -> None:
151159
def test_bus_creation_fd_mocked(mock_xldriver) -> None:
152160
bus = can.Bus(channel=0, interface="vector", fd=True, _testing=True)
153161
assert isinstance(bus, canlib.VectorBus)
162+
assert bus.protocol == can.CanProtocol.CAN_FD
163+
154164
can.interfaces.vector.canlib.xldriver.xlOpenDriver.assert_called()
155165
can.interfaces.vector.canlib.xldriver.xlGetApplConfig.assert_called()
156166

@@ -171,6 +181,7 @@ def test_bus_creation_fd() -> None:
171181
channel=0, serial=_find_virtual_can_serial(), interface="vector", fd=True
172182
)
173183
assert isinstance(bus, canlib.VectorBus)
184+
assert bus.protocol == can.CanProtocol.CAN_FD
174185

175186
xl_channel_config = _find_xl_channel_config(
176187
serial=_find_virtual_can_serial(), channel=0
@@ -202,6 +213,8 @@ def test_bus_creation_fd_bitrate_timings_mocked(mock_xldriver) -> None:
202213
_testing=True,
203214
)
204215
assert isinstance(bus, canlib.VectorBus)
216+
assert bus.protocol == can.CanProtocol.CAN_FD
217+
205218
can.interfaces.vector.canlib.xldriver.xlOpenDriver.assert_called()
206219
can.interfaces.vector.canlib.xldriver.xlGetApplConfig.assert_called()
207220

@@ -344,6 +357,7 @@ def test_bus_creation_timing() -> None:
344357
timing=timing,
345358
)
346359
assert isinstance(bus, canlib.VectorBus)
360+
assert bus.protocol == can.CanProtocol.CAN_20
347361

348362
xl_channel_config = _find_xl_channel_config(
349363
serial=_find_virtual_can_serial(), channel=0
@@ -375,6 +389,8 @@ def test_bus_creation_timingfd_mocked(mock_xldriver) -> None:
375389
_testing=True,
376390
)
377391
assert isinstance(bus, canlib.VectorBus)
392+
assert bus.protocol == can.CanProtocol.CAN_FD
393+
378394
can.interfaces.vector.canlib.xldriver.xlOpenDriver.assert_called()
379395
can.interfaces.vector.canlib.xldriver.xlGetApplConfig.assert_called()
380396

@@ -423,6 +439,8 @@ def test_bus_creation_timingfd() -> None:
423439
timing=timing,
424440
)
425441

442+
assert bus.protocol == can.CanProtocol.CAN_FD
443+
426444
xl_channel_config = _find_xl_channel_config(
427445
serial=_find_virtual_can_serial(), channel=0
428446
)

0 commit comments

Comments
 (0)