@@ -270,6 +270,154 @@ def test_bus_creation_fd_bitrate_timings() -> None:
270
270
bus .shutdown ()
271
271
272
272
273
+ def test_bus_creation_timing_mocked (mock_xldriver ) -> None :
274
+ timing = can .BitTiming .from_bitrate_and_segments (
275
+ f_clock = 16_000_000 ,
276
+ bitrate = 125_000 ,
277
+ tseg1 = 13 ,
278
+ tseg2 = 2 ,
279
+ sjw = 1 ,
280
+ )
281
+ bus = can .Bus (channel = 0 , interface = "vector" , timing = timing , _testing = True )
282
+ assert isinstance (bus , canlib .VectorBus )
283
+ can .interfaces .vector .canlib .xldriver .xlOpenDriver .assert_called ()
284
+ can .interfaces .vector .canlib .xldriver .xlGetApplConfig .assert_called ()
285
+
286
+ can .interfaces .vector .canlib .xldriver .xlOpenPort .assert_called ()
287
+ xlOpenPort_args = can .interfaces .vector .canlib .xldriver .xlOpenPort .call_args [0 ]
288
+ assert xlOpenPort_args [5 ] == xldefine .XL_InterfaceVersion .XL_INTERFACE_VERSION .value
289
+ assert xlOpenPort_args [6 ] == xldefine .XL_BusTypes .XL_BUS_TYPE_CAN .value
290
+
291
+ can .interfaces .vector .canlib .xldriver .xlCanFdSetConfiguration .assert_not_called ()
292
+ can .interfaces .vector .canlib .xldriver .xlCanSetChannelParams .assert_called ()
293
+ chip_params = (
294
+ can .interfaces .vector .canlib .xldriver .xlCanSetChannelParams .call_args [0 ]
295
+ )[2 ]
296
+ assert chip_params .bitRate == 125_000
297
+ assert chip_params .sjw == 1
298
+ assert chip_params .tseg1 == 13
299
+ assert chip_params .tseg2 == 2
300
+ assert chip_params .sam == 1
301
+
302
+
303
+ @pytest .mark .skipif (not XLDRIVER_FOUND , reason = "Vector XL API is unavailable" )
304
+ def test_bus_creation_timing () -> None :
305
+ timing = can .BitTiming .from_bitrate_and_segments (
306
+ f_clock = 16_000_000 ,
307
+ bitrate = 125_000 ,
308
+ tseg1 = 13 ,
309
+ tseg2 = 2 ,
310
+ sjw = 1 ,
311
+ )
312
+ bus = can .Bus (
313
+ channel = 0 ,
314
+ serial = _find_virtual_can_serial (),
315
+ interface = "vector" ,
316
+ timing = timing ,
317
+ )
318
+ assert isinstance (bus , canlib .VectorBus )
319
+
320
+ xl_channel_config = _find_xl_channel_config (
321
+ serial = _find_virtual_can_serial (), channel = 0
322
+ )
323
+ assert xl_channel_config .busParams .data .can .bitRate == 125_000
324
+ assert xl_channel_config .busParams .data .can .sjw == 1
325
+ assert xl_channel_config .busParams .data .can .tseg1 == 13
326
+ assert xl_channel_config .busParams .data .can .tseg2 == 2
327
+
328
+ bus .shutdown ()
329
+
330
+
331
+ def test_bus_creation_timingfd_mocked (mock_xldriver ) -> None :
332
+ timing = can .BitTimingFd .from_bitrate_and_segments (
333
+ f_clock = 80_000_000 ,
334
+ nom_bitrate = 500_000 ,
335
+ nom_tseg1 = 68 ,
336
+ nom_tseg2 = 11 ,
337
+ nom_sjw = 10 ,
338
+ data_bitrate = 2_000_000 ,
339
+ data_tseg1 = 10 ,
340
+ data_tseg2 = 9 ,
341
+ data_sjw = 8 ,
342
+ )
343
+ bus = can .Bus (
344
+ channel = 0 ,
345
+ interface = "vector" ,
346
+ timing = timing ,
347
+ _testing = True ,
348
+ )
349
+ assert isinstance (bus , canlib .VectorBus )
350
+ can .interfaces .vector .canlib .xldriver .xlOpenDriver .assert_called ()
351
+ can .interfaces .vector .canlib .xldriver .xlGetApplConfig .assert_called ()
352
+
353
+ can .interfaces .vector .canlib .xldriver .xlOpenPort .assert_called ()
354
+ xlOpenPort_args = can .interfaces .vector .canlib .xldriver .xlOpenPort .call_args [0 ]
355
+ assert (
356
+ xlOpenPort_args [5 ] == xldefine .XL_InterfaceVersion .XL_INTERFACE_VERSION_V4 .value
357
+ )
358
+
359
+ assert xlOpenPort_args [6 ] == xldefine .XL_BusTypes .XL_BUS_TYPE_CAN .value
360
+
361
+ can .interfaces .vector .canlib .xldriver .xlCanFdSetConfiguration .assert_called ()
362
+ can .interfaces .vector .canlib .xldriver .xlCanSetChannelBitrate .assert_not_called ()
363
+
364
+ xlCanFdSetConfiguration_args = (
365
+ can .interfaces .vector .canlib .xldriver .xlCanFdSetConfiguration .call_args [0 ]
366
+ )
367
+ canFdConf = xlCanFdSetConfiguration_args [2 ]
368
+ assert canFdConf .arbitrationBitRate == 500_000
369
+ assert canFdConf .dataBitRate == 2_000_000
370
+ assert canFdConf .sjwAbr == 10
371
+ assert canFdConf .tseg1Abr == 68
372
+ assert canFdConf .tseg2Abr == 11
373
+ assert canFdConf .sjwDbr == 8
374
+ assert canFdConf .tseg1Dbr == 10
375
+ assert canFdConf .tseg2Dbr == 9
376
+
377
+
378
+ @pytest .mark .skipif (not XLDRIVER_FOUND , reason = "Vector XL API is unavailable" )
379
+ def test_bus_creation_timingfd () -> None :
380
+ timing = can .BitTimingFd .from_bitrate_and_segments (
381
+ f_clock = 80_000_000 ,
382
+ nom_bitrate = 500_000 ,
383
+ nom_tseg1 = 68 ,
384
+ nom_tseg2 = 11 ,
385
+ nom_sjw = 10 ,
386
+ data_bitrate = 2_000_000 ,
387
+ data_tseg1 = 10 ,
388
+ data_tseg2 = 9 ,
389
+ data_sjw = 8 ,
390
+ )
391
+ bus = can .Bus (
392
+ channel = 0 ,
393
+ serial = _find_virtual_can_serial (),
394
+ interface = "vector" ,
395
+ timing = timing ,
396
+ )
397
+
398
+ xl_channel_config = _find_xl_channel_config (
399
+ serial = _find_virtual_can_serial (), channel = 0
400
+ )
401
+ assert (
402
+ xl_channel_config .interfaceVersion
403
+ == xldefine .XL_InterfaceVersion .XL_INTERFACE_VERSION_V4
404
+ )
405
+ assert (
406
+ xl_channel_config .busParams .data .canFD .canOpMode
407
+ & xldefine .XL_CANFD_BusParams_CanOpMode .XL_BUS_PARAMS_CANOPMODE_CANFD
408
+ )
409
+ assert xl_channel_config .busParams .data .canFD .arbitrationBitRate == 500_000
410
+ assert xl_channel_config .busParams .data .canFD .sjwAbr == 10
411
+ assert xl_channel_config .busParams .data .canFD .tseg1Abr == 68
412
+ assert xl_channel_config .busParams .data .canFD .tseg2Abr == 11
413
+ assert xl_channel_config .busParams .data .canFD .sjwDbr == 8
414
+ assert xl_channel_config .busParams .data .canFD .tseg1Dbr == 10
415
+ assert xl_channel_config .busParams .data .canFD .tseg2Dbr == 9
416
+ assert xl_channel_config .busParams .data .canFD .dataBitRate == 2_000_000
417
+
418
+ bus .shutdown ()
419
+
420
+
273
421
def test_send_mocked (mock_xldriver ) -> None :
274
422
bus = can .Bus (channel = 0 , interface = "vector" , _testing = True )
275
423
msg = can .Message (
0 commit comments