Skip to content

File syn_uds.c

FileList > proto > 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.

void syn_uds_clear_pending_reset (
    SYN_UDS_Server * server
) 

Parameters:

  • server Pointer to UDS server instance.

function syn_uds_disable_aes128_security

Disable AES-128 security mode and revert to standard XOR security key calculation.

bool syn_uds_disable_aes128_security (
    SYN_UDS_Server * server
) 

Parameters:

  • server Pointer 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.

bool syn_uds_dtc_get_status (
    SYN_UDS_Server * server,
    uint32_t dtc,
    uint8_t * out_status
) 

Parameters:

  • server Pointer to UDS server instance.
  • dtc 24-bit Diagnostic Trouble Code.
  • out_status Output 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.

bool syn_uds_dtc_report_test_result (
    SYN_UDS_Server * server,
    uint32_t dtc,
    bool failed
) 

Updates DTC status bits (testFailed, testFailedThisOperationCycle, pendingDTC, confirmedDTC, etc.) and fault detection counter.

Parameters:

  • server Pointer to UDS server instance.
  • dtc 24-bit Diagnostic Trouble Code.
  • failed True 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.

bool syn_uds_dtc_start_operation_cycle (
    SYN_UDS_Server * server
) 

Parameters:

  • server Pointer 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.

bool syn_uds_enable_aes128_security (
    SYN_UDS_Server * server,
    const uint8_t key
) 

Parameters:

  • server Pointer to UDS server instance.
  • key 16-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.

uint8_t syn_uds_get_pending_reset (
    const SYN_UDS_Server * server
) 

Parameters:

  • server Pointer 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...).

uint8_t syn_uds_get_security_level (
    const SYN_UDS_Server * server
) 

Parameters:

  • server Pointer to UDS server instance.

Returns:

Active security level uint8_t.


function syn_uds_init

Initialize UDS Server context.

bool syn_uds_init (
    SYN_UDS_Server * server
) 

Parameters:

  • server Pointer 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).

bool syn_uds_is_sid_functional_supported (
    uint8_t sid
) 

Parameters:

  • sid Service 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:

  • server Pointer to UDS server instance.
  • req Pointer to input request bytes.
  • req_len Length of request payload in bytes.
  • resp_buf Output buffer for response bytes.
  • max_resp_len Capacity of output response buffer.
  • resp_len Pointer to store generated response byte length.
  • addr_mode Addressing 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x83 is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x29 is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x28 is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • did 16-bit Data Identifier code (e.g., 0xF190 for VIN).
  • data Pointer to data memory buffer.
  • len Data byte length.
  • writable True 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:

  • server Pointer to UDS server instance.
  • did 16-bit Data Identifier code (e.g., 0xF190 for VIN).
  • data Pointer to data memory buffer.
  • len Data byte length.
  • writable True if DID allows WriteDataByIdentifier (0x2E).
  • session_mask Permitted session bitmask (SYN_UDS_SESSION_MASK_*).
  • security_mask Permitted 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:

  • server Pointer to UDS server instance.
  • dtc 24-bit Diagnostic Trouble Code (e.g., 0x012345).
  • status Initial DTCStatusByte bitmask.
  • severity DTCSeverityByte (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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked for custom DTC subfunctions.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x2C is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x38 is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x2F is processed.
  • ctx User context passed to handler.

Returns:

true on success, false if server is NULL.


Register LinkControl (0x87) callback handler.

bool syn_uds_register_link_control (
    SYN_UDS_Server * server,
    SYN_UDS_LinkControlHandler handler,
    void * ctx
) 

Parameters:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x87 is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when memory services are processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x2A is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x86 is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x31 is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x24 is processed.
  • ctx User 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:

  • server Pointer to UDS server instance.
  • handler Callback function invoked when Service 0x84 is processed.
  • ctx User 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.

void syn_uds_set_reset_handler (
    SYN_UDS_Server * server,
    SYN_UDS_ResetHandler cb,
    void * ctx
) 

Parameters:

  • server Pointer to UDS server instance.
  • cb Callback function to execute after post-TX reset delay.
  • ctx Context pointer passed to callback function.

function syn_uds_set_reset_wait_ms

Set post-TX ECU reset delay window duration in milliseconds.

void syn_uds_set_reset_wait_ms (
    SYN_UDS_Server * server,
    uint16_t wait_ms
) 

Parameters:

  • server Pointer to UDS server instance.
  • wait_ms Delay duration in ms before executing reset callback.

function syn_uds_set_security_seed_bytes

Set custom 16-byte seed for AES-128 SecurityAccess.

bool syn_uds_set_security_seed_bytes (
    SYN_UDS_Server * server,
    const uint8_t seed
) 

Parameters:

  • server Pointer to UDS server instance.
  • seed 16-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:

  • server Pointer to UDS server instance.
  • sid Service Identifier (e.g. 0x27, 0x34).
  • security_mask Required 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:

  • server Pointer to UDS server instance.
  • sid Service Identifier (e.g. 0x27, 0x34).
  • session_mask Allowed 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:

  • server Pointer to UDS server instance.
  • cb Callback function to validate session transition graph permissions.
  • ctx Context 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).

void syn_uds_tick (
    SYN_UDS_Server * server,
    uint32_t dt_ms
) 

Parameters:

  • server Pointer to UDS server instance.
  • dt_ms Milliseconds elapsed since last tick.

Public Static Functions Documentation

function find_did_index

Search for DID index in UDS server table.

static int find_did_index (
    const SYN_UDS_Server * server,
    uint16_t did
) 

Parameters:

  • server UDS server instance.
  • did 16-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.

static uint16_t get_active_security_mask (
    const SYN_UDS_Server * server
) 

Parameters:

  • server UDS 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.

static uint8_t get_sid_allowed_session_mask (
    const SYN_UDS_Server * server,
    uint8_t sid
) 

Parameters:

  • server UDS server instance pointer.
  • sid Service Identifier (SID).

Returns:

Allowed session bitmask for SID.


function get_sid_functional_support

Check if Service Identifier supports Functional Addressing (1:N Broadcast).

static bool get_sid_functional_support (
    uint8_t sid
) 

Parameters:

  • sid Service 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.

static uint16_t get_sid_required_security_mask (
    const SYN_UDS_Server * server,
    uint8_t sid
) 

Parameters:

  • server UDS server instance pointer.
  • sid Service 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.

static uint8_t session_to_mask (
    SYN_UDS_Session session
) 

Parameters:

  • session Active 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