@@ -238,7 +238,8 @@ def build_can_frame(msg: Message) -> bytes:
238238
239239 data = bytes (msg .data ).ljust (max_len , b"\x00 " )
240240
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
242243
243244
244245def build_bcm_header (
@@ -321,17 +322,20 @@ def dissect_can_frame(frame: bytes) -> Tuple[int, int, int, bytes]:
321322 # Flags not valid in non-FD frames
322323 flags = 0
323324
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+
324328 # Allow deprecated can frames with old struct
325329 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
329333 ):
330334 can_dlc = len8_dlc
331335 else :
332336 can_dlc = data_len
333337
334- return can_id , can_dlc , flags , frame [8 : 8 + data_len ]
338+ return can_id , can_dlc , flags , frame [8 : 8 + data_len ]
335339
336340
337341def create_bcm_socket (channel : str ) -> socket .socket :
@@ -359,8 +363,7 @@ def send_bcm(bcm_socket: socket.socket, data: bytes) -> int:
359363 else :
360364 specific_message = ""
361365
362- raise can .CanOperationError (
363- base + specific_message , error .errno ) from error
366+ raise can .CanOperationError (base + specific_message , error .errno ) from error
364367
365368
366369def _compose_arbitration_id (message : Message ) -> int :
0 commit comments