diff --git a/CanUds.c b/CanUds.c index e7a23d4..6ca2357 100644 --- a/CanUds.c +++ b/CanUds.c @@ -557,18 +557,30 @@ static uint16_t SecurityAccess_27(tCanUds *env) { env->dataResponse[0] = UDS_SecurityAccess | 0b1000000; env->dataResponse[1] = env->data.data[1] & 0b01111111; // sub-function - env->dataResponse[2] = randomSecuritySeed >> 24; - env->dataResponse[3] = randomSecuritySeed >> 16; - env->dataResponse[4] = randomSecuritySeed >> 8; - env->dataResponse[5] = randomSecuritySeed; + // Доступ уже получен + if (env->SA.stateSecurityAccess) { + env->dataResponse[2] = 0; + env->dataResponse[3] = 0; + env->dataResponse[4] = 0; + env->dataResponse[5] = 0; + } else { + if (randomSecuritySeed == 0) { + randomSecuritySeed = 0x11223344; + } + + env->dataResponse[2] = randomSecuritySeed >> 24; + env->dataResponse[3] = randomSecuritySeed >> 16; + env->dataResponse[4] = randomSecuritySeed >> 8; + env->dataResponse[5] = randomSecuritySeed; + } return 6; } if (com->sub_function == UDS_sub_sendKey) { if (env->data.len < 6) { - return setResponseError(env, UDS_SecurityAccess, UDS_error_incorrectMessageLengthOrInvalidFormat); + return setResponseError(env, UDS_SecurityAccess, UDS_error_requestOutOfRange); } // Ранее не получен запрос UDS_sub_requestSeed @@ -605,6 +617,8 @@ static uint16_t SecurityAccess_27(tCanUds *env) { return 2; } + + return setResponseError(env, UDS_SecurityAccess, UDS_error_invalidKey); } // конец --------------------------- Security Access ------------------------------------------------------------- // конец --------------------------- Security Access -------------------------------------------------------------