I amn't familiar with CAN, but is it possible to implement a general
CAN MAC driver on top of CAN CHAR driver like this?
+-------------------------------+
|     NuttX Network driver      |
| +------------+ +------------+ |
| |Syscall glue| |BSD Socket  | |
| |            | |glue        | |
| +------------+ +------------+ |
+-------------------------------+
+-------------------------------+ file_*    +-------------------------------+
|     Hardware MAC driver       |---------->|   NuttX CAN Driver (can.c)    |
+-------------------------------+           | +------------+ +------------+ |
                                            | |Syscall glue| |Char driver | |
                                            | |            | |glue        | |
                                            | +------------+ +------------+ |
                                            +-------------------------------+
                                            +-------------------------------+
                                            |     Hardware CAN driver       |
                                            +-------------------------------+
So we just need write one CAN driver, but the user can select socket
or char as they want.

Thanks
Xiang


On Tue, Feb 11, 2020 at 11:21 PM Gregory Nutt <spudan...@gmail.com> wrote:
>
>
> >       NuttX CAN Implementation         NuttX Ethernet Implementation
> >
> > +-------------------------------+   +-------------------------------+
> > |          Application          |   |          Application          |
> > +-------------------------------+   +-------------------------------+
> > +-------------------------------+   +-------------------------------+
> > |        POSIX Interface        |   |        POSIX Interface        |
> > +-------------------------------+   +-------------------------------+
> > +-------------+   +-------------+   +-------------+   +-------------+
> > |System calls |   |VFS (fs/vfs) |   |System calls |   |BSD socket   |
> > |             |   |             |   |             |   |net/sockets  |
> > +-------------+   +-------------+   +-------------+   +-------------+
> > +-------------------------------+   +-------------------------------+
> > |   NuttX CAN Driver (can.c)    |   |     NuttX Network driver      |
> > | +------------+ +------------+ |   | +------------+ +------------+ |
> > | |Syscall glue| |Char driver | |   | |Syscall glue| |BSD Socket  | |
> > | |            | |glue        | |   | |            | |glue        | |
> > | +------------+ +------------+ |   | +------------+ +------------+ |
> > +-------------------------------+   +-------------------------------+
> > +-------------------------------+   +-------------------------------+
> > |     Hardware CAN driver       |   |     Hardware MAC driver       |
> > +-------------------------------+   +-------------------------------+
> > +-------------------------------+   +-------------------------------+
> > |OS (sched/), memory manager    |   |OS (sched/), memory manager    |
> > |(mm/), common libraries (libs/)|   |(mm/), common libraries (libs/)|
> > +-------------------------------+   +-------------------------------+
> > +-------------------------------+   +-------------------------------+
> > |           Hardware            |   |           Hardware            |
> > +-------------------------------+   +-------------------------------+
> > (Note this is ASCII art use a monospace font to view correctly)
> >
> I believe that both sides would be the same.  Both would use BSD
> sockets, SocketCAN would be added to the network stacks, and the CAN
> drivers would be a network drivers.
>
> Your picture shows the existing implementation using character drivers.
> SocketCAN is intended to be integrated into the network.
>
>

Reply via email to