From: Oliver Hartkopp <socketcan@hartkopp.net>
To: maxime@artisandeveloppeur.fr,
laurent vaudoit <laurent.vaudoit@gmail.com>,
linux-can@vger.kernel.org
Subject: Re: linux-can ISOTP module
Date: Thu, 05 Jun 2014 20:22:45 +0200 [thread overview]
Message-ID: <5390B575.7030506@hartkopp.net> (raw)
In-Reply-To: <539043EA.6030001@artisandeveloppeur.fr>
Hello Maxime and Laurent,
On 05.06.2014 12:18, Maxime Jayat wrote:
>> Ok, with isotp.h api, i understand that we can parameter block size, stmin,
>> wftmax, transmission time (n_ax), padding.
>> But how can i specify the timing n_CS (time between flow control reception
>> and first consecutive frame) and the timing n_BS (time between first frame
>> reception and flow control emission)? In the same way, is it possible to
>> specify according timeout (n_BR for flow control timeout reception, and n_CR
>> for consecutive frame timeout reception)?
Hm - didn't know that n_CS is important at all ...
I'll take a look, if this can be integrated easily.
>>>>
>>>> For extended adressing method, it seems that both rx and tx frame must have
>>>> the same first byte in can frame (the one set by ext_address field of the
>>>> structure). This is correct for mixed addressing method (see Iso15765-2),
>>>> but for extended adressing method, we should be able to specify different
>>>> Target and source adress. I have not seen anything like this.
>>>
>>> One socket represents one virtual 1:1 connection (defined by two CAN
>>> identifiers and optional with one address extension) on the CAN bus.
>>>
>>> If you want to receive from different sources just create different sockets
>>> (and e.g. use select() to listen to many open socket file descriptors).
>>>
>>> The protocol engine has always to answer with the correct address information.
>>>
>> With this method, how can i have a segmented transfer like this:
>> 0x6a7 0x55 0x10 0x08 ........
>> 0x687 0xAA 0x30 0x00 0x00
>> 0x6a7 0x55 0x21 .....
>>
>> The connection i need is between two ECU, using IDs 0x6a7/687 and one has
>> adress extension 0x55, the other 0xAA (this adressing method is used on some
>> FIAT ECUs for example), but i don't see how it can work using two socket.
> I confirm.
> This is a problem that we also encountered on a BMW ECU with the current
> implementation of ISOTP.
> The use-case is real and not currently supported.
Ooops!
I've never read anything about an address extension used this way.
Despite the fact that this is used at FIAT and BMW - can this be found
somewhere in the protocol specification??
> I had to hack isotp.c, adding a socket option to be able to choose an
> address extension for the reception. Probably not the best solution but
> it worked.
I wonder if it would work to just add an rx address extension u8 element to
struct can_isotp_options:
struct can_isotp_options {
__u32 flags; /* set flags for isotp behaviour. */
/* __u32 value : flags see below */
__u32 frame_txtime; /* frame transmission time (N_As/N_Ar) */
/* __u32 value : time in nano secs */
__u8 ext_address; /* set address for extended addressing */
/* __u8 value : extended address */
__u8 txpad_content; /* set content of padding byte (tx) */
/* __u8 value : content on tx path */
__u8 rxpad_content; /* set content of padding byte (rx) */
/* __u8 value : content on rx path */
__u8 rx_ext_address; /* set address for extended addressing */
/* __u8 value : extended address */
};
/* flags for isotp behaviour */
#define CAN_ISOTP_LISTEN_MODE 0x001 /* listen only (do not send FC) */
#define CAN_ISOTP_EXTEND_ADDR 0x002 /* enable extended addressing */
#define CAN_ISOTP_TX_PADDING 0x004 /* enable CAN frame padding tx path */
#define CAN_ISOTP_RX_PADDING 0x008 /* enable CAN frame padding rx path */
#define CAN_ISOTP_CHK_PAD_LEN 0x010 /* check received CAN frame padding */
#define CAN_ISOTP_CHK_PAD_DATA 0x020 /* check received CAN frame padding */
#define CAN_ISOTP_HALF_DUPLEX 0x040 /* half duplex error state handling */
#define CAN_ISOTP_FORCE_TXSTMIN 0x080 /* ignore stmin from received FC */
#define CAN_ISOTP_FORCE_RXSTMIN 0x100 /* ignore CFs depending on rx stmin */
#define CAN_ISOTP_RX_EXT_ADDR 0x200 /* different rx extended addressing */
pahole can-isotp.ko says:
struct can_isotp_options {
__u32 flags; /* 0 4 */
__u32 frame_txtime; /* 4 4 */
__u8 ext_address; /* 8 1 */
__u8 txpad_content; /* 9 1 */
__u8 rxpad_content; /* 10 1 */
/* size: 12, cachelines: 1, members: 5 */
/* padding: 1 */
/* last cacheline: 12 bytes */
};
So this could be a working extension ...
Regards,
Oliver
next prev parent reply other threads:[~2014-06-05 18:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-04 12:55 linux-can ISOTP module laurent vaudoit
2014-06-04 18:40 ` Oliver Hartkopp
2014-06-05 7:16 ` laurent vaudoit
2014-06-05 10:18 ` Maxime Jayat
2014-06-05 18:22 ` Oliver Hartkopp [this message]
2014-06-06 6:42 ` laurent vaudoit
2014-06-20 19:08 ` Oliver Hartkopp
2014-06-23 18:01 ` laurent vaudoit
2014-11-13 17:47 ` Oliver Hartkopp
[not found] ` <CAA7hF3ypuVbfxbskM+2bn_58a-k0EtCePxQ_1i6j24G5H=zFSQ@mail.gmail.com>
2015-01-16 17:31 ` Oliver Hartkopp
2014-06-21 11:18 ` N_Cs timing - was " Oliver Hartkopp
2014-06-23 18:13 ` laurent vaudoit
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=5390B575.7030506@hartkopp.net \
--to=socketcan@hartkopp.net \
--cc=laurent.vaudoit@gmail.com \
--cc=linux-can@vger.kernel.org \
--cc=maxime@artisandeveloppeur.fr \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.