Skip to content

Commit 4d15123

Browse files
authored
Support asymmetric addresses (#107)
1 parent 47b0cc9 commit 4d15123

10 files changed

Lines changed: 891 additions & 191 deletions

File tree

doc/source/isotp/addressing.rst

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,68 @@ Example :
158158
0x18CE55AA [8] 99 10 0A 00 01 02 03 // First frame
159159
0x18CEAA55 [5] 99 30 00 08 00 // Flow control
160160
0x18CE55AA [8] 99 21 04 05 06 07 08 09 // consecutive frame
161+
162+
------
163+
164+
165+
Asymmetric addresses
166+
--------------------
167+
168+
It is possible to send and receive with different address schemes. The :class:`AsymmetricAddress<isotp.address.AsymmetricAddress>` serves that purpose
169+
170+
.. autoclass:: isotp.AsymmetricAddress
171+
172+
When using an asymmetric, both ``tx_addr`` and ``rx_addr`` must be partial addresses, meaning that either ``tx_only=True`` or ``rx_only=True`` is set.
173+
Address object instantiated with ``rx_only=True`` will not expect parameter meant for transmission and conversely, when instantiated with ``tx_only=True``
174+
parameters required for reception won't be needed.
175+
176+
177+
Example :
178+
179+
- Transmission (``NormalFixed_29bits``):
180+
181+
- source_address : 0x55
182+
- target_address : 0xAA
183+
184+
- Reception (``Mixed_11bits``)
185+
186+
- rxid : 0x123
187+
- address_extension : 0x99
188+
189+
.. code-block:: python
190+
191+
import isotp
192+
address = isotp.AsymmetricAddress(
193+
tx_addr=isotp.Address(isotp.AddressingMode.NormalFixed_29bits, target_address=ta, source_address=sa, tx_only=True),
194+
rx_addr=isotp.Address(isotp.AddressingMode.Mixed_11bits, rxid=0x123, address_extension=0x99, rx_only=True) # txid is not required
195+
)
196+
197+
198+
::
199+
200+
// Reception of a 10 bytes payload
201+
0x123 [8] 99 10 0A 00 01 02 03 04 // First frame
202+
0x18DAAA55 [4] 30 00 08 00 // Flow control
203+
0x123 [7] 99 21 05 06 07 08 09 // Consecutive frame
204+
205+
206+
The following table indicates the required parameter to construct a :class:`Address<isotp.Address>` object for all possible scenario
207+
208+
.. csv-table:: :class:`Address<isotp.Address>` required parameters
209+
:header: "Addressing mode", "Full address", "Partial Tx (``tx_only=True``)", "Partial Rx (``rx_only=True``)"
210+
211+
"Normal_11bits", "``rxid`` ``txid``", "``txid``", "``rxid``"
212+
"Normal_29bits", "``rxid`` ``txid``", "``txid``", "``rxid``"
213+
"NormalFixed_29bits", "``source_address`` ``target_address``", "``source_address`` ``target_address``", "``source_address`` ``target_address``"
214+
"Extended_11bits", "``txid`` ``target_address`` ``rxid`` ``source_address``", "``txid`` ``target_address``", "``rxid`` ``source_address``"
215+
"Extended_29bits", "``txid`` ``target_address`` ``rxid`` ``source_address``", "``txid`` ``target_address``", "``rxid`` ``source_address``"
216+
"Mixed_11bits", "``rxid`` ``txid`` ``address_extension``", "``txid`` ``address_extension``", "``rxid`` ``address_extension``"
217+
"Mixed_29bits", "``source_address`` ``target_address`` ``address_extension``", "``source_address`` ``target_address`` ``address_extension``", "``source_address`` ``target_address`` ``address_extension``"
218+
219+
220+
221+
222+
223+
224+
225+

doc/source/isotp/examples.rst

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,21 @@ Different type of addresses
8181

8282
.. code-block:: python
8383
84-
import isotp
85-
86-
isotp.Address(isotp.AddressingMode.Normal_11bits, rxid=0x123, txid=0x456)
87-
isotp.Address(isotp.AddressingMode.Normal_29bits, rxid=0x123456, txid=0x789ABC)
88-
isotp.Address(isotp.AddressingMode.NormalFixed_29bits, source_address=0x11, target_address=0x22)
89-
isotp.Address(isotp.AddressingMode.Extended_11bits, rxid=0x123, txid=0x456, source_address=0x55, target_address=0xAA)
90-
isotp.Address(isotp.AddressingMode.Extended_29bits, rxid=0x123456, txid=0x789ABC, source_address=0x55, target_address=0xAA)
91-
isotp.Address(isotp.AddressingMode.Mixed_11bits, rxid=0x123, txid=0x456, address_extension=0x99)
92-
isotp.Address(isotp.AddressingMode.Mixed_29bits, source_address=0x11, target_address=0x22, address_extension=0x99)
84+
import isotp
85+
86+
isotp.Address(isotp.AddressingMode.Normal_11bits, rxid=0x123, txid=0x456)
87+
isotp.Address(isotp.AddressingMode.Normal_29bits, rxid=0x123456, txid=0x789ABC)
88+
isotp.Address(isotp.AddressingMode.NormalFixed_29bits, source_address=0x11, target_address=0x22)
89+
isotp.Address(isotp.AddressingMode.Extended_11bits, rxid=0x123, txid=0x456, source_address=0x55, target_address=0xAA)
90+
isotp.Address(isotp.AddressingMode.Extended_29bits, rxid=0x123456, txid=0x789ABC, source_address=0x55, target_address=0xAA)
91+
isotp.Address(isotp.AddressingMode.Mixed_11bits, rxid=0x123, txid=0x456, address_extension=0x99)
92+
isotp.Address(isotp.AddressingMode.Mixed_29bits, source_address=0x11, target_address=0x22, address_extension=0x99)
93+
94+
# Asymmetric Addresses
95+
isotp.AsymmetricAddress(
96+
tx_addr=isotp.Address(isotp.AddressingMode.NormalFixed_29bits, target_address=ta, source_address=sa, tx_only=True),
97+
rx_addr=isotp.Address(isotp.AddressingMode.Mixed_11bits, rxid=0x123, address_extension=0x99, rx_only=True) # txid is not required
98+
)
9399
94100
------
95101

isotp/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
from isotp.errors import *
44
from isotp.can_message import CanMessage
5-
from isotp.address import AddressingMode, TargetAddressType, Address
5+
from isotp.address import AddressingMode, TargetAddressType, Address, AsymmetricAddress
66
from isotp.protocol import TransportLayerLogic, TransportLayer, CanStack, NotifierBasedCanStack
77
from isotp.tpsock import socket

0 commit comments

Comments
 (0)