Am 15.05.21 um 14:26 schrieb Kurt Van Dijck: > On Fri, 14 May 2021 12:04:47 +0000, Patrick Menschel wrote: >> 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)) > > No, you don't _need_ to. You can. > > If you need quite some different PGN's, it may be more interesting to: > s = socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_J1939) > s.bind(interface_name, MY_NAME, ANY_PGN, MY_SA) > s.sendto(bytes(8), DST_1, PGN_1) > s.sendto(bytes(8), DST_2, PGN_2) > ... > > I'm not a python expert, I just assume something like that is possible. Yes, the method exists sendto() https://docs.python.org/3/library/socket.html#socket.socket.sendto https://github.com/python/cpython/blob/main/Modules/socketmodule.c#L4279 but apparently sockaddr_can is not yet expanded to individual parameters as it was done with the bind() https://github.com/python/cpython/blob/main/Modules/socketmodule.c#L2207 Then I'll start by passing in the sockaddr_can struct as a first test and make a PR to that repo in the long run. >> What about the cyclic transmitted PGNs? Do I drop those into >> BroadcastManager somehow? > > The broadcast manager is seperate from j1939, so it's apart. Now that would have been the cherry on the cake ;-) 99% of J1939 are information sharing, cyclic messages of PDU2 format. Handing the timing over to the BCM would have been super convenient. Thanks again and Best Regards, Patrick