You signed in with another tab or window.Reload to refresh your session.You signed out in another tab or window.Reload to refresh your session.You switched accounts on another tab or window.Reload to refresh your session.Dismiss alert
iso14229 is an implementation of UDS (ISO14229) targeting embedded systems. It is tested withisotp-c as well aslinux kernel ISO15765-2 (ISO-TP) transport layer implementations.
API status: Major version zero (0.y.z)(not yet stable). Anything MAY change at any time.
Using this library
Downloadiso14229.zip from thereleases page, copyiso14229.c andiso14229.h into your project.
Select a transport layer using the table below and enable it by defining thecopt in your project's build configuration.
Transport Layer
copt
Suitable for
ISO-TP sockets
-DUDS_TP_ISOTP_SOCK
Linux socketcan
isotp-c on socketcan
-DUDS_TP_ISOTP_C_SOCKETCAN
Linux socketcan
isotp-c (bring your own CAN)
-DUDS_TP_ISOTP_C
embedded systems, Windows, Linux non-socketcan, ...
The following features are configured with preprocessor defines:
Define
Description
Valid values
-DUDS_TP_ISOTP_C
build the isotp-c transport layer (recommended for bare-metal systems)
defined or not
-DUDS_TP_ISOTP_SOCK
build the isotp socket transport layer (recommended for linux)
defined or not
-DUDS_TP_ISOTP_C_SOCKETCAN
build the isotp-c transport layer with socketcan support (linux-only)
defined or not
-DUDS_LOG_LEVEL=...
Sets the logging level. Internal log messages are useful for bringup and unit tests. This defaults toUDS_LOG_LEVEL=UDS_LOG_NONE which completely disables logging, ensuring that no logging-related code goes in to the binary.
The server can't/won't transition to the specified diagnostic level at this time
UDS_EVT_ECUReset (0x11)
Arguments
typedefstruct {constuint8_ttype;/**< reset type requested by client */uint8_tpowerDownTime;/**< Optional response: notify client of time until shutdown (0-254) 255 indicates that a time is not available. */}UDSECUResetArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request to reset ECU accepted.
0x12
UDS_NRC_SubFunctionNotSupported
The server doesn't support the specified type of ECU reset
0x22
UDS_NRC_ConditionsNotCorrect
The server can't reset now
0x33
UDS_NRC_SecurityAccessDenied
The current level of security access doesn't permit this type of ECU reset
UDS_EVT_ReadDataByIdent (0x22)
Arguments
typedefstruct {constuint16_tdataId;/*! data identifier *//*! function for copying to the server send buffer. Returns `UDS_PositiveResponse` on success and `UDS_NRC_ResponseTooLong` if the length of the data to be copied exceeds that of the server send buffer */constuint8_t (*copy)(UDSServer_t*srv,constvoid*src,uint16_tcount); }UDSRDBIArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request to read data accepted (be sure to callcopy(...))
0x14
UDS_NRC_ResponseTooLong
The total length of the response message exceeds the transport buffer size
0x31
UDS_NRC_RequestOutOfRange
The requested data identifer isn't supported
0x33
UDS_NRC_SecurityAccessDenied
The current level of security access doesn't permit reading the requested data identifier
typedefstruct {constuint8_tlevel;/*! requested security level */constuint8_t*constdataRecord;/*! pointer to request data */constuint16_tlen;/*! size of request data *//*! function for copying to the server send buffer. Returns `UDS_PositiveResponse` on success and `UDS_NRC_ResponseTooLong` if the length of the data to be copied exceeds that of the server send buffer */uint8_t (*copySeed)(UDSServer_t*srv,constvoid*src,uint16_tlen);}UDSSecAccessRequestSeedArgs_t;typedefstruct {constuint8_tlevel;/*! security level to be validated */constuint8_t*constkey;/*! key sent by client */constuint16_tlen;/*! length of key */}UDSSecAccessValidateKeyArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request accepted
0x12
UDS_NRC_SubFunctionNotSupported
The requested security level is not supported
0x22
UDS_NRC_ConditionsNotCorrect
The server can't handle the request right now
0x31
UDS_NRC_RequestOutOfRange
ThedataRecord contains invalid data
0x35
UDS_NRC_InvalidKey
The key doesn't match
0x36
UDS_NRC_ExceededNumberOfAttempts
False attempt limit reached
0x37
UDS_NRC_RequiredTimeDelayNotExpired
RequestSeed request received and delay timer is still active
The server can't enable/disable the selected communication type now
0x31
UDS_NRC_RequestOutOfRange
The requested control type or communication type is erroneous
UDS_EVT_WriteDataByIdent (0x2E)
Arguments
typedefstruct {constuint16_tdataId;/*! WDBI Data Identifier */constuint8_t*constdata;/*! pointer to data */constuint16_tlen;/*! length of data */}UDSWDBIArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request to write data accepted
0x22
UDS_NRC_ConditionsNotCorrect
The server can't write this data now
0x31
UDS_NRC_RequestOutOfRange
The requested data identifer isn't supported or the data is invalid
0x33
UDS_NRC_SecurityAccessDenied
The current level of security access doesn't permit writing to the requested data identifier
0x72
UDS_NRC_GeneralProgrammingFailure
Memory write failed
UDS_EVT_RoutineCtrl (0x31)
Arguments
typedefstruct {constuint8_tctrlType;/*! routineControlType */constuint16_tid;/*! routineIdentifier */constuint8_t*optionRecord;/*! optional data */constuint16_tlen;/*! length of optional data *//*! function for copying to the server send buffer. Returns `UDS_PositiveResponse` on success and `UDS_NRC_ResponseTooLong` if the length of the data to be copied exceeds that of the server send buffer */uint8_t (*copyStatusRecord)(UDSServer_t*srv,constvoid*src,uint16_tlen);}UDSRoutineCtrlArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request accepted
0x22
UDS_NRC_ConditionsNotCorrect
The server can't perform this operation now
0x24
UDS_NRC_RequestSequenceError
Stop requested but routine hasn't started. Start requested but routine has already started (optional). Results are not available becuase routine has never started.
0x31
UDS_NRC_RequestOutOfRange
The requested routine identifer isn't supported or theoptionRecord is invalid
0x33
UDS_NRC_SecurityAccessDenied
The current level of security access doesn't permit this operation
typedefstruct {constvoid*addr;/*! requested address */constsize_tsize;/*! requested download size */constuint8_tdataFormatIdentifier;/*! optional specifier for format of data */uint16_tmaxNumberOfBlockLength;/*! response: inform client how many data bytes to send in each `TransferData` request */}UDSRequestDownloadArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request accepted
0x22
UDS_NRC_ConditionsNotCorrect
The server can't perform this operation now
0x31
UDS_NRC_RequestOutOfRange
dataFormatIdentifier invalid,addr orsize invalid
0x33
UDS_NRC_SecurityAccessDenied
The current level of security access doesn't permit this operation
0x34
UDS_NRC_AuthenticationRequired
Client rights insufficient
0x70
UDS_NRC_UploadDownloadNotAccepted
download cannot be accomplished due to fault
UDS_EVT_TransferData (0x36)
Arguments
typedefstruct {constuint8_t*constdata;/*! transfer data */constuint16_tlen;/*! transfer data length *//*! function for copying to the server send buffer. Returns `UDS_PositiveResponse` on success and `UDS_NRC_ResponseTooLong` if the length of the data to be copied exceeds that of the server send buffer */uint8_t (*copyResponse)(UDSServer_t*srv,constvoid*src,uint16_tlen);}UDSTransferDataArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request accepted
0x31
UDS_NRC_RequestOutOfRange
data contents invalid, length incorrect
0x72
UDS_NRC_GeneralProgrammingFailure
Memory write failed
0x92
UDS_NRC_VoltageTooHigh
Can't write flash: voltage too high
0x93
UDS_NRC_VoltageTooLow
Can't write flash: voltage too low
UDS_EVT_RequestTransferExit (0x37)
Arguments
typedefstruct {constuint8_t*constdata;/*! request data */constuint16_tlen;/*! request data length *//*! function for copying to the server send buffer. Returns `UDS_PositiveResponse` on success and `UDS_NRC_ResponseTooLong` if the length of the data to be copied exceeds that of the server send buffer */uint8_t (*copyResponse)(UDSServer_t*srv,constvoid*src,uint16_tlen);}UDSRequestTransferExitArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request accepted
0x31
UDS_NRC_RequestOutOfRange
data contents invalid, length incorrect
0x72
UDS_NRC_GeneralProgrammingFailure
finalizing the data transfer failed
UDS_SRV_EVT_RequestFileTransfer (0x38)
Arguments
typedefstruct {constuint8_tmodeOfOperation;/*! requested specifier for operation mode */constuint16_tfilePathLen;/*! request data length */constuint8_t*filePath;/*! requested file path and name */constuint8_tdataFormatIdentifier;/*! optional specifier for format of data */constsize_tfileSizeUnCompressed;/*! optional file size */constsize_tfileSizeCompressed;/*! optional file size */uint16_tmaxNumberOfBlockLength;/*! optional response: inform client how many data bytes to send in each `TransferData` request */}UDSRequestFileTransferArgs_t;
Supported Responses
Value
enum
Meaning
0x00
UDS_PositiveResponse
Request accepted
0x13
UDS_NRC_IncorrectMessageLengthOrInvalidFormat
Length of the message is wrong
0x22
UDS_NRC_ConditionsNotCorrect
Downloading or uploading data is ongoing or other conditions to be able to execute this service are not met
0x31
UDS_NRC_RequestOutOfRange
data contents invalid, length incorrect
0x33
UDS_NRC_SecurityAccessDenied
The server is secure
0x70
UDS_NRC_UploadDownloadNotAccepted
An attempt to download to a server's memory cannot be accomplished due to some fault conditions
Documentation: Client
See the examples directory
Contributing
contributions are welcome
Reporting Issues
When reporting issues, please state what you expected to happen.
cleaned up example tests, added isotp-c on socketcan to examples
addedUDS_EVT_DoScheduledReset
improve client error handling
0.5.0
usability: refactored into a single .c/.h module
usability: default transport layer configs are now built-in
API cleanup: useUDS prefix on all exported functions
API cleanup: use a single callback function for all server events
0.4.0
refactor RDBIHandler to pass a function pointer that implements safe memmove rather than requiring the user to keep valid data around for an indefinite time or risking a buffer overflow.
Prefer fixed-width. Avoid usingenum types as return types and in structures.
Transport layer is now pluggable and supports the linux kernel ISO-TP driver in addition toisotp-c. Seeexamples.
0.3.0
addediso14229ClientRunSequenceBlocking(...)
added server and client examples
simplified test flow, deleted opaque macros and switch statements
flattened client and server main structs
simplified usage by moving isotp-c initialization parameters into server/client config structs
remove redundant buffers in server
0.2.0
removed all instances of__attribute__((packed))
refactored server download functional unit API to simplify testing