diff --git a/CanUds.c b/CanUds.c index dfc45a8..74cc218 100644 --- a/CanUds.c +++ b/CanUds.c @@ -519,6 +519,22 @@ static uint16_t CommunicationControl_28(tCanUds *env) { // начало --------------------------- Функции ------------------------------------------------------------- // начало --------------------------- Функции ------------------------------------------------------------- +static uint16_t vUDS_check_Programming_Preconditions(tCanUds *env, eUdsRoutineControlType udsRoutineControlType) { + +eUdsRoutineStartStopRoutineResult udsStartStopRoutineResult = UDS_routine_RoutineStartStopSuccess; +eUdsRequestRoutineResult udsRequestRoutineResult = UDS_routine_RoutineStop; + +if ((udsRoutineControlType == UDS_routine_StartRoutine) || (udsRoutineControlType == UDS_routine_StopRoutine)) { +env->dataResponse[4] = udsStartStopRoutineResult; +} + +if (udsRoutineControlType == UDS_routine_RequestRoutineResults) { +env->dataResponse[4] = udsRequestRoutineResult; +} + +return 4 + 1; +} + static uint16_t vUDS_routine_VIN_learn(tCanUds *env, eUdsRoutineControlType udsRoutineControlType) { eUdsRoutineStartStopRoutineResult udsStartStopRoutineResult = UDS_routine_RoutineStartStopSuccess; @@ -627,6 +643,8 @@ static uint16_t Routine_Control_31(tCanUds *env) { env->dataResponse[3] = routineIdentifier_lo; switch (routineIdentifier) { + case Check_Programming_Preconditions: + return vUDS_check_Programming_Preconditions(env, udsRoutineControlType); case UDS_routine_VIN_learn: return vUDS_routine_VIN_learn(env, udsRoutineControlType); case UDS_routine_Compare_Checksum: diff --git a/CanUds.h b/CanUds.h index 163184e..b79fbcb 100644 --- a/CanUds.h +++ b/CanUds.h @@ -94,6 +94,7 @@ typedef enum { } eUdsRoutineControlType; typedef enum { + Check_Programming_Preconditions = 0x0203, UDS_routine_VIN_learn = 0x1300, UDS_routine_Compare_Checksum = 0x0202, UDS_routine_Erase_Memory = 0xFF00,