Re: [CAN-ISOTP] handle broadcast

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

would you mind describing your usecase a little further.
I see you're using UDS to broadcast "read local ID".

Why don't you broadcast "tester present" to find out the ECUs on the bus
and then sequentially do "read local ID" from each ECU.

That workes around the misery with the address specific flow control frame.

Regards,
Patrick


> From programmers 'using' perspective i think must be exactly like UDP,
> with appropriate MASK can get responses from all available ECU.
> From implementation perspective things are more complex.
> On Sat, Sep 8, 2018 at 5:40 PM Zahari Zahariev <harryzz@xxxxxxxxx> wrote:
>>
>> DISCUSSION FROM GITHUB:
>>
>> ==>harryzz commented 7 hours ago
>> Ok. thanks.
>> And what about BROADCAST messages. Is possible to handle and what is right way?
>> like this with broadcast address 0xDF:
>>
>> can1 6F1 [5] DF 03 22 F1 01
>>
>> can1 610 [8] F1 10 34 62 F1 01 01 01
>> can1 6F1 [8] 10 30 0F 02 00 00 00 00
>> can1 610 [8] F1 21 00 04 11 01 11 8B
>> can1 610 [8] F1 22 00 09 00 00 00 00
>> can1 610 [8] F1 23 00 00 00 06 00 00
>> can1 610 [8] F1 24 04 52 02 0B 1E 08
>> can1 610 [8] F1 25 00 00 04 53 02 0B
>> can1 610 [8] F1 26 3C 08 00 00 04 54
>> can1 610 [8] F1 27 02 05 04 01 00 00
>> can1 610 [8] F1 28 01 B4 00 C4 00 FF
>>
>> can1 640 [8] F1 10 54 62 F1 01 01 01
>> can1 6F1 [8] 40 30 0F 02 00 00 00 00
>> can1 640 [8] F1 21 00 08 12 07 10 8A
>> can1 640 [8] F1 22 8F 71 01 00 00 01
>> can1 640 [8] F1 23 23 00 00 01 00 00
>> can1 640 [8] F1 24 00 07 05 00 02 02
>> can1 640 [8] F1 25 00 00 02 EB FF FF
>> can1 640 [8] F1 26 FF 06 00 00 07 4B
>> can1 640 [8] F1 27 06 00 08 08 00 00
>> can1 640 [8] F1 28 07 4F 06 06 14 08
>> can1 640 [8] F1 29 00 00 07 4D 06 06
>> can1 640 [8] F1 2A 14 08 00 00 07 4E
>> can1 640 [8] F1 2B 06 06 14 08 00 00
>> can1 640 [8] F1 2C 07 4C 06 06 14 05
>> can1 640 [8] F1 2D 00 00 00 0F 05 13
>> can1 640 [8] F1 2E 05 FF FF FF FF FF
>>
>> can1 672 [8] F1 10 4C 62 F1 01 01 01
>> can1 6F1 [8] 72 30 0F 02 00 00 00 00
>> can1 672 [8] F1 21 00 07 13 02 07 8B
>> can1 672 [8] F1 22 00 24 00 00 00 00
>> can1 672 [8] F1 23 00 00 00 01 00 00
>> can1 672 [8] F1 24 0D 10 01 00 01 06
>> can1 672 [8] F1 25 00 00 05 15 0D 03
>> can1 672 [8] F1 26 00 08 00 00 05 13
>> can1 672 [8] F1 27 0D 03 23 08 00 00
>> can1 672 [8] F1 28 05 14 0D 03 23 08
>> can1 672 [8] F1 29 00 00 05 12 0D 03
>> can1 672 [8] F1 2A 23 08 00 00 05 11
>> can1 672 [8] F1 2B 0D 03 28 05 00 00
>> can1 672 [8] F1 2C 01 2F 0C 06 16 FF
>>
>> ==>hartkopp commented 5 hours ago
>> The point is, that broadcast messages fit into one CAN frame - which
>> does not need a "transport protocol".
>> So the idea is to perform broadcast PDUs with a CAN_RAW socket - and
>> whenever you need a segmented PDU transfer you use the CAN_ISOTP
>> socket.
>> E.g. you may open an isotp socket which is listening on a specific
>> connection (two CAN IDs) but trigger some function with a CAN_RAW
>> socket via broadcast.
>>
>> ==>harryzz commented 4 hours ago
>> Ok. If i understand you correctly: for my case i need to open up to 240
>> sockets to handle response from broadcast and find available ECU (i don't
>> know how many ECU have installed)?
>>
>> ==>hartkopp commented 2 hours ago
>> Formally yes. The problem is, that you would have to deal with all
>> that possible back channels (and its communication channel CAN ID
>> pairs) anyway, right? How would you do that with another approach? In
>> any case you would formally need to create 240 state machines that
>> could react on answers of a broadcast request - or am I missing
>> anything here?
>> ps. Thanks for the discussion. Most people just fork and use the isotp
>> module without giving feedback. And I would like to push it into
>> mainline Linux, so feedback is really appreciated.
>>
>> ==>harryzz commented an hour ago
>> I don't need to have all the time opened all 240 sockets. I send
>> broadcast and then collect available ecu's and returned data and close
>> all connections. After this diagnostic is in normal way peer-to-peer.
>> I know i can make this also with can_raw and assemble data in
>> user-space ....
>> what you think about implementation of 'listen' and 'accept'
>> functionality - this will fix issue and will be more flexible?
>>
>> ==>hartkopp commented an hour ago
>> how would you think this could look like from a programmers perspective?
>> Can we continue this discussion on the linux-can mailing list please?
>> Github is not the best place for these kind of discussions as the CAN
>> community is more active on the mailing list (and it is archived there
>> too)



[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux