File syn_uds.c¶
Go to the source code of this file
ISO 14229 Unified Diagnostic Services (UDS) Server Implementation.
#include "syn_uds.h"#include "../crypto/syn_aes.h"#include "../util/syn_pack.h"#include <string.h>
Public Functions¶
| Type | Name |
|---|---|
| void | syn_uds_clear_pending_reset (SYN_UDS_Server * server) Clear pending ECU reset flag after executing reset or transmitting response. |
| bool | syn_uds_disable_aes128_security (SYN_UDS_Server * server) Disable AES-128 security mode and revert to standard XOR security key calculation. |
| bool | syn_uds_dtc_get_status (SYN_UDS_Server * server, uint32_t dtc, uint8_t * out_status) Get current 8-bit status byte for a registered DTC. |
| bool | syn_uds_dtc_report_test_result (SYN_UDS_Server * server, uint32_t dtc, bool failed) Report diagnostic test result for a registered DTC according to ISO 14229-1 state transitions. |
| bool | syn_uds_dtc_start_operation_cycle (SYN_UDS_Server * server) Advance server state to a new operation cycle. Clears testFailedThisOperationCycle and sets testNotCompletedThisOperationCycle for all registered DTCs. |
| bool | syn_uds_enable_aes128_security (SYN_UDS_Server * server, const uint8_t key) Enable AES-128 algorithm for UDS SecurityAccess (0x27) seed/key unlock. |
| uint8_t | syn_uds_get_pending_reset (const SYN_UDS_Server * server) Get pending ECU reset sub-function requested by 0x11 service. |
| uint8_t | syn_uds_get_security_level (const SYN_UDS_Server * server) Get currently unlocked security level (0 = locked, 1 = level 1, 2 = level 2...). |
| bool | syn_uds_init (SYN_UDS_Server * server) Initialize UDS Server context. |
| bool | syn_uds_is_sid_functional_supported (uint8_t sid) Check if Service Identifier (SID) supports Functional Addressing (1:N Broadcast). |
| bool | syn_uds_process_request (SYN_UDS_Server * server, const uint8_t * req, uint16_t req_len, uint8_t * resp_buf, uint16_t max_resp_len, uint16_t * resp_len, SYN_UDS_AddrMode addr_mode) Process incoming UDS request diagnostic payload and format response. |
| bool | syn_uds_register_access_timing (SYN_UDS_Server * server, SYN_UDS_AccessTimingHandler handler, void * ctx) Register AccessTimingParameter (0x83) callback handler. |
| bool | syn_uds_register_auth_handler (SYN_UDS_Server * server, SYN_UDS_AuthHandler handler, void * ctx) Register Authentication (0x29) handler. |
| bool | syn_uds_register_comm_control (SYN_UDS_Server * server, SYN_UDS_CommControlHandler handler, void * ctx) Register CommunicationControl (0x28) callback handler. |
| bool | syn_uds_register_did (SYN_UDS_Server * server, uint16_t did, uint8_t * data, uint16_t len, bool writable) Register Data Identifier (DID) mapping in UDS Server table. |
| bool | syn_uds_register_did_ext (SYN_UDS_Server * server, uint16_t did, uint8_t * data, uint16_t len, bool writable, uint8_t session_mask, uint16_t security_mask) Register Data Identifier (DID) with custom session & security permission bitmask. |
| bool | syn_uds_register_dtc (SYN_UDS_Server * server, uint32_t dtc, uint8_t status, uint8_t severity) Register Diagnostic Trouble Code (DTC) in UDS Server table. |
| bool | syn_uds_register_dtc_handler (SYN_UDS_Server * server, SYN_UDS_DTCHandler handler, void * ctx) Register ReadDTCInformation (0x19) callback handler. |
| bool | syn_uds_register_dynamic_did_handler (SYN_UDS_Server * server, SYN_UDS_DynamicDIDHandler handler, void * ctx) Register DynamicallyDefineDataIdentifier (0x2C) callback handler. |
| bool | syn_uds_register_file_transfer (SYN_UDS_Server * server, SYN_UDS_FileTransferHandler handler, void * ctx) Register RequestFileTransfer (0x38) handler. |
| bool | syn_uds_register_io_control (SYN_UDS_Server * server, SYN_UDS_IOControlHandler handler, void * ctx) Register InputOutputControlByIdentifier (0x2F) callback handler. |
| bool | syn_uds_register_link_control (SYN_UDS_Server * server, SYN_UDS_LinkControlHandler handler, void * ctx) Register LinkControl (0x87) callback handler. |
| bool | syn_uds_register_memory_handler (SYN_UDS_Server * server, SYN_UDS_MemoryHandler handler, void * ctx) Register ReadMemoryByAddress (0x23) and WriteMemoryByAddress (0x3D) handler. |
| bool | syn_uds_register_periodic_data_handler (SYN_UDS_Server * server, SYN_UDS_PeriodicDataHandler handler, void * ctx) Register ReadDataByPeriodicIdentifier (0x2A) callback handler. |
| bool | syn_uds_register_roe_handler (SYN_UDS_Server * server, SYN_UDS_ResponseOnEventHandler handler, void * ctx) Register ResponseOnEvent (0x86) callback handler. |
| bool | syn_uds_register_routine_control (SYN_UDS_Server * server, SYN_UDS_RoutineControlHandler handler, void * ctx) Register RoutineControl (0x31) callback handler. |
| bool | syn_uds_register_scaling_data_handler (SYN_UDS_Server * server, SYN_UDS_ScalingDataHandler handler, void * ctx) Register ReadScalingDataByIdentifier (0x24) callback handler. |
| bool | syn_uds_register_secured_data (SYN_UDS_Server * server, SYN_UDS_SecuredDataHandler handler, void * ctx) Register SecuredDataTransmission (0x84) callback handler. |
| void | syn_uds_set_reset_handler (SYN_UDS_Server * server, SYN_UDS_ResetHandler cb, void * ctx) Register deferred post-TX ECU reset handler callback. |
| void | syn_uds_set_reset_wait_ms (SYN_UDS_Server * server, uint16_t wait_ms) Set post-TX ECU reset delay window duration in milliseconds. |
| bool | syn_uds_set_security_seed_bytes (SYN_UDS_Server * server, const uint8_t seed) Set custom 16-byte seed for AES-128 SecurityAccess. |
| bool | syn_uds_set_service_security_mask (SYN_UDS_Server * server, uint8_t sid, uint16_t security_mask) Configure required security level mask for a specific Service Identifier. |
| bool | syn_uds_set_service_session_mask (SYN_UDS_Server * server, uint8_t sid, uint8_t session_mask) Configure allowed diagnostic session mask for a specific Service Identifier. |
| void | syn_uds_set_session_transition_handler (SYN_UDS_Server * server, SYN_UDS_SessionTransitionHandler cb, void * ctx) Register optional session transition policy callback. |
| void | syn_uds_tick (SYN_UDS_Server * server, uint32_t dt_ms) Advance periodic S3 server timer by dt_ms milliseconds. Reverts session to DEFAULT and locks security state if S3 timer expires (5000ms). |
Public Static Functions¶
| Type | Name |
|---|---|
| int | find_did_index (const SYN_UDS_Server * server, uint16_t did) Search for DID index in UDS server table. |
| uint16_t | get_active_security_mask (const SYN_UDS_Server * server) Get currently active security level bitmask for server. |
| uint8_t | get_sid_allowed_session_mask (const SYN_UDS_Server * server, uint8_t sid) Get allowed session bitmask for target Service Identifier. |
| bool | get_sid_functional_support (uint8_t sid) Check if Service Identifier supports Functional Addressing (1:N Broadcast). |
| uint16_t | get_sid_required_security_mask (const SYN_UDS_Server * server, uint8_t sid) Get required security level bitmask for target Service Identifier. |
| uint8_t | session_to_mask (SYN_UDS_Session session) Convert UDS Session enum to session bitmask representation. |
Public Functions Documentation¶
function syn_uds_clear_pending_reset¶
Clear pending ECU reset flag after executing reset or transmitting response.
Parameters:
serverPointer to UDS server instance.
function syn_uds_disable_aes128_security¶
Disable AES-128 security mode and revert to standard XOR security key calculation.
Parameters:
serverPointer to UDS server instance.
Returns:
true on success, false if server is NULL.
function syn_uds_dtc_get_status¶
Get current 8-bit status byte for a registered DTC.
Parameters:
serverPointer to UDS server instance.dtc24-bit Diagnostic Trouble Code.out_statusOutput pointer to store DTC status byte.
Returns:
true if DTC found, false otherwise.
function syn_uds_dtc_report_test_result¶
Report diagnostic test result for a registered DTC according to ISO 14229-1 state transitions.
Updates DTC status bits (testFailed, testFailedThisOperationCycle, pendingDTC, confirmedDTC, etc.) and fault detection counter.
Parameters:
serverPointer to UDS server instance.dtc24-bit Diagnostic Trouble Code.failedTrue if test failed, false if test passed.
Returns:
true if DTC found and updated, false otherwise.
function syn_uds_dtc_start_operation_cycle¶
Advance server state to a new operation cycle. Clears testFailedThisOperationCycle and sets testNotCompletedThisOperationCycle for all registered DTCs.
Parameters:
serverPointer to UDS server instance.
Returns:
true on success, false if server is NULL.
function syn_uds_enable_aes128_security¶
Enable AES-128 algorithm for UDS SecurityAccess (0x27) seed/key unlock.
Parameters:
serverPointer to UDS server instance.key16-byte AES-128 secret key.
Returns:
true on success, false if server or key is NULL.
function syn_uds_get_pending_reset¶
Get pending ECU reset sub-function requested by 0x11 service.
Parameters:
serverPointer to UDS server instance.
Returns:
Pending reset type (e.g. 0x01 = hard, 0x02 = keyOffOn, 0x03 = soft), or 0 if none.
function syn_uds_get_security_level¶
Get currently unlocked security level (0 = locked, 1 = level 1, 2 = level 2...).
Parameters:
serverPointer to UDS server instance.
Returns:
Active security level uint8_t.
function syn_uds_init¶
Initialize UDS Server context.
Parameters:
serverPointer to UDS server instance.
Returns:
true on success, false if server is NULL.
function syn_uds_is_sid_functional_supported¶
Check if Service Identifier (SID) supports Functional Addressing (1:N Broadcast).
Parameters:
sidService Identifier (SID).
Returns:
true if service supports functional addressing, false if physical addressing only.
function syn_uds_process_request¶
Process incoming UDS request diagnostic payload and format response.
bool syn_uds_process_request (
SYN_UDS_Server * server,
const uint8_t * req,
uint16_t req_len,
uint8_t * resp_buf,
uint16_t max_resp_len,
uint16_t * resp_len,
SYN_UDS_AddrMode addr_mode
)
Parameters:
serverPointer to UDS server instance.reqPointer to input request bytes.req_lenLength of request payload in bytes.resp_bufOutput buffer for response bytes.max_resp_lenCapacity of output response buffer.resp_lenPointer to store generated response byte length.addr_modeAddressing mode (SYN_UDS_ADDR_PHYSICAL or SYN_UDS_ADDR_FUNCTIONAL).
Returns:
true if response frame generated, false on invalid parameters.
function syn_uds_register_access_timing¶
Register AccessTimingParameter (0x83) callback handler.
bool syn_uds_register_access_timing (
SYN_UDS_Server * server,
SYN_UDS_AccessTimingHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x83 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_auth_handler¶
Register Authentication (0x29) handler.
bool syn_uds_register_auth_handler (
SYN_UDS_Server * server,
SYN_UDS_AuthHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x29 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_comm_control¶
Register CommunicationControl (0x28) callback handler.
bool syn_uds_register_comm_control (
SYN_UDS_Server * server,
SYN_UDS_CommControlHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x28 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_did¶
Register Data Identifier (DID) mapping in UDS Server table.
bool syn_uds_register_did (
SYN_UDS_Server * server,
uint16_t did,
uint8_t * data,
uint16_t len,
bool writable
)
Parameters:
serverPointer to UDS server instance.did16-bit Data Identifier code (e.g., 0xF190 for VIN).dataPointer to data memory buffer.lenData byte length.writableTrue if DID allows WriteDataByIdentifier (0x2E).
Returns:
true on success, false if table full or invalid params.
function syn_uds_register_did_ext¶
Register Data Identifier (DID) with custom session & security permission bitmask.
bool syn_uds_register_did_ext (
SYN_UDS_Server * server,
uint16_t did,
uint8_t * data,
uint16_t len,
bool writable,
uint8_t session_mask,
uint16_t security_mask
)
Parameters:
serverPointer to UDS server instance.did16-bit Data Identifier code (e.g., 0xF190 for VIN).dataPointer to data memory buffer.lenData byte length.writableTrue if DID allows WriteDataByIdentifier (0x2E).session_maskPermitted session bitmask (SYN_UDS_SESSION_MASK_*).security_maskPermitted security level bitmask (SYN_UDS_SECURITY_MASK_*).
Returns:
true on success, false if table full or invalid params.
function syn_uds_register_dtc¶
Register Diagnostic Trouble Code (DTC) in UDS Server table.
bool syn_uds_register_dtc (
SYN_UDS_Server * server,
uint32_t dtc,
uint8_t status,
uint8_t severity
)
Parameters:
serverPointer to UDS server instance.dtc24-bit Diagnostic Trouble Code (e.g., 0x012345).statusInitial DTCStatusByte bitmask.severityDTCSeverityByte (severity & class).
Returns:
true on success, false if table full or invalid params.
function syn_uds_register_dtc_handler¶
Register ReadDTCInformation (0x19) callback handler.
bool syn_uds_register_dtc_handler (
SYN_UDS_Server * server,
SYN_UDS_DTCHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked for custom DTC subfunctions.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_dynamic_did_handler¶
Register DynamicallyDefineDataIdentifier (0x2C) callback handler.
bool syn_uds_register_dynamic_did_handler (
SYN_UDS_Server * server,
SYN_UDS_DynamicDIDHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x2C is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_file_transfer¶
Register RequestFileTransfer (0x38) handler.
bool syn_uds_register_file_transfer (
SYN_UDS_Server * server,
SYN_UDS_FileTransferHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x38 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_io_control¶
Register InputOutputControlByIdentifier (0x2F) callback handler.
bool syn_uds_register_io_control (
SYN_UDS_Server * server,
SYN_UDS_IOControlHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x2F is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_link_control¶
Register LinkControl (0x87) callback handler.
bool syn_uds_register_link_control (
SYN_UDS_Server * server,
SYN_UDS_LinkControlHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x87 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_memory_handler¶
Register ReadMemoryByAddress (0x23) and WriteMemoryByAddress (0x3D) handler.
bool syn_uds_register_memory_handler (
SYN_UDS_Server * server,
SYN_UDS_MemoryHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when memory services are processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_periodic_data_handler¶
Register ReadDataByPeriodicIdentifier (0x2A) callback handler.
bool syn_uds_register_periodic_data_handler (
SYN_UDS_Server * server,
SYN_UDS_PeriodicDataHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x2A is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_roe_handler¶
Register ResponseOnEvent (0x86) callback handler.
bool syn_uds_register_roe_handler (
SYN_UDS_Server * server,
SYN_UDS_ResponseOnEventHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x86 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_routine_control¶
Register RoutineControl (0x31) callback handler.
bool syn_uds_register_routine_control (
SYN_UDS_Server * server,
SYN_UDS_RoutineControlHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x31 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_scaling_data_handler¶
Register ReadScalingDataByIdentifier (0x24) callback handler.
bool syn_uds_register_scaling_data_handler (
SYN_UDS_Server * server,
SYN_UDS_ScalingDataHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x24 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_register_secured_data¶
Register SecuredDataTransmission (0x84) callback handler.
bool syn_uds_register_secured_data (
SYN_UDS_Server * server,
SYN_UDS_SecuredDataHandler handler,
void * ctx
)
Parameters:
serverPointer to UDS server instance.handlerCallback function invoked when Service 0x84 is processed.ctxUser context passed to handler.
Returns:
true on success, false if server is NULL.
function syn_uds_set_reset_handler¶
Register deferred post-TX ECU reset handler callback.
Parameters:
serverPointer to UDS server instance.cbCallback function to execute after post-TX reset delay.ctxContext pointer passed to callback function.
function syn_uds_set_reset_wait_ms¶
Set post-TX ECU reset delay window duration in milliseconds.
Parameters:
serverPointer to UDS server instance.wait_msDelay duration in ms before executing reset callback.
function syn_uds_set_security_seed_bytes¶
Set custom 16-byte seed for AES-128 SecurityAccess.
Parameters:
serverPointer to UDS server instance.seed16-byte seed buffer.
Returns:
true on success, false if server or seed is NULL.
function syn_uds_set_service_security_mask¶
Configure required security level mask for a specific Service Identifier.
bool syn_uds_set_service_security_mask (
SYN_UDS_Server * server,
uint8_t sid,
uint16_t security_mask
)
Parameters:
serverPointer to UDS server instance.sidService Identifier (e.g. 0x27, 0x34).security_maskRequired security level bitmask (SYN_UDS_SECURITY_MASK_*).
Returns:
true on success, false if server is NULL.
function syn_uds_set_service_session_mask¶
Configure allowed diagnostic session mask for a specific Service Identifier.
bool syn_uds_set_service_session_mask (
SYN_UDS_Server * server,
uint8_t sid,
uint8_t session_mask
)
Parameters:
serverPointer to UDS server instance.sidService Identifier (e.g. 0x27, 0x34).session_maskAllowed session bitmask (SYN_UDS_SESSION_MASK_*).
Returns:
true on success, false if server is NULL.
function syn_uds_set_session_transition_handler¶
Register optional session transition policy callback.
void syn_uds_set_session_transition_handler (
SYN_UDS_Server * server,
SYN_UDS_SessionTransitionHandler cb,
void * ctx
)
Parameters:
serverPointer to UDS server instance.cbCallback function to validate session transition graph permissions.ctxContext pointer passed to callback function.
function syn_uds_tick¶
Advance periodic S3 server timer by dt_ms milliseconds. Reverts session to DEFAULT and locks security state if S3 timer expires (5000ms).
Parameters:
serverPointer to UDS server instance.dt_msMilliseconds elapsed since last tick.
Public Static Functions Documentation¶
function find_did_index¶
Search for DID index in UDS server table.
Parameters:
serverUDS server instance.did16-bit DID value to find.
Returns:
Index in table, or -1 if not found.
function get_active_security_mask¶
Get currently active security level bitmask for server.
Parameters:
serverUDS server instance pointer.
Returns:
Currently active security level bitmask (bit 0 = level 0/none, bit N = level N).
function get_sid_allowed_session_mask¶
Get allowed session bitmask for target Service Identifier.
Parameters:
serverUDS server instance pointer.sidService Identifier (SID).
Returns:
Allowed session bitmask for SID.
function get_sid_functional_support¶
Check if Service Identifier supports Functional Addressing (1:N Broadcast).
Parameters:
sidService Identifier (SID).
Returns:
true if service supports functional addressing, false if physical addressing only.
function get_sid_required_security_mask¶
Get required security level bitmask for target Service Identifier.
Parameters:
serverUDS server instance pointer.sidService Identifier (SID).
Returns:
Required security level bitmask for SID (0 = no security check at top level).
function session_to_mask¶
Convert UDS Session enum to session bitmask representation.
Parameters:
sessionActive UDS session.
Returns:
Bitmask representing active session (SYN_UDS_SESSION_MASK_*).
The documentation for this class was generated from the following file src/syntropic/proto/syn_uds.c