@@ -573,35 +573,39 @@ def __init__(
573
573
)
574
574
canSetBusOutputControl (self ._write_handle , can_driver_mode )
575
575
576
+ self ._is_filtered = False
577
+ super ().__init__ (
578
+ channel = channel ,
579
+ can_filters = can_filters ,
580
+ ** kwargs ,
581
+ )
582
+
583
+ # activate channel after CAN filters were applied
584
+ log .debug ("Go on bus" )
585
+ if not self .single_handle :
586
+ canBusOn (self ._read_handle )
587
+ canBusOn (self ._write_handle )
588
+
589
+ # timestamp must be set after bus is online, otherwise kvReadTimer may return erroneous values
590
+ self ._timestamp_offset = self ._update_timestamp_offset ()
591
+
592
+ def _update_timestamp_offset (self ) -> float :
576
593
timer = ctypes .c_uint (0 )
577
594
try :
578
595
if time .get_clock_info ("time" ).resolution > 1e-5 :
579
596
ts , perfcounter = time_perfcounter_correlation ()
580
597
kvReadTimer (self ._read_handle , ctypes .byref (timer ))
581
598
current_perfcounter = time .perf_counter ()
582
599
now = ts + (current_perfcounter - perfcounter )
583
- self . _timestamp_offset = now - (timer .value * TIMESTAMP_FACTOR )
600
+ return now - (timer .value * TIMESTAMP_FACTOR )
584
601
else :
585
602
kvReadTimer (self ._read_handle , ctypes .byref (timer ))
586
- self . _timestamp_offset = time .time () - (timer .value * TIMESTAMP_FACTOR )
603
+ return time .time () - (timer .value * TIMESTAMP_FACTOR )
587
604
588
605
except Exception as exc :
589
606
# timer is usually close to 0
590
607
log .info (str (exc ))
591
- self ._timestamp_offset = time .time () - (timer .value * TIMESTAMP_FACTOR )
592
-
593
- self ._is_filtered = False
594
- super ().__init__ (
595
- channel = channel ,
596
- can_filters = can_filters ,
597
- ** kwargs ,
598
- )
599
-
600
- # activate channel after CAN filters were applied
601
- log .debug ("Go on bus" )
602
- if not self .single_handle :
603
- canBusOn (self ._read_handle )
604
- canBusOn (self ._write_handle )
608
+ return time .time () - (timer .value * TIMESTAMP_FACTOR )
605
609
606
610
def _apply_filters (self , filters ):
607
611
if filters and len (filters ) == 1 :
0 commit comments