From: Peter Korsgaard <peter@korsgaard.com>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Barebox List <barebox@lists.infradead.org>
Subject: Re: [PATCH 1/4] Add Reliable Asynchronous Transfer Protocol
Date: Fri, 12 Jun 2015 14:05:04 +0200 [thread overview]
Message-ID: <87bngli13j.fsf@dell.be.48ers.dk> (raw)
In-Reply-To: <1434005650-28131-2-git-send-email-s.hauer@pengutronix.de> (Sascha Hauer's message of "Thu, 11 Jun 2015 08:54:07 +0200")
>>>>> "Sascha" == Sascha Hauer <s.hauer@pengutronix.de> writes:
> This patch adds support for Reliable Asynchronous Transfer Protocol (RATP)
> as described in RFC916.
> Communication over RS232 is often unreliable as characters are lost or
> misinterpreted. This protocol allows for a reliable packet based communication
> over serial lines.
> The implementation simply follows the state machine described in the RFC text.
Almost ;)
> +static int ratp_recv_pkt_data(struct ratp *ratp, void *data, uint8_t len,
> + int poll_timeout_ms)
> +{
> + uint16_t crc_expect, crc_read;
> + int ret, i;
> +
> + for (i = 0; i < len + 2; i++) {
> + ret = ratp_getc(ratp, data + i, poll_timeout_ms);
> + if (ret < 0)
> + return ret;
> + }
> +
> + crc_expect = cyg_crc16(data, len);
Why crc16? RFC916 states that the checksum is the inverted 1s complement
16bit sum, E.G. like TCP/UDP/IP header checksums:
Checksum Algorithm
The checksum algorithm chosen is similar to that used by
IP/TCP protocols [IP 81] [TCP 81]. This algorithm has shown
itself to be both reliable and relatively easy to compute.
The interested reader may refer to [TCP Checksum 78] for a
more thorough discussion of its properties.
The checksum algorithm is:
SENDER
The unsigned sum of the 16-bit words of the data portion
of the packet is formed. Any overflow is added into the
lowest order bit. This sum does not include the header
portion of the packet. For the purpose of building a
packet for transmission the two octet checksum field is
zero. The sum formed is then bit complemented and
inserted into the checksum field before transmission.
If the total number of data octets is odd then the last
octet is padded to the right (low order) with zeros to
form a 16-bit word for checksum purposes. This pad octet
is not transmitted as part of the packet.
E.G. something like;
http://www.roman10.net/how-to-calculate-iptcpudp-checksumpart-2-implementation/
--
Bye, Peter Korsgaard
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2015-06-12 12:05 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-11 6:54 Add barebox remote control Sascha Hauer
2015-06-11 6:54 ` [PATCH 1/4] Add Reliable Asynchronous Transfer Protocol Sascha Hauer
2015-06-12 12:05 ` Peter Korsgaard [this message]
2015-06-15 5:12 ` Sascha Hauer
2015-06-15 7:19 ` Peter Korsgaard
2015-06-17 5:45 ` Sascha Hauer
2015-06-11 6:54 ` [PATCH 2/4] barebox remote control Sascha Hauer
2015-06-12 10:36 ` Peter Korsgaard
2015-06-15 4:51 ` Sascha Hauer
2015-06-11 6:54 ` [PATCH 3/4] include pyserial trunk Sascha Hauer
2015-06-11 15:48 ` Uwe Kleine-König
2015-06-11 6:54 ` [PATCH 4/4] host side for barebox remote control Sascha Hauer
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=87bngli13j.fsf@dell.be.48ers.dk \
--to=peter@korsgaard.com \
--cc=barebox@lists.infradead.org \
--cc=s.hauer@pengutronix.de \
/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