On Fri, 11 Dec 2020 at 21:39, Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> wrote: > > On 12/10/20 11:26 PM, Christian Gagneraud wrote: > >>>> Yes, your device is quite special :) > > [...] > > >> I think you have to implement the polling yourself. Start a transfer on > >> ndo_open(). In the completion handler handle the received data. In case you have > >> recieved a CAN frame, submit a new transfer in case you haven't received data > >> yet, schedule delayed work with a delay, e.g. 1ms. Once you have that running > >> you have fine tune the number of running transfers and delays. > > > > Thanks Marc for the hints. > > I'll look into that, this will certainly take time, I'm not in a rush. > > Full disclosure: I am actually an employee of Navico (the manufacturer > > of the device), > > Nice! There are several CAN devices which have mainline Linux spport by their > manufacturers. Is there any driver for other operating systems like Windows, > etc? You might talk to the developers to find out, how they solve the problem of > polling. > > > I'm currently waiting for approval to publish code > > related to that device. This shouldn't be an issue, I just need the > > administrative work done. > > Fingers crossed! I have 3 code base to share: 1. https://github.com/NavicoOS/pegasus-python-can/blob/main/python-can-pegasus/pegasus_iface.py This code show how to talk to the USB device, it is quite compact and simple The workhorse are_usb_bulk(), _write_usb_packet() and _read_usb_packet() There are different types of packet, with a straight mapping with open, close, bus on, bus off, read, write, ... 2. https://github.com/NavicoOS/pegasus-linux-can/tree/main/pegasus_usb This is a simple char device driver on top of the Linux USB stack You can manually write command, and read answer to/from this device, the README [1], show how to handle the ' get_descriptor' and compare the binary answer with what the above python based project 3. https://github.com/NavicoOS/pegasus-linux-can/tree/main/pegasus_can I thought i had an initial PoC based on some linux-can driver, but obviously not, this is the same as above, so let's ignore it for now, unless i find a more up to date source tree. [1] https://github.com/NavicoOS/pegasus-linux-can/blob/main/README.md Chris