@@ -238,7 +238,8 @@ def build_can_frame(msg: Message) -> bytes:
238
238
239
239
data = bytes (msg .data ).ljust (max_len , b"\x00 " )
240
240
241
- return CAN_FRAME_HEADER_STRUCT .pack (can_id , len (msg .data ), flags , msg .dlc ) + data
241
+ data_len = min (i for i in can .util .CAN_FD_DLC if i >= len (msg .data ))
242
+ return CAN_FRAME_HEADER_STRUCT .pack (can_id , data_len , flags , msg .dlc ) + data
242
243
243
244
244
245
def build_bcm_header (
@@ -321,17 +322,20 @@ def dissect_can_frame(frame: bytes) -> Tuple[int, int, int, bytes]:
321
322
# Flags not valid in non-FD frames
322
323
flags = 0
323
324
325
+ if data_len not in can .util .CAN_FD_DLC :
326
+ data_len = min (i for i in can .util .CAN_FD_DLC if i >= data_len )
327
+
324
328
# Allow deprecated can frames with old struct
325
329
if (
326
- data_len == constants .CAN_MAX_DLEN and
327
- len8_dlc > constants .CAN_MAX_DLEN and
328
- len8_dlc <= constants .CAN_MAX_RAW_DLC
330
+ data_len == constants .CAN_MAX_DLEN
331
+ and len8_dlc > constants .CAN_MAX_DLEN
332
+ and len8_dlc <= constants .CAN_MAX_RAW_DLC
329
333
):
330
334
can_dlc = len8_dlc
331
335
else :
332
336
can_dlc = data_len
333
337
334
- return can_id , can_dlc , flags , frame [8 : 8 + data_len ]
338
+ return can_id , can_dlc , flags , frame [8 : 8 + data_len ]
335
339
336
340
337
341
def create_bcm_socket (channel : str ) -> socket .socket :
@@ -359,8 +363,7 @@ def send_bcm(bcm_socket: socket.socket, data: bytes) -> int:
359
363
else :
360
364
specific_message = ""
361
365
362
- raise can .CanOperationError (
363
- base + specific_message , error .errno ) from error
366
+ raise can .CanOperationError (base + specific_message , error .errno ) from error
364
367
365
368
366
369
def _compose_arbitration_id (message : Message ) -> int :
0 commit comments