@@ -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