netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Oliver Hartkopp <socketcan@hartkopp.net>
To: Aleksander Morgado <aleksander@aleksander.es>,
	Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Marek Vasut <marex@denx.de>,
	Vostrikov Andrey <andrey.vostrikov@cogentembedded.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Wolfgang Grandegger <wg@grandegger.com>,
	Andrew Lunn <andrew@lunn.ch>
Subject: Re: [RFC][PATCH] net: arinc429: Add ARINC-429 stack
Date: Tue, 03 Nov 2015 18:32:12 +0100	[thread overview]
Message-ID: <5638EF9C.9070503@hartkopp.net> (raw)
In-Reply-To: <CAAP7ucKWT++AbPPA2kvm965JSjsgCm0OMf0-Vnjwe-ck+xjZZQ@mail.gmail.com>



On 11/03/2015 05:10 PM, Aleksander Morgado wrote:
>>> or the duplex TX/RX setup for channels
>>> (channels are either RX or TX, not both), or the local
>>> echoing/loopback (which wouldn't make much sense for TX-only
>>> channels).
>>
>> Local echo/loopback comes in two flavours:
>> - Other socket receive local generate frames, too.
>>   This is interesting if you want to merge two ARINC node on single
>>   device.
> 
> I'd actually love having this for a simulator setup I use where I
> currently physically connect cables from a TX channel in one adapter
> to a RX channel in another adapter. But I'm not sure there's a
> specific real usecase for that apart from testing purposes.

Once you have ever used this functionalities you will start to think beyond.

It's a matter of (stress-)testing your applications after build on virtual
CAN/ARINC interfaces. You will start to use the can-gw to route and/or modify
frames between interfaces. You have all the tools to display/log/visualize and
replay data. There's a wireshark plugin for PF_CAN you can easily adapt to
present ARINC data, etc.

So when thinking about using PF_CAN as ARINC429 base ...

This is the CAN frame structure:

https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/can.txt?h=linux-4.2.y#n264

    struct can_frame {
            canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
            __u8    can_dlc; /* frame payload length in byte (0 .. 8) */
            __u8    __pad;   /* padding */
            __u8    __res0;  /* reserved / padding */
            __u8    __res1;  /* reserved / padding */
            __u8    data[8] __attribute__((aligned(8)));
    };


So what about defining an arinc429_frame like this:

    struct a429_frame {
            __u32   label;   /* ARINC 429 label */
            __u8    length;  /* always set to 3 */
            __u8    __pad;   /* padding */
            __u8    __res0;  /* reserved / padding */
            __u8    __res1;  /* reserved / padding */
            __u8    data[8] __attribute__((aligned(8)));
    };

Don't know if your suggestion

+ * ARINC packet:
+ *
+ * .-.---.------.---.-----.
+ * |P|SSM| Data |SDI|Label|
+ * '-'---'------'---'-----'
+ *  3 3 2 2....1 1 9 8...0
+ *  1 0 9 8    1 0
+ */
+
+/**
+ * struct arinc429_frame - basic ARINC429 frame structure
+ * @label:	ARINC429 label
+ * @data:	ARINC429 P, SSM, DATA and SDI
+ */
+struct arinc429_frame {
+	__u8	label;		/* 8 bit label */
+	__u8	data[3];	/* Up-to 23 bits are valid. */
+};

is really handy to use for arinc application programmers.

It looks like you need to shift the stuff in user space every time.

So you might better think of something like this:

    struct a429_frame {
            __u32   label;   /* ARINC 429 label */
            __u8    length;  /* always set to 8 */
            __u8    __pad;   /* padding */
            __u8    __res0;  /* reserved / padding */
            __u8    __res1;  /* reserved / padding */
            __u32   data __attribute__((aligned(8)));
            __u8    p;       /* p */
            __u8    ssm;     /* ssm */
            __u8    sdi;     /* sdi */
            __u8    __end;   /* padding */
    };

Good thing would be that you can directly see the content in logfiles and you
can easily modify the content on the fly by can-gw.

Of course the arinc netdevice driver would have to take care to do the correct
rx/tx whatever. But routing and processing arinc content through the CAN stack
does not seem to be a bad idea IMO.

Regards,
Oliver

  reply	other threads:[~2015-11-03 17:32 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-01 23:16 [RFC][PATCH] net: arinc429: Add ARINC-429 stack Marek Vasut
2015-11-02  9:47 ` Marc Kleine-Budde
2015-11-02 11:14   ` Oliver Hartkopp
2015-11-02 18:16     ` Marek Vasut
2015-11-02 20:15       ` Vostrikov Andrey
2015-11-02 20:25         ` Marek Vasut
2015-11-03 10:36           ` Aleksander Morgado
2015-11-03 11:36             ` Marc Kleine-Budde
2015-11-03 15:06               ` Aleksander Morgado
2015-11-03 15:15                 ` Marc Kleine-Budde
2015-11-03 16:10                   ` Aleksander Morgado
2015-11-03 17:32                     ` Oliver Hartkopp [this message]
2015-11-03 17:41                       ` Marek Vasut
2015-11-03 18:03                         ` Oliver Hartkopp
2015-11-03 19:19                           ` Marek Vasut
2015-11-03 19:28                             ` Oliver Hartkopp
2015-11-03 21:43                               ` Marek Vasut
2015-11-04  9:34                                 ` Aleksander Morgado
2015-11-04 13:54                                   ` Marek Vasut
2015-11-04 15:03                                     ` Vostrikov Andrey
2015-11-04 15:07                                       ` Marek Vasut
2015-11-04 15:18                                         ` Vostrikov Andrey
2015-11-04 15:19                                           ` Aleksander Morgado
2015-11-04 15:33                                             ` Marek Vasut
2015-11-04 15:45                                               ` Aleksander Morgado
2015-11-10 16:15                                                 ` Marek Vasut
2015-11-18 16:38                                                   ` Aleksander Morgado
2015-11-18 16:41                                                     ` Marek Vasut
2015-11-03 20:26                       ` Vostrikov Andrey
2015-11-03 21:24                         ` Oliver Hartkopp
2015-11-03 21:41                           ` Marek Vasut
2015-11-04 10:44                             ` Oliver Hartkopp
2015-11-03 21:52                           ` Vostrikov Andrey
2015-11-03 15:19                 ` Marek Vasut
2015-11-03 16:18                   ` Aleksander Morgado
2015-11-03 16:56                     ` Aleksander Morgado
2015-11-03 17:33                       ` Marek Vasut
2015-11-03 20:15                         ` Vostrikov Andrey
2015-11-04  9:31                         ` Aleksander Morgado
2015-11-03 16:47                   ` Aleksander Morgado
2015-11-03 17:37                     ` Marek Vasut
2015-11-03 17:01             ` Oliver Hartkopp
2015-11-04  9:51               ` Aleksander Morgado
2015-11-03 21:44       ` Marek Vasut
2015-11-02 19:41     ` Aleksander Morgado
2015-11-02 19:55       ` Oliver Hartkopp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5638EF9C.9070503@hartkopp.net \
    --to=socketcan@hartkopp.net \
    --cc=aleksander@aleksander.es \
    --cc=andrew@lunn.ch \
    --cc=andrey.vostrikov@cogentembedded.com \
    --cc=davem@davemloft.net \
    --cc=marex@denx.de \
    --cc=mkl@pengutronix.de \
    --cc=netdev@vger.kernel.org \
    --cc=wg@grandegger.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).