Client

This section provides usage examples for Client implementation.

Sending Requests and Receiving Responses

Example of sending a single request message and collecting all responses until receiving the final one.

"""Send a request and collect all responses."""

from uds.addressing import AddressingType
from uds.client import Client
from uds.message import UdsMessage
from uds.transport_interface import AbstractTransportInterface


def main():
    # configure your own Transport Interface
    # https://uds.readthedocs.io/en/stable/pages/user_guide/quickstart.html#create-transport-interface
    transport_interface: AbstractTransportInterface = ...  # TODO: provide your implementation here

    # configure client
    # https://uds.readthedocs.io/en/stable/pages/user_guide/client.html#configuration
    client = Client(transport_interface=transport_interface)

    # define an example request message
    request = UdsMessage(payload=[0x14, 0xFF, 0xFF, 0xFF],
                         addressing_type=AddressingType.PHYSICAL)

    # send the request and collect all responses
    request_record, responses_records = client.send_request_receive_responses(request)

    # present sent message
    print(f"Sent request: {request_record}")

    # present received messages
    if responses_records:
        for i, response_record in enumerate(responses_records, start=1):
            print(f"Response #{i}: {response_record}")
    else:
        print("No response message received.")


if __name__ == "__main__":
    main()

Managing Tester Present

Example of periodic TesterPresent messages sending.

"""Start and stop periodic Tester Present sending."""

from uds.addressing import AddressingType
from uds.client import Client
from uds.transport_interface import AbstractTransportInterface


def main():
    # configure your own Transport Interface
    # https://uds.readthedocs.io/en/stable/pages/user_guide/quickstart.html#create-transport-interface
    transport_interface: AbstractTransportInterface = ...  # TODO: provide your implementation here

    # configure the client
    # https://uds.readthedocs.io/en/stable/pages/user_guide/client.html#configuration
    client = Client(transport_interface=transport_interface,
                    s3_client=1000)  # set 1000ms as period for Tester Present sending
    client.tester_present_storage_size = 10  # adjust number of records stored if needed

    # start periodic Tester Present sending
    client.start_tester_present(addressing_type=AddressingType.PHYSICAL,  # addressing type to use
                                sprmib=False)  # disable Suppress Positive Response Message Indication Bit

    # TODO: perform some action with tester present cyclically sent

    # stop periodic Tester Present sending
    client.stop_tester_present()

    # access records of Tester Present request messages
    print(client.last_sent_tester_present_requests)


if __name__ == "__main__":
    main()

Using Background Receiving

Example of collecting response messages without sending a request.

"""Start and stop receiving response messages in the background."""

from uds.client import Client
from uds.transport_interface import AbstractTransportInterface


def main():
    # configure your own Transport Interface
    # https://uds.readthedocs.io/en/stable/pages/user_guide/quickstart.html#create-transport-interface
    transport_interface: AbstractTransportInterface = ...  # TODO: provide your implementation here

    # configure the client
    # https://uds.readthedocs.io/en/stable/pages/user_guide/client.html#configuration
    client = Client(transport_interface=transport_interface)

    # clear queue with response messages
    client.clear_response_queue()

    # start collecting all response messages sent to the client
    client.start_background_receiving()

    # try to get a response immediately
    response_message_record = client.get_response_no_wait()
    if response_message_record is None:
        print("No response received so far.")
    else:
        print("Received response:", response_message_record)

    # wait for a response message
    response_message_record = client.get_response(timeout=1000)  # wait up to 1000 ms for a response
    if response_message_record is None:
        print("No response received within timeout.")
    else:
        print("Received response:", response_message_record)

    # stop collecting response messages
    client.stop_background_receiving()


if __name__ == "__main__":
    main()