Обновление

This commit is contained in:
cfif 2026-04-13 16:58:41 +03:00
parent 8b9d584815
commit d23bfa381e
1 changed files with 127 additions and 5 deletions

132
CanUds.c
View File

@ -467,13 +467,135 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
env->dataResponse[1] = dataIdentifier_hi;
env->dataResponse[2] = dataIdentifier_lo;
env->dataResponse[3] = env->data.data[3];
//memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data.data[3], size);
if (env->data.data[3] == UDS_io_shortTermAdjustment) {
// Motor_Def...MotorSealingValve (percent)
if ((dataIdentifier_lo >= 0x60) && (dataIdentifier_lo <= 0x78)) {
uint16_t percent = (env->data.data[4] << 8) | env->data.data[5];
if (percent > 1000) {
return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange);
}
memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data.data[4], size);
return size + 4;
} else {
switch (dataIdentifier_lo) {
// Doors Actuator
case 0x50: {
for (uint8_t i = 0; i < 24; i += 2) {
uint16_t percent = (env->data.data[4 + i] << 8) | env->data.data[5 + 1 + i];
if (percent > 1000) {
return setResponseError(env, UDS_InputOutputControlByIdentifier,
UDS_error_requestOutOfRange);
}
}
break;
}
// IO
case 0x51: {
for (uint8_t i = 0; i < 8; ++i) {
uint8_t on_off = env->data.data[4 + i];
if (on_off > 1) {
return setResponseError(env, UDS_InputOutputControlByIdentifier,
UDS_error_requestOutOfRange);
}
}
break;
}
// PWM
case 0x52: {
tStatus_Pwm *pwm = (tStatus_Pwm *) &env->data.data[4];
if ((pwm->Pwm_Front > 1000) || (pwm->Pwm_Rear > 1000)) {
return setResponseError(env, UDS_InputOutputControlByIdentifier,
UDS_error_requestOutOfRange);
}
break;
}
// eComp
case 0x53: {
tStatus_eComp *eComp = (tStatus_eComp *) &env->data.data[4];
if ((eComp->eComp_Statue_Request > 1) || (eComp->LowTempValve > 1)) {
return setResponseError(env, UDS_InputOutputControlByIdentifier,
UDS_error_requestOutOfRange);
}
break;
}
// External
case 0x54: {
tStatus_External *external = (tStatus_External *) &env->data.data[4];
if (external->CoolingFan > 1000) {
return setResponseError(env, UDS_InputOutputControlByIdentifier,
UDS_error_requestOutOfRange);
}
break;
}
// EMS
case 0x55: {
tStatus_EMS *ems = (tStatus_EMS *) &env->data.data[4];
if (ems->EMS_Chiller_Req > 1) {
return setResponseError(env, UDS_InputOutputControlByIdentifier,
UDS_error_requestOutOfRange);
}
break;
}
// Ionizer_Aroma
case 0x56: {
tStatus_Ionizer_Aroma *ionizer_Aroma = (tStatus_Ionizer_Aroma *) &env->data.data[4];
if ((ionizer_Aroma->Ionizer > 1) || (ionizer_Aroma->AromatizationIntensivity > 3)) {
return setResponseError(env, UDS_InputOutputControlByIdentifier,
UDS_error_requestOutOfRange);
}
break;
}
// Duct Select
case 0x79: {
tStatus_Duct_Select *duct_Select = (tStatus_Duct_Select *) &env->data.data[4];
if ((duct_Select->Duct_FL > 1) || (duct_Select->Duct_FR > 1) ||
(duct_Select->Duct_RL > 1) || (duct_Select->Duct_RR > 1)) {
return setResponseError(env, UDS_InputOutputControlByIdentifier,
UDS_error_requestOutOfRange);
}
break;
}
}
}
memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data.data[4], size);
return size + 4;
}
return 4;
}
}
/*
if (dataIdentifier_hi == 0xF1) {
if (uds_IoDataByIdentifier_2F_com_F1[dataIdentifier_lo].data != NULL) {
@ -494,7 +616,7 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_incorrectMessageLengthOrInvalidFormat);
}
env->dataResponse[0] = UDS_WriteDataByIdentifier | 0b1000000;
env->dataResponse[0] = UDS_InputOutputControlByIdentifier | 0b1000000;
env->dataResponse[1] = dataIdentifier_hi;
env->dataResponse[2] = dataIdentifier_lo;
env->dataResponse[3] = env->data.data[3];
@ -504,8 +626,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
}
}
return setResponseError(env, UDS_WriteDataByIdentifier, UDS_error_requestOutOfRange);
*/
return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange);
}
// конец --------------------------- Управление ---------------------------------------------------------
// конец --------------------------- Управление ---------------------------------------------------------