Skip to content

Commit 2809518

Browse files
Add support for Kvaser config detection (#321)
1 parent 09754ef commit 2809518

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

can/interfaces/kvaser/canlib.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,18 @@ def shutdown(self):
575575
canBusOff(self._write_handle)
576576
canClose(self._write_handle)
577577

578+
@staticmethod
579+
def _detect_available_configs():
580+
num_channels = ctypes.c_int(0)
581+
try:
582+
canGetNumberOfChannels(ctypes.byref(num_channels))
583+
except Exception:
584+
pass
585+
return [
586+
{'interface': 'kvaser', 'channel': channel}
587+
for channel in range(num_channels.value)
588+
]
589+
578590

579591
def get_channel_info(channel):
580592
name = ctypes.create_string_buffer(80)

test/test_kvaser.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
class KvaserTest(unittest.TestCase):
2424

2525
def setUp(self):
26-
canlib.canGetNumberOfChannels = Mock(return_value=1)
26+
canlib.canGetNumberOfChannels = KvaserTest.canGetNumberOfChannels
2727
canlib.canOpenChannel = Mock(return_value=0)
2828
canlib.canIoCtl = Mock(return_value=0)
2929
canlib.kvReadTimer = Mock()
@@ -49,7 +49,6 @@ def tearDown(self):
4949

5050
def test_bus_creation(self):
5151
self.assertIsInstance(self.bus, canlib.KvaserBus)
52-
self.assertTrue(canlib.canGetNumberOfChannels.called)
5352
self.assertTrue(canlib.canOpenChannel.called)
5453
self.assertTrue(canlib.canBusOn.called)
5554

@@ -152,6 +151,18 @@ def test_recv_standard(self):
152151
self.assertEqual(msg.dlc, 2)
153152
self.assertEqual(msg.id_type, False)
154153
self.assertSequenceEqual(msg.data, [100, 101])
154+
155+
def test_available_configs(self):
156+
configs = canlib.KvaserBus._detect_available_configs()
157+
expected = [
158+
{'interface': 'kvaser', 'channel': 0},
159+
{'interface': 'kvaser', 'channel': 1}
160+
]
161+
self.assertListEqual(configs, expected)
162+
163+
@staticmethod
164+
def canGetNumberOfChannels(count):
165+
count._obj.value = 2
155166

156167
def canWrite(self, handle, arb_id, buf, dlc, flags):
157168
self.msg['arb_id'] = arb_id

0 commit comments

Comments
 (0)