From 537e20fdd81f038df75006b108eeaa0dacf15da6 Mon Sep 17 00:00:00 2001 From: LucianoDev Date: Mon, 13 Apr 2026 14:02:58 +0200 Subject: [PATCH] fixed app termination bugs and session timeout ms value --- Core/Kline_Libs/kl_app.c | 8 ++++++++ Core/Kline_Libs/kl_app.h | 1 + Core/Kline_Libs/kl_protocol.h | 2 +- Core/Kline_Libs/kl_session.c | 21 +++++++++++++++++---- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/Core/Kline_Libs/kl_app.c b/Core/Kline_Libs/kl_app.c index ebcc836..2d63af6 100644 --- a/Core/Kline_Libs/kl_app.c +++ b/Core/Kline_Libs/kl_app.c @@ -92,6 +92,14 @@ void KL_App_ResetLocks(void) app.rom_unlocked_cust = 0; } +void KL_App_Reset(void) +{ + app.state = KL_APP_IDLE; + app.eeprom_unlocked_dfi = 0; + app.eeprom_unlocked_dfi_write = 0; + app.rom_unlocked_cust = 0; +} + int KL_App_Busy(void) { return (app.state != KL_APP_IDLE && app.state != KL_APP_DONE) ? 1 : 0; diff --git a/Core/Kline_Libs/kl_app.h b/Core/Kline_Libs/kl_app.h index 463741e..9868e57 100644 --- a/Core/Kline_Libs/kl_app.h +++ b/Core/Kline_Libs/kl_app.h @@ -52,6 +52,7 @@ void KL_App_Dispatch(const KL_Packet *cmd); int KL_App_Busy(void); int KL_App_Done(void); void KL_App_ResetLocks(void); +void KL_App_Reset(void); /* DTC list management */ void KL_App_SetDTCList(const KL_FaultCode *list, size_t count); diff --git a/Core/Kline_Libs/kl_protocol.h b/Core/Kline_Libs/kl_protocol.h index acb2b92..9161abb 100644 --- a/Core/Kline_Libs/kl_protocol.h +++ b/Core/Kline_Libs/kl_protocol.h @@ -35,7 +35,7 @@ #define KL_W3_MS 11U /* Keyword LSB to MSB */ #define KL_HS_RETRY_MS 43U /* Between handshake retries */ #define KL_P1_GAP_MS 5U /* ECU inter-byte gap */ -#define KL_SESSION_TMO_MS 1000U /* Session keepalive timeout */ +#define KL_SESSION_TMO_MS 5250U /* Session keepalive timeout */ #define KL_BYTE_TMO_MS 50U /* Per-byte RX timeout */ #define KL_PKT_TMO_MS 800U /* Overall packet RX timeout */ #define KL_COMPL_TMO_MS 25U /* Complement wait timeout */ diff --git a/Core/Kline_Libs/kl_session.c b/Core/Kline_Libs/kl_session.c index a1fdbd2..ea33fdc 100644 --- a/Core/Kline_Libs/kl_session.c +++ b/Core/Kline_Libs/kl_session.c @@ -236,7 +236,7 @@ static void sess_terminate(void) sess.session_deadline = 0; sess.end_requested = 0; - KL_App_ResetLocks(); + KL_App_Reset(); KL_Transport_ResetCounter(); KL_Transport_TxReset(); KL_Transport_RxReset(); @@ -337,6 +337,7 @@ void KL_Session_Service(void) sizeof(sess.ident_buf)); sess.ident_offset = 0; KL_Phy_RxFlush(); + sess.session_deadline = HAL_GetTick() + KL_SESSION_TMO_MS; sess.state = KL_SESS_IDENT_SEND; break; } @@ -372,6 +373,10 @@ void KL_Session_Service(void) } case KL_SESS_IDENT_WAIT_TX: + if (kl_tick_diff(now, sess.session_deadline) >= 0) { + sess_terminate(); + break; + } if (KL_Transport_TxDone()) { KL_Transport_TxReset(); sess.ident_offset += sess.ident_chunk_len; @@ -392,6 +397,10 @@ void KL_Session_Service(void) break; case KL_SESS_IDENT_WAIT_ACK: + if (kl_tick_diff(now, sess.session_deadline) >= 0) { + sess_terminate(); + break; + } if (KL_Transport_RxDone()) { const KL_Packet *pkt = KL_Transport_GetRxPacket(); KL_Transport_RxReset(); @@ -484,13 +493,17 @@ void KL_Session_Service(void) } case KL_SESS_CMD_RESPONSE: - if (sess.end_requested) { + if (kl_tick_diff(now, sess.session_deadline) >= 0) { sess_terminate(); break; } if (KL_App_Done()) { - KL_Session_Kick(); - sess.state = KL_SESS_READY; + if (sess.end_requested) { + sess_terminate(); + } else { + KL_Session_Kick(); + sess.state = KL_SESS_READY; + } } break;