Am 04.02.21 um 16:38 schrieb Patrick Menschel: > Hi, > > is anyone writing to BCMSocket on the Raspberry Pi from Python3 ? > > I'm digging through an endianess / alignment issue on armhf platform. > > My testcode [1] that I wrote years ago on works on X86_64 platform but > fails on armhf platform with OSERROR 22 "invalid argument". Some more details. The length on X86_64 results in 72 bytes which are consumed by bcm. On armhf it results in 52 bytes which cause OSError: [Errno 22] Invalid argument. > > Then I started concatenating bytes by hand instead of using ctypes. > > What I came around is that frames[0] is somehow expected to be 8 bytes > length although it should be 16 bytes. > > struct bcm_msg_head { > ... > struct can_frame frames[0]; > }; > > I ended up inserting padding 8 bytes instead of frames[0] value and that > actually works. I have to amend that, it's 4 padding bytes. struct.pack("=IIIllllII4xIB3x8s",opcode,flags,count,ival1_sec,ival1_usec,ival2_sec,ival2_usec,can_id,nframes,can_id,can_dlc,data) ^^ padding bytes Sending the resulting 56bytes to bcmsocket gets me a cyclic message on armhf. > > That makes my overall BCMHead 40 bytes and the complete bcm message > including the can frame 56bytes. > > [1] https://github.com/menschel/pysocketcan > Thanks, Patrick