Hi Kurt, J1939 just hit the raspberrypi-kernel-headers and will soon be part of regular raspberrypi-kernel [1] while it was already available in Python 3.9 for a couple of month. [2] I was about to give it a spin but was confused of the call parameters. Could you shed some light on the intended usage. Do I need to open one socket per PGN I'm sending? e.g. s1 = socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_J1939) s1.bind(interface_name, MY_NAME, PGN_OF_TSC1, MY_SA) s1.write(bytes(8)) s2 = socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_J1939) s2.bind(interface_name, MY_NAME, PGN_OF_EBC1, MY_SA) s2.write(bytes(8)) What about the cyclic transmitted PGNs? Do I drop those into BroadcastManager somehow? If I want to open an ISOTP Channel while a j1939 socket exists for my SA, does anything weird happen on that socket? e.g. I open a KWP2000 session from tester to engine ecu: Tester 0xF1 <--> ECU 0x00 0x18DA00F1 >> << 0x18DAF100 Thanks and Best Regards, Patrick Menschel [1] https://github.com/raspberrypi/linux/pull/4346 [2] https://docs.python.org/3.9/library/socket.html#socket.socket.bind > CAN_J1939 protocol require a tuple (interface, name, pgn, addr) where additional > parameters are 64-bit unsigned integer representing the ECU name, a32-bit unsigned > integer representing the Parameter Group Number (PGN), and an 8-bit integer > representing the address.