uds.client
Implementation for UDS Client Simulation.
Classes
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, p3_client_physical=DEFAULT_P3_CLIENT, p3_client_functional=DEFAULT_P3_CLIENT, 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.
p3_client_physical (uds.utilities.TimeMillisecondsAlias) – Value of P3Client_Phys time parameter.
p3_client_functional (uds.utilities.TimeMillisecondsAlias) – Value of P3Client_Func time parameter.
p6_client_timeout (uds.utilities.TimeMillisecondsAlias) – Timeout value for P6Client parameter.
p6_ext_client_timeout (uds.utilities.TimeMillisecondsAlias) – Timeout value for P6*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_P2_EXT_CLIENT_TIMEOUT: uds.utilities.TimeMillisecondsAlias = 5050
Default value of P2*Client timeout.
- DEFAULT_P3_CLIENT: uds.utilities.TimeMillisecondsAlias = 100
Default value of P3Client time parameters.
- DEFAULT_P6_CLIENT_TIMEOUT: uds.utilities.TimeMillisecondsAlias = 10000
Default value of P6Client 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 = 10
Default value of receiving task cycle.
- tester_present_storage_size = 5
Tester Present records number to store.
- __p2_client_timeout = 100
- __p2_ext_client_timeout = 5050
- __p3_client_physical = 100
- __p3_client_functional = 100
- __p6_client_timeout = 10000
- __p6_ext_client_timeout = 50000
- __s3_client = 2000
- 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 p3_client_physical: uds.utilities.TimeMillisecondsAlias
Get value of P3Client_Phys parameter.
- Return type:
uds.utilities.TimeMillisecondsAlias
- property p3_client_functional: uds.utilities.TimeMillisecondsAlias
Get value of P3Client_Func 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
- __tester_present_task_event: threading.Event
- __tester_present_thread: threading.Thread | None = None
- __background_receiving_task_event: threading.Event
- __break_in_background_receiving_event: threading.Event
- __background_receiving_thread: threading.Thread | None = None
- __send_and_receive_not_in_progress_event: threading.Event
- __receiving_not_in_progress_event: threading.Event
- __transmission_not_in_progress_event: threading.Event
- __receiving_lock: threading.Lock
- __transmission_lock: threading.Lock
- __physical_transmission_lock: threading.Lock
- __functional_transmission_lock: threading.Lock
- __response_queue: queue.Queue[uds.message.UdsMessageRecord]
- __last_tester_present_requests: List[uds.message.UdsMessageRecord] = []
- 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 last_sent_tester_present_requests: Tuple[uds.message.UdsMessageRecord, Ellipsis]
Get records with the last few request with Tester Present messages.
- Return type:
Tuple[uds.message.UdsMessageRecord, Ellipsis]
- property last_sent_request: uds.message.UdsMessageRecord | None
Get record with the last request message sent.
- Return type:
Optional[uds.message.UdsMessageRecord]
- property last_received_response: uds.message.UdsMessageRecord | None
Get record with the last response message sent.
Warning
Only the final response for the request messages can be found here. No Negative Responses with Response Pending NRC (0x78), neither cyclic responses (e.g. following ResponseOnEvent or ReadDataByPeriodicIdentifier responses).
- Return type:
Optional[uds.message.UdsMessageRecord]
- property is_background_receiving: bool
Get flag whether background receiving thread is running.
- Return type:
- property is_tester_present_sent: bool
Get flag whether Tester Present thread is running periodic sending.
- Return type:
- property is_ready_for_physical_transmission: bool
Get flag whether Client is ready for physically addressed request message transmission.
- Returns:
True if no message is currently transmitted or received and the last physically addressed request was either received or timed-out (P2, P3 or P6), False otherwise.
- Return type:
- property is_ready_for_functional_transmission: bool
Get flag whether Client is ready for functionally addressed request message transmission.
- Returns:
True if no message is currently transmitted and P3Client_Func timeout was exceeded for the last functionally addressed request.
- Return type:
- __update_p2_client_measured(value)
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)
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)
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)
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
- __receiving_task(cycle)
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_request)
Schedule a single Tester Present message transmission for a cyclic sending.
- Parameters:
tester_present_request (uds.message.UdsMessage) – Tester Present request message to send.
- Return type:
None
- _update_last_response(response_record)[source]
Update the last response messages received by the Client.
- Parameters:
response_record (uds.message.UdsMessageRecord) – Recently received response record.
- 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
- _send_request(request)[source]
Send UDS Request Message in a threadsafe way.
- Parameters:
request (uds.message.UdsMessage) – Request message to send.
- Returns:
Record of the request message that was sent.
- Return type:
uds.message.UdsMessageRecord
- _receive_response(start_timeout, end_timeout)[source]
Receive UDS response message to previously sent request.
- Parameters:
start_timeout (uds.utilities.TimeMillisecondsAlias) – Maximal time (in milliseconds) to wait for the start of the message reception.
end_timeout (uds.utilities.TimeMillisecondsAlias) – Maximal time (in milliseconds) to wait for the end of the message reception.
- Returns:
Record with response message received to the last UDS request message sent.
- Return type:
uds.message.UdsMessageRecord
- _receive_initial_response(request_record)[source]
Receive the first UDS response to a request message.
- Parameters:
request_record (uds.message.UdsMessageRecord) – Request message to which response is collected.
- Raises:
TimeoutError – Either P2Client or P6Client timeout was exceeded.
- Returns:
Received UDS Response Message. None if legitimately (either Functionally addressed request or with SPRMIB set) no response was received.
- Return type:
Optional[uds.message.UdsMessageRecord]
- _receive_following_response(request_record, previous_response_record)[source]
Receive the following (not the first one) UDS response to a request message.
- Parameters:
request_record (uds.message.UdsMessageRecord) – Request message to which response is collected.
previous_response_record (uds.message.UdsMessageRecord) – Record of the proceeding UDS response.
- Raises:
TimeoutError – Either P2*Client or P6*Client timeout was exceeded.
- Returns:
Received UDS Response Message.
- Return type:
uds.message.UdsMessageRecord
- static is_response_pending_message(response_message, request_sid)[source]
Check if provided UDS message is Response Pending Message to a diagnostic service of given SID.
- Parameters:
response_message (Union[uds.message.UdsMessage, uds.message.UdsMessageRecord]) – UDS Message to check.
request_sid (uds.message.RequestSID) – SID value of the proceeding UDS request message.
- Raises:
TypeError – Provided value is neither instance of UdsMessage nor UdsMessageRecord class.
- Returns:
True if provided UDS message is a Negative Response Message (with Response Pending NRC) to a diagnostic service of given SID, False otherwise.
- Return type:
- is_response_to_request(response_message, request_message)[source]
Check if provided UDS message is a response message to a diagnostic service of given SID.
- Parameters:
response_message (Union[uds.message.UdsMessage, uds.message.UdsMessageRecord]) – UDS Message to check.
request_message (Union[uds.message.UdsMessage, uds.message.UdsMessageRecord]) – UDS Request Message.
- Raises:
TypeError – Provided value is neither instance of UdsMessage nor UdsMessageRecord class.
- Returns:
True if provided UDS message is a response message to a diagnostic service of given SID, False otherwise.
- Return type:
- wait_till_ready_for_physical_transmission()[source]
Wait till the client is ready to transmit physically addressed request message.
- Return type:
None
- wait_till_ready_for_functional_transmission()[source]
Wait till the client is ready to transmit functionally addressed request message.
- Return type:
None
- wait_till_ready_for_transmission(request)[source]
Wait till the client is ready for transmitting given request message.
- Parameters:
request (uds.message.UdsMessage) – Request message to send.
- Return type:
None
- 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_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
- start_background_receiving(cycle=DEFAULT_RECEIVING_TASK_CYCLE)[source]
Start background receiving task.
- ..note:: All response messages sent to this Client while receiving is active,
will be collected and accessible via
get_response()andget_response_no_wait()methods.
- Parameters:
cycle (uds.utilities.TimeMillisecondsAlias)
- 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]]