Decode CAN Bus Frames

Medium Python Protocols Asked at Continental
Solve this problem

Decode a raw CAN 2.0A frame into its identifier, DLC and payload, and extract a big-endian signal at an arbitrary bit position as automotive DBC files describe.

Constraints

  • Standard 11-bit identifier only.
  • DLC greater than 8 must raise ValueError.
  • Signal extraction takes a start bit, length and signedness.
  • Big-endian (Motorola) bit numbering.
  • No external CAN libraries.
Starter codePython
1def decode_frame(raw):2    """raw: bytes. Returns dict with id, dlc, data."""3    # TODO4    return {}5 6def extract_signal(data, start_bit, length, signed=False):7    # TODO8    return 0