Each service is represented by a class that extends the BaseService
class. They all implement 2 methods : make_request
and interpret_response
.
make_request
will return aRequest
instance ready to be sent to theConnection
interpret_response
will parse thedata
property inside aResponse
instance and populate another property namedservice_data
. Thisservice_data
property will be an instance of theResponseData
class that is nested within the service class.
Crafting a request
req = SomeService.make_request(param1, param2)
my_connection.send(req.get_payload())
Parsing a response
payload = my_connection.wait_frame(timeout=1)
response = Response.from_payload(payload)
print('Raw data : %s' % response.data)
SomeService.interpret_response(response, param1, param2)
print('Interpreted data : field1 : %s, field2 : %s' % (response.service_data.field1, response.service_data.field2))
udsoncan.services.AccessTimingParameter.make_request
udsoncan.services.AccessTimingParameter.interpret_response
udsoncan.services::AccessTimingParameter.ResponseData
udsoncan.services::AccessTimingParameter.AccessType
udsoncan.services.ClearDiagnosticInformation.make_request
udsoncan.services.ClearDiagnosticInformation.interpret_response
Note
This service have empty response data
Note
This service does not have subfunctions
udsoncan.services.CommunicationControl.make_request
udsoncan.services.CommunicationControl.interpret_response
udsoncan.services::CommunicationControl.ResponseData
udsoncan.services::CommunicationControl.ControlType
udsoncan.services.ControlDTCSetting.make_request
udsoncan.services.ControlDTCSetting.interpret_response
udsoncan.services::ControlDTCSetting.ResponseData
udsoncan.services::ControlDTCSetting.SettingType
udsoncan.services.DiagnosticSessionControl.make_request
udsoncan.services.DiagnosticSessionControl.interpret_response
udsoncan.services::DiagnosticSessionControl.ResponseData
udsoncan.services::DiagnosticSessionControl.Session
udsoncan.services.ECUReset.make_request
udsoncan.services.ECUReset.interpret_response
udsoncan.services::ECUReset.ResponseData
udsoncan.services::ECUReset.ResetType
udsoncan.services.InputOutputControlByIdentifier.make_request
udsoncan.services.InputOutputControlByIdentifier.interpret_response
udsoncan.services::InputOutputControlByIdentifier.ResponseData
Note
This service does not have subfunctions
Note
Example available here<iocontrol_composite_did>
udsoncan.services.LinkControl.make_request
udsoncan.services.LinkControl.interpret_response
udsoncan.services::LinkControl.ResponseData
udsoncan.services::LinkControl.ControlType
udsoncan.services.ReadDataByIdentifier.make_request
udsoncan.services.ReadDataByIdentifier.interpret_response
udsoncan.services::ReadDataByIdentifier.ResponseData
Note
This service does not have subfunctions
Example of DidConfig
didconfig = {
0x1111 : '<H', # Strings are processed by struct.unpack
0x2222 : MyCustomDidCodec, # Inherits the udsoncan.DidCodec,
0x3333 : MyCustomDidCodec(param1='hello') # Instance can also be provided
0x4444 : dict(key1='val1', key2='val2', codec=MyCustomDidCodec} # If dict is given, a key named "codec" will be searched for
}
udsoncan.services.RequestFileTransfer.make_request
udsoncan.services.RequestFileTransfer.interpret_response
udsoncan.services::RequestFileTransfer.ResponseData
Note
This service does not have subfunctions
udsoncan.services.ReadDTCInformation.make_request
udsoncan.services.ReadDTCInformation.interpret_response
udsoncan.services::ReadDTCInformation.ResponseData
udsoncan.services::ReadDTCInformation.Subfunction
subfunction | status_mask | severity_mask | dtc | snapshot_record_number | extended_data_record_number |
---|---|---|---|---|---|
reportNumberOfDTCByStatusMask | Yes | ||||
reportDTCByStatusMask | Yes | ||||
reportDTCSnapshotIdentification | |||||
reportDTCSnapshotRecordByDTCNumber | Yes | Yes | |||
reportDTCSnapshotRecordByRecordNumber | Yes | ||||
reportDTCExtendedDataRecordByDTCNumber | Yes | Yes | |||
reportNumberOfDTCBySeverityMaskRecord | Yes | Yes | |||
reportDTCBySeverityMaskRecord | Yes | Yes | |||
reportSeverityInformationOfDTC | Yes | Yes | |||
reportSupportedDTCs | |||||
reportFirstTestFailedDTC | |||||
reportFirstConfirmedDTC | |||||
reportMostRecentTestFailedDTC | |||||
reportMostRecentConfirmedDTC | |||||
reportMirrorMemoryDTCByStatusMask | Yes | ||||
reportMirrorMemoryDTCExtendedDataRecordByDTCNumber | Yes | Yes | |||
reportNumberOfMirrorMemoryDTCByStatusMask | Yes | ||||
reportNumberOfEmissionsRelatedOBDDTCByStatusMask | Yes | ||||
reportEmissionsRelatedOBDDTCByStatusMask | Yes | ||||
reportDTCFaultDetectionCounter | |||||
reportDTCWithPermanentStatus |
subfunction | extended_data_size | tolerate_zero_padding | ignore_all_zero_dtc | dtc_snapshot_did_size | didconfig |
---|---|---|---|---|---|
reportNumberOfDTCByStatusMask | |||||
reportDTCByStatusMask | Yes | Yes | |||
reportDTCSnapshotIdentification | Yes | Yes | |||
reportDTCSnapshotRecordByDTCNumber | Yes | Yes | Yes | ||
reportDTCSnapshotRecordByRecordNumber | Yes | Yes | Yes | ||
reportDTCExtendedDataRecordByDTCNumber | Yes | Yes | |||
reportNumberOfDTCBySeverityMaskRecord | |||||
reportDTCBySeverityMaskRecord | Yes | Yes | |||
reportSeverityInformationOfDTC | Yes | Yes | |||
reportSupportedDTCs | Yes | Yes | |||
reportFirstTestFailedDTC | Yes | Yes | |||
reportFirstConfirmedDTC | Yes | Yes | |||
reportMostRecentTestFailedDTC | Yes | Yes | |||
reportMostRecentConfirmedDTC | Yes | Yes | |||
reportMirrorMemoryDTCByStatusMask | Yes | Yes | |||
reportMirrorMemoryDTCExtendedDataRecordByDTCNumber | Yes | Yes | |||
reportNumberOfMirrorMemoryDTCByStatusMask | |||||
reportNumberOfEmissionsRelatedOBDDTCByStatusMask | |||||
reportEmissionsRelatedOBDDTCByStatusMask | Yes | Yes | |||
reportDTCFaultDetectionCounter | Yes | Yes | |||
reportDTCWithPermanentStatus | Yes | Yes |
udsoncan.services.ReadMemoryByAddress.make_request
udsoncan.services.ReadMemoryByAddress.interpret_response
udsoncan.services::ReadMemoryByAddress.ResponseData
Note
This service does not have subfunctions
udsoncan.services.RequestDownload.make_request
udsoncan.services.RequestDownload.interpret_response
udsoncan.services::RequestDownload.ResponseData
Note
This service does not have subfunctions
udsoncan.services.RequestTransferExit.make_request
udsoncan.services.RequestTransferExit.interpret_response
udsoncan.services::RequestTransferExit.ResponseData
Note
This service does not have subfunctions
udsoncan.services.RequestUpload.make_request
udsoncan.services.RequestUpload.interpret_response
udsoncan.services::RequestUpload.ResponseData
Note
This service does not have subfunctions
udsoncan.services.RoutineControl.make_request
udsoncan.services.RoutineControl.interpret_response
udsoncan.services::RoutineControl.ResponseData
udsoncan.services::RoutineControl.ControlType
udsoncan.services.SecurityAccess.make_request
udsoncan.services.SecurityAccess.interpret_response
udsoncan.services::SecurityAccess.ResponseData
udsoncan.services::SecurityAccess.Mode
Note
The level
that acts as the subfunction can range from 1 to 0x7E. The LSB is a flag indicating the type of request. When the LSB is set to 1, the request is a RequestSeed message, when it is set to 0, the request is a SendKey message. This leaves 6 effective bits allowing 63 security levels.
Example :
- 01: RequestSeed, 02 SendKey that goes with 01.
- 03: RequestSeed, 04 SendKey that goes with 03.
- etc
udsoncan.services.TesterPresent.make_request
udsoncan.services.TesterPresent.interpret_response
udsoncan.services::TesterPresent.ResponseData
Note
TesterPresent subfunction is always 0
udsoncan.services.TransferData.make_request
udsoncan.services.TransferData.interpret_response
udsoncan.services::TransferData.ResponseData
Note
This service does not have subfunctions
udsoncan.services.WriteDataByIdentifier.make_request
udsoncan.services.WriteDataByIdentifier.interpret_response
udsoncan.services::WriteDataByIdentifier.ResponseData
Note
This service does not have subfunctions
udsoncan.services.WriteMemoryByAddress.make_request
udsoncan.services.WriteMemoryByAddress.interpret_response
udsoncan.services::WriteMemoryByAddress.ResponseData
Note
This service does not have subfunctions
udsoncan.services.DynamicallyDefineDataIdentifier.make_request
udsoncan.services.DynamicallyDefineDataIdentifier.interpret_response
udsoncan.services::DynamicallyDefineDataIdentifier.ResponseData
Warning
Not implemented
Warning
Not implemented
Warning
Not implemented
Warning
Not implemented