uds.client

Implementation for UDS Client Simulation.

Classes

Client

Simulation for UDS Client entity.

Module Contents

class uds.client.Client(transport_interface, p2_client_timeout=DEFAULT_P2_CLIENT_TIMEOUT, p2_ext_client_timeout=DEFAULT_P2_EXT_CLIENT_TIMEOUT, p6_client_timeout=DEFAULT_P6_CLIENT_TIMEOUT, p6_ext_client_timeout=DEFAULT_P6_EXT_CLIENT_TIMEOUT, s3_client=DEFAULT_S3_CLIENT)[source]

Simulation for UDS Client entity.

Configure Client for UDS communication.

Parameters:
  • transport_interface (uds.transport_interface.AbstractTransportInterface) – Transport Interface object for managing UDS communication.

  • p2_client_timeout (uds.utilities.TimeMillisecondsAlias) – Timeout value for P2Client parameter.

  • p2_ext_client_timeout (uds.utilities.TimeMillisecondsAlias) – Timeout value for P2*Client parameter.

  • p6_client_timeout (uds.utilities.TimeMillisecondsAlias) – Timeout value for P6Client parameter.

  • p6_ext_client_timeout (uds.utilities.TimeMillisecondsAlias) – Timeout value for P*Client parameter.

  • s3_client (uds.utilities.TimeMillisecondsAlias) – Value of S3Client time parameter.

DEFAULT_P2_CLIENT_TIMEOUT: uds.utilities.TimeMillisecondsAlias = 100

Default value of P2Client timeout.

DEFAULT_P6_CLIENT_TIMEOUT: uds.utilities.TimeMillisecondsAlias = 10000

Default value of P6Client timeout.

DEFAULT_P2_EXT_CLIENT_TIMEOUT: uds.utilities.TimeMillisecondsAlias = 5050

Default value of P2*Client timeout.

DEFAULT_P6_EXT_CLIENT_TIMEOUT: uds.utilities.TimeMillisecondsAlias = 50000

Default value of P6*Client timeout.

DEFAULT_S3_CLIENT: uds.utilities.TimeMillisecondsAlias = 2000

Default value of S3Client time parameter.

DEFAULT_RECEIVING_TASK_CYCLE: uds.utilities.TimeMillisecondsAlias = 20

Default value of receiving task cycle.

__p2_client_measured: uds.utilities.TimeMillisecondsAlias | None = None
__p2_ext_client_measured: Tuple[uds.utilities.TimeMillisecondsAlias, Ellipsis] | None = None
__p6_client_measured: uds.utilities.TimeMillisecondsAlias | None = None
__p6_ext_client_measured: uds.utilities.TimeMillisecondsAlias | None = None
__response_queue: queue.SimpleQueue[uds.message.UdsMessageRecord]
__receiving_thread: threading.Thread | None = None
__receiving_stop_event: threading.Event
__receiving_break_event: threading.Event
__receiving_not_in_progress: threading.Event
__tester_present_thread: threading.Thread | None = None
__tester_present_stop_event: threading.Event
property transport_interface: uds.transport_interface.AbstractTransportInterface

Get Transport Interface used.

Return type:

uds.transport_interface.AbstractTransportInterface

property p2_client_timeout: uds.utilities.TimeMillisecondsAlias

Get timeout value for P2Client parameter.

Return type:

uds.utilities.TimeMillisecondsAlias

property p2_ext_client_timeout: uds.utilities.TimeMillisecondsAlias

Get timeout value for P2*Client parameter.

Return type:

uds.utilities.TimeMillisecondsAlias

property p6_client_timeout: uds.utilities.TimeMillisecondsAlias

Get timeout value for P6Client parameter.

Return type:

uds.utilities.TimeMillisecondsAlias

property p6_ext_client_timeout: uds.utilities.TimeMillisecondsAlias

Get timeout value for P6*Client parameter.

Return type:

uds.utilities.TimeMillisecondsAlias

property s3_client: uds.utilities.TimeMillisecondsAlias

Get value of S3Client parameter.

Return type:

uds.utilities.TimeMillisecondsAlias

__del__()[source]

Safely finish all tasks.

Return type:

None

property p2_client_measured: uds.utilities.TimeMillisecondsAlias | None

Get last measured value of P2Client parameter.

Returns:

The last measured value or None if measurement was not performed.

Return type:

Optional[uds.utilities.TimeMillisecondsAlias]

property p2_ext_client_measured: Tuple[uds.utilities.TimeMillisecondsAlias, Ellipsis] | None

Get last measured values of P2*Client parameter.

Returns:

The last measured values or None if measurement was not performed.

Return type:

Optional[Tuple[uds.utilities.TimeMillisecondsAlias, Ellipsis]]

property p6_client_measured: uds.utilities.TimeMillisecondsAlias | None

Get last measured value of P6Client parameter.

Returns:

The last measured value or None if measurement was not performed.

Return type:

Optional[uds.utilities.TimeMillisecondsAlias]

property p6_ext_client_measured: uds.utilities.TimeMillisecondsAlias | None

Get last measured value of P6*Client parameter.

Returns:

The last measured value or None if measurement was not performed.

Return type:

Optional[uds.utilities.TimeMillisecondsAlias]

property is_receiving: bool

Get flag whether receiving thread is running.

Return type:

bool

property is_tester_present_sent: bool

Get flag whether Tester Present thread is running periodic sending.

Return type:

bool

_update_p2_client_measured(value)[source]

Update measured values of P2Client parameter.

Parameters:

value (uds.utilities.TimeMillisecondsAlias) – Value to set.

