@@ -103,7 +103,7 @@ def timestamp_to_systemtime(timestamp: float) -> TSystemTime:
103
103
if timestamp is None or timestamp < 631152000 :
104
104
# Probably not a Unix timestamp
105
105
return 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
106
- t = datetime .datetime .fromtimestamp (round (timestamp , 3 ))
106
+ t = datetime .datetime .fromtimestamp (round (timestamp , 3 ), tz = datetime . timezone . utc )
107
107
return (
108
108
t .year ,
109
109
t .month ,
@@ -126,6 +126,7 @@ def systemtime_to_timestamp(systemtime: TSystemTime) -> float:
126
126
systemtime [5 ],
127
127
systemtime [6 ],
128
128
systemtime [7 ] * 1000 ,
129
+ tzinfo = datetime .timezone .utc ,
129
130
)
130
131
return t .timestamp ()
131
132
except ValueError :
@@ -239,7 +240,7 @@ def _parse_data(self, data):
239
240
raise BLFParseError ("Could not find next object" ) from None
240
241
header = unpack_obj_header_base (data , pos )
241
242
# print(header)
242
- signature , _ , header_version , obj_size , obj_type = header
243
+ signature , header_size , header_version , obj_size , obj_type = header
243
244
if signature != b"LOBJ" :
244
245
raise BLFParseError ()
245
246
@@ -334,10 +335,20 @@ def _parse_data(self, data):
334
335
_ ,
335
336
_ ,
336
337
direction ,
337
- _ ,
338
+ ext_data_offset ,
338
339
_ ,
339
340
) = unpack_can_fd_64_msg (data , pos )
340
- pos += can_fd_64_msg_size
341
+
342
+ # :issue:`1905`: `valid_bytes` can be higher than the actually available data.
343
+ # Add zero-byte padding to mimic behavior of CANoe and binlog.dll.
344
+ data_field_length = min (
345
+ valid_bytes ,
346
+ (ext_data_offset or obj_size ) - header_size - can_fd_64_msg_size ,
347
+ )
348
+ msg_data_offset = pos + can_fd_64_msg_size
349
+ msg_data = data [msg_data_offset : msg_data_offset + data_field_length ]
350
+ msg_data = msg_data .ljust (valid_bytes , b"\x00 " )
351
+
341
352
yield Message (
342
353
timestamp = timestamp ,
343
354
arbitration_id = can_id & 0x1FFFFFFF ,
@@ -348,7 +359,7 @@ def _parse_data(self, data):
348
359
bitrate_switch = bool (fd_flags & 0x2000 ),
349
360
error_state_indicator = bool (fd_flags & 0x4000 ),
350
361
dlc = dlc2len (dlc ),
351
- data = data [ pos : pos + valid_bytes ] ,
362
+ data = msg_data ,
352
363
channel = channel - 1 ,
353
364
)
354
365
0 commit comments