Request and Response
Messages exchanged by the client and the server are represented by a Request
and a Response
.
The client sends Requests
to the server that include a service number, an optional subfunction and some data. The server processes the request and answers with a Response
that contains an echo of the service number, a response code and some additional data.
The following classes provides the necessary interface to manipulate UDS requests and responses.
Request
req = Request(service=ECUReset, subfunction=1, data=b'\x99\x88')
payload = req.get_payload()
print(payload) # b'\x11\x01\x99\x88'
req2 = Request.from_payload(payload)
print(req2) # <Request: [ECUReset] (subfunction=1) - 2 data bytes at 0x12345678>
- class udsoncan.Request(service=None, subfunction=None, suppress_positive_response=False, data=None)[source]
Represents a UDS Request.
- Parameters:
service (class) – The service for which to make the request. This parameter must be a class that extends
udsoncan.services.BaseService
subfunction (int or None) – The service subfunction. This value may be ignored if the given service does not supports subfunctions
suppress_positive_response (bool) – Indicates that the server should not send a response if the response code is positive. This parameter has effect only when the given service supports subfunctions
data (bytes) – The service data appended after service ID and payload
- Request.get_payload(suppress_positive_response=None)[source]
Generates a payload to be given to the underlying protocol. This method is meant to be used by a UDS client
- Returns:
A payload to be sent through the underlying protocol
- Return type:
bytes
- Parameters:
suppress_positive_response (bool | None) –
Response
response = Response(service=ECUReset, code=Response.Code.PositiveResponse, data=b'\x11\x22')
payload = response.get_payload()
print(payload) # b'\x51\x11\x22'
response2 = Response.from_payload(payload)
print(response2) # <PositiveResponse: [ECUReset] - 2 data bytes at 0x7f9367e619b0>
- class udsoncan.Response(service=None, code=None, data=None)[source]
Represents a server Response to a client Request
- Parameters:
service (class) – The service implied by this response.
code (int) – The response code
data (bytes) – The response data encoded after the service and response code
- valid
(boolean) True if the response content is valid. Only
invalid_reason
is guaranteed to have a meaningful value if this value is False
- invalid_reason
(string) String explaining why the response is invalid.
- positive
(boolean) True if the response code is 0 (PositiveResponse), False otherwise
- unexpected
(boolean) Indicates that the response was unexpected. Set by an external source such as the Client object
- code
(int) The response code.
- code_name
(string) The response code name.
- data
(bytes) The response data. All the payload content, except the service number and the response code
- service_data
(object) The content of
data
interpreted by a service; can be any type of content.
- original_payload
(bytes) When the response is built with Response.from_payload, this property contains a copy of the payload used. None otherwise.
- original_request
(Request) Optional reference to the request object that generated this response.
- Response.get_payload()[source]
Generates a payload to be given to the underlying protocol. This method is meant to be used by a UDS server
- Returns:
A payload to be sent through the underlying protocol
- Return type:
bytes
- classmethod Response.from_payload(payload)[source]
Creates a
Response
object from a payload coming from the underlying protocol. This method is meant to be used by a UDS client
Response Codes
- Response.Code
alias of
ResponseCode