Raises:
  • TypeError – Provided value is not int or float type.

  • ValueError – Provided time value must be a positive number.

Return type:

None

_update_p2_ext_client_measured(*values)[source]

Update measured values of P2*Client parameter.

Parameters:

values (uds.utilities.TimeMillisecondsAlias) – Values to set.

Raises:
  • RuntimeError – At least one P2*Client value must be provided.

  • TypeError – One of provided values is not int or float type.

  • ValueError – One of provided values is out of range.

Return type:

None

_update_p6_client_measured(value)[source]

Update measured values of P6Client parameter.

Parameters:

value (uds.utilities.TimeMillisecondsAlias) – Value to set.

Raises:
  • TypeError – Provided value is not int or float type.

  • ValueError – Provided time value must be a positive number.

Return type:

None

_update_p6_ext_client_measured(value)[source]

Update measured values of P6*Client parameter.

Parameters:

value (uds.utilities.TimeMillisecondsAlias) – Value to set.

Raises:
  • TypeError – Provided value is not int or float type.

  • ValueError – Provided time value must be a positive number.

Return type:

None

_update_measured_client_values(request_record, response_records)[source]

Update measured timing parameters on Client side (P2Client, P2*Client, P6Client and P6*Client).

Parameters:
  • request_record (uds.message.UdsMessageRecord) – Record of the last transmitted request message.

  • response_records (Sequence[uds.message.UdsMessageRecord]) – Records of received responses to provided message.

Return type:

None

_receive_response(sid, start_timeout, end_timeout)[source]

Receive UDS response message to previously sent request.

Parameters:
  • sid (uds.message.RequestSID) – SID of the last sent request message.

  • start_timeout (uds.utilities.TimeMillisecondsAlias) – Maximal time (in milliseconds) to wait.

  • end_timeout (uds.utilities.TimeMillisecondsAlias)

Returns:

Record with response message received to the last UDS request message sent. None if a timeout was reached.

Return type:

Optional[uds.message.UdsMessageRecord]

_receive_task(cycle)[source]

Schedule reception of a UDS message for a cyclic response collecting.

Parameters:

cycle (uds.utilities.TimeMillisecondsAlias) – Time (in milliseconds) used for this task cycle.

Return type:

None

_send_tester_present_task(tester_present_message)[source]

Schedule a single Tester Present message transmission for a cyclic sending.

Parameters:

tester_present_message (uds.message.UdsMessage) – Tester Present message to send.

Return type:

None

static is_response_pending_message(message, request_sid)[source]

Check if provided UDS message record contains Negative Response with Response Pending NRC.

Parameters:
  • message (Union[uds.message.UdsMessage, uds.message.UdsMessageRecord]) – UDS Message Record to check.

  • request_sid (uds.message.RequestSID) – Request SID value sent in the proceeding UDS request message.

Raises:

TypeError – Provided message value is not an instance of UdsMessageRecord class.

Returns:

True if provided UDS message record contains Negative Response with Response Pending NRC, False otherwise.

Return type:

bool

get_response(timeout=None)[source]

Wait for the first received response message.

Note

This method can be used for fetching responses messages that were not direct responses to request messages sent via send_request_receive_responses().

This includes responses to cyclically sent Tester Present. Typically used for fetching following Response on Event (RSID 0xC6) responses.

Parameters:

timeout (Optional[uds.utilities.TimeMillisecondsAlias]) – Maximal time to wait for a response message. Leave None to wait forever.

Raises:
  • TypeError – Provided value is not int or float type.

  • ValueError – Provided value is out of range.

Returns:

Record with the first response message received or None if no message was received.

Return type:

Optional[uds.message.UdsMessageRecord]

get_response_no_wait()[source]

Get the first received response message, but do not wait for its arrival.

Note

This method can be used for fetching responses messages that were not direct responses to request messages sent via send_request_receive_responses().

This includes responses to cyclically sent Tester Present. Typically used for fetching following Response on Event (RSID 0xC6) responses.

Returns:

Record with the first response message received or None if no message was received.

Return type:

Optional[uds.message.UdsMessageRecord]

clear_response_queue()[source]

Clear all response messages that are currently stored in the queue.

Return type:

None

start_receiving(cycle=DEFAULT_RECEIVING_TASK_CYCLE)[source]

Start receiving task in the background.

All response messages sent to this Client while receiving is active, will be collected and accessible via get_response() and get_response_no_wait() methods.

Warning

Cycle value would be overwritten with default value if request message is sent while receiving.

Parameters:

cycle (uds.utilities.TimeMillisecondsAlias)

Return type:

None

stop_receiving()[source]

Stop receiving task.

Return type:

None

start_tester_present(addressing_type=AddressingType.FUNCTIONAL, sprmib=True)[source]

Start sending Tester Present cyclically.

Parameters:
  • addressing_type (uds.addressing.AddressingType) – Addressing Type to use for cyclical messages.

  • sprmib (bool) – Whether to use Suppress Positive Response Message Indication Bit.

Return type:

None

stop_tester_present()[source]

Stop sending Tester Present cyclically.

Return type:

None

send_request_receive_responses(request)[source]

Send diagnostic request and receive all responses (till the final one).

Parameters:

request (uds.message.UdsMessage) – Request message to send.

Raises:
  • TypeError – Provided value is not an instance of UdsMessage class.

  • TimeoutError – Response was initiated with Response Pending message, but never finalized.

Returns:

Tuple with two elements:

  • record of diagnostic request message that was sent

  • tuple with diagnostic response messages that were received in the response

Return type:

Tuple[uds.message.UdsMessageRecord, Tuple[uds.message.UdsMessageRecord, Ellipsis]]